Merge "Add UID in AppInfo." into udc-dev

This commit is contained in:
Anushree Ganjam
2023-06-02 01:17:29 +00:00
committed by Android (Google) Code Review
12 changed files with 129 additions and 31 deletions

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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,28 +594,32 @@ 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()];
boolean[] mAboveKeyboard = new boolean[mAboveKeyboardList.size()];
for (int i = 0; i < mAboveKeyboardList.size(); i++) {
mAboveKeyboard[i] = mAboveKeyboardList.get(i);
}
@@ -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
);
}
}

View File

@@ -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;
@@ -2971,8 +2974,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,

View File

@@ -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);
}
/**

View File

@@ -978,6 +978,14 @@ public class StatsLogManager implements ResourceBasedOverride {
return this;
}
/**
* Sets list of uid for each of {@link com.android.app.search.ResultType} that indicates
* package name for the impression event.
*/
default StatsImpressionLogger withUids(IntArray uid) {
return this;
}
/**
* Builds the final message and logs it as {@link EventEnum}.
*/

View File

@@ -23,6 +23,8 @@ import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import android.os.Process;
import android.util.Log;
import androidx.annotation.WorkerThread;
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherModel.CallbackTask;
@@ -39,15 +41,20 @@ import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.LooperExecutor;
import com.android.launcher3.util.LooperIdleLock;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.RunnableList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
/**
* Binds the results of {@link com.android.launcher3.model.LoaderTask} to the Callbacks objects.
@@ -143,11 +150,18 @@ public abstract class BaseLauncherBinder {
/**
* Binds the all apps results from LoaderTask to the callbacks UX.
*/
@WorkerThread
public void bindAllApps() {
Preconditions.assertWorkerThread();
// shallow copy
AppInfo[] apps = mBgAllAppsList.copyData();
int flags = mBgAllAppsList.getFlags();
executeCallbacksTask(c -> c.bindAllApplications(apps, flags), mUiExecutor);
Map<PackageUserKey, Integer> packageUserKeytoUidMap = Arrays.stream(apps).collect(
Collectors.toMap(
appInfo -> new PackageUserKey(appInfo.componentName.getPackageName(),
appInfo.user), appInfo -> appInfo.uid, (a, b) -> a));
executeCallbacksTask(c -> c.bindAllApplications(apps, flags, packageUserKeytoUidMap),
mUiExecutor);
}
/**

View File

@@ -22,6 +22,7 @@ import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.WorkerThread;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherModel;
@@ -35,11 +36,15 @@ import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.testing.shared.TestProtocol;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.widget.model.WidgetsListBaseEntry;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.function.Predicate;
@@ -153,7 +158,9 @@ public abstract class BaseModelUpdateTask implements ModelUpdateTask {
scheduleCallbackTask(c -> c.bindWorkspaceComponentsRemoved(matcher));
}
@WorkerThread
public void bindApplicationsIfNeeded() {
Preconditions.assertWorkerThread();
boolean changeFlag = mAllAppsList.getAndResetChangeFlag();
if (TestProtocol.sDebugTracing) {
Log.d(WORK_TAB_MISSING, "bindApplicationsIfNeeded changeFlag? " +
@@ -162,7 +169,11 @@ public abstract class BaseModelUpdateTask implements ModelUpdateTask {
if (changeFlag) {
AppInfo[] apps = mAllAppsList.copyData();
int flags = mAllAppsList.getFlags();
scheduleCallbackTask(c -> c.bindAllApplications(apps, flags));
Map<PackageUserKey, Integer> packageUserKeytoUidMap = Arrays.stream(apps).collect(
Collectors.toMap(
appInfo -> new PackageUserKey(appInfo.componentName.getPackageName(),
appInfo.user), appInfo -> appInfo.uid, (a, b) -> a));
scheduleCallbackTask(c -> c.bindAllApplications(apps, flags, packageUserKeytoUidMap));
}
}
}

View File

@@ -51,6 +51,7 @@ import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.IntSparseArrayMap;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.RunnableList;
import com.android.launcher3.widget.model.WidgetsListBaseEntry;
@@ -497,7 +498,9 @@ public class BgDataModel {
*/
default void bindExtraContainerItems(FixedContainerItems item) { }
default void bindAllApplications(AppInfo[] apps, int flags) { }
default void bindAllApplications(AppInfo[] apps, int flags,
Map<PackageUserKey, Integer> packageUserKeytoUidMap) {
}
/**
* Binds the cache of string resources

View File

@@ -61,6 +61,13 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory {
// Section name used for indexing.
public String sectionName = "";
/**
* The uid of the application.
* The kernel user-ID that has been assigned to this application. Currently this is not a unique
* ID (multiple applications can have the same uid).
*/
public int uid = -1;
public AppInfo() {
itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
}
@@ -87,6 +94,7 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory {
if (quietModeEnabled) {
runtimeStatusFlags |= FLAG_DISABLED_QUIET_USER;
}
uid = info.getApplicationInfo().uid;
updateRuntimeFlagsForActivityTarget(this, info);
}
@@ -95,6 +103,7 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory {
componentName = info.componentName;
title = Utilities.trim(info.title);
intent = new Intent(info.intent);
uid = info.uid;
}
@VisibleForTesting

View File

@@ -26,6 +26,8 @@ import android.view.View.OnClickListener;
import android.view.ViewAnimationUtils;
import android.view.inputmethod.InputMethodManager;
import androidx.annotation.UiThread;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.BubbleTextView;
@@ -38,6 +40,7 @@ import com.android.launcher3.LauncherPrefs;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.R;
import com.android.launcher3.allapps.ActivityAllAppsContainerView;
import com.android.launcher3.allapps.AllAppsStore;
import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.dragndrop.DraggableView;
@@ -54,10 +57,13 @@ import com.android.launcher3.touch.ItemClickHandler.ItemClickProxy;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.OnboardingPrefs;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.Themes;
import com.android.launcher3.views.BaseDragLayer;
import java.util.HashMap;
import java.util.Map;
/**
* Launcher activity for secondary displays
@@ -291,9 +297,13 @@ public class SecondaryDisplayLauncher extends BaseDraggingActivity
mPopupDataProvider.setDeepShortcutMap(deepShortcutMap);
}
@UiThread
@Override
public void bindAllApplications(AppInfo[] apps, int flags) {
mAppsView.getAppsStore().setApps(apps, flags);
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);
}

View File

@@ -37,6 +37,7 @@ import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.LauncherLayoutBuilder;
import com.android.launcher3.util.LauncherModelHelper;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.RunnableList;
import com.android.launcher3.util.TestUtil;
@@ -48,6 +49,7 @@ import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@@ -192,7 +194,8 @@ public class ModelMultiCallbacksTest {
}
@Override
public void bindAllApplications(AppInfo[] apps, int flags) {
public void bindAllApplications(AppInfo[] apps, int flags,
Map<PackageUserKey, Integer> packageUserKeytoUidMap) {
mAppInfos = apps;
}