Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a118f7a authored by Matt Casey's avatar Matt Casey
Browse files

Derive ChooserActivity name from config instead of ChooserActivity class

Bug: 292222314
Test: atest SharesheetModelScorerTest
Change-Id: I9eb5025613ee384a454ced0daa889018a3d1bf36
parent 714771e8
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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) {
+12 −12
Original line number Diff line number Diff line
@@ -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) {
+9 −8
Original line number Diff line number Diff line
@@ -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());