Remove the deleted userhanle in cache to stop crashing.
Because the user handles are not up-to-date, we need to update it when
necessary.
Bug: 30919785
Test: This branch doesn't support robo test, testcases will be added in
master branch when merged down(ag/1419729)
Change-Id: Ia095c3946c49db239e0b1b2bcc8588b02158c036
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
index a50b366..458672a 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
@@ -28,6 +28,8 @@
import android.content.res.TypedArray;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.UserHandle;
+import android.os.UserManager;
import android.provider.Settings;
import android.support.v4.widget.DrawerLayout;
import android.util.ArraySet;
@@ -73,6 +75,7 @@
private FrameLayout mContentHeaderContainer;
private DrawerLayout mDrawerLayout;
private boolean mShowingMenu;
+ private UserManager mUserManager;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -110,6 +113,8 @@
onTileClicked(mDrawerAdapter.getTile(position));
};
});
+
+ mUserManager = UserManager.get(this);
if (DEBUG_TIMING) Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime)
+ " ms");
}
@@ -257,6 +262,7 @@
return true;
}
try {
+ updateUserHandlesIfNeeded(tile);
int numUserHandles = tile.userHandle.size();
if (numUserHandles > 1) {
ProfileSelectDialog.show(getFragmentManager(), tile);
@@ -278,6 +284,19 @@
return true;
}
+ private void updateUserHandlesIfNeeded(Tile tile) {
+ List<UserHandle> userHandles = tile.userHandle;
+
+ for (int i = userHandles.size()-1; i >= 0; i--) {
+ if (mUserManager.getUserInfo(userHandles.get(i).getIdentifier()) == null) {
+ if (DEBUG_TIMING) {
+ Log.d(TAG, "Delete the user: " + userHandles.get(i).getIdentifier());
+ }
+ userHandles.remove(i);
+ }
+ }
+ }
+
protected void onTileClicked(Tile tile) {
if (openTile(tile)) {
finish();