Loading packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java +50 −26 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package com.android.systemui.qs.tiles; import android.annotation.Nullable; import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; import android.os.UserManager; import android.provider.Settings.Global; import android.service.quicksettings.Tile; Loading @@ -32,24 +31,27 @@ import com.android.systemui.plugins.qs.QSTile.AirplaneBooleanState; import com.android.systemui.qs.GlobalSetting; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.policy.DataSaverController; import com.android.systemui.statusbar.policy.HotspotController; /** Quick settings tile: Hotspot **/ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { static final Intent TETHER_SETTINGS = new Intent().setComponent(new ComponentName( private static final Intent TETHER_SETTINGS = new Intent().setComponent(new ComponentName( "com.android.settings", "com.android.settings.TetherSettings")); private final Icon mEnabledStatic = ResourceIcon.get(R.drawable.ic_hotspot); private final Icon mUnavailable = ResourceIcon.get(R.drawable.ic_hotspot_unavailable); private final HotspotController mController; private final Callback mCallback = new Callback(); private final HotspotController mHotspotController; private final DataSaverController mDataSaverController; private final HotspotAndDataSaverCallbacks mCallbacks = new HotspotAndDataSaverCallbacks(); private final GlobalSetting mAirplaneMode; private boolean mListening; public HotspotTile(QSHost host) { super(host); mController = Dependency.get(HotspotController.class); mHotspotController = Dependency.get(HotspotController.class); mDataSaverController = Dependency.get(DataSaverController.class); mAirplaneMode = new GlobalSetting(mContext, mHandler, Global.AIRPLANE_MODE_ON) { @Override protected void handleValueChanged(int value) { Loading @@ -60,7 +62,7 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { @Override public boolean isAvailable() { return mController.isHotspotSupported(); return mHotspotController.isHotspotSupported(); } @Override Loading @@ -78,12 +80,12 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { if (mListening == listening) return; mListening = listening; if (listening) { mController.addCallback(mCallback); final IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); mHotspotController.addCallback(mCallbacks); mDataSaverController.addCallback(mCallbacks); refreshState(); } else { mController.removeCallback(mCallback); mHotspotController.removeCallback(mCallbacks); mDataSaverController.removeCallback(mCallbacks); } mAirplaneMode.setListening(listening); } Loading @@ -101,7 +103,7 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { } // Immediately enter transient enabling state when turning hotspot on. refreshState(isEnabled ? null : ARG_SHOW_TRANSIENT_ENABLING); mController.setHotspotEnabled(!isEnabled); mHotspotController.setHotspotEnabled(!isEnabled); } @Override Loading @@ -117,16 +119,20 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { } final int numConnectedDevices; final boolean isTransient = transientEnabling || mController.isHotspotTransient(); final boolean isTransient = transientEnabling || mHotspotController.isHotspotTransient(); final boolean isDataSaverEnabled; checkIfRestrictionEnforcedByAdminOnly(state, UserManager.DISALLOW_CONFIG_TETHERING); if (arg instanceof CallbackInfo) { CallbackInfo info = (CallbackInfo) arg; state.value = info.enabled; final CallbackInfo info = (CallbackInfo) arg; state.value = transientEnabling || info.isHotspotEnabled; numConnectedDevices = info.numConnectedDevices; isDataSaverEnabled = info.isDataSaverEnabled; } else { state.value = transientEnabling || mController.isHotspotEnabled(); numConnectedDevices = mController.getNumConnectedDevices(); state.value = transientEnabling || mHotspotController.isHotspotEnabled(); numConnectedDevices = mHotspotController.getNumConnectedDevices(); isDataSaverEnabled = mDataSaverController.isDataSaverEnabled(); } state.icon = mEnabledStatic; Loading @@ -140,8 +146,14 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { } state.expandedAccessibilityClassName = Switch.class.getName(); state.contentDescription = state.label; state.state = state.isAirplaneMode ? Tile.STATE_UNAVAILABLE : state.value || state.isTransient ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; final boolean isTileUnavailable = (state.isAirplaneMode || isDataSaverEnabled); final boolean isTileActive = (state.value || state.isTransient); state.state = isTileUnavailable ? Tile.STATE_UNAVAILABLE : isTileActive ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; } @Nullable Loading Loading @@ -173,13 +185,23 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { } } private final class Callback implements HotspotController.Callback { final CallbackInfo mCallbackInfo = new CallbackInfo(); /** * Listens to changes made to hotspot and data saver states (to toggle tile availability). */ private final class HotspotAndDataSaverCallbacks implements HotspotController.Callback, DataSaverController.Listener { CallbackInfo mCallbackInfo = new CallbackInfo(); @Override public void onDataSaverChanged(boolean isDataSaving) { mCallbackInfo.isDataSaverEnabled = isDataSaving; refreshState(mCallbackInfo); } @Override public void onHotspotChanged(boolean enabled, int numConnectedDevices) { mCallbackInfo.enabled = enabled; mCallbackInfo.numConnectedDevices = numConnectedDevices; public void onHotspotChanged(boolean enabled, int numDevices) { mCallbackInfo.isHotspotEnabled = enabled; mCallbackInfo.numConnectedDevices = numDevices; refreshState(mCallbackInfo); } } Loading @@ -189,14 +211,16 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { * {@link #handleUpdateState(State, Object)}. */ protected static final class CallbackInfo { boolean enabled; boolean isHotspotEnabled; int numConnectedDevices; boolean isDataSaverEnabled; @Override public String toString() { return new StringBuilder("CallbackInfo[") .append("enabled=").append(enabled) .append("isHotspotEnabled=").append(isHotspotEnabled) .append(",numConnectedDevices=").append(numConnectedDevices) .append(",isDataSaverEnabled=").append(isDataSaverEnabled) .append(']').toString(); } } Loading Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java +50 −26 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package com.android.systemui.qs.tiles; import android.annotation.Nullable; import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; import android.os.UserManager; import android.provider.Settings.Global; import android.service.quicksettings.Tile; Loading @@ -32,24 +31,27 @@ import com.android.systemui.plugins.qs.QSTile.AirplaneBooleanState; import com.android.systemui.qs.GlobalSetting; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.policy.DataSaverController; import com.android.systemui.statusbar.policy.HotspotController; /** Quick settings tile: Hotspot **/ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { static final Intent TETHER_SETTINGS = new Intent().setComponent(new ComponentName( private static final Intent TETHER_SETTINGS = new Intent().setComponent(new ComponentName( "com.android.settings", "com.android.settings.TetherSettings")); private final Icon mEnabledStatic = ResourceIcon.get(R.drawable.ic_hotspot); private final Icon mUnavailable = ResourceIcon.get(R.drawable.ic_hotspot_unavailable); private final HotspotController mController; private final Callback mCallback = new Callback(); private final HotspotController mHotspotController; private final DataSaverController mDataSaverController; private final HotspotAndDataSaverCallbacks mCallbacks = new HotspotAndDataSaverCallbacks(); private final GlobalSetting mAirplaneMode; private boolean mListening; public HotspotTile(QSHost host) { super(host); mController = Dependency.get(HotspotController.class); mHotspotController = Dependency.get(HotspotController.class); mDataSaverController = Dependency.get(DataSaverController.class); mAirplaneMode = new GlobalSetting(mContext, mHandler, Global.AIRPLANE_MODE_ON) { @Override protected void handleValueChanged(int value) { Loading @@ -60,7 +62,7 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { @Override public boolean isAvailable() { return mController.isHotspotSupported(); return mHotspotController.isHotspotSupported(); } @Override Loading @@ -78,12 +80,12 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { if (mListening == listening) return; mListening = listening; if (listening) { mController.addCallback(mCallback); final IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); mHotspotController.addCallback(mCallbacks); mDataSaverController.addCallback(mCallbacks); refreshState(); } else { mController.removeCallback(mCallback); mHotspotController.removeCallback(mCallbacks); mDataSaverController.removeCallback(mCallbacks); } mAirplaneMode.setListening(listening); } Loading @@ -101,7 +103,7 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { } // Immediately enter transient enabling state when turning hotspot on. refreshState(isEnabled ? null : ARG_SHOW_TRANSIENT_ENABLING); mController.setHotspotEnabled(!isEnabled); mHotspotController.setHotspotEnabled(!isEnabled); } @Override Loading @@ -117,16 +119,20 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { } final int numConnectedDevices; final boolean isTransient = transientEnabling || mController.isHotspotTransient(); final boolean isTransient = transientEnabling || mHotspotController.isHotspotTransient(); final boolean isDataSaverEnabled; checkIfRestrictionEnforcedByAdminOnly(state, UserManager.DISALLOW_CONFIG_TETHERING); if (arg instanceof CallbackInfo) { CallbackInfo info = (CallbackInfo) arg; state.value = info.enabled; final CallbackInfo info = (CallbackInfo) arg; state.value = transientEnabling || info.isHotspotEnabled; numConnectedDevices = info.numConnectedDevices; isDataSaverEnabled = info.isDataSaverEnabled; } else { state.value = transientEnabling || mController.isHotspotEnabled(); numConnectedDevices = mController.getNumConnectedDevices(); state.value = transientEnabling || mHotspotController.isHotspotEnabled(); numConnectedDevices = mHotspotController.getNumConnectedDevices(); isDataSaverEnabled = mDataSaverController.isDataSaverEnabled(); } state.icon = mEnabledStatic; Loading @@ -140,8 +146,14 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { } state.expandedAccessibilityClassName = Switch.class.getName(); state.contentDescription = state.label; state.state = state.isAirplaneMode ? Tile.STATE_UNAVAILABLE : state.value || state.isTransient ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; final boolean isTileUnavailable = (state.isAirplaneMode || isDataSaverEnabled); final boolean isTileActive = (state.value || state.isTransient); state.state = isTileUnavailable ? Tile.STATE_UNAVAILABLE : isTileActive ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; } @Nullable Loading Loading @@ -173,13 +185,23 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { } } private final class Callback implements HotspotController.Callback { final CallbackInfo mCallbackInfo = new CallbackInfo(); /** * Listens to changes made to hotspot and data saver states (to toggle tile availability). */ private final class HotspotAndDataSaverCallbacks implements HotspotController.Callback, DataSaverController.Listener { CallbackInfo mCallbackInfo = new CallbackInfo(); @Override public void onDataSaverChanged(boolean isDataSaving) { mCallbackInfo.isDataSaverEnabled = isDataSaving; refreshState(mCallbackInfo); } @Override public void onHotspotChanged(boolean enabled, int numConnectedDevices) { mCallbackInfo.enabled = enabled; mCallbackInfo.numConnectedDevices = numConnectedDevices; public void onHotspotChanged(boolean enabled, int numDevices) { mCallbackInfo.isHotspotEnabled = enabled; mCallbackInfo.numConnectedDevices = numDevices; refreshState(mCallbackInfo); } } Loading @@ -189,14 +211,16 @@ public class HotspotTile extends QSTileImpl<AirplaneBooleanState> { * {@link #handleUpdateState(State, Object)}. */ protected static final class CallbackInfo { boolean enabled; boolean isHotspotEnabled; int numConnectedDevices; boolean isDataSaverEnabled; @Override public String toString() { return new StringBuilder("CallbackInfo[") .append("enabled=").append(enabled) .append("isHotspotEnabled=").append(isHotspotEnabled) .append(",numConnectedDevices=").append(numConnectedDevices) .append(",isDataSaverEnabled=").append(isDataSaverEnabled) .append(']').toString(); } } Loading