summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/people/java/com/android/server/people/data/DataManager.java4
-rw-r--r--services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java23
-rw-r--r--services/people/java/com/android/server/people/prediction/SharesheetModelScorer.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/people/prediction/ShareTargetPredictorTest.java18
-rw-r--r--services/tests/servicestests/src/com/android/server/people/prediction/SharesheetModelScorerTest.java6
5 files changed, 46 insertions, 9 deletions
diff --git a/services/people/java/com/android/server/people/data/DataManager.java b/services/people/java/com/android/server/people/data/DataManager.java
index c87ece29800c..ee3c39fc60b0 100644
--- a/services/people/java/com/android/server/people/data/DataManager.java
+++ b/services/people/java/com/android/server/people/data/DataManager.java
@@ -226,6 +226,10 @@ public class DataManager {
return;
}
String shortcutId = appTarget.getShortcutInfo().getId();
+ // Skip storing chooserTargets sharing events
+ if (ChooserActivity.CHOOSER_TARGET.equals(shortcutId)) {
+ return;
+ }
if (packageData.getConversationStore().getConversation(shortcutId) == null) {
addOrUpdateConversationInfo(appTarget.getShortcutInfo());
}
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 d09d0b379769..43acd459f84b 100644
--- a/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java
+++ b/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java
@@ -27,6 +27,8 @@ import android.app.prediction.AppTargetId;
import android.content.IntentFilter;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager.ShareShortcutInfo;
+import android.util.Log;
+import android.util.Slog;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.ChooserActivity;
@@ -45,6 +47,8 @@ import java.util.function.Consumer;
*/
class ShareTargetPredictor extends AppTargetPredictor {
+ private static final String TAG = "ShareTargetPredictor";
+ private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private final IntentFilter mIntentFilter;
ShareTargetPredictor(@NonNull AppPredictionContext predictionContext,
@@ -59,6 +63,9 @@ class ShareTargetPredictor extends AppTargetPredictor {
@WorkerThread
@Override
void reportAppTargetEvent(AppTargetEvent event) {
+ if (DEBUG) {
+ Slog.d(TAG, "reportAppTargetEvent");
+ }
getDataManager().reportShareTargetEvent(event, mIntentFilter);
}
@@ -66,6 +73,9 @@ class ShareTargetPredictor extends AppTargetPredictor {
@WorkerThread
@Override
void predictTargets() {
+ if (DEBUG) {
+ Slog.d(TAG, "predictTargets");
+ }
List<ShareTarget> shareTargets = getDirectShareTargets();
SharesheetModelScorer.computeScore(shareTargets, getShareEventType(mIntentFilter),
System.currentTimeMillis());
@@ -82,6 +92,9 @@ class ShareTargetPredictor extends AppTargetPredictor {
@WorkerThread
@Override
void sortTargets(List<AppTarget> targets, Consumer<List<AppTarget>> callback) {
+ if (DEBUG) {
+ Slog.d(TAG, "sortTargets");
+ }
List<ShareTarget> shareTargets = getAppShareTargets(targets);
SharesheetModelScorer.computeScoreForAppShare(shareTargets,
getShareEventType(mIntentFilter), getPredictionContext().getPredictedTargetCount(),
@@ -89,7 +102,15 @@ class ShareTargetPredictor extends AppTargetPredictor {
mCallingUserId);
Collections.sort(shareTargets, (t1, t2) -> -Float.compare(t1.getScore(), t2.getScore()));
List<AppTarget> appTargetList = new ArrayList<>();
- shareTargets.forEach(t -> appTargetList.add(t.getAppTarget()));
+ for (ShareTarget shareTarget : shareTargets) {
+ AppTarget appTarget = shareTarget.getAppTarget();
+ appTargetList.add(new AppTarget.Builder(appTarget.getId(), appTarget.getPackageName(),
+ appTarget.getUser())
+ .setClassName(appTarget.getClassName())
+ .setRank(shareTarget.getScore() > 0 ? (int) (shareTarget.getScore()
+ * 1000) : 0)
+ .build());
+ }
callback.accept(appTargetList);
}
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 0ac5724210da..76f252efb412 100644
--- a/services/people/java/com/android/server/people/prediction/SharesheetModelScorer.java
+++ b/services/people/java/com/android/server/people/prediction/SharesheetModelScorer.java
@@ -50,6 +50,7 @@ class SharesheetModelScorer {
private static final float RECENCY_SCORE_SUBSEQUENT_DECAY = 0.02F;
private static final long ONE_MONTH_WINDOW = TimeUnit.DAYS.toMillis(30);
private static final long FOREGROUND_APP_PROMO_TIME_WINDOW = TimeUnit.MINUTES.toMillis(10);
+ private static final float FREQUENTLY_USED_APP_SCORE_INITIAL_DECAY = 0.3F;
private static final float FREQUENTLY_USED_APP_SCORE_DECAY = 0.9F;
@VisibleForTesting
static final float FOREGROUND_APP_WEIGHT = 0F;
@@ -219,6 +220,7 @@ class SharesheetModelScorer {
Map<String, Integer> appLaunchCountsMap = dataManager.queryAppLaunchCount(
callingUserId, now - ONE_MONTH_WINDOW, now, shareTargetMap.keySet());
List<Pair<String, Integer>> appLaunchCounts = new ArrayList<>();
+ minValidScore *= FREQUENTLY_USED_APP_SCORE_INITIAL_DECAY;
for (Map.Entry<String, Integer> entry : appLaunchCountsMap.entrySet()) {
if (entry.getValue() > 0) {
appLaunchCounts.add(new Pair(entry.getKey(), entry.getValue()));
@@ -233,8 +235,8 @@ class SharesheetModelScorer {
if (target.getScore() > 0f) {
continue;
}
- minValidScore *= FREQUENTLY_USED_APP_SCORE_DECAY;
target.setScore(minValidScore);
+ minValidScore *= FREQUENTLY_USED_APP_SCORE_DECAY;
if (DEBUG) {
Slog.d(TAG, String.format(
"SharesheetModel: promoteFrequentUsedApps packageName: %s, className: %s,"
diff --git a/services/tests/servicestests/src/com/android/server/people/prediction/ShareTargetPredictorTest.java b/services/tests/servicestests/src/com/android/server/people/prediction/ShareTargetPredictorTest.java
index 1480627b9b9f..c2716393b947 100644
--- a/services/tests/servicestests/src/com/android/server/people/prediction/ShareTargetPredictorTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/prediction/ShareTargetPredictorTest.java
@@ -16,8 +16,6 @@
package com.android.server.people.prediction;
-import static com.google.common.truth.Truth.assertThat;
-
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -274,8 +272,20 @@ public final class ShareTargetPredictorTest {
mUpdatePredictionsMethod);
verify(mUpdatePredictionsMethod).accept(mAppTargetCaptor.capture());
- assertThat(mAppTargetCaptor.getValue()).containsExactly(
- appTarget4, appTarget3, appTarget2, appTarget1, appTarget5);
+ List<AppTarget> res = mAppTargetCaptor.getValue();
+ assertEquals(5, res.size());
+ checkAppTarget(appTarget4, res.get(0));
+ checkAppTarget(appTarget3, res.get(1));
+ checkAppTarget(appTarget2, res.get(2));
+ checkAppTarget(appTarget1, res.get(3));
+ checkAppTarget(appTarget5, res.get(4));
+ }
+
+ private static void checkAppTarget(AppTarget expected, AppTarget actual) {
+ assertEquals(expected.getId(), actual.getId());
+ assertEquals(expected.getClassName(), actual.getClassName());
+ assertEquals(expected.getPackageName(), actual.getPackageName());
+ assertEquals(expected.getUser(), actual.getUser());
}
private static ShareShortcutInfo buildShareShortcut(
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 9d96d6b7d861..9fc17763b8e0 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
@@ -281,9 +281,9 @@ public final class SharesheetModelScorerTest {
verify(mDataManager, times(1)).queryAppLaunchCount(anyInt(), anyLong(), anyLong(),
anySet());
- assertEquals(0.9f, mShareTarget5.getScore(), DELTA);
- assertEquals(0.81f, mShareTarget3.getScore(), DELTA);
- assertEquals(0.729f, mShareTarget1.getScore(), DELTA);
+ assertEquals(0.3f, mShareTarget5.getScore(), DELTA);
+ assertEquals(0.27f, mShareTarget3.getScore(), DELTA);
+ assertEquals(0.243f, mShareTarget1.getScore(), DELTA);
assertEquals(0f, mShareTarget2.getScore(), DELTA);
assertEquals(0f, mShareTarget4.getScore(), DELTA);
assertEquals(0f, mShareTarget6.getScore(), DELTA);