From cef37d003a3bddddbc0d5bc5eebd30c837807012 Mon Sep 17 00:00:00 2001 From: Alison Cichowlas Date: Tue, 6 Oct 2020 16:29:16 -0400 Subject: [PATCH] Add a flag for calling old ChooserTargetService API & remove flags for Shortcuts. This flag is temporary, just want to make sure we like the state of the world without these targets as we continue down this path. Test: manual via adb: adb shell device_config get systemui share_use_service_targets false Bug: 170144291 Change-Id: I8f1ef4b98e7068ff5ee7dbe12827ec4ec034e126 --- .../android/internal/app/ChooserActivity.java | 9 ++++---- .../android/internal/app/ChooserFlags.java | 23 ++++++++++++------- .../app/chooser/SelectableTargetInfo.java | 3 +-- .../sysui/SystemUiDeviceConfigFlags.java | 8 +++++++ 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index 61a625e40dcd9..e0f8a1ad0a1ac 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -1855,6 +1855,7 @@ public class ChooserActivity extends ResolverActivity implements @VisibleForTesting protected void queryTargetServices(ChooserListAdapter adapter) { + mQueriedTargetServicesTimeMs = System.currentTimeMillis(); Context selectedProfileContext = createContextAsUser( @@ -1871,15 +1872,14 @@ public class ChooserActivity extends ResolverActivity implements continue; } final ActivityInfo ai = dri.getResolveInfo().activityInfo; - if (ChooserFlags.USE_SHORTCUT_MANAGER_FOR_DIRECT_TARGETS - && sm.hasShareTargets(ai.packageName)) { + if (sm.hasShareTargets(ai.packageName)) { // Share targets will be queried from ShortcutManager continue; } final Bundle md = ai.metaData; final String serviceName = md != null ? convertServiceName(ai.packageName, md.getString(ChooserTargetService.META_DATA_NAME)) : null; - if (serviceName != null) { + if (serviceName != null && ChooserFlags.USE_SERVICE_TARGETS_FOR_DIRECT_TARGETS) { final ComponentName serviceComponent = new ComponentName( ai.packageName, serviceName); @@ -2883,8 +2883,7 @@ public class ChooserActivity extends ResolverActivity implements return; } - if (ChooserFlags.USE_SHORTCUT_MANAGER_FOR_DIRECT_TARGETS - || ChooserFlags.USE_PREDICTION_MANAGER_FOR_DIRECT_TARGETS) { + if (ChooserFlags.USE_PREDICTION_MANAGER_FOR_DIRECT_TARGETS) { if (DEBUG) { Log.d(TAG, "querying direct share targets from ShortcutManager"); } diff --git a/core/java/com/android/internal/app/ChooserFlags.java b/core/java/com/android/internal/app/ChooserFlags.java index f1f1dbf49b8b1..3e26679e28a4a 100644 --- a/core/java/com/android/internal/app/ChooserFlags.java +++ b/core/java/com/android/internal/app/ChooserFlags.java @@ -17,22 +17,29 @@ package com.android.internal.app; import android.app.prediction.AppPredictionManager; +import android.provider.DeviceConfig; + +import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; /** * Common flags for {@link ChooserListAdapter} and {@link ChooserActivity}. */ public class ChooserFlags { - /** - * If set to true, use ShortcutManager to retrieve the matching direct share targets, instead of - * binding to every ChooserTargetService implementation. - */ - // TODO(b/121287573): Replace with a system flag (setprop?) - public static final boolean USE_SHORTCUT_MANAGER_FOR_DIRECT_TARGETS = true; /** - * If {@link ChooserFlags#USE_SHORTCUT_MANAGER_FOR_DIRECT_TARGETS} and this is set to true, - * {@link AppPredictionManager} will be queried for direct share targets. + * Whether to use the deprecated {@link android.service.chooser.ChooserTargetService} API for + * direct share targets. If true, both CTS and Shortcuts will be used to find Direct Share + * targets. If false, only Shortcuts will be used. + */ + public static final boolean USE_SERVICE_TARGETS_FOR_DIRECT_TARGETS = + DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.SHARE_USE_SERVICE_TARGETS, true); + + /** + * Whether to use {@link AppPredictionManager} to query for direct share targets (as opposed to + * talking directly to {@link android.content.pm.ShortcutManager}. */ // TODO(b/123089490): Replace with system flag static final boolean USE_PREDICTION_MANAGER_FOR_DIRECT_TARGETS = true; } + diff --git a/core/java/com/android/internal/app/chooser/SelectableTargetInfo.java b/core/java/com/android/internal/app/chooser/SelectableTargetInfo.java index 28a96013e1c0d..ce75f45d08970 100644 --- a/core/java/com/android/internal/app/chooser/SelectableTargetInfo.java +++ b/core/java/com/android/internal/app/chooser/SelectableTargetInfo.java @@ -38,7 +38,6 @@ import android.text.SpannableStringBuilder; import android.util.Log; import com.android.internal.app.ChooserActivity; -import com.android.internal.app.ChooserFlags; import com.android.internal.app.ResolverActivity; import com.android.internal.app.ResolverListAdapter.ActivityInfoPresentationGetter; import com.android.internal.app.SimpleIconFactory; @@ -147,7 +146,7 @@ public final class SelectableTargetInfo implements ChooserTargetInfo { final Icon icon = target.getIcon(); if (icon != null) { directShareIcon = icon.loadDrawable(mContext); - } else if (ChooserFlags.USE_SHORTCUT_MANAGER_FOR_DIRECT_TARGETS && shortcutInfo != null) { + } else if (shortcutInfo != null) { LauncherApps launcherApps = (LauncherApps) mContext.getSystemService( Context.LAUNCHER_APPS_SERVICE); directShareIcon = launcherApps.getShortcutIconDrawable(shortcutInfo, 0); diff --git a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java index 1ce246ad42744..d23ea3c46695a 100644 --- a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java +++ b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java @@ -429,6 +429,14 @@ public final class SystemUiDeviceConfigFlags { */ public static final String BACK_GESTURE_ML_MODEL_THRESHOLD = "back_gesture_ml_model_threshold"; + /** + * (boolean) Sharesheet - Whether to use the deprecated + * {@link android.service.chooser.ChooserTargetService} API for + * direct share targets. If true, both CTS and Shortcuts will be used to find Direct + * Share targets. If false, only Shortcuts will be used. + */ + public static final String SHARE_USE_SERVICE_TARGETS = "share_use_service_targets"; + private SystemUiDeviceConfigFlags() { }