mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-02 17:06:49 +00:00
Caching last predictions and loading it with model
Adding support for persisting itemInfos on disk. This uses a separate xml file. Unlike prefs, it does not keep the items in memory and is just a wraper over reading/writing a file. Bug: 160748731 Change-Id: Iaccab9928ab8f30127fb3c2d630ca8ca83f0bd05
This commit is contained in:
@@ -27,6 +27,7 @@ import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.LauncherModel.CallbackTask;
|
||||
import com.android.launcher3.PagedView;
|
||||
import com.android.launcher3.model.BgDataModel.Callbacks;
|
||||
import com.android.launcher3.model.BgDataModel.FixedContainerItems;
|
||||
import com.android.launcher3.model.data.AppInfo;
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
|
||||
@@ -76,18 +77,20 @@ public abstract class BaseLoaderResults {
|
||||
ArrayList<ItemInfo> workspaceItems = new ArrayList<>();
|
||||
ArrayList<LauncherAppWidgetInfo> appWidgets = new ArrayList<>();
|
||||
final IntArray orderedScreenIds = new IntArray();
|
||||
ArrayList<FixedContainerItems> extraItems = new ArrayList<>();
|
||||
|
||||
synchronized (mBgDataModel) {
|
||||
workspaceItems.addAll(mBgDataModel.workspaceItems);
|
||||
appWidgets.addAll(mBgDataModel.appWidgets);
|
||||
orderedScreenIds.addAll(mBgDataModel.collectWorkspaceScreens());
|
||||
mBgDataModel.extraItems.forEach(extraItems::add);
|
||||
mBgDataModel.lastBindId++;
|
||||
mMyBindingId = mBgDataModel.lastBindId;
|
||||
}
|
||||
|
||||
for (Callbacks cb : mCallbacksList) {
|
||||
new WorkspaceBinder(cb, mUiExecutor, mApp, mBgDataModel, mMyBindingId,
|
||||
workspaceItems, appWidgets, orderedScreenIds).bind();
|
||||
workspaceItems, appWidgets, extraItems, orderedScreenIds).bind();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,7 +138,7 @@ public abstract class BaseLoaderResults {
|
||||
private final ArrayList<ItemInfo> mWorkspaceItems;
|
||||
private final ArrayList<LauncherAppWidgetInfo> mAppWidgets;
|
||||
private final IntArray mOrderedScreenIds;
|
||||
|
||||
private final ArrayList<FixedContainerItems> mExtraItems;
|
||||
|
||||
WorkspaceBinder(Callbacks callbacks,
|
||||
Executor uiExecutor,
|
||||
@@ -144,6 +147,7 @@ public abstract class BaseLoaderResults {
|
||||
int myBindingId,
|
||||
ArrayList<ItemInfo> workspaceItems,
|
||||
ArrayList<LauncherAppWidgetInfo> appWidgets,
|
||||
ArrayList<FixedContainerItems> extraItems,
|
||||
IntArray orderedScreenIds) {
|
||||
mCallbacks = callbacks;
|
||||
mUiExecutor = uiExecutor;
|
||||
@@ -152,6 +156,7 @@ public abstract class BaseLoaderResults {
|
||||
mMyBindingId = myBindingId;
|
||||
mWorkspaceItems = workspaceItems;
|
||||
mAppWidgets = appWidgets;
|
||||
mExtraItems = extraItems;
|
||||
mOrderedScreenIds = orderedScreenIds;
|
||||
}
|
||||
|
||||
@@ -198,6 +203,8 @@ public abstract class BaseLoaderResults {
|
||||
// Load items on the current page.
|
||||
bindWorkspaceItems(currentWorkspaceItems, mainExecutor);
|
||||
bindAppWidgets(currentAppWidgets, mainExecutor);
|
||||
mExtraItems.forEach(item ->
|
||||
executeCallbacksTask(c -> c.bindExtraContainerItems(item), mainExecutor));
|
||||
|
||||
// Locate available spots for prediction using currentWorkspaceItems
|
||||
IntArray gaps = getMissingHotseatRanks(currentWorkspaceItems, idp.numHotseatIcons);
|
||||
@@ -207,6 +214,7 @@ public abstract class BaseLoaderResults {
|
||||
// happens later).
|
||||
// This ensures that the first screen is immediately visible (eg. during rotation)
|
||||
// In case of !validFirstPage, bind all pages one after other.
|
||||
|
||||
final Executor deferredExecutor =
|
||||
validFirstPage ? new ViewOnDrawExecutor() : mainExecutor;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user