diff --git a/src/com/google/android/apps/nexuslauncher/CustomAppPredictor.java b/src/com/google/android/apps/nexuslauncher/CustomAppPredictor.java index a49d0f4ffd..6961243866 100644 --- a/src/com/google/android/apps/nexuslauncher/CustomAppPredictor.java +++ b/src/com/google/android/apps/nexuslauncher/CustomAppPredictor.java @@ -81,7 +81,7 @@ public CustomAppPredictor(Context context) { List> getPredictions() { List> list = new ArrayList<>(); if (isPredictorEnabled()) { - clearNonExistentPackages(); + clearNonExistingComponents(); List predictionList = new ArrayList<>(getStringSetCopy()); @@ -119,7 +119,7 @@ public void logAppLaunch(View v, Intent intent, UserHandle user) { if (isPredictorEnabled() && recursiveIsDrawer(v)) { ComponentName componentInfo = intent.getComponent(); if (componentInfo != null && mAppFilter.shouldShowApp(componentInfo, user)) { - clearNonExistentPackages(); + clearNonExistingComponents(); Set predictionSet = getStringSetCopy(); SharedPreferences.Editor edit = mPrefs.edit(); @@ -201,17 +201,26 @@ private ComponentKeyMapper getComponentFromString(String str) { return new ComponentKeyMapper<>(new ComponentKey(mContext, str)); } - private void clearNonExistentPackages() { + private void clearNonExistingComponents() { Set originalSet = mPrefs.getStringSet(PREDICTION_SET, EMPTY_SET); Set predictionSet = new HashSet<>(originalSet); SharedPreferences.Editor edit = mPrefs.edit(); for (String prediction : originalSet) { + ComponentName cn = new ComponentKey(mContext, prediction).componentName; try { - mPackageManager.getPackageInfo(new ComponentKey(mContext, prediction).componentName.getPackageName(), 0); + mPackageManager.getActivityInfo(cn, 0); } catch (PackageManager.NameNotFoundException e) { predictionSet.remove(prediction); edit.remove(PREDICTION_PREFIX + prediction); + Intent intent = mPackageManager.getLaunchIntentForPackage(cn.getPackageName()); + if (intent != null) { + ComponentName componentInfo = intent.getComponent(); + if (componentInfo != null) { + ComponentKey key = new ComponentKey(componentInfo, Process.myUserHandle()); + predictionSet.add(key.toString()); + } + } } }