summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/people/java/com/android/server/people/data/DataManager.java5
-rw-r--r--services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java12
-rw-r--r--services/tests/servicestests/src/com/android/server/people/prediction/ShareTargetPredictorTest.java61
3 files changed, 73 insertions, 5 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 63b716206313..4d1129567ca6 100644
--- a/services/people/java/com/android/server/people/data/DataManager.java
+++ b/services/people/java/com/android/server/people/data/DataManager.java
@@ -210,7 +210,7 @@ public class DataManager {
/** Reports the sharing related {@link AppTargetEvent} from App Prediction Manager. */
public void reportShareTargetEvent(@NonNull AppTargetEvent event,
- @Nullable IntentFilter intentFilter) {
+ @NonNull IntentFilter intentFilter) {
AppTarget appTarget = event.getTarget();
if (appTarget == null || event.getAction() != AppTargetEvent.ACTION_LAUNCH) {
return;
@@ -220,8 +220,7 @@ public class DataManager {
return;
}
PackageData packageData = userData.getOrCreatePackageData(appTarget.getPackageName());
- String mimeType = intentFilter != null ? intentFilter.getDataType(0) : null;
- @Event.EventType int eventType = mimeTypeToShareEventType(mimeType);
+ @Event.EventType int eventType = mimeTypeToShareEventType(intentFilter.getDataType(0));
EventHistoryImpl eventHistory;
if (ChooserActivity.LAUNCH_LOCATION_DIRECT_SHARE.equals(event.getLaunchLocation())) {
// Direct share event
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 43acd459f84b..2e60f2afcdea 100644
--- a/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java
+++ b/services/people/java/com/android/server/people/prediction/ShareTargetPredictor.java
@@ -66,7 +66,9 @@ class ShareTargetPredictor extends AppTargetPredictor {
if (DEBUG) {
Slog.d(TAG, "reportAppTargetEvent");
}
- getDataManager().reportShareTargetEvent(event, mIntentFilter);
+ if (mIntentFilter != null) {
+ getDataManager().reportShareTargetEvent(event, mIntentFilter);
+ }
}
/** Provides prediction on direct share targets */
@@ -76,6 +78,10 @@ class ShareTargetPredictor extends AppTargetPredictor {
if (DEBUG) {
Slog.d(TAG, "predictTargets");
}
+ if (mIntentFilter == null) {
+ updatePredictions(List.of());
+ return;
+ }
List<ShareTarget> shareTargets = getDirectShareTargets();
SharesheetModelScorer.computeScore(shareTargets, getShareEventType(mIntentFilter),
System.currentTimeMillis());
@@ -95,6 +101,10 @@ class ShareTargetPredictor extends AppTargetPredictor {
if (DEBUG) {
Slog.d(TAG, "sortTargets");
}
+ if (mIntentFilter == null) {
+ callback.accept(targets);
+ return;
+ }
List<ShareTarget> shareTargets = getAppShareTargets(targets);
SharesheetModelScorer.computeScoreForAppShare(shareTargets,
getShareEventType(mIntentFilter), getPredictionContext().getPredictedTargetCount(),
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 c2716393b947..60104d390eb7 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,11 +16,14 @@
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;
import static org.mockito.ArgumentMatchers.anySet;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -30,12 +33,14 @@ import android.app.prediction.AppTargetId;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager.ShareShortcutInfo;
import android.os.Bundle;
import android.os.UserHandle;
import android.util.Range;
+import com.android.internal.app.ChooserActivity;
import com.android.server.people.data.ConversationInfo;
import com.android.server.people.data.DataManager;
import com.android.server.people.data.EventHistory;
@@ -98,10 +103,13 @@ public final class ShareTargetPredictorTest {
when(mDataManager.getPackage(PACKAGE_1, USER_ID)).thenReturn(mPackageData1);
when(mDataManager.getPackage(PACKAGE_2, USER_ID)).thenReturn(mPackageData2);
+ Bundle bundle = new Bundle();
+ bundle.putObject(ChooserActivity.APP_PREDICTION_INTENT_FILTER_KEY,
+ IntentFilter.create("SEND", "text/plain"));
AppPredictionContext predictionContext = new AppPredictionContext.Builder(mContext)
.setUiSurface(UI_SURFACE_SHARE)
.setPredictedTargetCount(NUM_PREDICTED_TARGETS)
- .setExtras(new Bundle())
+ .setExtras(bundle)
.build();
mPredictor = new ShareTargetPredictor(
predictionContext, mUpdatePredictionsMethod, mDataManager, USER_ID);
@@ -225,6 +233,23 @@ public final class ShareTargetPredictorTest {
}
@Test
+ public void testPredictTargets_nullIntentFilter() {
+ AppPredictionContext predictionContext = new AppPredictionContext.Builder(mContext)
+ .setUiSurface(UI_SURFACE_SHARE)
+ .setPredictedTargetCount(NUM_PREDICTED_TARGETS)
+ .setExtras(new Bundle())
+ .build();
+ mPredictor = new ShareTargetPredictor(
+ predictionContext, mUpdatePredictionsMethod, mDataManager, USER_ID);
+
+ mPredictor.predictTargets();
+
+ verify(mUpdatePredictionsMethod).accept(mAppTargetCaptor.capture());
+ assertThat(mAppTargetCaptor.getValue()).isEmpty();
+ verify(mDataManager, never()).getShareShortcuts(any(), anyInt());
+ }
+
+ @Test
public void testSortTargets() {
AppTarget appTarget1 = new AppTarget.Builder(
new AppTargetId("cls1#pkg1"), PACKAGE_1, UserHandle.of(USER_ID))
@@ -281,6 +306,40 @@ public final class ShareTargetPredictorTest {
checkAppTarget(appTarget5, res.get(4));
}
+ @Test
+ public void testSortTargets_nullIntentFilter() {
+ AppPredictionContext predictionContext = new AppPredictionContext.Builder(mContext)
+ .setUiSurface(UI_SURFACE_SHARE)
+ .setPredictedTargetCount(NUM_PREDICTED_TARGETS)
+ .setExtras(new Bundle())
+ .build();
+ mPredictor = new ShareTargetPredictor(
+ predictionContext, mUpdatePredictionsMethod, mDataManager, USER_ID);
+ AppTarget appTarget1 = new AppTarget.Builder(
+ new AppTargetId("cls1#pkg1"), PACKAGE_1, UserHandle.of(USER_ID))
+ .build();
+ AppTarget appTarget2 = new AppTarget.Builder(
+ new AppTargetId("cls2#pkg1"), PACKAGE_1, UserHandle.of(USER_ID))
+ .build();
+ AppTarget appTarget3 = new AppTarget.Builder(
+ new AppTargetId("cls1#pkg2"), PACKAGE_2, UserHandle.of(USER_ID))
+ .build();
+ AppTarget appTarget4 = new AppTarget.Builder(
+ new AppTargetId("cls2#pkg2"), PACKAGE_2, UserHandle.of(USER_ID))
+ .build();
+ AppTarget appTarget5 = new AppTarget.Builder(
+ new AppTargetId("cls1#pkg3"), PACKAGE_3, UserHandle.of(USER_ID))
+ .build();
+ List<AppTarget> targets = List.of(appTarget1, appTarget2, appTarget3, appTarget4,
+ appTarget5);
+
+ mPredictor.sortTargets(targets, mUpdatePredictionsMethod);
+
+ verify(mUpdatePredictionsMethod).accept(mAppTargetCaptor.capture());
+ assertThat(mAppTargetCaptor.getValue()).containsExactlyElementsIn(targets);
+ verify(mDataManager, never()).getPackage(any(), anyInt());
+ }
+
private static void checkAppTarget(AppTarget expected, AppTarget actual) {
assertEquals(expected.getId(), actual.getId());
assertEquals(expected.getClassName(), actual.getClassName());