Loading packages/SystemUI/res/values/config.xml +8 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,14 @@ <!-- The number of columns that the top level tiles span in the QuickSettings --> <integer name="quick_settings_user_time_settings_tile_span">1</integer> <!-- The default tiles to display in QuickSettings --> <string name="quick_settings_tiles_default" translatable="false"> wifi,bt,inversion,cell,airplane,rotation,flashlight,location,cast </string> <!-- The tiles to display in QuickSettings --> <string name="quick_settings_tiles" translatable="false">default</string> <!-- Whether or not the RSSI tile is capitalized or not. --> <bool name="quick_settings_rssi_tile_capitalization">true</bool> Loading packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +20 −3 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import com.android.systemui.settings.ToggleSlider; import com.android.systemui.statusbar.phone.QSTileHost; import java.util.ArrayList; import java.util.Collection; /** View that represents the quick settings tile panel. **/ public class QSPanel extends ViewGroup { Loading Loading @@ -186,12 +187,25 @@ public class QSPanel extends ViewGroup { v.setVisibility(visible ? VISIBLE : GONE); } public void addTile(final QSTile<?> tile) { public void setTiles(Collection<QSTile<?>> tiles) { for (TileRecord record : mRecords) { removeView(record.tileView); } mRecords.clear(); for (QSTile<?> tile : tiles) { addTile(tile); } if (isShowingDetail()) { mDetail.bringToFront(); } } private void addTile(final QSTile<?> tile) { final TileRecord r = new TileRecord(); r.tile = tile; r.tileView = tile.createTileView(mContext); r.tileView.setVisibility(View.GONE); r.tile.setCallback(new QSTile.Callback() { final QSTile.Callback callback = new QSTile.Callback() { @Override public void onStateChanged(QSTile.State state) { setTileVisibility(r.tileView, state.visible); Loading @@ -213,7 +227,8 @@ public class QSPanel extends ViewGroup { fireScanStateChanged(state); } } }); }; r.tile.setCallback(callback); final View.OnClickListener click = new View.OnClickListener() { @Override public void onClick(View v) { Loading @@ -227,6 +242,8 @@ public class QSPanel extends ViewGroup { } }; r.tileView.init(click, clickSecondary); r.tile.setListening(mListening); callback.onStateChanged(r.tile.getState()); r.tile.refreshState(); mRecords.add(r); Loading packages/SystemUI/src/com/android/systemui/qs/QSTile.java +26 −3 Original line number Diff line number Diff line Loading @@ -37,9 +37,8 @@ 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.ZenModeController; import com.android.systemui.volume.VolumeComponent; import java.util.List; import java.util.Collection; import java.util.Objects; /** Loading Loading @@ -134,6 +133,14 @@ public abstract class QSTile<TState extends State> implements Listenable { mHandler.obtainMessage(H.SCAN_STATE_CHANGED, state ? 1 : 0, 0).sendToTarget(); } public void destroy() { mHandler.sendEmptyMessage(H.DESTROY); } public TState getState() { return mState; } // call only on tile worker looper private void handleSetCallback(Callback callback) { Loading Loading @@ -181,6 +188,11 @@ public abstract class QSTile<TState extends State> implements Listenable { handleRefreshState(null); } protected void handleDestroy() { setListening(false); mCallback = null; } protected final class H extends Handler { private static final int SET_CALLBACK = 1; private static final int CLICK = 2; Loading @@ -190,6 +202,7 @@ public abstract class QSTile<TState extends State> implements Listenable { private static final int USER_SWITCH = 6; private static final int TOGGLE_STATE_CHANGED = 7; private static final int SCAN_STATE_CHANGED = 8; private static final int DESTROY = 9; private H(Looper looper) { super(looper); Loading Loading @@ -223,6 +236,11 @@ public abstract class QSTile<TState extends State> implements Listenable { } else if (msg.what == SCAN_STATE_CHANGED) { name = "handleScanStateChanged"; handleScanStateChanged(msg.arg1 != 0); } else if (msg.what == DESTROY) { name = "handleDestroy"; handleDestroy(); } else { throw new IllegalArgumentException("Unknown msg: " + msg.what); } } catch (Throwable t) { final String error = "Error in " + name; Loading @@ -245,7 +263,8 @@ public abstract class QSTile<TState extends State> implements Listenable { void collapsePanels(); Looper getLooper(); Context getContext(); List<QSTile<?>> getTiles(); Collection<QSTile<?>> getTiles(); void setCallback(Callback callback); BluetoothController getBluetoothController(); LocationController getLocationController(); RotationLockController getRotationLockController(); Loading @@ -255,6 +274,10 @@ public abstract class QSTile<TState extends State> implements Listenable { CastController getCastController(); FlashlightController getFlashlightController(); KeyguardMonitor getKeyguardMonitor(); public interface Callback { void onTilesChanged(); } } public static class State { Loading packages/SystemUI/src/com/android/systemui/qs/UsageTracker.java +20 −13 Original line number Diff line number Diff line Loading @@ -23,8 +23,9 @@ import android.content.IntentFilter; import android.content.SharedPreferences; import com.android.systemui.R; import com.android.systemui.statusbar.policy.Listenable; public class UsageTracker { public class UsageTracker implements Listenable { private static final long MILLIS_PER_DAY = 1000 * 60 * 60 * 24; private final Context mContext; Loading @@ -32,7 +33,7 @@ public class UsageTracker { private final String mPrefKey; private final String mResetAction; private BroadcastReceiver mReceiver; private boolean mRegistered; public UsageTracker(Context context, Class<?> tile) { mContext = context; Loading @@ -42,17 +43,14 @@ public class UsageTracker { mResetAction = "com.android.systemui.qs." + tile.getSimpleName() + ".usage_reset"; } public void listenForReset() { if (mReceiver != null) { mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (mResetAction.equals(intent.getAction())) { reset(); } } }; public void setListening(boolean listen) { if (listen && !mRegistered) { mContext.registerReceiver(mReceiver, new IntentFilter(mResetAction)); mRegistered = true; } else if (!listen && mRegistered) { mContext.unregisterReceiver(mReceiver); mRegistered = false; } } Loading @@ -72,4 +70,13 @@ public class UsageTracker { private SharedPreferences getSharedPrefs() { return mContext.getSharedPreferences(mContext.getPackageName(), 0); } private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (mResetAction.equals(intent.getAction())) { reset(); } } }; } packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java +4 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ import com.android.systemui.qs.QSTile; public class AirplaneModeTile extends QSTile<QSTile.BooleanState> { private final GlobalSetting mSetting; private boolean mListening; public AirplaneModeTile(Host host) { super(host); Loading Loading @@ -79,6 +81,8 @@ public class AirplaneModeTile extends QSTile<QSTile.BooleanState> { } public void setListening(boolean listening) { if (mListening == listening) return; mListening = listening; if (listening) { final IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); Loading Loading
packages/SystemUI/res/values/config.xml +8 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,14 @@ <!-- The number of columns that the top level tiles span in the QuickSettings --> <integer name="quick_settings_user_time_settings_tile_span">1</integer> <!-- The default tiles to display in QuickSettings --> <string name="quick_settings_tiles_default" translatable="false"> wifi,bt,inversion,cell,airplane,rotation,flashlight,location,cast </string> <!-- The tiles to display in QuickSettings --> <string name="quick_settings_tiles" translatable="false">default</string> <!-- Whether or not the RSSI tile is capitalized or not. --> <bool name="quick_settings_rssi_tile_capitalization">true</bool> Loading
packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +20 −3 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import com.android.systemui.settings.ToggleSlider; import com.android.systemui.statusbar.phone.QSTileHost; import java.util.ArrayList; import java.util.Collection; /** View that represents the quick settings tile panel. **/ public class QSPanel extends ViewGroup { Loading Loading @@ -186,12 +187,25 @@ public class QSPanel extends ViewGroup { v.setVisibility(visible ? VISIBLE : GONE); } public void addTile(final QSTile<?> tile) { public void setTiles(Collection<QSTile<?>> tiles) { for (TileRecord record : mRecords) { removeView(record.tileView); } mRecords.clear(); for (QSTile<?> tile : tiles) { addTile(tile); } if (isShowingDetail()) { mDetail.bringToFront(); } } private void addTile(final QSTile<?> tile) { final TileRecord r = new TileRecord(); r.tile = tile; r.tileView = tile.createTileView(mContext); r.tileView.setVisibility(View.GONE); r.tile.setCallback(new QSTile.Callback() { final QSTile.Callback callback = new QSTile.Callback() { @Override public void onStateChanged(QSTile.State state) { setTileVisibility(r.tileView, state.visible); Loading @@ -213,7 +227,8 @@ public class QSPanel extends ViewGroup { fireScanStateChanged(state); } } }); }; r.tile.setCallback(callback); final View.OnClickListener click = new View.OnClickListener() { @Override public void onClick(View v) { Loading @@ -227,6 +242,8 @@ public class QSPanel extends ViewGroup { } }; r.tileView.init(click, clickSecondary); r.tile.setListening(mListening); callback.onStateChanged(r.tile.getState()); r.tile.refreshState(); mRecords.add(r); Loading
packages/SystemUI/src/com/android/systemui/qs/QSTile.java +26 −3 Original line number Diff line number Diff line Loading @@ -37,9 +37,8 @@ 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.ZenModeController; import com.android.systemui.volume.VolumeComponent; import java.util.List; import java.util.Collection; import java.util.Objects; /** Loading Loading @@ -134,6 +133,14 @@ public abstract class QSTile<TState extends State> implements Listenable { mHandler.obtainMessage(H.SCAN_STATE_CHANGED, state ? 1 : 0, 0).sendToTarget(); } public void destroy() { mHandler.sendEmptyMessage(H.DESTROY); } public TState getState() { return mState; } // call only on tile worker looper private void handleSetCallback(Callback callback) { Loading Loading @@ -181,6 +188,11 @@ public abstract class QSTile<TState extends State> implements Listenable { handleRefreshState(null); } protected void handleDestroy() { setListening(false); mCallback = null; } protected final class H extends Handler { private static final int SET_CALLBACK = 1; private static final int CLICK = 2; Loading @@ -190,6 +202,7 @@ public abstract class QSTile<TState extends State> implements Listenable { private static final int USER_SWITCH = 6; private static final int TOGGLE_STATE_CHANGED = 7; private static final int SCAN_STATE_CHANGED = 8; private static final int DESTROY = 9; private H(Looper looper) { super(looper); Loading Loading @@ -223,6 +236,11 @@ public abstract class QSTile<TState extends State> implements Listenable { } else if (msg.what == SCAN_STATE_CHANGED) { name = "handleScanStateChanged"; handleScanStateChanged(msg.arg1 != 0); } else if (msg.what == DESTROY) { name = "handleDestroy"; handleDestroy(); } else { throw new IllegalArgumentException("Unknown msg: " + msg.what); } } catch (Throwable t) { final String error = "Error in " + name; Loading @@ -245,7 +263,8 @@ public abstract class QSTile<TState extends State> implements Listenable { void collapsePanels(); Looper getLooper(); Context getContext(); List<QSTile<?>> getTiles(); Collection<QSTile<?>> getTiles(); void setCallback(Callback callback); BluetoothController getBluetoothController(); LocationController getLocationController(); RotationLockController getRotationLockController(); Loading @@ -255,6 +274,10 @@ public abstract class QSTile<TState extends State> implements Listenable { CastController getCastController(); FlashlightController getFlashlightController(); KeyguardMonitor getKeyguardMonitor(); public interface Callback { void onTilesChanged(); } } public static class State { Loading
packages/SystemUI/src/com/android/systemui/qs/UsageTracker.java +20 −13 Original line number Diff line number Diff line Loading @@ -23,8 +23,9 @@ import android.content.IntentFilter; import android.content.SharedPreferences; import com.android.systemui.R; import com.android.systemui.statusbar.policy.Listenable; public class UsageTracker { public class UsageTracker implements Listenable { private static final long MILLIS_PER_DAY = 1000 * 60 * 60 * 24; private final Context mContext; Loading @@ -32,7 +33,7 @@ public class UsageTracker { private final String mPrefKey; private final String mResetAction; private BroadcastReceiver mReceiver; private boolean mRegistered; public UsageTracker(Context context, Class<?> tile) { mContext = context; Loading @@ -42,17 +43,14 @@ public class UsageTracker { mResetAction = "com.android.systemui.qs." + tile.getSimpleName() + ".usage_reset"; } public void listenForReset() { if (mReceiver != null) { mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (mResetAction.equals(intent.getAction())) { reset(); } } }; public void setListening(boolean listen) { if (listen && !mRegistered) { mContext.registerReceiver(mReceiver, new IntentFilter(mResetAction)); mRegistered = true; } else if (!listen && mRegistered) { mContext.unregisterReceiver(mReceiver); mRegistered = false; } } Loading @@ -72,4 +70,13 @@ public class UsageTracker { private SharedPreferences getSharedPrefs() { return mContext.getSharedPreferences(mContext.getPackageName(), 0); } private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (mResetAction.equals(intent.getAction())) { reset(); } } }; }
packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java +4 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ import com.android.systemui.qs.QSTile; public class AirplaneModeTile extends QSTile<QSTile.BooleanState> { private final GlobalSetting mSetting; private boolean mListening; public AirplaneModeTile(Host host) { super(host); Loading Loading @@ -79,6 +81,8 @@ public class AirplaneModeTile extends QSTile<QSTile.BooleanState> { } public void setListening(boolean listening) { if (mListening == listening) return; mListening = listening; if (listening) { final IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); Loading