From d581430ab8070baff5e41fb649af349d1953e18a Mon Sep 17 00:00:00 2001 From: Beverly Date: Wed, 17 Mar 2021 12:56:53 -0400 Subject: [PATCH] Don't show an app icon for uninitalized user System apps running can post toasts before the app packages have been initialized by ApplicationsState. If this happens, don't check for the appEntry, instead automatically hide its icon from the toast. Test: manual Fixes: 182605816 Change-Id: I7e764341d049095da19f391ba9c944871584b921 --- .../settingslib/applications/ApplicationsState.java | 7 +++++++ .../src/com/android/systemui/toast/SystemUIToast.java | 9 +++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java index 2528ac1767f83..f180776bbe935 100644 --- a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java +++ b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java @@ -1496,6 +1496,13 @@ public class ApplicationsState { } } + /** + * Whether the packages for the user have been initialized. + */ + public boolean isUserAdded(int userId) { + return mEntriesMap.contains(userId); + } + public interface Callbacks { void onRunningStateChanged(boolean running); diff --git a/packages/SystemUI/src/com/android/systemui/toast/SystemUIToast.java b/packages/SystemUI/src/com/android/systemui/toast/SystemUIToast.java index fd19528e6d55e..3892f310e6697 100644 --- a/packages/SystemUI/src/com/android/systemui/toast/SystemUIToast.java +++ b/packages/SystemUI/src/com/android/systemui/toast/SystemUIToast.java @@ -26,6 +26,7 @@ import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.UserHandle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; @@ -43,6 +44,7 @@ import com.android.systemui.plugins.ToastPlugin; * directly. Instead, use {@link ToastFactory#createToast}. */ public class SystemUIToast implements ToastPlugin.Toast { + static final String TAG = "SystemUIToast"; final Context mContext; final CharSequence mText; final ToastPlugin.Toast mPluginToast; @@ -225,8 +227,12 @@ public class SystemUIToast implements ToastPlugin.Toast { int userId) { final ApplicationsState appState = ApplicationsState.getInstance((Application) context.getApplicationContext()); + if (!appState.isUserAdded(userId)) { + Log.d(TAG, "user hasn't been fully initialized, not showing an app icon for " + + "packageName=" + packageName); + return null; + } final AppEntry appEntry = appState.getEntry(packageName, userId); - if (!ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(appEntry)) { return null; } @@ -237,6 +243,5 @@ public class SystemUIToast implements ToastPlugin.Toast { Bitmap iconBmp = iconFactory.createBadgedIconBitmap( appInfo.loadUnbadgedIcon(context.getPackageManager()), user, true).icon; return new BitmapDrawable(context.getResources(), iconBmp); - } }