summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java8
-rw-r--r--services/people/java/com/android/server/people/prediction/SharesheetModelScorer.java24
-rw-r--r--services/tests/servicestests/src/com/android/server/people/prediction/SharesheetModelScorerTest.java17
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());