From 356a9f05c43cfe198d4c52ca52f0832a32eed2ce Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Wed, 19 Feb 2020 09:14:49 -0800 Subject: [PATCH] Fix folder UI open regression when tapping edit text / Fix NPE Bug: 149835166 Bug: 149839789 Change-Id: I295cc72e4228249794eae11f177226179f2a175f --- src/com/android/launcher3/folder/Folder.java | 12 +++++++----- .../launcher3/folder/FolderNameProvider.java | 14 ++++++++++++++ src/com/android/launcher3/model/LoaderTask.java | 3 ++- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java index bbe6cbf07e..1d79e011ff 100644 --- a/src/com/android/launcher3/folder/Folder.java +++ b/src/com/android/launcher3/folder/Folder.java @@ -326,7 +326,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo (FolderNameInfo[]) mInfo.suggestedFolderNames.getParcelableArrayExtra( FolderInfo.EXTRA_FOLDER_SUGGESTIONS); if (nameInfos != null) { - showLabelSuggestion(nameInfos); + showLabelSuggestion(nameInfos, false); } } } @@ -468,7 +468,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo nameInfos); if (isEmpty(mFolderName.getText().toString()) && !mInfo.hasOption(FLAG_MANUAL_FOLDER_NAME)) { - showLabelSuggestion(nameInfos); + showLabelSuggestion(nameInfos, true); } } } @@ -477,7 +477,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo * Show suggested folder title in FolderEditText if the first suggestion is non-empty, push * InputMethodManager suggestions. */ - private void showLabelSuggestion(FolderNameInfo[] nameInfos) { + private void showLabelSuggestion(FolderNameInfo[] nameInfos, boolean animate) { if (nameInfos == null) { return; } @@ -493,9 +493,10 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo if (!isEmpty(firstLabel)) { mFolderName.setHint(""); mFolderName.setText(firstLabel); - mInfo.title = firstLabel; } - animateOpen(mInfo.contents, 0, true); + if (animate) { + animateOpen(mInfo.contents, 0, true); + } mFolderName.showKeyboard(); mFolderName.displayCompletions( asList(nameInfos).subList(1, nameInfos.length).stream() @@ -1651,6 +1652,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo .getParcelableArrayExtra(FolderInfo.EXTRA_FOLDER_SUGGESTIONS)) .map(folderNameInfoArray -> stream(folderNameInfoArray) + .filter(Objects::nonNull) .map(FolderNameInfo::getLabel) .map(CharSequence::toString) .toArray(String[]::new)); diff --git a/src/com/android/launcher3/folder/FolderNameProvider.java b/src/com/android/launcher3/folder/FolderNameProvider.java index 26fe059a72..184dbb9506 100644 --- a/src/com/android/launcher3/folder/FolderNameProvider.java +++ b/src/com/android/launcher3/folder/FolderNameProvider.java @@ -70,11 +70,25 @@ public class FolderNameProvider implements ResourceBasedOverride { return fnp; } + public static FolderNameProvider newInstance(Context context, List appInfos, + IntSparseArrayMap folderInfos) { + FolderNameProvider fnp = Overrides.getObject(FolderNameProvider.class, + context.getApplicationContext(), R.string.folder_name_provider_class); + fnp.load(appInfos, folderInfos); + + return fnp; + } + private void load(Context context) { LauncherAppState.getInstance(context).getModel().enqueueModelUpdateTask( new FolderNameWorker()); } + private void load(List appInfos, IntSparseArrayMap folderInfos) { + mAppInfos = appInfos; + mFolderInfos = folderInfos; + } + /** * Generate and rank the suggested Folder names. */ diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index af802ef99b..6223a2342c 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -901,7 +901,8 @@ public class LoaderTask implements Runnable { } private void loadFolderNames() { - FolderNameProvider provider = FolderNameProvider.newInstance(mApp.getContext()); + FolderNameProvider provider = FolderNameProvider.newInstance(mApp.getContext(), + mBgAllAppsList.data, mBgDataModel.folders); synchronized (mBgDataModel) { for (int i = 0; i < mBgDataModel.folders.size(); i++) {