Merge "Don't cache QS custom tiles across users" into nyc-dev

This commit is contained in:
Jason Monk
2016-03-08 20:34:05 +00:00
committed by Android (Google) Code Review
3 changed files with 18 additions and 7 deletions

View File

@@ -58,6 +58,7 @@ public class CustomTile extends QSTile<QSTile.State> {
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<QSTile.State> {
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<QSTile.State> {
}
}
public int getUser() {
return mUser;
}
public ComponentName getComponent() {
return mComponent;
}

View File

@@ -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);

View File

@@ -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<String> tileSpecs = loadTileSpecs(mContext, newValue);
if (tileSpecs.equals(mTileSpecs)) return;
int currentUser = ActivityManager.getCurrentUser();
if (tileSpecs.equals(mTileSpecs) && currentUser == mCurrentUser) return;
for (Map.Entry<String, QSTile<?>> 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<String, QSTile<?>> 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();