summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnushree Ganjam <ganjam@google.com>2023-05-18 22:03:16 +0000
committerAnushree Ganjam <ganjam@google.com>2023-06-01 22:45:19 +0000
commit97434eea536259cab0615910b11865f4d911839a (patch)
tree53407acdf73efcbcae1c7858e4958a6ee8279cfa /src
parent57eaf86f8ded70c9bb448459e33621c4696a8755 (diff)
downloadLauncher3-97434eea536259cab0615910b11865f4d911839a.tar.gz
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
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher3/Launcher.java11
-rw-r--r--src/com/android/launcher3/allapps/AllAppsStore.java18
-rw-r--r--src/com/android/launcher3/logging/StatsLogManager.java8
-rw-r--r--src/com/android/launcher3/model/BaseLauncherBinder.java16
-rw-r--r--src/com/android/launcher3/model/BaseModelUpdateTask.java13
-rw-r--r--src/com/android/launcher3/model/BgDataModel.java5
-rw-r--r--src/com/android/launcher3/model/data/AppInfo.java9
-rw-r--r--src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java14
8 files changed, 84 insertions, 10 deletions
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 0b75c4509e..098a76f2c5 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -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,
diff --git a/src/com/android/launcher3/allapps/AllAppsStore.java b/src/com/android/launcher3/allapps/AllAppsStore.java
index a977b3a2d9..06af970cfc 100644
--- a/src/com/android/launcher3/allapps/AllAppsStore.java
+++ b/src/com/android/launcher3/allapps/AllAppsStore.java
@@ -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);
}
/**
diff --git a/src/com/android/launcher3/logging/StatsLogManager.java b/src/com/android/launcher3/logging/StatsLogManager.java
index 15f353827e..88d3ea4375 100644
--- a/src/com/android/launcher3/logging/StatsLogManager.java
+++ b/src/com/android/launcher3/logging/StatsLogManager.java
@@ -976,6 +976,14 @@ public class StatsLogManager implements ResourceBasedOverride {
}
/**
+ * 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}.
*/
default void log(EventEnum event) {
diff --git a/src/com/android/launcher3/model/BaseLauncherBinder.java b/src/com/android/launcher3/model/BaseLauncherBinder.java
index 85def73885..dcd61a85be 100644
--- a/src/com/android/launcher3/model/BaseLauncherBinder.java
+++ b/src/com/android/launcher3/model/BaseLauncherBinder.java
@@ -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);
}
/**
diff --git a/src/com/android/launcher3/model/BaseModelUpdateTask.java b/src/com/android/launcher3/model/BaseModelUpdateTask.java
index 44d32d902a..1ba015a63e 100644
--- a/src/com/android/launcher3/model/BaseModelUpdateTask.java
+++ b/src/com/android/launcher3/model/BaseModelUpdateTask.java
@@ -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));
}
}
}
diff --git a/src/com/android/launcher3/model/BgDataModel.java b/src/com/android/launcher3/model/BgDataModel.java
index 0861e9d51a..d94df51c39 100644
--- a/src/com/android/launcher3/model/BgDataModel.java
+++ b/src/com/android/launcher3/model/BgDataModel.java
@@ -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
diff --git a/src/com/android/launcher3/model/data/AppInfo.java b/src/com/android/launcher3/model/data/AppInfo.java
index 34972e71ff..7e6cbef8d5 100644
--- a/src/com/android/launcher3/model/data/AppInfo.java
+++ b/src/com/android/launcher3/model/data/AppInfo.java
@@ -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
diff --git a/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java b/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java
index fcc62a705f..458f137949 100644
--- a/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java
+++ b/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java
@@ -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);
}