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 18:01:34 -0700
commit07ec46bd849d3b39892f85a48a14fd008c3447cd (patch)
tree1a551921a1369f869367a8c75803c2ee25a3ad6c
parent4404ec2daaea2d0ee3a57f9f743d60e144821290 (diff)
downloadpackages_apps_Contacts-07ec46bd849d3b39892f85a48a14fd008c3447cd.tar.gz
packages_apps_Contacts-07ec46bd849d3b39892f85a48a14fd008c3447cd.tar.bz2
packages_apps_Contacts-07ec46bd849d3b39892f85a48a14fd008c3447cd.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. Ticket: CD-561 Change-Id: Ic0fd385ea6346fcfb965704f40a31e7db6e55b5b (cherry picked from commit 46163fc084c1c0777785093070ecc2caab6f664e)
-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);