diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java index 0709992c07ac9..db686a83f5e58 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java @@ -58,6 +58,7 @@ public class CustomTile extends QSTile { private final IBinder mToken = new Binder(); private final IQSTileService mService; private final TileServiceManager mServiceManager; + private final int mUser; private boolean mListening; private boolean mBound; @@ -71,6 +72,7 @@ public class CustomTile extends QSTile { mServiceManager = host.getTileServices().getTileWrapper(this); mService = mServiceManager.getTileService(); mTile = new Tile(mComponent); + mUser = ActivityManager.getCurrentUser(); try { PackageManager pm = mContext.getPackageManager(); ServiceInfo info = pm.getServiceInfo(mComponent, 0); @@ -86,6 +88,10 @@ public class CustomTile extends QSTile { } } + public int getUser() { + return mUser; + } + public ComponentName getComponent() { return mComponent; } diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java index c4436f4888871..2aad16108f505 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java @@ -85,6 +85,7 @@ public class TileLifecycleManager extends BroadcastReceiver implements mHandler = handler; mIntent = intent; mUser = user; + if (DEBUG) Log.d(TAG, "Creating " + mIntent + " " + mUser); } public ComponentName getComponent() { @@ -116,13 +117,13 @@ public class TileLifecycleManager extends BroadcastReceiver implements if (!checkComponentState()) { return; } - if (DEBUG) Log.d(TAG, "Binding service " + mIntent); + if (DEBUG) Log.d(TAG, "Binding service " + mIntent + " " + mUser); mBindTryCount++; mContext.bindServiceAsUser(mIntent, this, Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE_WHILE_AWAKE, mUser); } else { - if (DEBUG) Log.d(TAG, "Unbinding service " + mIntent); + if (DEBUG) Log.d(TAG, "Unbinding service " + mIntent + " " + mUser); // Give it another chance next time it needs to be bound, out of kindness. mBindTryCount = 0; mWrapper = null; @@ -350,7 +351,7 @@ public class TileLifecycleManager extends BroadcastReceiver implements @Override public void onClick(IBinder iBinder) { - if (DEBUG) Log.d(TAG, "onClick " + iBinder); + if (DEBUG) Log.d(TAG, "onClick " + iBinder + " " + mUser); if (mWrapper == null || !mWrapper.onClick(iBinder)) { mClickBinder = iBinder; queueMessage(MSG_ON_CLICK); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java index f894a22d4acbc..5dcd393d2c06b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java @@ -114,6 +114,7 @@ public final class QSTileHost implements QSTile.Host, Tunable { private final ManagedProfileController mProfileController; private final NextAlarmController mNextAlarmController; private View mHeader; + private int mCurrentUser; public QSTileHost(Context context, PhoneStatusBar statusBar, BluetoothController bluetooth, LocationController location, @@ -320,7 +321,8 @@ public final class QSTileHost implements QSTile.Host, Tunable { } if (DEBUG) Log.d(TAG, "Recreating tiles"); final List tileSpecs = loadTileSpecs(mContext, newValue); - if (tileSpecs.equals(mTileSpecs)) return; + int currentUser = ActivityManager.getCurrentUser(); + if (tileSpecs.equals(mTileSpecs) && currentUser == mCurrentUser) return; for (Map.Entry> tile : mTiles.entrySet()) { if (!tileSpecs.contains(tile.getKey())) { if (DEBUG) Log.d(TAG, "Destroying tile: " + tile.getKey()); @@ -329,15 +331,16 @@ public final class QSTileHost implements QSTile.Host, Tunable { } final LinkedHashMap> newTiles = new LinkedHashMap<>(); for (String tileSpec : tileSpecs) { - if (mTiles.containsKey(tileSpec)) { - QSTile tile = mTiles.get(tileSpec); + QSTile tile = mTiles.get(tileSpec); + if (tile != null && (!(tile instanceof CustomTile) + || ((CustomTile) tile).getUser() == currentUser)) { if (DEBUG) Log.d(TAG, "Adding " + tile); tile.removeCallbacks(); newTiles.put(tileSpec, tile); } else { if (DEBUG) Log.d(TAG, "Creating tile: " + tileSpec); try { - QSTile tile = createTile(tileSpec); + tile = createTile(tileSpec); if (tile != null && tile.isAvailable()) { tile.setTileSpec(tileSpec); newTiles.put(tileSpec, tile); @@ -347,6 +350,7 @@ public final class QSTileHost implements QSTile.Host, Tunable { } } } + mCurrentUser = currentUser; mTileSpecs.clear(); mTileSpecs.addAll(tileSpecs); mTiles.clear();