From f546e0599e8127068e7d75ff787483453c781275 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Thu, 12 Mar 2020 12:53:43 -0700 Subject: [PATCH] Null check every ComponentName call inside FolderNameProvider Bug: 150522230 Change-Id: I50007a3a781234797e16d830935a8b8585ac242b --- .../launcher3/folder/FolderNameProvider.java | 38 +++++++------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/src/com/android/launcher3/folder/FolderNameProvider.java b/src/com/android/launcher3/folder/FolderNameProvider.java index 184dbb9506..07161da232 100644 --- a/src/com/android/launcher3/folder/FolderNameProvider.java +++ b/src/com/android/launcher3/folder/FolderNameProvider.java @@ -15,8 +15,10 @@ */ package com.android.launcher3.folder; +import android.content.ComponentName; import android.content.Context; import android.os.Process; +import android.os.UserHandle; import android.text.TextUtils; import android.util.Log; @@ -34,12 +36,9 @@ import com.android.launcher3.util.ResourceBasedOverride; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Function; -import java.util.function.Predicate; +import java.util.Set; import java.util.stream.Collectors; /** @@ -101,27 +100,23 @@ public class FolderNameProvider implements ResourceBasedOverride { } // If all the icons are from work profile, // Then, suggest "Work" as the folder name - List distinctItemInfos = workspaceItemInfos.stream() - .filter(distinctByKey(p -> p.user)) - .collect(Collectors.toList()); - - if (distinctItemInfos.size() == 1 - && !distinctItemInfos.get(0).user.equals(Process.myUserHandle())) { - // Place it as last viable suggestion + Set users = workspaceItemInfos.stream().map(w -> w.user) + .collect(Collectors.toSet()); + if (users.size() == 1 && !users.contains(Process.myUserHandle())) { setAsLastSuggestion(nameInfos, context.getResources().getString(R.string.work_folder_name)); } // If all the icons are from same package (e.g., main icon, shortcut, shortcut) // Then, suggest the package's title as the folder name - distinctItemInfos = workspaceItemInfos.stream() - .filter(distinctByKey(p -> p.getTargetComponent() != null - ? p.getTargetComponent().getPackageName() : "")) - .collect(Collectors.toList()); + Set packageNames = workspaceItemInfos.stream() + .map(WorkspaceItemInfo::getTargetComponent) + .filter(Objects::nonNull) + .map(ComponentName::getPackageName) + .collect(Collectors.toSet()); - if (distinctItemInfos.size() == 1) { - Optional info = getAppInfoByPackageName( - distinctItemInfos.get(0).getTargetComponent().getPackageName()); + if (packageNames.size() == 1) { + Optional info = getAppInfoByPackageName(packageNames.iterator().next()); // Place it as first viable suggestion and shift everything else info.ifPresent(i -> setAsFirstSuggestion(nameInfos, i.title.toString())); } @@ -135,6 +130,7 @@ public class FolderNameProvider implements ResourceBasedOverride { return Optional.empty(); } return mAppInfos.stream() + .filter(info -> info.componentName != null) .filter(info -> info.componentName.getPackageName().equals(packageName)) .findAny(); } @@ -174,12 +170,6 @@ public class FolderNameProvider implements ResourceBasedOverride { label.toString())); } - // This method can be moved to some Utility class location. - private static Predicate distinctByKey(Function keyExtractor) { - Map map = new ConcurrentHashMap<>(); - return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; - } - private class FolderNameWorker extends BaseModelUpdateTask { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) {