Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dfc6ce5d authored by jackqdyulei's avatar jackqdyulei
Browse files

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
parent 735b9eca
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -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<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();