diff options
author | Stephen Bird <sbird@cyngn.com> | 2016-05-09 16:58:33 -0700 |
---|---|---|
committer | Stephen Bird <sbird@cyngn.com> | 2016-05-09 17:56:35 -0700 |
commit | 46163fc084c1c0777785093070ecc2caab6f664e (patch) | |
tree | 7c788afa1d102e84fcd249ebc6233113071cb136 | |
parent | 4242645b8b044c05646a0b49d256967f1fd68cc8 (diff) | |
download | packages_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
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); |