diff options
| -rw-r--r-- | main/res/drawable-hdpi/ic_menu_emoticons.png | bin | 0 -> 3062 bytes | |||
| -rw-r--r-- | main/res/drawable/ic_menu_emoticons.png | bin | 0 -> 2056 bytes | |||
| -rw-r--r-- | main/res/values-de/strings.xml | 1 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 3 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/AbstractLoggingActivity.java | 98 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/LogTrackableActivity.java | 56 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/VisitCacheActivity.java | 46 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/ConnectorFactory.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCSmiliesProvider.java | 50 |
9 files changed, 173 insertions, 86 deletions
diff --git a/main/res/drawable-hdpi/ic_menu_emoticons.png b/main/res/drawable-hdpi/ic_menu_emoticons.png Binary files differnew file mode 100644 index 0000000..4a1f744 --- /dev/null +++ b/main/res/drawable-hdpi/ic_menu_emoticons.png diff --git a/main/res/drawable/ic_menu_emoticons.png b/main/res/drawable/ic_menu_emoticons.png Binary files differnew file mode 100644 index 0000000..765000b --- /dev/null +++ b/main/res/drawable/ic_menu_emoticons.png diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml index e4e115b..fc0e7b8 100644 --- a/main/res/values-de/strings.xml +++ b/main/res/values-de/strings.xml @@ -116,6 +116,7 @@ <string name="log_announcement">Ankündigung</string> <string name="log_today">Heute</string> <string name="log_yesterday">Gestern</string> + <string name="log_smilies">Smilies</string> <!-- translation --> <string name="translate_to_sys_lang">Übersetze in %s</string> diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index 00bc5bb..4c1a69f 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -116,7 +116,8 @@ <string name="log_announcement">Announcement</string> <string name="log_today">Today</string> <string name="log_yesterday">Yesterday</string> - + <string name="log_smilies">Smilies</string> + <!-- translation --> <string name="translate_to_sys_lang">Translate to %s</string> <string name="translate_to_english">Translate to English</string> diff --git a/main/src/cgeo/geocaching/AbstractLoggingActivity.java b/main/src/cgeo/geocaching/AbstractLoggingActivity.java new file mode 100644 index 0000000..62cb5cb --- /dev/null +++ b/main/src/cgeo/geocaching/AbstractLoggingActivity.java @@ -0,0 +1,98 @@ +package cgeo.geocaching; + +import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.connector.ConnectorFactory; +import cgeo.geocaching.connector.gc.GCConnector; +import cgeo.geocaching.connector.gc.GCSmiliesProvider; +import cgeo.geocaching.connector.gc.GCSmiliesProvider.Smiley; +import cgeo.geocaching.utils.LogTemplateProvider; +import cgeo.geocaching.utils.LogTemplateProvider.LogContext; +import cgeo.geocaching.utils.LogTemplateProvider.LogTemplate; + +import org.apache.commons.lang3.StringUtils; + +import android.view.Menu; +import android.view.MenuItem; +import android.view.SubMenu; +import android.widget.EditText; + +public abstract class AbstractLoggingActivity extends AbstractActivity { + private static final int MENU_SIGNATURE = 1; + private static final int MENU_SMILEY = 2; + + public AbstractLoggingActivity(String helpTopic) { + super(helpTopic); + } + + @Override + public boolean onCreateOptionsMenu(final Menu menu) { + // signature menu + menu.add(0, MENU_SIGNATURE, 0, res.getString(R.string.init_signature)).setIcon(R.drawable.ic_menu_edit); + + // templates menu + final SubMenu menuLog = menu.addSubMenu(0, 0, 0, res.getString(R.string.log_add)).setIcon(R.drawable.ic_menu_add); + for (LogTemplate template : LogTemplateProvider.getTemplates()) { + menuLog.add(0, template.getItemId(), 0, template.getResourceId()); + } + menuLog.add(0, MENU_SIGNATURE, 0, res.getString(R.string.init_signature)); + + // smilies + final SubMenu menuSmilies = menu.addSubMenu(0, MENU_SMILEY, 0, res.getString(R.string.log_smilies)).setIcon(R.drawable.ic_menu_emoticons); + for (Smiley smiley : GCSmiliesProvider.getSmilies()) { + menuSmilies.add(0, smiley.getItemId(), 0, smiley.text); + } + + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + final boolean signatureAvailable = StringUtils.isNotBlank(Settings.getSignature()); + menu.findItem(MENU_SIGNATURE).setVisible(signatureAvailable); + + boolean smileyVisible = false; + final cgCache cache = getLogContext().getCache(); + if (cache != null && ConnectorFactory.getConnector(cache).equals(GCConnector.getInstance())) { + smileyVisible = true; + } + final cgTrackable trackable = getLogContext().getTrackable(); + if (trackable != null && ConnectorFactory.getConnector(trackable).equals(GCConnector.getInstance())) { + smileyVisible = true; + } + + menu.findItem(MENU_SMILEY).setVisible(smileyVisible); + + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + final int id = item.getItemId(); + + if (id == MENU_SIGNATURE) { + insertIntoLog(LogTemplateProvider.applyTemplates(Settings.getSignature(), getLogContext()), true); + return true; + } + + final LogTemplate template = LogTemplateProvider.getTemplate(id); + if (template != null) { + insertIntoLog(template.getValue(getLogContext()), true); + return true; + } + + final Smiley smiley = GCSmiliesProvider.getSmiley(id); + if (smiley != null) { + insertIntoLog("[" + smiley.text + "]", true); + return true; + } + + return false; + } + + protected abstract LogContext getLogContext(); + + protected void insertIntoLog(String newText, final boolean moveCursor) { + final EditText log = (EditText) findViewById(R.id.log); + insertAtPosition(log, newText, moveCursor); + } +} diff --git a/main/src/cgeo/geocaching/LogTrackableActivity.java b/main/src/cgeo/geocaching/LogTrackableActivity.java index 5ae0d01..4ddec72 100644 --- a/main/src/cgeo/geocaching/LogTrackableActivity.java +++ b/main/src/cgeo/geocaching/LogTrackableActivity.java @@ -1,6 +1,5 @@ package cgeo.geocaching; -import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.connector.gc.GCParser; import cgeo.geocaching.connector.gc.Login; import cgeo.geocaching.enumerations.LogType; @@ -11,9 +10,7 @@ import cgeo.geocaching.twitter.Twitter; import cgeo.geocaching.ui.DateDialog; import cgeo.geocaching.ui.Formatter; import cgeo.geocaching.utils.Log; -import cgeo.geocaching.utils.LogTemplateProvider; import cgeo.geocaching.utils.LogTemplateProvider.LogContext; -import cgeo.geocaching.utils.LogTemplateProvider.LogTemplate; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -27,9 +24,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.ContextMenu; -import android.view.Menu; import android.view.MenuItem; -import android.view.SubMenu; import android.view.View; import android.widget.Button; import android.widget.CheckBox; @@ -40,7 +35,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.List; -public class LogTrackableActivity extends AbstractActivity implements DateDialog.DateDialogParent { +public class LogTrackableActivity extends AbstractLoggingActivity implements DateDialog.DateDialogParent { private List<LogType> possibleLogTypes = new ArrayList<LogType>(); private ProgressDialog waitDialog = null; private String guid = null; @@ -54,8 +49,6 @@ public class LogTrackableActivity extends AbstractActivity implements DateDialog private LinearLayout tweetBox = null; private cgTrackable trackable; - private static final int MENU_SIGNATURE = 1; - private Handler showProgressHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -165,48 +158,6 @@ public class LogTrackableActivity extends AbstractActivity implements DateDialog } @Override - public boolean onCreateOptionsMenu(Menu menu) { - final SubMenu subMenu = menu.addSubMenu(0, 0, 0, res.getString(R.string.log_add)).setIcon(R.drawable.ic_menu_add); - - for (LogTemplate template : LogTemplateProvider.getTemplates()) { - subMenu.add(0, template.getItemId(), 0, template.getResourceId()); - } - subMenu.add(0, MENU_SIGNATURE, 0, res.getString(R.string.init_signature)); - - return true; - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - menu.findItem(MENU_SIGNATURE).setVisible(Settings.getSignature() != null); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - final int id = item.getItemId(); - final LogContext logContext = new LogContext(trackable); - - if (id == MENU_SIGNATURE) { - insertIntoLog(LogTemplateProvider.applyTemplates(Settings.getSignature(), logContext), true); - return true; - } - - final LogTemplate template = LogTemplateProvider.getTemplate(id); - if (template != null) { - insertIntoLog(template.getValue(logContext), true); - return true; - } - - return false; - } - - private void insertIntoLog(String newText, final boolean moveCursor) { - final EditText log = (EditText) findViewById(R.id.log); - insertAtPosition(log, newText, moveCursor); - } - - @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) { super.onCreateContextMenu(menu, view, info); final int viewId = view.getId(); @@ -411,4 +362,9 @@ public class LogTrackableActivity extends AbstractActivity implements DateDialog logTouchIntent.putExtra("trackingcode", trackable.getTrackingcode()); context.startActivity(logTouchIntent); } + + @Override + protected LogContext getLogContext() { + return new LogContext(trackable); + } } diff --git a/main/src/cgeo/geocaching/VisitCacheActivity.java b/main/src/cgeo/geocaching/VisitCacheActivity.java index 86455ba..10fe4b0 100644 --- a/main/src/cgeo/geocaching/VisitCacheActivity.java +++ b/main/src/cgeo/geocaching/VisitCacheActivity.java @@ -1,6 +1,5 @@ package cgeo.geocaching; -import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.connector.gc.GCParser; import cgeo.geocaching.connector.gc.Login; import cgeo.geocaching.enumerations.LoadFlags; @@ -16,7 +15,6 @@ import cgeo.geocaching.ui.Formatter; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.LogTemplateProvider; import cgeo.geocaching.utils.LogTemplateProvider.LogContext; -import cgeo.geocaching.utils.LogTemplateProvider.LogTemplate; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -45,14 +43,13 @@ import java.util.Calendar; import java.util.Date; import java.util.List; -public class VisitCacheActivity extends AbstractActivity implements DateDialog.DateDialogParent { +public class VisitCacheActivity extends AbstractLoggingActivity implements DateDialog.DateDialogParent { static final String EXTRAS_FOUND = "found"; static final String EXTRAS_TEXT = "text"; static final String EXTRAS_GEOCODE = "geocode"; static final String EXTRAS_ID = "id"; - private static final int MENU_SIGNATURE = 1; - private static final int SUBMENU_VOTE = 2; + private static final int SUBMENU_VOTE = 3; private LayoutInflater inflater = null; private cgCache cache = null; @@ -291,17 +288,7 @@ public class VisitCacheActivity extends AbstractActivity implements DateDialog.D @Override public boolean onCreateOptionsMenu(final Menu menu) { - if (StringUtils.isNotEmpty(Settings.getSignature())) { - menu.add(0, MENU_SIGNATURE, 0, res.getString(R.string.init_signature)).setIcon(R.drawable.ic_menu_edit); - } - - SubMenu menuLog = menu.addSubMenu(0, 0, 0, res.getString(R.string.log_add)).setIcon(R.drawable.ic_menu_add); - for (LogTemplate template : LogTemplateProvider.getTemplates()) { - menuLog.add(0, template.getItemId(), 0, template.getResourceId()); - } - if (StringUtils.isNotEmpty(Settings.getSignature())) { - menuLog.add(0, MENU_SIGNATURE, 0, res.getString(R.string.init_signature)); - } + super.onCreateOptionsMenu(menu); final SubMenu menuStars = menu.addSubMenu(0, SUBMENU_VOTE, 0, res.getString(R.string.log_rating)).setIcon(R.drawable.ic_menu_sort_by_size); menuStars.add(0, 10, 0, res.getString(R.string.log_no_rating)); @@ -320,8 +307,7 @@ public class VisitCacheActivity extends AbstractActivity implements DateDialog.D @Override public boolean onPrepareOptionsMenu(Menu menu) { - final boolean signatureAvailable = Settings.getSignature() != null; - menu.findItem(MENU_SIGNATURE).setVisible(signatureAvailable); + super.onPrepareOptionsMenu(menu); final boolean voteAvailable = Settings.isGCvoteLogin() && typeSelected == LogType.FOUND_IT && StringUtils.isNotBlank(cache.getGuid()); menu.findItem(SUBMENU_VOTE).setVisible(voteAvailable); @@ -331,14 +317,11 @@ public class VisitCacheActivity extends AbstractActivity implements DateDialog.D @Override public boolean onOptionsItemSelected(MenuItem item) { - final int id = item.getItemId(); - - if (id == MENU_SIGNATURE) { - final LogContext logContext = new LogContext(cache); - insertIntoLog(LogTemplateProvider.applyTemplates(Settings.getSignature(), logContext), true); + if (super.onOptionsItemSelected(item)) { return true; } + final int id = item.getItemId(); if (id >= 10 && id <= 19) { rating = (id - 9) / 2.0; if (rating < 1) { @@ -348,21 +331,9 @@ public class VisitCacheActivity extends AbstractActivity implements DateDialog.D return true; } - final LogTemplate template = LogTemplateProvider.getTemplate(id); - if (template != null) { - final LogContext logContext = new LogContext(cache); - insertIntoLog(template.getValue(logContext), true); - return true; - } - return false; } - private void insertIntoLog(String newText, final boolean moveCursor) { - final EditText log = (EditText) findViewById(R.id.log); - insertAtPosition(log, newText, moveCursor); - } - private static String ratingTextValue(final double rating) { return String.format("%.1f", rating); } @@ -787,4 +758,9 @@ public class VisitCacheActivity extends AbstractActivity implements DateDialog.D public Object onRetainNonConfigurationInstance() { return new ActivityState(); } + + @Override + protected LogContext getLogContext() { + return new LogContext(cache); + } } diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index 6b3afe9..56ec431 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -2,6 +2,7 @@ package cgeo.geocaching.connector; import cgeo.geocaching.ICache; import cgeo.geocaching.SearchResult; +import cgeo.geocaching.cgTrackable; import cgeo.geocaching.connector.gc.GCConnector; import cgeo.geocaching.connector.oc.OCApiConnector; import cgeo.geocaching.connector.oc.OCConnector; @@ -50,6 +51,10 @@ public final class ConnectorFactory { return getConnector(cache.getGeocode()); } + public static IConnector getConnector(cgTrackable trackable) { + return getConnector(trackable.getGeocode()); + } + public static IConnector getConnector(final String geocodeInput) { // this may come from user input final String geocode = StringUtils.trim(geocodeInput); diff --git a/main/src/cgeo/geocaching/connector/gc/GCSmiliesProvider.java b/main/src/cgeo/geocaching/connector/gc/GCSmiliesProvider.java new file mode 100644 index 0000000..1083a89 --- /dev/null +++ b/main/src/cgeo/geocaching/connector/gc/GCSmiliesProvider.java @@ -0,0 +1,50 @@ +package cgeo.geocaching.connector.gc; + + +public class GCSmiliesProvider { + public enum Smiley { + SMILE(":)"), + BIG_SMILE(":D"), + COOL("8D"), + BLUSH(":I"), + TONGUE(":P"), + EVIL("}:)"), + WINK(";)"), + CLOWN(":o)"), + BLACK_EYE("B)"), + EIGHTBALL("8"), + FROWN(":("), + SHY("8)"), + SHOCKED(":O"), + ANGRY(":(!"), + DEAD("xx("), + SLEEPY("|)"), + KISSES(":X"), + APPROVE("^"), + DISAPPROVE("V"), + QUESTION("?"); + + public final String text; + + private Smiley(final String text) { + this.text = text; + } + + public int getItemId() { + return text.hashCode(); + } + } + + public static Smiley[] getSmilies() { + return Smiley.values(); + } + + public static Smiley getSmiley(int itemId) { + for (Smiley smiley : getSmilies()) { + if (smiley.getItemId() == itemId) { + return smiley; + } + } + return null; + } +} |
