diff options
Diffstat (limited to 'src/com/android/launcher3/model')
-rw-r--r-- | src/com/android/launcher3/model/AddWorkspaceItemsTask.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/model/BaseModelUpdateTask.java (renamed from src/com/android/launcher3/model/ExtendedModelTask.java) | 68 | ||||
-rw-r--r-- | src/com/android/launcher3/model/CacheDataUpdatedTask.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/model/LoaderResults.java | 13 | ||||
-rw-r--r-- | src/com/android/launcher3/model/LoaderTask.java | 9 | ||||
-rw-r--r-- | src/com/android/launcher3/model/PackageInstallStateChangedTask.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/model/PackageUpdatedTask.java | 4 | ||||
-rw-r--r-- | src/com/android/launcher3/model/ShortcutsChangedTask.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/model/UserLockStateChangedTask.java | 2 |
9 files changed, 89 insertions, 15 deletions
diff --git a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java index 2e8e15bf7..b27ccfd01 100644 --- a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java +++ b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java @@ -47,7 +47,7 @@ import java.util.List; /** * Task to add auto-created workspace items. */ -public class AddWorkspaceItemsTask extends ExtendedModelTask { +public class AddWorkspaceItemsTask extends BaseModelUpdateTask { private final Provider<List<Pair<ItemInfo, Object>>> mAppsProvider; diff --git a/src/com/android/launcher3/model/ExtendedModelTask.java b/src/com/android/launcher3/model/BaseModelUpdateTask.java index 080aaf54b..9b4510fca 100644 --- a/src/com/android/launcher3/model/ExtendedModelTask.java +++ b/src/com/android/launcher3/model/BaseModelUpdateTask.java @@ -16,8 +16,12 @@ package com.android.launcher3.model; import android.os.UserHandle; +import android.util.Log; -import com.android.launcher3.LauncherModel.BaseModelUpdateTask; +import com.android.launcher3.AllAppsList; +import com.android.launcher3.LauncherAppState; +import com.android.launcher3.LauncherModel; +import com.android.launcher3.LauncherModel.ModelUpdateTask; import com.android.launcher3.LauncherModel.CallbackTask; import com.android.launcher3.LauncherModel.Callbacks; import com.android.launcher3.ShortcutInfo; @@ -25,11 +29,69 @@ import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.MultiHashMap; import java.util.ArrayList; +import java.util.concurrent.Executor; /** - * Extension of {@link BaseModelUpdateTask} with some utility methods + * Extension of {@link ModelUpdateTask} with some utility methods */ -public abstract class ExtendedModelTask extends BaseModelUpdateTask { +public abstract class BaseModelUpdateTask implements ModelUpdateTask { + + private static final boolean DEBUG_TASKS = false; + private static final String TAG = "BaseModelUpdateTask"; + + private LauncherAppState mApp; + private LauncherModel mModel; + private BgDataModel mDataModel; + private AllAppsList mAllAppsList; + private Executor mUiExecutor; + + public void init(LauncherAppState app, LauncherModel model, + BgDataModel dataModel, AllAppsList allAppsList, Executor uiExecutor) { + mApp = app; + mModel = model; + mDataModel = dataModel; + mAllAppsList = allAppsList; + mUiExecutor = uiExecutor; + } + + @Override + public final void run() { + if (!mModel.isModelLoaded()) { + if (DEBUG_TASKS) { + Log.d(TAG, "Ignoring model task since loader is pending=" + this); + } + // Loader has not yet run. + return; + } + execute(mApp, mDataModel, mAllAppsList); + } + + /** + * Execute the actual task. Called on the worker thread. + */ + public abstract void execute( + LauncherAppState app, BgDataModel dataModel, AllAppsList apps); + + /** + * Schedules a {@param task} to be executed on the current callbacks. + */ + public final void scheduleCallbackTask(final CallbackTask task) { + final Callbacks callbacks = mModel.getCallback(); + mUiExecutor.execute(new Runnable() { + public void run() { + Callbacks cb = mModel.getCallback(); + if (callbacks == cb && cb != null) { + task.execute(callbacks); + } + } + }); + } + + public ModelWriter getModelWriter() { + // Updates from model task, do not deal with icon position in hotseat. + return mModel.getWriter(false /* hasVerticalHotseat */); + } + public void bindUpdatedShortcuts( ArrayList<ShortcutInfo> updatedShortcuts, UserHandle user) { diff --git a/src/com/android/launcher3/model/CacheDataUpdatedTask.java b/src/com/android/launcher3/model/CacheDataUpdatedTask.java index d7cece488..8597e1048 100644 --- a/src/com/android/launcher3/model/CacheDataUpdatedTask.java +++ b/src/com/android/launcher3/model/CacheDataUpdatedTask.java @@ -34,7 +34,7 @@ import java.util.HashSet; /** * Handles changes due to cache updates. */ -public class CacheDataUpdatedTask extends ExtendedModelTask { +public class CacheDataUpdatedTask extends BaseModelUpdateTask { public static final int OP_CACHE_UPDATE = 1; public static final int OP_SESSION_UPDATE = 2; diff --git a/src/com/android/launcher3/model/LoaderResults.java b/src/com/android/launcher3/model/LoaderResults.java index 28df64d39..0df8b6fee 100644 --- a/src/com/android/launcher3/model/LoaderResults.java +++ b/src/com/android/launcher3/model/LoaderResults.java @@ -16,6 +16,7 @@ package com.android.launcher3.model; +import android.os.Looper; import android.util.Log; import com.android.launcher3.AllAppsList; @@ -32,6 +33,7 @@ import com.android.launcher3.PagedView; import com.android.launcher3.Utilities; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.util.ComponentKey; +import com.android.launcher3.util.LooperIdleLock; import com.android.launcher3.util.MultiHashMap; import com.android.launcher3.util.ViewOnDrawExecutor; @@ -45,7 +47,7 @@ import java.util.Set; import java.util.concurrent.Executor; /** - * Helper class to handle results of {@link com.android.launcher3.LauncherModel.LoaderTask}. + * Helper class to handle results of {@link com.android.launcher3.model.LoaderTask}. */ public class LoaderResults { @@ -389,4 +391,13 @@ public class LoaderResults { }; mUiExecutor.execute(r); } + + public LooperIdleLock newIdleLock(Object lock) { + LooperIdleLock idleLock = new LooperIdleLock(lock, Looper.getMainLooper()); + // If we are not binding, there is no reason to wait for idle. + if (mCallbacks.get() == null) { + idleLock.queueIdle(); + } + return idleLock; + } } diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index bcf516eed..b24d68251 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -116,11 +116,11 @@ public class LoaderTask implements Runnable { mIconCache = mApp.getIconCache(); } - private synchronized void waitForIdle() { + protected synchronized void waitForIdle() { // Wait until the either we're stopped or the other threads are done. // This way we don't start loading all apps until the workspace has settled // down. - LooperIdleLock idleLock = new LooperIdleLock(this, Looper.getMainLooper()); + LooperIdleLock idleLock = mResults.newIdleLock(this); // Just in case mFlushingWorkerThread changes but we aren't woken up, // wait no longer than 1sec at a time while (!mStopped && idleLock.awaitLocked(1000)); @@ -202,7 +202,10 @@ public class LoaderTask implements Runnable { transaction.commit(); } catch (CancellationException e) { - // Loader stopped, ignore + // Loader stopped, ignore + if (DEBUG_LOADERS) { + Log.d(TAG, "Loader cancelled", e); + } } } diff --git a/src/com/android/launcher3/model/PackageInstallStateChangedTask.java b/src/com/android/launcher3/model/PackageInstallStateChangedTask.java index 76b90a8e2..1e0af6881 100644 --- a/src/com/android/launcher3/model/PackageInstallStateChangedTask.java +++ b/src/com/android/launcher3/model/PackageInstallStateChangedTask.java @@ -35,7 +35,7 @@ import java.util.HashSet; /** * Handles changes due to a sessions updates for a currently installing app. */ -public class PackageInstallStateChangedTask extends ExtendedModelTask { +public class PackageInstallStateChangedTask extends BaseModelUpdateTask { private final PackageInstallInfo mInstallInfo; diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java index 46fea218f..a237b3e7e 100644 --- a/src/com/android/launcher3/model/PackageUpdatedTask.java +++ b/src/com/android/launcher3/model/PackageUpdatedTask.java @@ -30,7 +30,6 @@ import com.android.launcher3.InstallShortcutReceiver; import com.android.launcher3.ItemInfo; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppWidgetInfo; -import com.android.launcher3.LauncherModel; import com.android.launcher3.LauncherModel.CallbackTask; import com.android.launcher3.LauncherModel.Callbacks; import com.android.launcher3.LauncherSettings; @@ -44,7 +43,6 @@ import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.graphics.LauncherIcons; import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.ItemInfoMatcher; -import com.android.launcher3.util.MultiHashMap; import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.util.PackageUserKey; @@ -58,7 +56,7 @@ import java.util.HashSet; * Handles updates due to changes in package manager (app installed/updated/removed) * or when a user availability changes. */ -public class PackageUpdatedTask extends ExtendedModelTask { +public class PackageUpdatedTask extends BaseModelUpdateTask { private static final boolean DEBUG = false; private static final String TAG = "PackageUpdatedTask"; diff --git a/src/com/android/launcher3/model/ShortcutsChangedTask.java b/src/com/android/launcher3/model/ShortcutsChangedTask.java index 47e83e5b9..6f325858d 100644 --- a/src/com/android/launcher3/model/ShortcutsChangedTask.java +++ b/src/com/android/launcher3/model/ShortcutsChangedTask.java @@ -34,7 +34,7 @@ import java.util.List; /** * Handles changes due to shortcut manager updates (deep shortcut changes) */ -public class ShortcutsChangedTask extends ExtendedModelTask { +public class ShortcutsChangedTask extends BaseModelUpdateTask { private final String mPackageName; private final List<ShortcutInfoCompat> mShortcuts; diff --git a/src/com/android/launcher3/model/UserLockStateChangedTask.java b/src/com/android/launcher3/model/UserLockStateChangedTask.java index fefed7552..568200646 100644 --- a/src/com/android/launcher3/model/UserLockStateChangedTask.java +++ b/src/com/android/launcher3/model/UserLockStateChangedTask.java @@ -38,7 +38,7 @@ import java.util.List; /** * Task to handle changing of lock state of the user */ -public class UserLockStateChangedTask extends ExtendedModelTask { +public class UserLockStateChangedTask extends BaseModelUpdateTask { private final UserHandle mUser; |