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

Commit d5237b86 authored by Matt Casey's avatar Matt Casey Committed by Android (Google) Code Review
Browse files

Merge "Derive ChooserActivity name from config instead of ChooserActivity class" into udc-qpr-dev

parents 7be94b81 1a118f7a
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());