diff options
3 files changed, 28 insertions, 21 deletions
diff --git a/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java b/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java index b6204073d1cc..f5360eb9a56a 100644 --- a/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java +++ b/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java @@ -30,6 +30,7 @@ import android.app.prediction.AppPredictor; import android.app.prediction.AppTarget; import android.app.prediction.AppTargetEvent; import android.app.prediction.AppTargetId; +import android.content.ComponentName; import android.content.Context; import android.content.IntentFilter; import android.content.pm.ShortcutInfo; @@ -39,6 +40,7 @@ import android.provider.DeviceConfig; import android.util.Log; import android.util.Slog; +import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.ChooserActivity; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; @@ -63,6 +65,7 @@ class ShareTargetPredictor extends AppTargetPredictor { private static final String REMOTE_APP_PREDICTOR_KEY = "remote_app_predictor"; private final IntentFilter mIntentFilter; private final AppPredictor mRemoteAppPredictor; + @Nullable private final String mChooserActivity; ShareTargetPredictor(@NonNull AppPredictionContext predictionContext, @NonNull Consumer<List<AppTarget>> updatePredictionsMethod, @@ -81,6 +84,9 @@ class ShareTargetPredictor extends AppTargetPredictor { } else { mRemoteAppPredictor = null; } + ComponentName component = ComponentName.unflattenFromString( + context.getResources().getString(R.string.config_chooserActivity)); + mChooserActivity = (component == null) ? null : component.getShortClassName(); } /** Reports chosen history of direct/app share targets. */ @@ -138,7 +144,7 @@ class ShareTargetPredictor extends AppTargetPredictor { SharesheetModelScorer.computeScoreForAppShare(shareTargets, getShareEventType(mIntentFilter), getPredictionContext().getPredictedTargetCount(), System.currentTimeMillis(), getDataManager(), - mCallingUserId); + mCallingUserId, mChooserActivity); Collections.sort(shareTargets, (t1, t2) -> -Float.compare(t1.getScore(), t2.getScore())); List<AppTarget> appTargetList = new ArrayList<>(); for (ShareTarget shareTarget : shareTargets) { diff --git a/services/people/java/com/android/server/people/prediction/SharesheetModelScorer.java b/services/people/java/com/android/server/people/prediction/SharesheetModelScorer.java index c77843cfb044..b2f1e21a1395 100644 --- a/services/people/java/com/android/server/people/prediction/SharesheetModelScorer.java +++ b/services/people/java/com/android/server/people/prediction/SharesheetModelScorer.java @@ -26,7 +26,6 @@ import android.util.Range; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.app.ChooserActivity; import com.android.server.people.data.AppUsageStatsData; import com.android.server.people.data.DataManager; import com.android.server.people.data.Event; @@ -55,8 +54,6 @@ class SharesheetModelScorer { private static final float FREQUENTLY_USED_APP_SCORE_INITIAL_DECAY = 0.3F; @VisibleForTesting static final float FOREGROUND_APP_WEIGHT = 0F; - @VisibleForTesting - static final String CHOOSER_ACTIVITY = ChooserActivity.class.getSimpleName(); // Keep constructor private to avoid class being instantiated. private SharesheetModelScorer() { @@ -169,13 +166,14 @@ class SharesheetModelScorer { */ static void computeScoreForAppShare(List<ShareTargetPredictor.ShareTarget> shareTargets, int shareEventType, int targetsLimit, long now, @NonNull DataManager dataManager, - @UserIdInt int callingUserId) { + @UserIdInt int callingUserId, @Nullable String chooserActivity) { computeScore(shareTargets, shareEventType, now); - postProcess(shareTargets, targetsLimit, dataManager, callingUserId); + postProcess(shareTargets, targetsLimit, dataManager, callingUserId, chooserActivity); } private static void postProcess(List<ShareTargetPredictor.ShareTarget> shareTargets, - int targetsLimit, @NonNull DataManager dataManager, @UserIdInt int callingUserId) { + int targetsLimit, @NonNull DataManager dataManager, @UserIdInt int callingUserId, + @Nullable String chooserActivity) { // Populates a map which key is package name and value is list of shareTargets descended // on total score. Map<String, List<ShareTargetPredictor.ShareTarget>> shareTargetMap = new ArrayMap<>(); @@ -192,7 +190,7 @@ class SharesheetModelScorer { } targetsList.add(index, shareTarget); } - promoteForegroundApp(shareTargetMap, dataManager, callingUserId); + promoteForegroundApp(shareTargetMap, dataManager, callingUserId, chooserActivity); promoteMostChosenAndFrequentlyUsedApps(shareTargetMap, targetsLimit, dataManager, callingUserId); } @@ -272,9 +270,10 @@ class SharesheetModelScorer { */ private static void promoteForegroundApp( Map<String, List<ShareTargetPredictor.ShareTarget>> shareTargetMap, - @NonNull DataManager dataManager, @UserIdInt int callingUserId) { + @NonNull DataManager dataManager, @UserIdInt int callingUserId, + @Nullable String chooserActivity) { String sharingForegroundApp = findSharingForegroundApp(shareTargetMap, dataManager, - callingUserId); + callingUserId, chooserActivity); if (sharingForegroundApp != null) { ShareTargetPredictor.ShareTarget target = shareTargetMap.get(sharingForegroundApp).get( 0); @@ -297,7 +296,8 @@ class SharesheetModelScorer { @Nullable private static String findSharingForegroundApp( Map<String, List<ShareTargetPredictor.ShareTarget>> shareTargetMap, - @NonNull DataManager dataManager, @UserIdInt int callingUserId) { + @NonNull DataManager dataManager, @UserIdInt int callingUserId, + @Nullable String chooserActivity) { String sharingForegroundApp = null; long now = System.currentTimeMillis(); List<UsageEvents.Event> events = dataManager.queryAppMovingToForegroundEvents( @@ -306,8 +306,8 @@ class SharesheetModelScorer { for (int i = events.size() - 1; i >= 0; i--) { String className = events.get(i).getClassName(); String packageName = events.get(i).getPackageName(); - if (packageName == null || (className != null && className.contains(CHOOSER_ACTIVITY)) - || packageName.contains(CHOOSER_ACTIVITY)) { + if (packageName == null || (className != null && chooserActivity != null + && className.contains(chooserActivity))) { continue; } if (sourceApp == null) { diff --git a/services/tests/servicestests/src/com/android/server/people/prediction/SharesheetModelScorerTest.java b/services/tests/servicestests/src/com/android/server/people/prediction/SharesheetModelScorerTest.java index 45fff48ade55..2cd9198aa0e0 100644 --- a/services/tests/servicestests/src/com/android/server/people/prediction/SharesheetModelScorerTest.java +++ b/services/tests/servicestests/src/com/android/server/people/prediction/SharesheetModelScorerTest.java @@ -57,6 +57,7 @@ public final class SharesheetModelScorerTest { private static final String PACKAGE_3 = "pkg3"; private static final String CLASS_1 = "cls1"; private static final String CLASS_2 = "cls2"; + private static final String CHOOSER_ACTIVITY = "ChooserActivity"; private static final double DELTA = 1e-6; private static final long NOW = System.currentTimeMillis(); private static final Range<Long> WITHIN_ONE_DAY = new Range( @@ -246,7 +247,7 @@ public final class SharesheetModelScorerTest { SharesheetModelScorer.computeScoreForAppShare( List.of(mShareTarget1, mShareTarget2, mShareTarget3, mShareTarget4, mShareTarget5, mShareTarget6), - Event.TYPE_SHARE_TEXT, 20, NOW, mDataManager, USER_ID); + Event.TYPE_SHARE_TEXT, 20, NOW, mDataManager, USER_ID, CHOOSER_ACTIVITY); // Verification assertEquals(0.514f, mShareTarget1.getScore(), DELTA); @@ -278,7 +279,7 @@ public final class SharesheetModelScorerTest { SharesheetModelScorer.computeScoreForAppShare( List.of(mShareTarget1, mShareTarget2, mShareTarget3, mShareTarget4, mShareTarget5, mShareTarget6), - Event.TYPE_SHARE_TEXT, 20, NOW, mDataManager, USER_ID); + Event.TYPE_SHARE_TEXT, 20, NOW, mDataManager, USER_ID, CHOOSER_ACTIVITY); verify(mDataManager, times(1)).queryAppUsageStats(anyInt(), anyLong(), anyLong(), anySet()); @@ -311,7 +312,7 @@ public final class SharesheetModelScorerTest { SharesheetModelScorer.computeScoreForAppShare( List.of(mShareTarget1, mShareTarget2, mShareTarget3, mShareTarget4, mShareTarget5, mShareTarget6), - Event.TYPE_SHARE_TEXT, 20, NOW, mDataManager, USER_ID); + Event.TYPE_SHARE_TEXT, 20, NOW, mDataManager, USER_ID, CHOOSER_ACTIVITY); verify(mDataManager, times(1)).queryAppUsageStats(anyInt(), anyLong(), anyLong(), anySet()); @@ -349,7 +350,7 @@ public final class SharesheetModelScorerTest { SharesheetModelScorer.computeScoreForAppShare( List.of(mShareTarget1, mShareTarget2, mShareTarget3, mShareTarget4, mShareTarget5, mShareTarget6), - Event.TYPE_SHARE_TEXT, 4, NOW, mDataManager, USER_ID); + Event.TYPE_SHARE_TEXT, 4, NOW, mDataManager, USER_ID, CHOOSER_ACTIVITY); verify(mDataManager, never()).queryAppUsageStats(anyInt(), anyLong(), anyLong(), anySet()); @@ -377,7 +378,7 @@ public final class SharesheetModelScorerTest { anyLong())).thenReturn( List.of(createUsageEvent(PACKAGE_2), createUsageEvent(PACKAGE_3), - createUsageEvent(SharesheetModelScorer.CHOOSER_ACTIVITY), + createUsageEvent(CHOOSER_ACTIVITY), createUsageEvent(PACKAGE_3), createUsageEvent(PACKAGE_3)) ); @@ -385,7 +386,7 @@ public final class SharesheetModelScorerTest { SharesheetModelScorer.computeScoreForAppShare( List.of(mShareTarget1, mShareTarget2, mShareTarget3, mShareTarget4, mShareTarget5, mShareTarget6), - Event.TYPE_SHARE_TEXT, 20, NOW, mDataManager, USER_ID); + Event.TYPE_SHARE_TEXT, 20, NOW, mDataManager, USER_ID, CHOOSER_ACTIVITY); verify(mDataManager, times(1)).queryAppMovingToForegroundEvents(anyInt(), anyLong(), anyLong()); @@ -413,7 +414,7 @@ public final class SharesheetModelScorerTest { anyLong())).thenReturn( List.of(createUsageEvent(PACKAGE_3), createUsageEvent(PACKAGE_3), - createUsageEvent(SharesheetModelScorer.CHOOSER_ACTIVITY), + createUsageEvent(CHOOSER_ACTIVITY), createUsageEvent(PACKAGE_3), createUsageEvent(PACKAGE_3)) ); @@ -421,7 +422,7 @@ public final class SharesheetModelScorerTest { SharesheetModelScorer.computeScoreForAppShare( List.of(mShareTarget1, mShareTarget2, mShareTarget3, mShareTarget4, mShareTarget5, mShareTarget6), - Event.TYPE_SHARE_TEXT, 20, NOW, mDataManager, USER_ID); + Event.TYPE_SHARE_TEXT, 20, NOW, mDataManager, USER_ID, CHOOSER_ACTIVITY); verify(mDataManager, times(1)).queryAppMovingToForegroundEvents(anyInt(), anyLong(), anyLong()); |