diff options
author | Anushree Ganjam <ganjam@google.com> | 2023-06-02 01:17:29 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-06-02 01:17:29 +0000 |
commit | 9b4f62e68167a71edbb90562f0fdc878043c6855 (patch) | |
tree | 1359070868b006421c43f667d0885d553fde2f03 /src/com/android/launcher3 | |
parent | 68135ebfd3db26e0985a8385c381dd4bbff7d3c8 (diff) | |
parent | 97434eea536259cab0615910b11865f4d911839a (diff) | |
download | Launcher3-9b4f62e68167a71edbb90562f0fdc878043c6855.tar.gz |
Merge "Add UID in AppInfo." into udc-dev
Diffstat (limited to 'src/com/android/launcher3')
8 files changed, 84 insertions, 10 deletions
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 28f378d128..37a20bf679 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; @@ -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, 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 17d3302e69..66ed779eb5 100644 --- a/src/com/android/launcher3/logging/StatsLogManager.java +++ b/src/com/android/launcher3/logging/StatsLogManager.java @@ -979,6 +979,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); } |