Loading packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +2 −1 Original line number Diff line number Diff line Loading @@ -40,13 +40,14 @@ public class SystemUIApplication extends Application { * The classes of the stuff to start. */ private final Class<?>[] SERVICES = new Class[] { com.android.systemui.tuner.TunerService.class, com.android.systemui.keyguard.KeyguardViewMediator.class, com.android.systemui.recents.Recents.class, com.android.systemui.volume.VolumeUI.class, com.android.systemui.statusbar.SystemBars.class, com.android.systemui.usb.StorageNotification.class, com.android.systemui.power.PowerUI.class, com.android.systemui.media.RingtonePlayer.class com.android.systemui.media.RingtonePlayer.class, }; /** Loading packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +20 −23 Original line number Diff line number Diff line Loading @@ -18,14 +18,12 @@ package com.android.systemui.statusbar; import android.content.Context; import android.content.res.ColorStateList; import android.database.ContentObserver; import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.Animatable; import android.graphics.drawable.Drawable; import android.os.Handler; import android.provider.Settings; import android.telephony.SubscriptionInfo; import android.util.ArraySet; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; Loading @@ -40,6 +38,8 @@ import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkControllerImpl; import com.android.systemui.statusbar.policy.SecurityController; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; import java.util.ArrayList; import java.util.List; Loading @@ -48,7 +48,7 @@ import java.util.List; public class SignalClusterView extends LinearLayout implements NetworkControllerImpl.SignalCallback, SecurityController.SecurityControllerCallback { SecurityController.SecurityControllerCallback, Tunable { static final String TAG = "SignalClusterView"; static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); Loading Loading @@ -105,14 +105,22 @@ public class SignalClusterView public SignalClusterView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); readBlacklist(); } private void readBlacklist() { mBlockAirplane = StatusBarIconController.isBlocked(getContext(), SLOT_AIRPLANE); mBlockMobile = StatusBarIconController.isBlocked(getContext(), SLOT_MOBILE); mBlockWifi = StatusBarIconController.isBlocked(getContext(), SLOT_WIFI); mBlockEthernet = StatusBarIconController.isBlocked(getContext(), SLOT_ETHERNET); @Override public void onTuningChanged(String key, String newValue) { if (!StatusBarIconController.ICON_BLACKLIST.equals(key)) { return; } ArraySet<String> blockList = StatusBarIconController.getIconBlacklist(newValue); mBlockAirplane = blockList.contains(SLOT_AIRPLANE); mBlockMobile = blockList.contains(SLOT_MOBILE); mBlockWifi = blockList.contains(SLOT_WIFI); mBlockEthernet = blockList.contains(SLOT_ETHERNET); // Re-register to get new callbacks. mNC.removeSignalCallback(SignalClusterView.this); mNC.addSignalCallback(SignalClusterView.this); } public void setNetworkController(NetworkControllerImpl nc) { Loading Loading @@ -160,12 +168,10 @@ public class SignalClusterView for (PhoneState state : mPhoneStates) { mMobileSignalGroup.addView(state.mMobileGroup); } TunerService.get(mContext).addTunable(this, StatusBarIconController.ICON_BLACKLIST); apply(); applyIconTint(); getContext().getContentResolver().registerContentObserver( Settings.Secure.getUriFor(StatusBarIconController.ICON_BLACKLIST), false, mBlacklistObserver); } @Override Loading @@ -178,7 +184,7 @@ public class SignalClusterView mAirplane = null; mMobileSignalGroup.removeAllViews(); mMobileSignalGroup = null; getContext().getContentResolver().unregisterContentObserver(mBlacklistObserver); TunerService.get(mContext).removeTunable(this); super.onDetachedFromWindow(); } Loading Loading @@ -528,14 +534,5 @@ public class SignalClusterView setTint(mMobileType, tint); } } private final ContentObserver mBlacklistObserver = new ContentObserver(new Handler()) { public void onChange(boolean selfChange) { readBlacklist(); // Re-register to get new callbacks. mNC.removeSignalCallback(SignalClusterView.this); mNC.addSignalCallback(SignalClusterView.this); }; }; } packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +6 −3 Original line number Diff line number Diff line Loading @@ -3166,9 +3166,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, (SignalClusterView) mKeyguardStatusBar.findViewById(R.id.signal_cluster); final SignalClusterView signalClusterQs = (SignalClusterView) mHeader.findViewById(R.id.signal_cluster); mNetworkController.addSignalCallback(signalCluster); mNetworkController.addSignalCallback(signalClusterKeyguard); mNetworkController.addSignalCallback(signalClusterQs); mNetworkController.removeSignalCallback(signalCluster); mNetworkController.removeSignalCallback(signalClusterKeyguard); mNetworkController.removeSignalCallback(signalClusterQs); if (mQSPanel != null && mQSPanel.getHost() != null) { mQSPanel.getHost().destroy(); } } private boolean mDemoModeAllowed; Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java +19 −55 Original line number Diff line number Diff line Loading @@ -19,13 +19,9 @@ package com.android.systemui.statusbar.phone; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.database.ContentObserver; import android.net.Uri; import android.os.Process; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.provider.Settings.Secure; import android.os.Process; import android.util.Log; import com.android.systemui.R; Loading @@ -35,25 +31,26 @@ import com.android.systemui.qs.tiles.BluetoothTile; import com.android.systemui.qs.tiles.CastTile; import com.android.systemui.qs.tiles.CellularTile; import com.android.systemui.qs.tiles.ColorInversionTile; import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.qs.tiles.FlashlightTile; import com.android.systemui.qs.tiles.HotspotTile; import com.android.systemui.qs.tiles.IntentTile; import com.android.systemui.qs.tiles.LocationTile; import com.android.systemui.qs.tiles.RotationLockTile; import com.android.systemui.qs.tiles.WifiTile; import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.settings.CurrentUserTracker; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.FlashlightController; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.KeyguardMonitor; import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.RotationLockController; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.SecurityController; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; import java.util.ArrayList; import java.util.Arrays; Loading @@ -63,7 +60,7 @@ import java.util.List; import java.util.Map; /** Platform implementation of the quick settings tile host **/ public class QSTileHost implements QSTile.Host { public class QSTileHost implements QSTile.Host, Tunable { private static final String TAG = "QSTileHost"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); Loading @@ -72,8 +69,7 @@ public class QSTileHost implements QSTile.Host { private final Context mContext; private final PhoneStatusBar mStatusBar; private final LinkedHashMap<String, QSTile<?>> mTiles = new LinkedHashMap<>(); private final ArrayList<String> mTileSpecs = new ArrayList<>(); private final Observer mObserver = new Observer(); protected final ArrayList<String> mTileSpecs = new ArrayList<>(); private final BluetoothController mBluetooth; private final LocationController mLocation; private final RotationLockController mRotation; Loading @@ -82,7 +78,6 @@ public class QSTileHost implements QSTile.Host { private final HotspotController mHotspot; private final CastController mCast; private final Looper mLooper; protected final CurrentUserTracker mUserTracker; private final FlashlightController mFlashlight; private final UserSwitcherController mUserSwitcherController; private final KeyguardMonitor mKeyguard; Loading Loading @@ -116,22 +111,11 @@ public class QSTileHost implements QSTile.Host { ht.start(); mLooper = ht.getLooper(); mUserTracker = new CurrentUserTracker(mContext) { @Override public void onUserSwitched(int newUserId) { recreateTiles(); for (QSTile<?> tile : mTiles.values()) { tile.userSwitch(newUserId); } mSecurity.onUserSwitched(newUserId); mNetwork.onUserSwitched(newUserId); mObserver.register(); TunerService.get(mContext).addTunable(this, TILES_SETTING); } }; recreateTiles(); mUserTracker.startTracking(); mObserver.register(); public void destroy() { TunerService.get(mContext).removeTunable(this); } @Override Loading Loading @@ -222,9 +206,13 @@ public class QSTileHost implements QSTile.Host { return mSecurity; } private void recreateTiles() { @Override public void onTuningChanged(String key, String newValue) { if (!TILES_SETTING.equals(key)) { return; } if (DEBUG) Log.d(TAG, "Recreating tiles"); final List<String> tileSpecs = loadTileSpecs(); final List<String> tileSpecs = loadTileSpecs(newValue); if (tileSpecs.equals(mTileSpecs)) return; for (Map.Entry<String, QSTile<?>> tile : mTiles.entrySet()) { if (!tileSpecs.contains(tile.getKey())) { Loading Loading @@ -270,11 +258,9 @@ public class QSTileHost implements QSTile.Host { else throw new IllegalArgumentException("Bad tile spec: " + tileSpec); } protected List<String> loadTileSpecs() { protected List<String> loadTileSpecs(String tileList) { final Resources res = mContext.getResources(); final String defaultTileList = res.getString(R.string.quick_settings_tiles_default); String tileList = Secure.getStringForUser(mContext.getContentResolver(), TILES_SETTING, mUserTracker.getCurrentUserId()); if (tileList == null) { tileList = res.getString(R.string.quick_settings_tiles); if (DEBUG) Log.d(TAG, "Loaded tile specs from config: " + tileList); Loading @@ -297,26 +283,4 @@ public class QSTileHost implements QSTile.Host { } return tiles; } private class Observer extends ContentObserver { private boolean mRegistered; public Observer() { super(new Handler(Looper.getMainLooper())); } public void register() { if (mRegistered) { mContext.getContentResolver().unregisterContentObserver(this); } mContext.getContentResolver().registerContentObserver(Secure.getUriFor(TILES_SETTING), false, this, mUserTracker.getCurrentUserId()); mRegistered = true; } @Override public void onChange(boolean selfChange, Uri uri) { recreateTiles(); } } } packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +28 −35 Original line number Diff line number Diff line Loading @@ -20,12 +20,10 @@ import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.content.Context; import android.content.res.ColorStateList; import android.database.ContentObserver; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.SystemClock; import android.provider.Settings; import android.text.TextUtils; import android.util.ArraySet; import android.view.View; Loading @@ -44,6 +42,8 @@ import com.android.systemui.R; import com.android.systemui.statusbar.NotificationData; import com.android.systemui.statusbar.SignalClusterView; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; import java.io.PrintWriter; import java.util.ArrayList; Loading @@ -53,7 +53,7 @@ import java.util.ArrayList; * limited to: notification icons, signal cluster, additional status icons, and clock in the status * bar. */ public class StatusBarIconController { public class StatusBarIconController implements Tunable { public static final long DEFAULT_TINT_ANIMATION_DURATION = 120; Loading Loading @@ -95,7 +95,7 @@ public class StatusBarIconController { private long mTransitionDeferringStartTime; private long mTransitionDeferringDuration; private final ArraySet<String> mIconBlacklist; private final ArraySet<String> mIconBlacklist = new ArraySet<>(); private final Runnable mTransitionDeferringDoneRunnable = new Runnable() { @Override Loading Loading @@ -126,14 +126,33 @@ public class StatusBarIconController { mDarkModeIconColorSingleTone = context.getColor(R.color.dark_mode_icon_color_single_tone); mLightModeIconColorSingleTone = context.getColor(R.color.light_mode_icon_color_single_tone); mHandler = new Handler(); mIconBlacklist = getIconBlacklist(context); updateResources(); context.getContentResolver().registerContentObserver( Settings.Secure.getUriFor(StatusBarIconController.ICON_BLACKLIST), false, mBlacklistObserver); TunerService.get(mContext).addTunable(this, ICON_BLACKLIST); } @Override public void onTuningChanged(String key, String newValue) { if (!ICON_BLACKLIST.equals(key)) { return; } mIconBlacklist.clear(); mIconBlacklist.addAll(getIconBlacklist(newValue)); ArrayList<StatusBarIconView> views = new ArrayList<StatusBarIconView>(); // Get all the current views. for (int i = 0; i < mStatusIcons.getChildCount(); i++) { views.add((StatusBarIconView) mStatusIcons.getChildAt(i)); } // Remove all the icons. for (int i = views.size() - 1; i >= 0; i--) { removeSystemIcon(views.get(i).getSlot(), i, i); } // Add them all back for (int i = 0; i < views.size(); i++) { addSystemIcon(views.get(i).getSlot(), i, i, views.get(i).getStatusBarIcon()); } }; public void updateResources() { mIconSize = mContext.getResources().getDimensionPixelSize( com.android.internal.R.dimen.status_bar_icon_size); Loading Loading @@ -429,29 +448,7 @@ public class StatusBarIconController { mTransitionPending = false; } private final ContentObserver mBlacklistObserver = new ContentObserver(new Handler()) { public void onChange(boolean selfChange) { mIconBlacklist.clear(); mIconBlacklist.addAll(getIconBlacklist(mContext)); ArrayList<StatusBarIconView> views = new ArrayList<StatusBarIconView>(); // Get all the current views. for (int i = 0; i < mStatusIcons.getChildCount(); i++) { views.add((StatusBarIconView) mStatusIcons.getChildAt(i)); } // Remove all the icons. for (int i = views.size() - 1; i >= 0; i--) { removeSystemIcon(views.get(i).getSlot(), i, i); } // Add them all back for (int i = 0; i < views.size(); i++) { addSystemIcon(views.get(i).getSlot(), i, i, views.get(i).getStatusBarIcon()); } } }; public static ArraySet<String> getIconBlacklist(Context context) { String blackListStr = Settings.Secure.getString(context.getContentResolver(), ICON_BLACKLIST); public static ArraySet<String> getIconBlacklist(String blackListStr) { ArraySet<String> ret = new ArraySet<String>(); if (blackListStr != null) { String[] blacklist = blackListStr.split(","); Loading @@ -463,8 +460,4 @@ public class StatusBarIconController { } return ret; } public static boolean isBlocked(Context context, String slot) { return getIconBlacklist(context).contains(slot); } } Loading
packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +2 −1 Original line number Diff line number Diff line Loading @@ -40,13 +40,14 @@ public class SystemUIApplication extends Application { * The classes of the stuff to start. */ private final Class<?>[] SERVICES = new Class[] { com.android.systemui.tuner.TunerService.class, com.android.systemui.keyguard.KeyguardViewMediator.class, com.android.systemui.recents.Recents.class, com.android.systemui.volume.VolumeUI.class, com.android.systemui.statusbar.SystemBars.class, com.android.systemui.usb.StorageNotification.class, com.android.systemui.power.PowerUI.class, com.android.systemui.media.RingtonePlayer.class com.android.systemui.media.RingtonePlayer.class, }; /** Loading
packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +20 −23 Original line number Diff line number Diff line Loading @@ -18,14 +18,12 @@ package com.android.systemui.statusbar; import android.content.Context; import android.content.res.ColorStateList; import android.database.ContentObserver; import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.Animatable; import android.graphics.drawable.Drawable; import android.os.Handler; import android.provider.Settings; import android.telephony.SubscriptionInfo; import android.util.ArraySet; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; Loading @@ -40,6 +38,8 @@ import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkControllerImpl; import com.android.systemui.statusbar.policy.SecurityController; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; import java.util.ArrayList; import java.util.List; Loading @@ -48,7 +48,7 @@ import java.util.List; public class SignalClusterView extends LinearLayout implements NetworkControllerImpl.SignalCallback, SecurityController.SecurityControllerCallback { SecurityController.SecurityControllerCallback, Tunable { static final String TAG = "SignalClusterView"; static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); Loading Loading @@ -105,14 +105,22 @@ public class SignalClusterView public SignalClusterView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); readBlacklist(); } private void readBlacklist() { mBlockAirplane = StatusBarIconController.isBlocked(getContext(), SLOT_AIRPLANE); mBlockMobile = StatusBarIconController.isBlocked(getContext(), SLOT_MOBILE); mBlockWifi = StatusBarIconController.isBlocked(getContext(), SLOT_WIFI); mBlockEthernet = StatusBarIconController.isBlocked(getContext(), SLOT_ETHERNET); @Override public void onTuningChanged(String key, String newValue) { if (!StatusBarIconController.ICON_BLACKLIST.equals(key)) { return; } ArraySet<String> blockList = StatusBarIconController.getIconBlacklist(newValue); mBlockAirplane = blockList.contains(SLOT_AIRPLANE); mBlockMobile = blockList.contains(SLOT_MOBILE); mBlockWifi = blockList.contains(SLOT_WIFI); mBlockEthernet = blockList.contains(SLOT_ETHERNET); // Re-register to get new callbacks. mNC.removeSignalCallback(SignalClusterView.this); mNC.addSignalCallback(SignalClusterView.this); } public void setNetworkController(NetworkControllerImpl nc) { Loading Loading @@ -160,12 +168,10 @@ public class SignalClusterView for (PhoneState state : mPhoneStates) { mMobileSignalGroup.addView(state.mMobileGroup); } TunerService.get(mContext).addTunable(this, StatusBarIconController.ICON_BLACKLIST); apply(); applyIconTint(); getContext().getContentResolver().registerContentObserver( Settings.Secure.getUriFor(StatusBarIconController.ICON_BLACKLIST), false, mBlacklistObserver); } @Override Loading @@ -178,7 +184,7 @@ public class SignalClusterView mAirplane = null; mMobileSignalGroup.removeAllViews(); mMobileSignalGroup = null; getContext().getContentResolver().unregisterContentObserver(mBlacklistObserver); TunerService.get(mContext).removeTunable(this); super.onDetachedFromWindow(); } Loading Loading @@ -528,14 +534,5 @@ public class SignalClusterView setTint(mMobileType, tint); } } private final ContentObserver mBlacklistObserver = new ContentObserver(new Handler()) { public void onChange(boolean selfChange) { readBlacklist(); // Re-register to get new callbacks. mNC.removeSignalCallback(SignalClusterView.this); mNC.addSignalCallback(SignalClusterView.this); }; }; }
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +6 −3 Original line number Diff line number Diff line Loading @@ -3166,9 +3166,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, (SignalClusterView) mKeyguardStatusBar.findViewById(R.id.signal_cluster); final SignalClusterView signalClusterQs = (SignalClusterView) mHeader.findViewById(R.id.signal_cluster); mNetworkController.addSignalCallback(signalCluster); mNetworkController.addSignalCallback(signalClusterKeyguard); mNetworkController.addSignalCallback(signalClusterQs); mNetworkController.removeSignalCallback(signalCluster); mNetworkController.removeSignalCallback(signalClusterKeyguard); mNetworkController.removeSignalCallback(signalClusterQs); if (mQSPanel != null && mQSPanel.getHost() != null) { mQSPanel.getHost().destroy(); } } private boolean mDemoModeAllowed; Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java +19 −55 Original line number Diff line number Diff line Loading @@ -19,13 +19,9 @@ package com.android.systemui.statusbar.phone; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.database.ContentObserver; import android.net.Uri; import android.os.Process; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.provider.Settings.Secure; import android.os.Process; import android.util.Log; import com.android.systemui.R; Loading @@ -35,25 +31,26 @@ import com.android.systemui.qs.tiles.BluetoothTile; import com.android.systemui.qs.tiles.CastTile; import com.android.systemui.qs.tiles.CellularTile; import com.android.systemui.qs.tiles.ColorInversionTile; import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.qs.tiles.FlashlightTile; import com.android.systemui.qs.tiles.HotspotTile; import com.android.systemui.qs.tiles.IntentTile; import com.android.systemui.qs.tiles.LocationTile; import com.android.systemui.qs.tiles.RotationLockTile; import com.android.systemui.qs.tiles.WifiTile; import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.settings.CurrentUserTracker; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.FlashlightController; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.KeyguardMonitor; import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.RotationLockController; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.SecurityController; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; import java.util.ArrayList; import java.util.Arrays; Loading @@ -63,7 +60,7 @@ import java.util.List; import java.util.Map; /** Platform implementation of the quick settings tile host **/ public class QSTileHost implements QSTile.Host { public class QSTileHost implements QSTile.Host, Tunable { private static final String TAG = "QSTileHost"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); Loading @@ -72,8 +69,7 @@ public class QSTileHost implements QSTile.Host { private final Context mContext; private final PhoneStatusBar mStatusBar; private final LinkedHashMap<String, QSTile<?>> mTiles = new LinkedHashMap<>(); private final ArrayList<String> mTileSpecs = new ArrayList<>(); private final Observer mObserver = new Observer(); protected final ArrayList<String> mTileSpecs = new ArrayList<>(); private final BluetoothController mBluetooth; private final LocationController mLocation; private final RotationLockController mRotation; Loading @@ -82,7 +78,6 @@ public class QSTileHost implements QSTile.Host { private final HotspotController mHotspot; private final CastController mCast; private final Looper mLooper; protected final CurrentUserTracker mUserTracker; private final FlashlightController mFlashlight; private final UserSwitcherController mUserSwitcherController; private final KeyguardMonitor mKeyguard; Loading Loading @@ -116,22 +111,11 @@ public class QSTileHost implements QSTile.Host { ht.start(); mLooper = ht.getLooper(); mUserTracker = new CurrentUserTracker(mContext) { @Override public void onUserSwitched(int newUserId) { recreateTiles(); for (QSTile<?> tile : mTiles.values()) { tile.userSwitch(newUserId); } mSecurity.onUserSwitched(newUserId); mNetwork.onUserSwitched(newUserId); mObserver.register(); TunerService.get(mContext).addTunable(this, TILES_SETTING); } }; recreateTiles(); mUserTracker.startTracking(); mObserver.register(); public void destroy() { TunerService.get(mContext).removeTunable(this); } @Override Loading Loading @@ -222,9 +206,13 @@ public class QSTileHost implements QSTile.Host { return mSecurity; } private void recreateTiles() { @Override public void onTuningChanged(String key, String newValue) { if (!TILES_SETTING.equals(key)) { return; } if (DEBUG) Log.d(TAG, "Recreating tiles"); final List<String> tileSpecs = loadTileSpecs(); final List<String> tileSpecs = loadTileSpecs(newValue); if (tileSpecs.equals(mTileSpecs)) return; for (Map.Entry<String, QSTile<?>> tile : mTiles.entrySet()) { if (!tileSpecs.contains(tile.getKey())) { Loading Loading @@ -270,11 +258,9 @@ public class QSTileHost implements QSTile.Host { else throw new IllegalArgumentException("Bad tile spec: " + tileSpec); } protected List<String> loadTileSpecs() { protected List<String> loadTileSpecs(String tileList) { final Resources res = mContext.getResources(); final String defaultTileList = res.getString(R.string.quick_settings_tiles_default); String tileList = Secure.getStringForUser(mContext.getContentResolver(), TILES_SETTING, mUserTracker.getCurrentUserId()); if (tileList == null) { tileList = res.getString(R.string.quick_settings_tiles); if (DEBUG) Log.d(TAG, "Loaded tile specs from config: " + tileList); Loading @@ -297,26 +283,4 @@ public class QSTileHost implements QSTile.Host { } return tiles; } private class Observer extends ContentObserver { private boolean mRegistered; public Observer() { super(new Handler(Looper.getMainLooper())); } public void register() { if (mRegistered) { mContext.getContentResolver().unregisterContentObserver(this); } mContext.getContentResolver().registerContentObserver(Secure.getUriFor(TILES_SETTING), false, this, mUserTracker.getCurrentUserId()); mRegistered = true; } @Override public void onChange(boolean selfChange, Uri uri) { recreateTiles(); } } }
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +28 −35 Original line number Diff line number Diff line Loading @@ -20,12 +20,10 @@ import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.content.Context; import android.content.res.ColorStateList; import android.database.ContentObserver; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.SystemClock; import android.provider.Settings; import android.text.TextUtils; import android.util.ArraySet; import android.view.View; Loading @@ -44,6 +42,8 @@ import com.android.systemui.R; import com.android.systemui.statusbar.NotificationData; import com.android.systemui.statusbar.SignalClusterView; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; import java.io.PrintWriter; import java.util.ArrayList; Loading @@ -53,7 +53,7 @@ import java.util.ArrayList; * limited to: notification icons, signal cluster, additional status icons, and clock in the status * bar. */ public class StatusBarIconController { public class StatusBarIconController implements Tunable { public static final long DEFAULT_TINT_ANIMATION_DURATION = 120; Loading Loading @@ -95,7 +95,7 @@ public class StatusBarIconController { private long mTransitionDeferringStartTime; private long mTransitionDeferringDuration; private final ArraySet<String> mIconBlacklist; private final ArraySet<String> mIconBlacklist = new ArraySet<>(); private final Runnable mTransitionDeferringDoneRunnable = new Runnable() { @Override Loading Loading @@ -126,14 +126,33 @@ public class StatusBarIconController { mDarkModeIconColorSingleTone = context.getColor(R.color.dark_mode_icon_color_single_tone); mLightModeIconColorSingleTone = context.getColor(R.color.light_mode_icon_color_single_tone); mHandler = new Handler(); mIconBlacklist = getIconBlacklist(context); updateResources(); context.getContentResolver().registerContentObserver( Settings.Secure.getUriFor(StatusBarIconController.ICON_BLACKLIST), false, mBlacklistObserver); TunerService.get(mContext).addTunable(this, ICON_BLACKLIST); } @Override public void onTuningChanged(String key, String newValue) { if (!ICON_BLACKLIST.equals(key)) { return; } mIconBlacklist.clear(); mIconBlacklist.addAll(getIconBlacklist(newValue)); ArrayList<StatusBarIconView> views = new ArrayList<StatusBarIconView>(); // Get all the current views. for (int i = 0; i < mStatusIcons.getChildCount(); i++) { views.add((StatusBarIconView) mStatusIcons.getChildAt(i)); } // Remove all the icons. for (int i = views.size() - 1; i >= 0; i--) { removeSystemIcon(views.get(i).getSlot(), i, i); } // Add them all back for (int i = 0; i < views.size(); i++) { addSystemIcon(views.get(i).getSlot(), i, i, views.get(i).getStatusBarIcon()); } }; public void updateResources() { mIconSize = mContext.getResources().getDimensionPixelSize( com.android.internal.R.dimen.status_bar_icon_size); Loading Loading @@ -429,29 +448,7 @@ public class StatusBarIconController { mTransitionPending = false; } private final ContentObserver mBlacklistObserver = new ContentObserver(new Handler()) { public void onChange(boolean selfChange) { mIconBlacklist.clear(); mIconBlacklist.addAll(getIconBlacklist(mContext)); ArrayList<StatusBarIconView> views = new ArrayList<StatusBarIconView>(); // Get all the current views. for (int i = 0; i < mStatusIcons.getChildCount(); i++) { views.add((StatusBarIconView) mStatusIcons.getChildAt(i)); } // Remove all the icons. for (int i = views.size() - 1; i >= 0; i--) { removeSystemIcon(views.get(i).getSlot(), i, i); } // Add them all back for (int i = 0; i < views.size(); i++) { addSystemIcon(views.get(i).getSlot(), i, i, views.get(i).getStatusBarIcon()); } } }; public static ArraySet<String> getIconBlacklist(Context context) { String blackListStr = Settings.Secure.getString(context.getContentResolver(), ICON_BLACKLIST); public static ArraySet<String> getIconBlacklist(String blackListStr) { ArraySet<String> ret = new ArraySet<String>(); if (blackListStr != null) { String[] blacklist = blackListStr.split(","); Loading @@ -463,8 +460,4 @@ public class StatusBarIconController { } return ret; } public static boolean isBlocked(Context context, String slot) { return getIconBlacklist(context).contains(slot); } }