diff --git a/src/com/android/launcher3/DropTarget.java b/src/com/android/launcher3/DropTarget.java index c1aed9812c..b27abc4369 100644 --- a/src/com/android/launcher3/DropTarget.java +++ b/src/com/android/launcher3/DropTarget.java @@ -28,6 +28,7 @@ import com.android.launcher3.folder.FolderNameProvider; import com.android.launcher3.logging.InstanceId; import com.android.launcher3.logging.InstanceIdSequence; import com.android.launcher3.model.data.ItemInfo; +import com.android.launcher3.util.Executors; /** * Interface defining an object that can receive a drag. @@ -84,7 +85,9 @@ public interface DropTarget { public DragObject(Context context) { if (FeatureFlags.FOLDER_NAME_SUGGEST.get()) { - folderNameProvider = FolderNameProvider.newInstance(context); + Executors.MODEL_EXECUTOR.post(() -> { + folderNameProvider = FolderNameProvider.newInstance(context); + }); } } diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java index 7998c2d50e..301f79c405 100644 --- a/src/com/android/launcher3/folder/Folder.java +++ b/src/com/android/launcher3/folder/Folder.java @@ -1005,7 +1005,8 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo if (!items.isEmpty()) { mLauncher.getModelWriter().moveItemsInDatabase(items, mInfo.id, 0); } - if (FeatureFlags.FOLDER_NAME_SUGGEST.get() && !isBind) { + if (FeatureFlags.FOLDER_NAME_SUGGEST.get() && !isBind + && total > 1 /* no need to update if there's one icon */) { Executors.MODEL_EXECUTOR.post(() -> { FolderNameInfo[] nameInfos = new FolderNameInfo[FolderNameProvider.SUGGEST_MAX]; diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java index b40b1e2ebc..7af4664a05 100644 --- a/src/com/android/launcher3/folder/FolderIcon.java +++ b/src/com/android/launcher3/folder/FolderIcon.java @@ -409,7 +409,7 @@ public class FolderIcon extends FrameLayout implements FolderListener, IconLabel FolderNameInfo[] nameInfos = new FolderNameInfo[FolderNameProvider.SUGGEST_MAX]; if (FeatureFlags.FOLDER_NAME_SUGGEST.get()) { - Executors.UI_HELPER_EXECUTOR.post(() -> { + Executors.MODEL_EXECUTOR.post(() -> { d.folderNameProvider.getSuggestedFolderName( getContext(), mInfo.contents, nameInfos); showFinalView(finalIndex, item, nameInfos, d.logInstanceId); diff --git a/src/com/android/launcher3/folder/FolderNameProvider.java b/src/com/android/launcher3/folder/FolderNameProvider.java index 7731e6e3f3..2be0bcee17 100644 --- a/src/com/android/launcher3/folder/FolderNameProvider.java +++ b/src/com/android/launcher3/folder/FolderNameProvider.java @@ -31,6 +31,7 @@ import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.util.IntSparseArrayMap; +import com.android.launcher3.util.Preconditions; import com.android.launcher3.util.ResourceBasedOverride; import java.util.ArrayList; @@ -64,6 +65,7 @@ public class FolderNameProvider implements ResourceBasedOverride { public static FolderNameProvider newInstance(Context context) { FolderNameProvider fnp = Overrides.getObject(FolderNameProvider.class, context.getApplicationContext(), R.string.folder_name_provider_class); + Preconditions.assertWorkerThread(); fnp.load(context); return fnp; @@ -71,6 +73,7 @@ public class FolderNameProvider implements ResourceBasedOverride { public static FolderNameProvider newInstance(Context context, List appInfos, IntSparseArrayMap folderInfos) { + Preconditions.assertWorkerThread(); FolderNameProvider fnp = Overrides.getObject(FolderNameProvider.class, context.getApplicationContext(), R.string.folder_name_provider_class); fnp.load(appInfos, folderInfos); @@ -94,7 +97,7 @@ public class FolderNameProvider implements ResourceBasedOverride { public void getSuggestedFolderName(Context context, ArrayList workspaceItemInfos, FolderNameInfo[] nameInfos) { - + Preconditions.assertWorkerThread(); if (DEBUG) { Log.d(TAG, "getSuggestedFolderName:" + Arrays.toString(nameInfos)); }