Loading quickstep/src/com/android/launcher3/model/PredictionUpdateTask.java +4 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ import android.content.pm.LauncherApps; import android.content.pm.ShortcutInfo; import android.os.UserHandle; import androidx.annotation.NonNull; import com.android.launcher3.LauncherAppState; import com.android.launcher3.Utilities; import com.android.launcher3.model.BgDataModel.FixedContainerItems; Loading @@ -52,7 +54,8 @@ public class PredictionUpdateTask extends BaseModelUpdateTask { } @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { Context context = app.getContext(); // TODO: remove this Loading quickstep/src/com/android/launcher3/model/WidgetsPredictionUpdateTask.java +4 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.app.prediction.AppTarget; import android.content.ComponentName; import android.text.TextUtils; import androidx.annotation.NonNull; import com.android.launcher3.LauncherAppState; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.model.BgDataModel.FixedContainerItems; Loading Loading @@ -52,7 +54,8 @@ public final class WidgetsPredictionUpdateTask extends BaseModelUpdateTask { * workspace. */ @Override public void execute(LauncherAppState appState, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState appState, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { Set<ComponentKey> widgetsInWorkspace = dataModel.appWidgets.stream().map( widget -> new ComponentKey(widget.providerName, widget.user)).collect( Collectors.toSet()); Loading quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -336,8 +336,9 @@ public class StatsLogCompatManager extends StatsLogManager { appState.getModel().enqueueModelUpdateTask( new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { FolderInfo folderInfo = dataModel.folders.get(mItemInfo.container); write(event, applyOverwrites(mItemInfo.buildProto(folderInfo))); } Loading src/com/android/launcher3/LauncherModel.java +81 −47 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.text.TextUtils; import android.util.Log; import android.util.Pair; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; Loading Loading @@ -89,9 +90,11 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi static final String TAG = "Launcher.Model"; @NonNull private final LauncherAppState mApp; @NonNull private final Object mLock = new Object(); @Nullable private LoaderTask mLoaderTask; private boolean mIsLoaderTaskRunning; Loading @@ -107,20 +110,25 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } } @NonNull private final ArrayList<Callbacks> mCallbacksList = new ArrayList<>(1); // < only access in worker thread > @NonNull private final AllAppsList mBgAllAppsList; /** * All the static data should be accessed on the background thread, A lock should be acquired * on this object when accessing any data from this model. */ @NonNull private final BgDataModel mBgDataModel = new BgDataModel(); @NonNull private final ModelDelegate mModelDelegate; // Runnable to check if the shortcuts permission has changed. @NonNull private final Runnable mDataValidationCheck = new Runnable() { @Override public void run() { Loading @@ -130,14 +138,16 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } }; LauncherModel(Context context, LauncherAppState app, IconCache iconCache, AppFilter appFilter, boolean isPrimaryInstance) { LauncherModel(@NonNull final Context context, @NonNull final LauncherAppState app, @NonNull final IconCache iconCache, @NonNull final AppFilter appFilter, final boolean isPrimaryInstance) { mApp = app; mBgAllAppsList = new AllAppsList(iconCache, appFilter); mModelDelegate = ModelDelegate.newInstance(context, app, mBgAllAppsList, mBgDataModel, isPrimaryInstance); } @NonNull public ModelDelegate getModelDelegate() { return mModelDelegate; } Loading @@ -145,52 +155,57 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Adds the provided items to the workspace. */ public void addAndBindAddedWorkspaceItems(List<Pair<ItemInfo, Object>> itemList) { public void addAndBindAddedWorkspaceItems( @NonNull final List<Pair<ItemInfo, Object>> itemList) { for (Callbacks cb : getCallbacks()) { cb.preAddApps(); } enqueueModelUpdateTask(new AddWorkspaceItemsTask(itemList)); } public ModelWriter getWriter(boolean hasVerticalHotseat, boolean verifyChanges, @Nullable Callbacks owner) { @NonNull public ModelWriter getWriter(final boolean hasVerticalHotseat, final boolean verifyChanges, @Nullable final Callbacks owner) { return new ModelWriter(mApp.getContext(), this, mBgDataModel, hasVerticalHotseat, verifyChanges, owner); } @Override public void onPackageChanged(String packageName, UserHandle user) { public void onPackageChanged( @NonNull final String packageName, @NonNull final UserHandle user) { int op = PackageUpdatedTask.OP_UPDATE; enqueueModelUpdateTask(new PackageUpdatedTask(op, user, packageName)); } @Override public void onPackageRemoved(String packageName, UserHandle user) { public void onPackageRemoved( @NonNull final String packageName, @NonNull final UserHandle user) { onPackagesRemoved(user, packageName); } public void onPackagesRemoved(UserHandle user, String... packages) { public void onPackagesRemoved( @NonNull final UserHandle user, @NonNull final String... packages) { int op = PackageUpdatedTask.OP_REMOVE; FileLog.d(TAG, "package removed received " + TextUtils.join(",", packages)); enqueueModelUpdateTask(new PackageUpdatedTask(op, user, packages)); } @Override public void onPackageAdded(String packageName, UserHandle user) { public void onPackageAdded(@NonNull final String packageName, @NonNull final UserHandle user) { int op = PackageUpdatedTask.OP_ADD; enqueueModelUpdateTask(new PackageUpdatedTask(op, user, packageName)); } @Override public void onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing) { public void onPackagesAvailable(@NonNull final String[] packageNames, @NonNull final UserHandle user, final boolean replacing) { enqueueModelUpdateTask( new PackageUpdatedTask(PackageUpdatedTask.OP_UPDATE, user, packageNames)); } @Override public void onPackagesUnavailable(String[] packageNames, UserHandle user, boolean replacing) { public void onPackagesUnavailable(@NonNull final String[] packageNames, @NonNull final UserHandle user, final boolean replacing) { if (!replacing) { enqueueModelUpdateTask(new PackageUpdatedTask( PackageUpdatedTask.OP_UNAVAILABLE, user, packageNames)); Loading @@ -198,20 +213,22 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } @Override public void onPackagesSuspended(String[] packageNames, UserHandle user) { public void onPackagesSuspended( @NonNull final String[] packageNames, @NonNull final UserHandle user) { enqueueModelUpdateTask(new PackageUpdatedTask( PackageUpdatedTask.OP_SUSPEND, user, packageNames)); } @Override public void onPackagesUnsuspended(String[] packageNames, UserHandle user) { public void onPackagesUnsuspended( @NonNull final String[] packageNames, @NonNull final UserHandle user) { enqueueModelUpdateTask(new PackageUpdatedTask( PackageUpdatedTask.OP_UNSUSPEND, user, packageNames)); } @Override public void onPackageLoadingProgressChanged( String packageName, UserHandle user, float progress) { public void onPackageLoadingProgressChanged(@NonNull final String packageName, @NonNull final UserHandle user, final float progress) { if (Utilities.ATLEAST_S) { enqueueModelUpdateTask(new PackageIncrementalDownloadUpdatedTask( packageName, user, progress)); Loading @@ -219,8 +236,8 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } @Override public void onShortcutsChanged(String packageName, List<ShortcutInfo> shortcuts, UserHandle user) { public void onShortcutsChanged(@NonNull final String packageName, @NonNull final List<ShortcutInfo> shortcuts, @NonNull final UserHandle user) { enqueueModelUpdateTask(new ShortcutsChangedTask(packageName, shortcuts, user, true)); } Loading @@ -228,7 +245,8 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi * Called when the icon for an app changes, outside of package event */ @WorkerThread public void onAppIconChanged(String packageName, UserHandle user) { public void onAppIconChanged(@NonNull final String packageName, @NonNull final UserHandle user) { // Update the icon for the calendar package Context context = mApp.getContext(); onPackageChanged(packageName, user); Loading Loading @@ -256,7 +274,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi MODEL_EXECUTOR.execute(mModelDelegate::destroy); } public void onBroadcastIntent(Intent intent) { public void onBroadcastIntent(@NonNull final Intent intent) { if (DEBUG_RECEIVER) Log.d(TAG, "onReceive intent=" + intent); final String action = intent.getAction(); if (Intent.ACTION_LOCALE_CHANGED.equals(action)) { Loading Loading @@ -322,7 +340,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Removes an existing callback */ public void removeCallbacks(Callbacks callbacks) { public void removeCallbacks(@NonNull final Callbacks callbacks) { synchronized (mCallbacksList) { Preconditions.assertUIThread(); if (mCallbacksList.remove(callbacks)) { Loading @@ -338,7 +356,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi * Adds a callbacks to receive model updates * @return true if workspace load was performed synchronously */ public boolean addCallbacksAndLoad(Callbacks callbacks) { public boolean addCallbacksAndLoad(@NonNull final Callbacks callbacks) { synchronized (mLock) { addCallbacks(callbacks); return startLoader(new Callbacks[] { callbacks }); Loading @@ -349,7 +367,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Adds a callbacks to receive model updates */ public void addCallbacks(Callbacks callbacks) { public void addCallbacks(@NonNull final Callbacks callbacks) { Preconditions.assertUIThread(); synchronized (mCallbacksList) { if (TestProtocol.sDebugTracing) { Loading @@ -370,7 +388,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi return startLoader(new Callbacks[0]); } private boolean startLoader(Callbacks[] newCallbacks) { private boolean startLoader(@NonNull final Callbacks[] newCallbacks) { // Enable queue before starting loader. It will get disabled in Launcher#finishBindingItems ItemInstallQueue.INSTANCE.get(mApp.getContext()) .pauseModelPush(ItemInstallQueue.FLAG_LOADER_RUNNING); Loading Loading @@ -433,7 +451,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi * Loads the model if not loaded * @param callback called with the data model upon successful load or null on model thread. */ public void loadAsync(Consumer<BgDataModel> callback) { public void loadAsync(@NonNull final Consumer<BgDataModel> callback) { synchronized (mLock) { if (!mModelLoaded && !mIsLoaderTaskRunning) { startLoader(); Loading @@ -443,11 +461,12 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } @Override public void onInstallSessionCreated(final PackageInstallInfo sessionInfo) { public void onInstallSessionCreated(@NonNull final PackageInstallInfo sessionInfo) { if (FeatureFlags.PROMISE_APPS_IN_ALL_APPS.get()) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { apps.addPromiseApp(app.getContext(), sessionInfo); bindApplicationsIfNeeded(); } Loading @@ -456,10 +475,12 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } @Override public void onSessionFailure(String packageName, UserHandle user) { public void onSessionFailure(@NonNull final String packageName, @NonNull final UserHandle user) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { final IntSet removedIds = new IntSet(); synchronized (dataModel) { for (ItemInfo info : dataModel.itemsIdMap) { Loading @@ -483,7 +504,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } @Override public void onPackageStateChanged(PackageInstallInfo installInfo) { public void onPackageStateChanged(@NonNull final PackageInstallInfo installInfo) { enqueueModelUpdateTask(new PackageInstallStateChangedTask(installInfo)); } Loading @@ -491,7 +512,8 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi * Updates the icons and label of all pending icons for the provided package name. */ @Override public void onUpdateSessionDisplay(PackageUserKey key, PackageInstaller.SessionInfo info) { public void onUpdateSessionDisplay(@NonNull final PackageUserKey key, @NonNull final PackageInstaller.SessionInfo info) { mApp.getIconCache().updateSessionCache(key, info); HashSet<String> packages = new HashSet<>(); Loading @@ -502,9 +524,10 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi public class LoaderTransaction implements AutoCloseable { @NonNull private final LoaderTask mTask; private LoaderTransaction(LoaderTask task) throws CancellationException { private LoaderTransaction(@NonNull final LoaderTask task) throws CancellationException { synchronized (mLock) { if (mLoaderTask != task) { throw new CancellationException("Loader already stopped"); Loading Loading @@ -534,7 +557,8 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } } public LoaderTransaction beginLoader(LoaderTask task) throws CancellationException { public LoaderTransaction beginLoader(@NonNull final LoaderTask task) throws CancellationException { return new LoaderTransaction(task); } Loading @@ -551,7 +575,8 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Called when the icons for packages have been updated in the icon cache. */ public void onPackageIconsUpdated(HashSet<String> updatedPackages, UserHandle user) { public void onPackageIconsUpdated(@NonNull final HashSet<String> updatedPackages, @NonNull final UserHandle user) { // If any package icon has changed (app was updated while launcher was dead), // update the corresponding shortcuts. enqueueModelUpdateTask(new CacheDataUpdatedTask( Loading @@ -561,17 +586,19 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Called when the labels for the widgets has updated in the icon cache. */ public void onWidgetLabelsUpdated(HashSet<String> updatedPackages, UserHandle user) { public void onWidgetLabelsUpdated(@NonNull final HashSet<String> updatedPackages, @NonNull final UserHandle user) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { dataModel.widgetsModel.onPackageIconsUpdated(updatedPackages, user, app); bindUpdatedWidgets(dataModel); } }); } public void enqueueModelUpdateTask(ModelUpdateTask task) { public void enqueueModelUpdateTask(@NonNull final ModelUpdateTask task) { if (mModelDestroyed) { return; } Loading @@ -585,7 +612,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi */ public interface CallbackTask { void execute(Callbacks callbacks); void execute(@NonNull Callbacks callbacks); } /** Loading @@ -596,12 +623,14 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Called before the task is posted to initialize the internal state. */ void init(LauncherAppState app, LauncherModel model, BgDataModel dataModel, AllAppsList allAppsList, Executor uiExecutor); void init(@NonNull LauncherAppState app, @NonNull LauncherModel model, @NonNull BgDataModel dataModel, @NonNull AllAppsList allAppsList, @NonNull Executor uiExecutor); } public void updateAndBindWorkspaceItem(WorkspaceItemInfo si, ShortcutInfo info) { public void updateAndBindWorkspaceItem(@NonNull final WorkspaceItemInfo si, @NonNull final ShortcutInfo info) { updateAndBindWorkspaceItem(() -> { si.updateFromDeepShortcutInfo(info, mApp.getContext()); mApp.getIconCache().getShortcutIcon(si, info); Loading @@ -612,10 +641,12 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Utility method to update a shortcut on the background thread. */ public void updateAndBindWorkspaceItem(final Supplier<WorkspaceItemInfo> itemProvider) { public void updateAndBindWorkspaceItem( @NonNull final Supplier<WorkspaceItemInfo> itemProvider) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { WorkspaceItemInfo info = itemProvider.get(); getModelWriter().updateItemInDatabase(info); ArrayList<WorkspaceItemInfo> update = new ArrayList<>(); Loading @@ -628,14 +659,16 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi public void refreshAndBindWidgetsAndShortcuts(@Nullable final PackageUserKey packageUser) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { dataModel.widgetsModel.update(app, packageUser); bindUpdatedWidgets(dataModel); } }); } public void dumpState(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { public void dumpState(@Nullable final String prefix, @Nullable final FileDescriptor fd, @NonNull final PrintWriter writer, @NonNull final String[] args) { if (args.length > 0 && TextUtils.equals(args[0], "--all")) { writer.println(prefix + "All apps list: size=" + mBgAllAppsList.data.size()); for (AppInfo info : mBgAllAppsList.data) { Loading @@ -661,6 +694,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Returns an array of currently attached callbacks */ @NonNull public Callbacks[] getCallbacks() { synchronized (mCallbacksList) { return mCallbacksList.toArray(new Callbacks[mCallbacksList.size()]); Loading src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithm.java +3 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Context; import android.os.Handler; import androidx.annotation.AnyThread; import androidx.annotation.NonNull; import com.android.launcher3.LauncherAppState; import com.android.launcher3.allapps.BaseAllAppsAdapter.AdapterItem; Loading Loading @@ -68,7 +69,8 @@ public class DefaultAppSearchAlgorithm implements SearchAlgorithm<AdapterItem> { public void doSearch(String query, SearchCallback<AdapterItem> callback) { mAppState.getModel().enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { ArrayList<AdapterItem> result = getTitleMatchResult(apps.data, query); if (mAddNoResultsMessage && result.isEmpty()) { result.add(getEmptyMessageAdapterItem(query)); Loading Loading
quickstep/src/com/android/launcher3/model/PredictionUpdateTask.java +4 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ import android.content.pm.LauncherApps; import android.content.pm.ShortcutInfo; import android.os.UserHandle; import androidx.annotation.NonNull; import com.android.launcher3.LauncherAppState; import com.android.launcher3.Utilities; import com.android.launcher3.model.BgDataModel.FixedContainerItems; Loading @@ -52,7 +54,8 @@ public class PredictionUpdateTask extends BaseModelUpdateTask { } @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { Context context = app.getContext(); // TODO: remove this Loading
quickstep/src/com/android/launcher3/model/WidgetsPredictionUpdateTask.java +4 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.app.prediction.AppTarget; import android.content.ComponentName; import android.text.TextUtils; import androidx.annotation.NonNull; import com.android.launcher3.LauncherAppState; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.model.BgDataModel.FixedContainerItems; Loading Loading @@ -52,7 +54,8 @@ public final class WidgetsPredictionUpdateTask extends BaseModelUpdateTask { * workspace. */ @Override public void execute(LauncherAppState appState, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState appState, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { Set<ComponentKey> widgetsInWorkspace = dataModel.appWidgets.stream().map( widget -> new ComponentKey(widget.providerName, widget.user)).collect( Collectors.toSet()); Loading
quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -336,8 +336,9 @@ public class StatsLogCompatManager extends StatsLogManager { appState.getModel().enqueueModelUpdateTask( new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { FolderInfo folderInfo = dataModel.folders.get(mItemInfo.container); write(event, applyOverwrites(mItemInfo.buildProto(folderInfo))); } Loading
src/com/android/launcher3/LauncherModel.java +81 −47 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.text.TextUtils; import android.util.Log; import android.util.Pair; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; Loading Loading @@ -89,9 +90,11 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi static final String TAG = "Launcher.Model"; @NonNull private final LauncherAppState mApp; @NonNull private final Object mLock = new Object(); @Nullable private LoaderTask mLoaderTask; private boolean mIsLoaderTaskRunning; Loading @@ -107,20 +110,25 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } } @NonNull private final ArrayList<Callbacks> mCallbacksList = new ArrayList<>(1); // < only access in worker thread > @NonNull private final AllAppsList mBgAllAppsList; /** * All the static data should be accessed on the background thread, A lock should be acquired * on this object when accessing any data from this model. */ @NonNull private final BgDataModel mBgDataModel = new BgDataModel(); @NonNull private final ModelDelegate mModelDelegate; // Runnable to check if the shortcuts permission has changed. @NonNull private final Runnable mDataValidationCheck = new Runnable() { @Override public void run() { Loading @@ -130,14 +138,16 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } }; LauncherModel(Context context, LauncherAppState app, IconCache iconCache, AppFilter appFilter, boolean isPrimaryInstance) { LauncherModel(@NonNull final Context context, @NonNull final LauncherAppState app, @NonNull final IconCache iconCache, @NonNull final AppFilter appFilter, final boolean isPrimaryInstance) { mApp = app; mBgAllAppsList = new AllAppsList(iconCache, appFilter); mModelDelegate = ModelDelegate.newInstance(context, app, mBgAllAppsList, mBgDataModel, isPrimaryInstance); } @NonNull public ModelDelegate getModelDelegate() { return mModelDelegate; } Loading @@ -145,52 +155,57 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Adds the provided items to the workspace. */ public void addAndBindAddedWorkspaceItems(List<Pair<ItemInfo, Object>> itemList) { public void addAndBindAddedWorkspaceItems( @NonNull final List<Pair<ItemInfo, Object>> itemList) { for (Callbacks cb : getCallbacks()) { cb.preAddApps(); } enqueueModelUpdateTask(new AddWorkspaceItemsTask(itemList)); } public ModelWriter getWriter(boolean hasVerticalHotseat, boolean verifyChanges, @Nullable Callbacks owner) { @NonNull public ModelWriter getWriter(final boolean hasVerticalHotseat, final boolean verifyChanges, @Nullable final Callbacks owner) { return new ModelWriter(mApp.getContext(), this, mBgDataModel, hasVerticalHotseat, verifyChanges, owner); } @Override public void onPackageChanged(String packageName, UserHandle user) { public void onPackageChanged( @NonNull final String packageName, @NonNull final UserHandle user) { int op = PackageUpdatedTask.OP_UPDATE; enqueueModelUpdateTask(new PackageUpdatedTask(op, user, packageName)); } @Override public void onPackageRemoved(String packageName, UserHandle user) { public void onPackageRemoved( @NonNull final String packageName, @NonNull final UserHandle user) { onPackagesRemoved(user, packageName); } public void onPackagesRemoved(UserHandle user, String... packages) { public void onPackagesRemoved( @NonNull final UserHandle user, @NonNull final String... packages) { int op = PackageUpdatedTask.OP_REMOVE; FileLog.d(TAG, "package removed received " + TextUtils.join(",", packages)); enqueueModelUpdateTask(new PackageUpdatedTask(op, user, packages)); } @Override public void onPackageAdded(String packageName, UserHandle user) { public void onPackageAdded(@NonNull final String packageName, @NonNull final UserHandle user) { int op = PackageUpdatedTask.OP_ADD; enqueueModelUpdateTask(new PackageUpdatedTask(op, user, packageName)); } @Override public void onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing) { public void onPackagesAvailable(@NonNull final String[] packageNames, @NonNull final UserHandle user, final boolean replacing) { enqueueModelUpdateTask( new PackageUpdatedTask(PackageUpdatedTask.OP_UPDATE, user, packageNames)); } @Override public void onPackagesUnavailable(String[] packageNames, UserHandle user, boolean replacing) { public void onPackagesUnavailable(@NonNull final String[] packageNames, @NonNull final UserHandle user, final boolean replacing) { if (!replacing) { enqueueModelUpdateTask(new PackageUpdatedTask( PackageUpdatedTask.OP_UNAVAILABLE, user, packageNames)); Loading @@ -198,20 +213,22 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } @Override public void onPackagesSuspended(String[] packageNames, UserHandle user) { public void onPackagesSuspended( @NonNull final String[] packageNames, @NonNull final UserHandle user) { enqueueModelUpdateTask(new PackageUpdatedTask( PackageUpdatedTask.OP_SUSPEND, user, packageNames)); } @Override public void onPackagesUnsuspended(String[] packageNames, UserHandle user) { public void onPackagesUnsuspended( @NonNull final String[] packageNames, @NonNull final UserHandle user) { enqueueModelUpdateTask(new PackageUpdatedTask( PackageUpdatedTask.OP_UNSUSPEND, user, packageNames)); } @Override public void onPackageLoadingProgressChanged( String packageName, UserHandle user, float progress) { public void onPackageLoadingProgressChanged(@NonNull final String packageName, @NonNull final UserHandle user, final float progress) { if (Utilities.ATLEAST_S) { enqueueModelUpdateTask(new PackageIncrementalDownloadUpdatedTask( packageName, user, progress)); Loading @@ -219,8 +236,8 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } @Override public void onShortcutsChanged(String packageName, List<ShortcutInfo> shortcuts, UserHandle user) { public void onShortcutsChanged(@NonNull final String packageName, @NonNull final List<ShortcutInfo> shortcuts, @NonNull final UserHandle user) { enqueueModelUpdateTask(new ShortcutsChangedTask(packageName, shortcuts, user, true)); } Loading @@ -228,7 +245,8 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi * Called when the icon for an app changes, outside of package event */ @WorkerThread public void onAppIconChanged(String packageName, UserHandle user) { public void onAppIconChanged(@NonNull final String packageName, @NonNull final UserHandle user) { // Update the icon for the calendar package Context context = mApp.getContext(); onPackageChanged(packageName, user); Loading Loading @@ -256,7 +274,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi MODEL_EXECUTOR.execute(mModelDelegate::destroy); } public void onBroadcastIntent(Intent intent) { public void onBroadcastIntent(@NonNull final Intent intent) { if (DEBUG_RECEIVER) Log.d(TAG, "onReceive intent=" + intent); final String action = intent.getAction(); if (Intent.ACTION_LOCALE_CHANGED.equals(action)) { Loading Loading @@ -322,7 +340,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Removes an existing callback */ public void removeCallbacks(Callbacks callbacks) { public void removeCallbacks(@NonNull final Callbacks callbacks) { synchronized (mCallbacksList) { Preconditions.assertUIThread(); if (mCallbacksList.remove(callbacks)) { Loading @@ -338,7 +356,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi * Adds a callbacks to receive model updates * @return true if workspace load was performed synchronously */ public boolean addCallbacksAndLoad(Callbacks callbacks) { public boolean addCallbacksAndLoad(@NonNull final Callbacks callbacks) { synchronized (mLock) { addCallbacks(callbacks); return startLoader(new Callbacks[] { callbacks }); Loading @@ -349,7 +367,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Adds a callbacks to receive model updates */ public void addCallbacks(Callbacks callbacks) { public void addCallbacks(@NonNull final Callbacks callbacks) { Preconditions.assertUIThread(); synchronized (mCallbacksList) { if (TestProtocol.sDebugTracing) { Loading @@ -370,7 +388,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi return startLoader(new Callbacks[0]); } private boolean startLoader(Callbacks[] newCallbacks) { private boolean startLoader(@NonNull final Callbacks[] newCallbacks) { // Enable queue before starting loader. It will get disabled in Launcher#finishBindingItems ItemInstallQueue.INSTANCE.get(mApp.getContext()) .pauseModelPush(ItemInstallQueue.FLAG_LOADER_RUNNING); Loading Loading @@ -433,7 +451,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi * Loads the model if not loaded * @param callback called with the data model upon successful load or null on model thread. */ public void loadAsync(Consumer<BgDataModel> callback) { public void loadAsync(@NonNull final Consumer<BgDataModel> callback) { synchronized (mLock) { if (!mModelLoaded && !mIsLoaderTaskRunning) { startLoader(); Loading @@ -443,11 +461,12 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } @Override public void onInstallSessionCreated(final PackageInstallInfo sessionInfo) { public void onInstallSessionCreated(@NonNull final PackageInstallInfo sessionInfo) { if (FeatureFlags.PROMISE_APPS_IN_ALL_APPS.get()) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { apps.addPromiseApp(app.getContext(), sessionInfo); bindApplicationsIfNeeded(); } Loading @@ -456,10 +475,12 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } @Override public void onSessionFailure(String packageName, UserHandle user) { public void onSessionFailure(@NonNull final String packageName, @NonNull final UserHandle user) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { final IntSet removedIds = new IntSet(); synchronized (dataModel) { for (ItemInfo info : dataModel.itemsIdMap) { Loading @@ -483,7 +504,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } @Override public void onPackageStateChanged(PackageInstallInfo installInfo) { public void onPackageStateChanged(@NonNull final PackageInstallInfo installInfo) { enqueueModelUpdateTask(new PackageInstallStateChangedTask(installInfo)); } Loading @@ -491,7 +512,8 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi * Updates the icons and label of all pending icons for the provided package name. */ @Override public void onUpdateSessionDisplay(PackageUserKey key, PackageInstaller.SessionInfo info) { public void onUpdateSessionDisplay(@NonNull final PackageUserKey key, @NonNull final PackageInstaller.SessionInfo info) { mApp.getIconCache().updateSessionCache(key, info); HashSet<String> packages = new HashSet<>(); Loading @@ -502,9 +524,10 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi public class LoaderTransaction implements AutoCloseable { @NonNull private final LoaderTask mTask; private LoaderTransaction(LoaderTask task) throws CancellationException { private LoaderTransaction(@NonNull final LoaderTask task) throws CancellationException { synchronized (mLock) { if (mLoaderTask != task) { throw new CancellationException("Loader already stopped"); Loading Loading @@ -534,7 +557,8 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi } } public LoaderTransaction beginLoader(LoaderTask task) throws CancellationException { public LoaderTransaction beginLoader(@NonNull final LoaderTask task) throws CancellationException { return new LoaderTransaction(task); } Loading @@ -551,7 +575,8 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Called when the icons for packages have been updated in the icon cache. */ public void onPackageIconsUpdated(HashSet<String> updatedPackages, UserHandle user) { public void onPackageIconsUpdated(@NonNull final HashSet<String> updatedPackages, @NonNull final UserHandle user) { // If any package icon has changed (app was updated while launcher was dead), // update the corresponding shortcuts. enqueueModelUpdateTask(new CacheDataUpdatedTask( Loading @@ -561,17 +586,19 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Called when the labels for the widgets has updated in the icon cache. */ public void onWidgetLabelsUpdated(HashSet<String> updatedPackages, UserHandle user) { public void onWidgetLabelsUpdated(@NonNull final HashSet<String> updatedPackages, @NonNull final UserHandle user) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { dataModel.widgetsModel.onPackageIconsUpdated(updatedPackages, user, app); bindUpdatedWidgets(dataModel); } }); } public void enqueueModelUpdateTask(ModelUpdateTask task) { public void enqueueModelUpdateTask(@NonNull final ModelUpdateTask task) { if (mModelDestroyed) { return; } Loading @@ -585,7 +612,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi */ public interface CallbackTask { void execute(Callbacks callbacks); void execute(@NonNull Callbacks callbacks); } /** Loading @@ -596,12 +623,14 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Called before the task is posted to initialize the internal state. */ void init(LauncherAppState app, LauncherModel model, BgDataModel dataModel, AllAppsList allAppsList, Executor uiExecutor); void init(@NonNull LauncherAppState app, @NonNull LauncherModel model, @NonNull BgDataModel dataModel, @NonNull AllAppsList allAppsList, @NonNull Executor uiExecutor); } public void updateAndBindWorkspaceItem(WorkspaceItemInfo si, ShortcutInfo info) { public void updateAndBindWorkspaceItem(@NonNull final WorkspaceItemInfo si, @NonNull final ShortcutInfo info) { updateAndBindWorkspaceItem(() -> { si.updateFromDeepShortcutInfo(info, mApp.getContext()); mApp.getIconCache().getShortcutIcon(si, info); Loading @@ -612,10 +641,12 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Utility method to update a shortcut on the background thread. */ public void updateAndBindWorkspaceItem(final Supplier<WorkspaceItemInfo> itemProvider) { public void updateAndBindWorkspaceItem( @NonNull final Supplier<WorkspaceItemInfo> itemProvider) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { WorkspaceItemInfo info = itemProvider.get(); getModelWriter().updateItemInDatabase(info); ArrayList<WorkspaceItemInfo> update = new ArrayList<>(); Loading @@ -628,14 +659,16 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi public void refreshAndBindWidgetsAndShortcuts(@Nullable final PackageUserKey packageUser) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { dataModel.widgetsModel.update(app, packageUser); bindUpdatedWidgets(dataModel); } }); } public void dumpState(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { public void dumpState(@Nullable final String prefix, @Nullable final FileDescriptor fd, @NonNull final PrintWriter writer, @NonNull final String[] args) { if (args.length > 0 && TextUtils.equals(args[0], "--all")) { writer.println(prefix + "All apps list: size=" + mBgAllAppsList.data.size()); for (AppInfo info : mBgAllAppsList.data) { Loading @@ -661,6 +694,7 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi /** * Returns an array of currently attached callbacks */ @NonNull public Callbacks[] getCallbacks() { synchronized (mCallbacksList) { return mCallbacksList.toArray(new Callbacks[mCallbacksList.size()]); Loading
src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithm.java +3 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Context; import android.os.Handler; import androidx.annotation.AnyThread; import androidx.annotation.NonNull; import com.android.launcher3.LauncherAppState; import com.android.launcher3.allapps.BaseAllAppsAdapter.AdapterItem; Loading Loading @@ -68,7 +69,8 @@ public class DefaultAppSearchAlgorithm implements SearchAlgorithm<AdapterItem> { public void doSearch(String query, SearchCallback<AdapterItem> callback) { mAppState.getModel().enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) { ArrayList<AdapterItem> result = getTitleMatchResult(apps.data, query); if (mAddNoResultsMessage && result.isEmpty()) { result.add(getEmptyMessageAdapterItem(query)); Loading