From 6b1c73f50a99a215c923aa0caca8e63c593a4eb2 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 18 Jun 2015 11:38:42 -0700 Subject: Moving predicted apps callbacks to use ComponentKey. Bug: 21270185 Change-Id: If2d9dd77235e7a96de96a1a5441a589ef8a72a7f --- src/com/android/launcher3/Launcher.java | 5 ++-- src/com/android/launcher3/LauncherCallbacks.java | 3 +- src/com/android/launcher3/LauncherExtension.java | 3 +- .../launcher3/allapps/AllAppsContainerView.java | 2 +- .../launcher3/allapps/AlphabeticalAppsList.java | 32 +++++++++++++--------- src/com/android/launcher3/util/ComponentKey.java | 32 +++++++++++++++++++++- 6 files changed, 57 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 9989abb6d..c4187580e 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -93,17 +93,16 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; - import com.android.launcher3.DropTarget.DragObject; import com.android.launcher3.PagedView.PageSwitchListener; import com.android.launcher3.allapps.AllAppsContainerView; -import com.android.launcher3.allapps.AllAppsSearchBarController; import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.compat.LauncherActivityInfoCompat; import com.android.launcher3.compat.LauncherAppsCompat; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.compat.UserManagerCompat; import com.android.launcher3.model.WidgetsModel; +import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.LongArrayMap; import com.android.launcher3.util.Thunk; import com.android.launcher3.widget.PendingAddWidgetInfo; @@ -3436,7 +3435,7 @@ public class Launcher extends Activity */ private void tryAndUpdatePredictedApps() { if (mLauncherCallbacks != null) { - List apps = mLauncherCallbacks.getPredictedApps(); + List apps = mLauncherCallbacks.getPredictedApps(); if (!apps.isEmpty()) { mAppsView.setPredictedApps(apps); } diff --git a/src/com/android/launcher3/LauncherCallbacks.java b/src/com/android/launcher3/LauncherCallbacks.java index e73275400..56db7747c 100644 --- a/src/com/android/launcher3/LauncherCallbacks.java +++ b/src/com/android/launcher3/LauncherCallbacks.java @@ -8,6 +8,7 @@ import android.view.Menu; import android.view.View; import android.view.ViewGroup; import com.android.launcher3.allapps.AllAppsSearchBarController; +import com.android.launcher3.util.ComponentKey; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -92,7 +93,7 @@ public interface LauncherCallbacks { public boolean overrideWallpaperDimensions(); public boolean isLauncherPreinstalled(); public AllAppsSearchBarController getAllAppsSearchBarController(); - public List getPredictedApps(); + public List getPredictedApps(); /** * Returning true will immediately result in a call to {@link #setLauncherOverlayView(ViewGroup, diff --git a/src/com/android/launcher3/LauncherExtension.java b/src/com/android/launcher3/LauncherExtension.java index fafb070ec..857ec57a7 100644 --- a/src/com/android/launcher3/LauncherExtension.java +++ b/src/com/android/launcher3/LauncherExtension.java @@ -12,6 +12,7 @@ import android.view.Menu; import android.view.View; import android.view.ViewGroup; import com.android.launcher3.allapps.AllAppsSearchBarController; +import com.android.launcher3.util.ComponentKey; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -253,7 +254,7 @@ public class LauncherExtension extends Launcher { } @Override - public List getPredictedApps() { + public List getPredictedApps() { return new ArrayList<>(); } diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 0fbe8e962..d49a06b3a 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -207,7 +207,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc /** * Sets the current set of predicted apps. */ - public void setPredictedApps(List apps) { + public void setPredictedApps(List apps) { mApps.setPredictedApps(apps); } diff --git a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java index b7b6ed7fc..aa73c74cf 100644 --- a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java +++ b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java @@ -15,14 +15,14 @@ */ package com.android.launcher3.allapps; -import android.content.ComponentName; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; - import com.android.launcher3.AppInfo; import com.android.launcher3.Launcher; +import com.android.launcher3.LauncherAppState; import com.android.launcher3.compat.AlphabeticIndexCompat; +import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.model.AppNameComparator; import com.android.launcher3.util.ComponentKey; @@ -159,7 +159,7 @@ public class AlphabeticalAppsList { // The set of sections that we allow fast-scrolling to (includes non-merged sections) private List mFastScrollerSections = new ArrayList<>(); // The set of predicted app component names - private List mPredictedAppComponents = new ArrayList<>(); + private List mPredictedAppComponents = new ArrayList<>(); // The set of predicted apps resolved from the component names and the current set of apps private List mPredictedApps = new ArrayList<>(); // The of ordered component names as a result of a search query @@ -268,7 +268,7 @@ public class AlphabeticalAppsList { * Sets the current set of predicted apps. Since this can be called before we get the full set * of applications, we should merge the results only in onAppsUpdated() which is idempotent. */ - public void setPredictedApps(List apps) { + public void setPredictedApps(List apps) { mPredictedAppComponents.clear(); mPredictedAppComponents.addAll(apps); onAppsUpdated(); @@ -386,21 +386,27 @@ public class AlphabeticalAppsList { if (DEBUG_PREDICTIONS) { if (mPredictedAppComponents.isEmpty() && !mApps.isEmpty()) { - mPredictedAppComponents.add(mApps.get(0).componentName); - mPredictedAppComponents.add(mApps.get(0).componentName); - mPredictedAppComponents.add(mApps.get(0).componentName); - mPredictedAppComponents.add(mApps.get(0).componentName); + mPredictedAppComponents.add(new ComponentKey(mApps.get(0).componentName, + UserHandleCompat.myUserHandle())); + mPredictedAppComponents.add(new ComponentKey(mApps.get(0).componentName, + UserHandleCompat.myUserHandle())); + mPredictedAppComponents.add(new ComponentKey(mApps.get(0).componentName, + UserHandleCompat.myUserHandle())); + mPredictedAppComponents.add(new ComponentKey(mApps.get(0).componentName, + UserHandleCompat.myUserHandle())); } } // Process the predicted app components mPredictedApps.clear(); if (mPredictedAppComponents != null && !mPredictedAppComponents.isEmpty() && !hasFilter()) { - for (ComponentName cn : mPredictedAppComponents) { - for (AppInfo info : mApps) { - if (cn.equals(info.componentName)) { - mPredictedApps.add(info); - break; + for (ComponentKey ck : mPredictedAppComponents) { + AppInfo info = mComponentToAppMap.get(ck); + if (info != null) { + mPredictedApps.add(info); + } else { + if (LauncherAppState.isDogfoodBuild()) { + Log.e(TAG, "Predicted app not found: " + ck.flattenToString(mLauncher)); } } // Stop at the number of predicted apps diff --git a/src/com/android/launcher3/util/ComponentKey.java b/src/com/android/launcher3/util/ComponentKey.java index 0f17f009e..6a7df4318 100644 --- a/src/com/android/launcher3/util/ComponentKey.java +++ b/src/com/android/launcher3/util/ComponentKey.java @@ -17,8 +17,9 @@ package com.android.launcher3.util; */ import android.content.ComponentName; - +import android.content.Context; import com.android.launcher3.compat.UserHandleCompat; +import com.android.launcher3.compat.UserManagerCompat; import java.util.Arrays; @@ -38,6 +39,35 @@ public class ComponentKey { } + /** + * Creates a new component key from an encoded component key string in the form of + * [flattenedComponentString#userId]. If the userId is not present, then it defaults + * to the current user. + */ + public ComponentKey(Context context, String componentKeyStr) { + int userDelimiterIndex = componentKeyStr.indexOf("#"); + if (userDelimiterIndex != -1) { + String componentStr = componentKeyStr.substring(0, userDelimiterIndex); + Long componentUser = Long.valueOf(componentKeyStr.substring(userDelimiterIndex + 1)); + componentName = ComponentName.unflattenFromString(componentStr); + user = UserManagerCompat.getInstance(context) + .getUserForSerialNumber(componentUser.longValue()); + } else { + // No user provided, default to the current user + componentName = ComponentName.unflattenFromString(componentKeyStr); + user = UserHandleCompat.myUserHandle(); + } + mHashCode = Arrays.hashCode(new Object[] {componentName, user}); + } + + /** + * Encodes a component key as a string of the form [flattenedComponentString#userId]. + */ + public String flattenToString(Context context) { + return componentName.flattenToString() + "#" + + UserManagerCompat.getInstance(context).getSerialNumberForUser(user); + } + @Override public int hashCode() { return mHashCode; -- cgit v1.2.3