summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Bird <sbird@cyngn.com>2016-05-09 16:58:33 -0700
committerStephen Bird <sbird@cyngn.com>2016-05-09 17:56:35 -0700
commit46163fc084c1c0777785093070ecc2caab6f664e (patch)
tree7c788afa1d102e84fcd249ebc6233113071cb136
parent4242645b8b044c05646a0b49d256967f1fd68cc8 (diff)
downloadpackages_apps_Contacts-46163fc084c1c0777785093070ecc2caab6f664e.tar.gz
packages_apps_Contacts-46163fc084c1c0777785093070ecc2caab6f664e.tar.bz2
packages_apps_Contacts-46163fc084c1c0777785093070ecc2caab6f664e.zip
[1/2] Only get directory intent on button press
Requesting this intent may cause plugins to request permissions at odd times. Instead, requesting this intent when the button is clicked will give the user some context when plugin permission dialogs come up. Note that the delay caused by requesting this intent when the button is clicked is fairly indiscernible from caching this intent at application creation. This action is only presented to the user once other metadata from the plugin has already been captured, so this call will happen after the plugin has been instantiated, and should be performant. Change-Id: Ic0fd385ea6346fcfb965704f40a31e7db6e55b5b
-rw-r--r--src/com/android/contacts/activities/PeopleActivity.java14
-rw-r--r--src/com/android/contacts/incall/InCallPluginUtils.java32
-rw-r--r--src/com/android/contacts/list/PluginContactBrowseListFragment.java7
3 files changed, 40 insertions, 13 deletions
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 4528eab98..3beabd47d 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -72,6 +72,7 @@ import com.android.contacts.common.editor.SelectAccountDialogFragment;
import com.android.contacts.group.GroupBrowseListFragment;
import com.android.contacts.group.GroupBrowseListFragment.OnGroupBrowserActionListener;
import com.android.contacts.group.GroupDetailFragment;
+import com.android.contacts.incall.InCallPluginUtils;
import com.android.contacts.interactions.ContactDeletionInteraction;
import com.android.contacts.common.interactions.ImportExportDialogFragment;
import com.android.contacts.common.interactions.ImportExportDialogFragment.ExportToSimThread;
@@ -1796,16 +1797,9 @@ public class PeopleActivity extends ContactsActivity implements
// plugin tab
int pluginIndex = tabPosition - TabState.GROUPS;
InCallPluginInfo pluginInfo = mPluginTabInfo.get(pluginIndex);
- if (pluginInfo.mCallMethodInfo.mDefaultDirectorySearchIntent != null) {
- try {
- pluginInfo.mCallMethodInfo.mDefaultDirectorySearchIntent.send();
- } catch (PendingIntent.CanceledException e) {
- Log.d(TAG, "directory search exception: ", e);
- }
- InCallMetricsHelper.increaseCount(this,
- InCallMetricsHelper.Events.DIRECTORY_SEARCH,
- pluginInfo.mCallMethodInfo.mComponent.flattenToString());
- }
+ InCallPluginUtils.startDirectoryDefaultSearch(this,
+ ContactsDataSubscription.get(this).mClient,
+ pluginInfo.mCallMethodInfo.mComponent);
} else {
Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
Bundle extras = getIntent().getExtras();
diff --git a/src/com/android/contacts/incall/InCallPluginUtils.java b/src/com/android/contacts/incall/InCallPluginUtils.java
index bb0e71fed..29e162ddf 100644
--- a/src/com/android/contacts/incall/InCallPluginUtils.java
+++ b/src/com/android/contacts/incall/InCallPluginUtils.java
@@ -16,6 +16,7 @@
package com.android.contacts.incall;
+import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.ContentUris;
import android.content.ContentValues;
@@ -39,9 +40,14 @@ import com.android.contacts.common.util.DataStatus;
import com.android.contacts.common.util.UriUtils;
import com.android.phone.common.incall.CallMethodInfo;
import com.android.phone.common.incall.ContactsDataSubscription;
+import com.android.phone.common.incall.api.InCallQueries;
import com.android.phone.common.incall.utils.CallMethodFilters;
+import com.cyanogen.ambient.common.api.AmbientApiClient;
+import com.cyanogen.ambient.common.api.Result;
+import com.cyanogen.ambient.common.api.ResultCallback;
import com.cyanogen.ambient.incall.extension.InCallContactInfo;
+import com.cyanogen.ambient.incall.results.PendingIntentResult;
import com.cyngn.uicommon.view.Snackbar;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@@ -228,4 +234,30 @@ public class InCallPluginUtils {
}
return pluginMap;
}
+
+ public static void startDirectoryDefaultSearch(final Context context, AmbientApiClient client,
+ final ComponentName componentName) {
+
+ InCallQueries.getDefaultDirectorySearchIntent(client, componentName).setResultCallback(
+ new ResultCallback() {
+ @Override
+ public void onResult(Result result) {
+ PendingIntentResult pendingIntentResult = (PendingIntentResult) result;
+ if (pendingIntentResult == null) {
+ Log.d(TAG, "directory search null");
+ return;
+ }
+ try {
+ if (pendingIntentResult.intent != null) {
+ pendingIntentResult.intent.send();
+ InCallMetricsHelper.increaseCount(context,
+ InCallMetricsHelper.Events.DIRECTORY_SEARCH,
+ componentName.flattenToString());
+ }
+ } catch (PendingIntent.CanceledException e) {
+ Log.d(TAG, "directory search exception: ", e);
+ }
+ }
+ });
+ }
}
diff --git a/src/com/android/contacts/list/PluginContactBrowseListFragment.java b/src/com/android/contacts/list/PluginContactBrowseListFragment.java
index eb313d588..442d4e8c8 100644
--- a/src/com/android/contacts/list/PluginContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/PluginContactBrowseListFragment.java
@@ -58,6 +58,7 @@ import com.android.contacts.common.list.ContactListItemView;
import com.android.contacts.common.list.DefaultContactListAdapter;
import com.android.contacts.common.list.ProfileAndContactsLoader;
import com.android.contacts.incall.InCallPluginUtils;
+import com.android.phone.common.incall.ContactsDataSubscription;
import com.android.phone.common.incall.utils.CallMethodUtils;
import java.util.List;
@@ -662,9 +663,9 @@ public class PluginContactBrowseListFragment extends ContactEntryListFragment<Co
.mCallMethodInfo.mLoginSubtitle));
}
} else if (view == mEmptyView) {
- if (mInCallPluginInfo.mCallMethodInfo.mDefaultDirectorySearchIntent != null) {
- mInCallPluginInfo.mCallMethodInfo.mDefaultDirectorySearchIntent.send();
- }
+ InCallPluginUtils.startDirectoryDefaultSearch(getActivity(),
+ ContactsDataSubscription.get(getActivity()).mClient,
+ mInCallPluginInfo.mCallMethodInfo.mComponent);
}
} catch (PendingIntent.CanceledException e) {
Log.e(TAG, "PendingIntent exception", e);