From cc76329e0db37ffa9b90472d1595b7876c9804b5 Mon Sep 17 00:00:00 2001 From: Bananeweizen Date: Sun, 29 Dec 2013 17:51:00 +0100 Subject: new: contacts addon * If you want to use this, add _nickname_ or _alias_ fields to your contacts in the standard contact app. Afterwards you can open the contact card directly from a log entry. --- main/res/menu/main_activity_options.xml | 1 - main/res/values/strings.xml | 3 +- main/src/cgeo/contacts/IContacts.java | 12 ++++++++ main/src/cgeo/geocaching/MainActivity.java | 6 ++-- .../geocaching/ui/AbstractUserClickListener.java | 34 +++++++++++++++++++--- 5 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 main/src/cgeo/contacts/IContacts.java (limited to 'main') diff --git a/main/res/menu/main_activity_options.xml b/main/res/menu/main_activity_options.xml index 68fd227..fc949dc 100644 --- a/main/res/menu/main_activity_options.xml +++ b/main/res/menu/main_activity_options.xml @@ -31,5 +31,4 @@ android:icon="@drawable/ic_menu_info_details" android:title="@string/menu_about"> - \ No newline at end of file diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index f72fa06..247988c 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -914,7 +914,8 @@ Caches found Open profile in browser Send message - + Open contact card + Navigation Compass diff --git a/main/src/cgeo/contacts/IContacts.java b/main/src/cgeo/contacts/IContacts.java new file mode 100644 index 0000000..d46a5a4 --- /dev/null +++ b/main/src/cgeo/contacts/IContacts.java @@ -0,0 +1,12 @@ +package cgeo.contacts; + +public interface IContacts { + static final String CALENDAR_ADDON_URI = "market://details?id=cgeo.contacts"; + + static final String INTENT = "cgeo.contacts.FIND"; + + static final String URI_SCHEME = "find"; + static final String URI_HOST = "cgeo.org"; + + static final String PARAM_NAME = "name"; // user name +} diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java index d3f78cf..e8ad049 100644 --- a/main/src/cgeo/geocaching/MainActivity.java +++ b/main/src/cgeo/geocaching/MainActivity.java @@ -1,5 +1,8 @@ package cgeo.geocaching; +import butterknife.ButterKnife; +import butterknife.InjectView; + import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.capability.ILogin; @@ -19,10 +22,9 @@ import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.RunnableWithArgument; import cgeo.geocaching.utils.Version; -import butterknife.ButterKnife; -import butterknife.InjectView; import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentResult; + import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; diff --git a/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java b/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java index f8cfb8a..6d8a246 100644 --- a/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java +++ b/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java @@ -1,9 +1,12 @@ package cgeo.geocaching.ui; -import cgeo.geocaching.R; +import cgeo.contacts.IContacts; import cgeo.geocaching.CacheListActivity; +import cgeo.geocaching.R; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.network.Network; +import cgeo.geocaching.network.Parameters; +import cgeo.geocaching.utils.ProcessUtils; import android.app.AlertDialog; import android.content.DialogInterface; @@ -12,6 +15,10 @@ import android.content.res.Resources; import android.net.Uri; import android.view.View; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + abstract class AbstractUserClickListener implements View.OnClickListener { private final boolean enabled; @@ -40,11 +47,14 @@ abstract class AbstractUserClickListener implements View.OnClickListener { protected static void showUserActionsDialog(final CharSequence name, final View view) { final AbstractActivity context = (AbstractActivity) view.getContext(); final Resources res = context.getResources(); - final CharSequence[] items = { res.getString(R.string.user_menu_view_hidden), + List actions = new ArrayList(Arrays.asList(res.getString(R.string.user_menu_view_hidden), res.getString(R.string.user_menu_view_found), res.getString(R.string.user_menu_open_browser), - res.getString(R.string.user_menu_send_message) - }; + res.getString(R.string.user_menu_send_message))); + if (isContactsAddonAvailable()) { + actions.add(res.getString(R.string.user_menu_open_contact)); + } + final CharSequence[] items = actions.toArray(new String[actions.size()]); final AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(res.getString(R.string.user_menu_title) + " " + name); @@ -64,6 +74,9 @@ abstract class AbstractUserClickListener implements View.OnClickListener { case 3: context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/email/?u=" + Network.encode(name.toString())))); return; + case 4: + openContactCard(context, name.toString()); + return; default: break; } @@ -73,4 +86,17 @@ abstract class AbstractUserClickListener implements View.OnClickListener { alert.show(); } + protected static void openContactCard(AbstractActivity context, String userName) { + final Parameters params = new Parameters( + IContacts.PARAM_NAME, userName + ); + + context.startActivity(new Intent(IContacts.INTENT, + Uri.parse(IContacts.URI_SCHEME + "://" + IContacts.URI_HOST + "?" + params.toString()))); + } + + private static boolean isContactsAddonAvailable() { + return ProcessUtils.isIntentAvailable(IContacts.INTENT, Uri.parse(IContacts.URI_SCHEME + "://" + IContacts.URI_HOST)); + } + } -- cgit v1.1