From dfc6ce5d9523eaeb6a409814a8666bf7a6153164 Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Wed, 24 Aug 2016 09:48:54 -0700 Subject: [PATCH] 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 --- .../drawer/SettingsDrawerActivity.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java index a50b366c26acd..458672a41b77e 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.pm.PackageManager; 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 @@ public class SettingsDrawerActivity extends Activity { private FrameLayout mContentHeaderContainer; private DrawerLayout mDrawerLayout; private boolean mShowingMenu; + private UserManager mUserManager; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -110,6 +113,8 @@ public class SettingsDrawerActivity extends Activity { onTileClicked(mDrawerAdapter.getTile(position)); }; }); + + mUserManager = UserManager.get(this); if (DEBUG_TIMING) Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime) + " ms"); } @@ -257,6 +262,7 @@ public class SettingsDrawerActivity extends Activity { return true; } try { + updateUserHandlesIfNeeded(tile); int numUserHandles = tile.userHandle.size(); if (numUserHandles > 1) { ProfileSelectDialog.show(getFragmentManager(), tile); @@ -278,6 +284,19 @@ public class SettingsDrawerActivity extends Activity { return true; } + private void updateUserHandlesIfNeeded(Tile tile) { + List 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();