aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/res/drawable-hdpi/ic_menu_emoticons.pngbin0 -> 3062 bytes
-rw-r--r--main/res/drawable/ic_menu_emoticons.pngbin0 -> 2056 bytes
-rw-r--r--main/res/values-de/strings.xml1
-rw-r--r--main/res/values/strings.xml3
-rw-r--r--main/src/cgeo/geocaching/AbstractLoggingActivity.java98
-rw-r--r--main/src/cgeo/geocaching/LogTrackableActivity.java56
-rw-r--r--main/src/cgeo/geocaching/VisitCacheActivity.java46
-rw-r--r--main/src/cgeo/geocaching/connector/ConnectorFactory.java5
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCSmiliesProvider.java50
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
new file mode 100644
index 0000000..4a1f744
--- /dev/null
+++ b/main/res/drawable-hdpi/ic_menu_emoticons.png
Binary files differ
diff --git a/main/res/drawable/ic_menu_emoticons.png b/main/res/drawable/ic_menu_emoticons.png
new file mode 100644
index 0000000..765000b
--- /dev/null
+++ b/main/res/drawable/ic_menu_emoticons.png
Binary files differ
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;
+ }
+}