5555import android .graphics .drawable .LevelListDrawable ;
5656import android .hardware .display .DisplayManager ;
5757import android .hardware .display .WifiDisplayStatus ;
58+ import android .net .wifi .WifiManager ;
5859import android .os .AsyncTask ;
5960import android .os .Handler ;
6061import android .os .RemoteException ;
@@ -85,6 +86,8 @@ class QuickSettings {
8586 private static final String TAG = "QuickSettings" ;
8687 public static final boolean SHOW_IME_TILE = false ;
8788
89+ public static final boolean LONG_PRESS_TOGGLES = true ;
90+
8891 private Context mContext ;
8992 private PanelBar mBar ;
9093 private QuickSettingsModel mModel ;
@@ -94,6 +97,8 @@ class QuickSettings {
9497 private WifiDisplayStatus mWifiDisplayStatus ;
9598 private PhoneStatusBar mStatusBarService ;
9699 private BluetoothState mBluetoothState ;
100+ private BluetoothAdapter mBluetoothAdapter ;
101+ private WifiManager mWifiManager ;
97102
98103 private BrightnessController mBrightnessController ;
99104 private BluetoothController mBluetoothController ;
@@ -131,6 +136,9 @@ public QuickSettings(Context context, QuickSettingsContainerView container) {
131136 mModel = new QuickSettingsModel (context );
132137 mWifiDisplayStatus = new WifiDisplayStatus ();
133138 mBluetoothState = new QuickSettingsModel .BluetoothState ();
139+ mBluetoothAdapter = BluetoothAdapter .getDefaultAdapter ();
140+ mWifiManager = (WifiManager ) context .getSystemService (Context .WIFI_SERVICE );
141+
134142 mHandler = new Handler ();
135143
136144 Resources r = mContext .getResources ();
@@ -391,7 +399,7 @@ public void refreshView(QuickSettingsTileView view, State state) {
391399
392400 private void addSystemTiles (ViewGroup parent , LayoutInflater inflater ) {
393401 // Wi-fi
394- QuickSettingsTileView wifiTile = (QuickSettingsTileView )
402+ final QuickSettingsTileView wifiTile = (QuickSettingsTileView )
395403 inflater .inflate (R .layout .quick_settings_tile , parent , false );
396404 wifiTile .setContent (R .layout .quick_settings_tile_wifi , inflater );
397405 wifiTile .setOnClickListener (new View .OnClickListener () {
@@ -400,6 +408,30 @@ public void onClick(View v) {
400408 startSettingsActivity (android .provider .Settings .ACTION_WIFI_SETTINGS );
401409 }
402410 });
411+ if (LONG_PRESS_TOGGLES ) {
412+ wifiTile .setOnLongClickListener (new View .OnLongClickListener () {
413+ @ Override
414+ public boolean onLongClick (View v ) {
415+ final boolean enable =
416+ (mWifiManager .getWifiState () != WifiManager .WIFI_STATE_ENABLED );
417+ new AsyncTask <Void , Void , Void >() {
418+ @ Override
419+ protected Void doInBackground (Void ... args ) {
420+ // Disable tethering if enabling Wifi
421+ final int wifiApState = mWifiManager .getWifiApState ();
422+ if (enable && ((wifiApState == WifiManager .WIFI_AP_STATE_ENABLING ) ||
423+ (wifiApState == WifiManager .WIFI_AP_STATE_ENABLED ))) {
424+ mWifiManager .setWifiApEnabled (null , false );
425+ }
426+
427+ mWifiManager .setWifiEnabled (enable );
428+ return null ;
429+ }
430+ }.execute ();
431+ wifiTile .setPressed (false );
432+ return true ;
433+ }} );
434+ }
403435 mModel .addWifiTile (wifiTile , new QuickSettingsModel .RefreshCallback () {
404436 @ Override
405437 public void refreshView (QuickSettingsTileView view , State state ) {
@@ -538,7 +570,7 @@ public void refreshView(QuickSettingsTileView view, State state) {
538570
539571 // Bluetooth
540572 if (mModel .deviceSupportsBluetooth ()) {
541- QuickSettingsTileView bluetoothTile = (QuickSettingsTileView )
573+ final QuickSettingsTileView bluetoothTile = (QuickSettingsTileView )
542574 inflater .inflate (R .layout .quick_settings_tile , parent , false );
543575 bluetoothTile .setContent (R .layout .quick_settings_tile_bluetooth , inflater );
544576 bluetoothTile .setOnClickListener (new View .OnClickListener () {
@@ -547,6 +579,19 @@ public void onClick(View v) {
547579 startSettingsActivity (android .provider .Settings .ACTION_BLUETOOTH_SETTINGS );
548580 }
549581 });
582+ if (LONG_PRESS_TOGGLES ) {
583+ bluetoothTile .setOnLongClickListener (new View .OnLongClickListener () {
584+ @ Override
585+ public boolean onLongClick (View v ) {
586+ if (mBluetoothAdapter .isEnabled ()) {
587+ mBluetoothAdapter .disable ();
588+ } else {
589+ mBluetoothAdapter .enable ();
590+ }
591+ bluetoothTile .setPressed (false );
592+ return true ;
593+ }});
594+ }
550595 mModel .addBluetoothTile (bluetoothTile , new QuickSettingsModel .RefreshCallback () {
551596 @ Override
552597 public void refreshView (QuickSettingsTileView view , State state ) {
0 commit comments