OSDN Git Service

Fix Night display QSTile for secondary users
authorJustin Klaassen <justinklaassen@google.com>
Sun, 31 Jul 2016 17:25:36 +0000 (10:25 -0700)
committerJustin Klaassen <justinklaassen@google.com>
Mon, 1 Aug 2016 20:24:49 +0000 (13:24 -0700)
Bug: 30459698
Change-Id: I8d56caabf6401239ab9e05ebbe54ecc64a1ab695

packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java

index 2d1f753..9415b27 100644 (file)
@@ -16,6 +16,7 @@
 
 package com.android.systemui.qs.tiles;
 
+import android.app.ActivityManager;
 import android.content.Intent;
 import android.provider.Settings;
 import android.widget.Switch;
@@ -29,11 +30,12 @@ import com.android.systemui.qs.QSTile;
 public class NightDisplayTile extends QSTile<QSTile.BooleanState>
         implements NightDisplayController.Callback {
 
-    private final NightDisplayController mController;
+    private NightDisplayController mController;
+    private boolean mIsListening;
 
     public NightDisplayTile(Host host) {
         super(host);
-        mController = new NightDisplayController(mContext);
+        mController = new NightDisplayController(mContext, ActivityManager.getCurrentUser());
     }
 
     @Override
@@ -54,6 +56,22 @@ public class NightDisplayTile extends QSTile<QSTile.BooleanState>
     }
 
     @Override
+    protected void handleUserSwitch(int newUserId) {
+        // Stop listening to the old controller.
+        if (mIsListening) {
+            mController.setListener(null);
+        }
+
+        // Make a new controller for the new user.
+        mController = new NightDisplayController(mContext, newUserId);
+        if (mIsListening) {
+            mController.setListener(this);
+        }
+
+        super.handleUserSwitch(newUserId);
+    }
+
+    @Override
     protected void handleUpdateState(BooleanState state, Object arg) {
         final boolean isActivated = mController.isActivated();
         state.value = isActivated;
@@ -79,6 +97,7 @@ public class NightDisplayTile extends QSTile<QSTile.BooleanState>
 
     @Override
     protected void setListening(boolean listening) {
+        mIsListening = listening;
         if (listening) {
             mController.setListener(this);
             refreshState();
index 405ccd6..10facea 100644 (file)
@@ -334,6 +334,9 @@ public class QSTileHost implements QSTile.Host, Tunable {
                     || ((CustomTile) tile).getUser() == currentUser)) {
                 if (DEBUG) Log.d(TAG, "Adding " + tile);
                 tile.removeCallbacks();
+                if (!(tile instanceof CustomTile) && mCurrentUser != currentUser) {
+                    tile.userSwitch(currentUser);
+                }
                 newTiles.put(tileSpec, tile);
             } else {
                 if (DEBUG) Log.d(TAG, "Creating tile: " + tileSpec);