From f065fdf311eeb072342b995b373388c6ebe748c8 Mon Sep 17 00:00:00 2001 From: thiruram Date: Tue, 14 Apr 2020 09:55:34 -0700 Subject: [PATCH] Updates folder creation logging. After ag/11020901, folder creation process will not open gboard and hence drag and drop events resulting in folder creation should send additional folder creation event. Fixes NPE with ItemInfo.java. Bug: 153768241 Change-Id: I52c996a62dee52bf07feef4252aadc2a28c79752 (cherry picked from commit 9a3671e80ebee3d6733e5a1e89b024228e1bfe71) --- src/com/android/launcher3/folder/Folder.java | 6 +++--- .../android/launcher3/folder/FolderIcon.java | 2 +- .../launcher3/model/data/ItemInfo.java | 21 ++++++++++++------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java index 12d88df7d9..c2871906e1 100644 --- a/src/com/android/launcher3/folder/Folder.java +++ b/src/com/android/launcher3/folder/Folder.java @@ -332,7 +332,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo .map(info -> info.suggestedFolderNames) .map(folderNames -> (FolderNameInfo[]) folderNames .getParcelableArrayExtra(FolderInfo.EXTRA_FOLDER_SUGGESTIONS)) - .ifPresent(nameInfos -> showLabelSuggestions(nameInfos)); + .ifPresent(this::showLabelSuggestions); } mFolderName.setHint(""); mIsEditingName = true; @@ -1450,7 +1450,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo if (hasFocus) { startEditingFolderName(); } else { - logEditFolderLabel(); + logCurrentFolderLabelState(); mFolderName.dispatchBackKey(); } } @@ -1649,7 +1649,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo return mContent; } - private void logEditFolderLabel() { + protected void logCurrentFolderLabelState() { LauncherEvent launcherEvent = LauncherEvent.newBuilder() .setAction(Action.newBuilder().setType(Action.Type.SOFT_KEYBOARD)) .addSrcTarget(newEditTextTargetBuilder() diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java index 96bdc2ad2a..7fc6d5489c 100644 --- a/src/com/android/launcher3/folder/FolderIcon.java +++ b/src/com/android/launcher3/folder/FolderIcon.java @@ -416,6 +416,7 @@ public class FolderIcon extends FrameLayout implements FolderListener, IconLabel mPreviewItemManager.hidePreviewItem(finalIndex, false); mFolder.showItem(item); setLabelSuggestion(nameInfos); + mFolder.logCurrentFolderLabelState(); invalidate(); }, DROP_IN_ANIMATION_DURATION); } @@ -438,7 +439,6 @@ public class FolderIcon extends FrameLayout implements FolderListener, IconLabel onTitleChanged(mInfo.title); mFolder.mFolderName.setText(mInfo.title); mFolder.mLauncher.getModelWriter().updateItemInDatabase(mInfo); - // TODO: Add logging while folder creation. } diff --git a/src/com/android/launcher3/model/data/ItemInfo.java b/src/com/android/launcher3/model/data/ItemInfo.java index bd843e77c9..14f9a3e6d1 100644 --- a/src/com/android/launcher3/model/data/ItemInfo.java +++ b/src/com/android/launcher3/model/data/ItemInfo.java @@ -37,6 +37,8 @@ import com.android.launcher3.Workspace; import com.android.launcher3.logger.LauncherAtom; import com.android.launcher3.util.ContentWriter; +import java.util.Optional; + /** * Represents an item in the launcher. */ @@ -248,24 +250,29 @@ public class ItemInfo { LauncherAtom.ItemInfo.Builder itemBuilder = LauncherAtom.ItemInfo.newBuilder(); itemBuilder.setIsWork(user != Process.myUserHandle()); - ComponentName cn = getTargetComponent(); + Optional nullableComponent = Optional.ofNullable(getTargetComponent()); switch (itemType) { case ITEM_TYPE_APPLICATION: - itemBuilder.setApplication(LauncherAtom.Application.newBuilder() - .setComponentName(cn.flattenToShortString()) - .setPackageName(cn.getPackageName())); + itemBuilder + .setApplication(nullableComponent + .map(component -> LauncherAtom.Application.newBuilder() + .setComponentName(component.flattenToShortString()) + .setPackageName(component.getPackageName())) + .orElse(LauncherAtom.Application.newBuilder())); break; case ITEM_TYPE_DEEP_SHORTCUT: case ITEM_TYPE_SHORTCUT: - itemBuilder.setShortcut(LauncherAtom.Shortcut.newBuilder() - .setShortcutName(cn.flattenToShortString())); + itemBuilder + .setShortcut(nullableComponent + .map(component -> LauncherAtom.Shortcut.newBuilder() + .setShortcutName(component.flattenToShortString())) + .orElse(LauncherAtom.Shortcut.newBuilder())); break; case ITEM_TYPE_APPWIDGET: setItemBuilder(itemBuilder); break; default: break; - } if (fInfo != null) { LauncherAtom.FolderContainer.Builder folderBuilder =