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

Commit 97434eea authored by Anushree Ganjam's avatar Anushree Ganjam
Browse files

Add UID in AppInfo.

Create a reverse hashmap of PackageUserKey to Uid in AllAppsStore for
faster lookup of uid based on packageName and userHandle.

Log Uid in Impression Logging.

Bug: 282849559
Test: Manual. See various usecases documented in http://shortn/_UcvAYOmLIP
Flag: NA

Change-Id: I416426214f6b6efc45f7d4c0433bbbfca9056adf
parent 57eaf86f
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.launcher3.taskbar;
import android.util.SparseArray;
import android.view.View;

import androidx.annotation.UiThread;

import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.model.BgDataModel;
import com.android.launcher3.model.BgDataModel.FixedContainerItems;
@@ -29,6 +31,8 @@ import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.ItemInfoMatcher;
import com.android.launcher3.util.LauncherBindableItemsContainer;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.Preconditions;
import com.android.quickstep.RecentsModel;

import java.io.PrintWriter;
@@ -37,6 +41,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;

/**
@@ -250,9 +255,12 @@ public class TaskbarModelCallbacks implements
        mControllers.taskbarPopupController.setDeepShortcutMap(deepShortcutMapCopy);
    }

    @UiThread
    @Override
    public void bindAllApplications(AppInfo[] apps, int flags) {
        mControllers.taskbarAllAppsController.setApps(apps, flags);
    public void bindAllApplications(AppInfo[] apps, int flags,
            Map<PackageUserKey, Integer> packageUserKeytoUidMap) {
        Preconditions.assertUIThread();
        mControllers.taskbarAllAppsController.setApps(apps, flags, packageUserKeytoUidMap);
        mControllers.taskbarRecentAppsController.setApps(apps);
    }

+8 −3
Original line number Diff line number Diff line
@@ -26,7 +26,9 @@ import com.android.launcher3.taskbar.TaskbarControllers;
import com.android.launcher3.taskbar.overlay.TaskbarOverlayContext;
import com.android.launcher3.util.PackageUserKey;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;

/**
@@ -53,6 +55,8 @@ public final class TaskbarAllAppsController {
    private boolean mDisallowGlobalDrag;
    private boolean mDisallowLongClick;

    private Map<PackageUserKey, Integer> mPackageUserKeytoUidMap = Collections.emptyMap();

    /** Initialize the controller. */
    public void init(TaskbarControllers controllers, boolean allAppsVisible) {
        mControllers = controllers;
@@ -67,11 +71,12 @@ public final class TaskbarAllAppsController {
    }

    /** Updates the current {@link AppInfo} instances. */
    public void setApps(AppInfo[] apps, int flags) {
    public void setApps(AppInfo[] apps, int flags, Map<PackageUserKey, Integer> map) {
        mApps = apps;
        mAppsModelFlags = flags;
        mPackageUserKeytoUidMap = map;
        if (mAppsView != null) {
            mAppsView.getAppsStore().setApps(mApps, mAppsModelFlags);
            mAppsView.getAppsStore().setApps(mApps, mAppsModelFlags, mPackageUserKeytoUidMap);
        }
    }

@@ -136,7 +141,7 @@ public final class TaskbarAllAppsController {

        viewController.show(animate);
        mAppsView = overlayContext.getAppsView();
        mAppsView.getAppsStore().setApps(mApps, mAppsModelFlags);
        mAppsView.getAppsStore().setApps(mApps, mAppsModelFlags, mPackageUserKeytoUidMap);
        mAppsView.getFloatingHeaderView()
                .findFixedRowByType(PredictionRowView.class)
                .setPredictedApps(mPredictedApps);
+23 −15
Original line number Diff line number Diff line
@@ -566,9 +566,10 @@ public class StatsLogCompatManager extends StatsLogManager {
     * Helps to construct and log statsd compatible impression events.
     */
    private static class StatsCompatImpressionLogger implements StatsImpressionLogger {
        private final IntArray mResultTypeList = new IntArray();
        private final IntArray mResultCountList = new IntArray();
        private int[] mResultTypeList = new int[]{};
        private int[] mResultCountList = new int[]{};
        private final List<Boolean> mAboveKeyboardList = new ArrayList<>();
        private int[] mUidList = new int[]{};
        private InstanceId mInstanceId = DEFAULT_INSTANCE_ID;
        private State mLauncherState = State.UNKNOWN;
        private int mQueryLength = -1;
@@ -593,25 +594,29 @@ public class StatsLogCompatManager extends StatsLogManager {

        @Override
        public StatsImpressionLogger withResultType(IntArray resultType) {
            this.mResultTypeList.clear();
            this.mResultTypeList.addAll(resultType);
            mResultTypeList = resultType.toArray();
            return this;
        }

        @Override
        public StatsImpressionLogger withResultCount(IntArray resultCount) {
            this.mResultCountList.clear();
            this.mResultCountList.addAll(resultCount);
            mResultCountList = resultCount.toArray();
            return this;
        }

        @Override
        public StatsImpressionLogger withAboveKeyboard(List<Boolean> aboveKeyboard) {
            this.mAboveKeyboardList.clear();
            mAboveKeyboardList.clear();
            this.mAboveKeyboardList.addAll(aboveKeyboard);
            return this;
        }

        @Override
        public StatsImpressionLogger withUids(IntArray uid) {
            mUidList = uid.toArray();
            return this;
        }

        @Override
        public void log(EventEnum event) {
            boolean[] mAboveKeyboard = new boolean[mAboveKeyboardList.size()];
@@ -626,11 +631,12 @@ public class StatsLogCompatManager extends StatsLogManager {
                logStringBuilder.append(String.format("ImpressionEvent:%s ", name));
                logStringBuilder.append(String.format("LauncherState = %s ", mLauncherState));
                logStringBuilder.append(String.format("QueryLength = %s ", mQueryLength));
                for (int i = 0; i < mResultTypeList.size(); i++) {
                for (int i = 0; i < mResultTypeList.length; i++) {
                    logStringBuilder.append(String.format(
                            "\n ResultType = %s with ResultCount = %s with is_above_keyboard = %s",
                            mResultTypeList.get(i), mResultCountList.get(i),
                            mAboveKeyboard[i]));
                            "\n ResultType = %s with ResultCount = %s with is_above_keyboard = %s"
                                    + " with uid = %s",
                            mResultTypeList[i], mResultCountList[i],
                            mAboveKeyboard[i], mUidList[i]));
                }
                Log.d(IMPRESSION_TAG, logStringBuilder.toString());
            }
@@ -643,11 +649,13 @@ public class StatsLogCompatManager extends StatsLogManager {
                    mLauncherState.getLauncherState(), // state
                    mQueryLength, // query_length
                    //result type list
                    mResultTypeList.toArray(),
                    mResultTypeList,
                    // result count list
                    mResultCountList.toArray(),
                    mResultCountList,
                    // above keyboard list
                    mAboveKeyboard
                    mAboveKeyboard,
                    // uid list
                    mUidList
            );
        }
    }
+9 −2
Original line number Diff line number Diff line
@@ -133,6 +133,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.StringRes;
import androidx.annotation.UiThread;
import androidx.annotation.VisibleForTesting;

import com.android.launcher3.DropTarget.DragObject;
@@ -205,6 +206,7 @@ import com.android.launcher3.util.LockedUserState;
import com.android.launcher3.util.OnboardingPrefs;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.PendingRequestArgs;
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.RunnableList;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.util.ScreenOnTracker;
@@ -246,6 +248,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.function.Supplier;
@@ -2970,8 +2973,12 @@ public class Launcher extends StatefulActivity<LauncherState>
     */
    @Override
    @TargetApi(Build.VERSION_CODES.S)
    public void bindAllApplications(AppInfo[] apps, int flags) {
        mAppsView.getAppsStore().setApps(apps, flags);
    @UiThread
    public void bindAllApplications(AppInfo[] apps, int flags,
            Map<PackageUserKey, Integer> packageUserKeytoUidMap) {
        Preconditions.assertUIThread();
        AllAppsStore appsStore = mAppsView.getAppsStore();
        appsStore.setApps(apps, flags, packageUserKeytoUidMap);
        PopupContainerWithArrow.dismissInvalidPopup(this);
        if (Utilities.ATLEAST_S) {
            Trace.endAsyncSection(DISPLAY_ALL_APPS_TRACE_METHOD_NAME,
+15 −3
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.launcher3.model.data.AppInfo.EMPTY_ARRAY;
import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_SHOW_DOWNLOAD_PROGRESS_MASK;
import static com.android.launcher3.testing.shared.TestProtocol.WORK_TAB_MISSING;

import android.os.UserHandle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
@@ -35,7 +36,9 @@ import com.android.launcher3.util.PackageUserKey;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -57,8 +60,8 @@ public class AllAppsStore {

    private final List<OnUpdateListener> mUpdateListeners = new CopyOnWriteArrayList<>();
    private final ArrayList<ViewGroup> mIconContainers = new ArrayList<>();
    private Map<PackageUserKey, Integer> mPackageUserKeytoUidMap = Collections.emptyMap();
    private int mModelFlags;

    private int mDeferUpdatesFlags = 0;
    private boolean mUpdatePending = false;

@@ -67,12 +70,21 @@ public class AllAppsStore {
    }

    /**
     * Sets the current set of apps.
     * Sets the current set of apps and sets mapping for {@link PackageUserKey} to Uid for
     * the current set of apps.
     */
    public void setApps(AppInfo[] apps, int flags) {
    public void setApps(AppInfo[] apps, int flags, Map<PackageUserKey, Integer> map) {
        mApps = apps;
        mModelFlags = flags;
        notifyUpdate();
        mPackageUserKeytoUidMap = map;
    }

    /**
     * Look up for Uid using package name and user handle for the current set of apps.
     */
    public int lookUpForUid(String packageName, UserHandle user) {
        return mPackageUserKeytoUidMap.getOrDefault(new PackageUserKey(packageName, user), -1);
    }

    /**
Loading