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

Commit 2cf28713 authored by Pinyao Ting's avatar Pinyao Ting
Browse files

include predicted_rank in app launch logging

Test:
1. . build/envsetup.sh && tapas NexusLauncher
2. ccdebug && cclogcat
3. launch from workspace any app that is also in predicted apps
4. verify in terminal it has correct predicted_rank

Bug: 143855018
Change-Id: I07a62f07057537a6c09384cf944bbc5aa5888d22
parent a318b75c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -22,5 +22,7 @@
  <string name="instant_app_resolver_class" translatable="false">com.android.quickstep.InstantAppResolverImpl</string>

  <string name="main_process_initializer_class" translatable="false">com.android.quickstep.QuickstepProcessInitializer</string>

  <string name="user_event_dispatcher_class" translatable="false">com.android.quickstep.logging.UserEventDispatcherExtension</string>
</resources>
+2 −0
Original line number Diff line number Diff line
@@ -24,5 +24,7 @@
  <string name="app_launch_tracker_class" translatable="false">com.android.launcher3.appprediction.PredictionAppTracker</string>

  <string name="main_process_initializer_class" translatable="false">com.android.quickstep.QuickstepProcessInitializer</string>

  <string name="user_event_dispatcher_class" translatable="false">com.android.quickstep.logging.UserEventDispatcherAppPredictionExtension</string>
</resources>
+30 −0
Original line number Diff line number Diff line
@@ -24,11 +24,15 @@ import android.app.prediction.AppTarget;
import android.content.ComponentName;
import android.content.Context;

import androidx.annotation.NonNull;

import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.InvariantDeviceProfile.OnIDPChangeListener;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.ItemInfoWithIcon;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.LauncherState;
import com.android.launcher3.LauncherStateManager.StateListener;
import com.android.launcher3.Utilities;
@@ -36,12 +40,14 @@ import com.android.launcher3.allapps.AllAppsContainerView;
import com.android.launcher3.allapps.AllAppsStore.OnUpdateListener;
import com.android.launcher3.icons.IconCache.ItemInfoUpdateReceiver;
import com.android.launcher3.shortcuts.ShortcutKey;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.MainThreadInitializedObject;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.IntStream;

/**
 * Handler responsible to updating the UI due to predicted apps changes. Operations:
@@ -294,6 +300,30 @@ public class PredictionUiStateManager implements StateListener, ItemInfoUpdateRe
        return mCurrentState;
    }

    /**
     * Fill in predicted_rank field based on app prediction.
     * Only applicable when {@link ItemInfo#itemType} is one of the followings:
     * {@link LauncherSettings.Favorites#ITEM_TYPE_APPLICATION},
     * {@link LauncherSettings.Favorites#ITEM_TYPE_SHORTCUT},
     * {@link LauncherSettings.Favorites#ITEM_TYPE_DEEP_SHORTCUT}
     */
    public static void fillInPredictedRank(
            @NonNull ItemInfo itemInfo, @NonNull LauncherLogProto.Target target) {
        final PredictionUiStateManager manager = PredictionUiStateManager.INSTANCE.getNoCreate();
        if (manager == null || itemInfo.getTargetComponent() == null || itemInfo.user == null
                || (itemInfo.itemType != LauncherSettings.Favorites.ITEM_TYPE_APPLICATION
                && itemInfo.itemType != LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT
                && itemInfo.itemType != LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT)) {
            return;
        }
        final ComponentKey k = new ComponentKey(itemInfo.getTargetComponent(), itemInfo.user);
        final List<ComponentKeyMapper> predictedApps = manager.getCurrentState().apps;
        IntStream.range(0, predictedApps.size())
                .filter((i) -> k.equals(predictedApps.get(i).getComponentKey()))
                .findFirst()
                .ifPresent((rank) -> target.predictedRank = rank);
    }

    public static class PredictionState {

        public boolean isEnabled;
+47 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.quickstep.logging;

import android.content.Context;

import androidx.annotation.NonNull;

import com.android.launcher3.ItemInfo;
import com.android.launcher3.appprediction.PredictionUiStateManager;
import com.android.launcher3.userevent.nano.LauncherLogProto;

/**
 * This class handles AOSP MetricsLogger function calls and logging around
 * quickstep interactions and app launches.
 */
@SuppressWarnings("unused")
public class UserEventDispatcherAppPredictionExtension extends UserEventDispatcherExtension {

    public static final int ALL_APPS_PREDICTION_TIPS = 2;

    private static final String TAG = "UserEventDispatcher";

    public UserEventDispatcherAppPredictionExtension(Context context) {
        super(context);
    }

    @Override
    protected void onFillInLogContainerData(
            @NonNull ItemInfo itemInfo, @NonNull LauncherLogProto.Target target,
            @NonNull LauncherLogProto.Target targetParent) {
        PredictionUiStateManager.fillInPredictedRank(itemInfo, target);
    }
}
+0 −2
Original line number Diff line number Diff line
@@ -19,8 +19,6 @@
    <!-- Activity which blocks home gesture -->
    <string name="gesture_blocking_activity" translatable="false"></string>

    <string name="user_event_dispatcher_class" translatable="false">com.android.quickstep.logging.UserEventDispatcherExtension</string>

    <string name="stats_log_manager_class" translatable="false">com.android.quickstep.logging.StatsLogCompatManager</string>

    <string name="test_information_handler_class" translatable="false">com.android.quickstep.QuickstepTestInformationHandler</string>
Loading