Skip to content

Commit 7ee994d

Browse files
author
Amith Yamasani
committed
Show power menu on tablets.
Bug: 6524432 Show power menu on all devices by default. Specific devices will be disabled in overlays. Handle airplane mode changes differently when the telephony states are not reliable. Use simple toggle for silent mode when there's no vibrator. Change-Id: Ic5ef521eee19cd300d909250203ff204f3a1ae1e
1 parent da87c7c commit 7ee994d

File tree

4 files changed

+93
-23
lines changed

4 files changed

+93
-23
lines changed

core/res/res/values-large/config.xml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@
2323
<!-- see comment in values/config.xml -->
2424
<dimen name="config_prefDialogWidth">440dp</dimen>
2525

26-
<!-- see comment in values/config.xml -->
27-
<integer name="config_longPressOnPowerBehavior">2</integer>
28-
2926
<!-- see comment in values/config.xml -->
3027
<integer name="config_longPressOnHomeBehavior">0</integer>
3128

core/res/res/values-sw600dp/config.xml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@
2020
<!-- These resources are around just to allow their values to be customized
2121
for different hardware and product builds. -->
2222
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
23-
<!-- see comment in values/config.xml -->
24-
<integer name="config_longPressOnPowerBehavior">2</integer>
25-
2623
<!-- Enable lockscreen rotation -->
2724
<bool name="config_enableLockScreenRotation">true</bool>
2825

core/res/res/values/public.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,9 @@
13031303
<java-symbol type="string" name="global_actions_airplane_mode_off_status" />
13041304
<java-symbol type="string" name="global_actions_airplane_mode_on_status" />
13051305
<java-symbol type="string" name="global_actions_toggle_airplane_mode" />
1306+
<java-symbol type="string" name="global_action_silent_mode_off_status" />
1307+
<java-symbol type="string" name="global_action_silent_mode_on_status" />
1308+
<java-symbol type="string" name="global_action_toggle_silent_mode" />
13061309
<java-symbol type="string" name="invalidPuk" />
13071310
<java-symbol type="string" name="keyguard_password_enter_pin_code" />
13081311
<java-symbol type="string" name="keyguard_password_enter_puk_code" />

policy/src/com/android/internal/policy/impl/GlobalActions.java

Lines changed: 90 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
import android.content.Intent;
2929
import android.content.IntentFilter;
3030
import android.content.pm.UserInfo;
31+
import android.database.ContentObserver;
3132
import android.media.AudioManager;
33+
import android.net.ConnectivityManager;
3234
import android.os.Handler;
3335
import android.os.IBinder;
3436
import android.os.Message;
@@ -73,7 +75,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
7375
private ArrayList<Action> mItems;
7476
private AlertDialog mDialog;
7577

76-
private SilentModeAction mSilentModeAction;
78+
private Action mSilentModeAction;
7779
private ToggleAction mAirplaneModeOn;
7880

7981
private MyAdapter mAdapter;
@@ -82,6 +84,8 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
8284
private boolean mDeviceProvisioned = false;
8385
private ToggleAction.State mAirplaneState = ToggleAction.State.Off;
8486
private boolean mIsWaitingForEcmExit = false;
87+
private boolean mHasTelephony;
88+
private boolean mHasVibrator;
8589

8690
private IWindowManager mIWindowManager;
8791

@@ -104,6 +108,14 @@ public GlobalActions(Context context, WindowManagerFuncs windowManagerFuncs) {
104108
TelephonyManager telephonyManager =
105109
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
106110
telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);
111+
ConnectivityManager cm = (ConnectivityManager)
112+
context.getSystemService(Context.CONNECTIVITY_SERVICE);
113+
mHasTelephony = cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE);
114+
mContext.getContentResolver().registerContentObserver(
115+
Settings.System.getUriFor(Settings.System.AIRPLANE_MODE_ON), true,
116+
mAirplaneModeObserver);
117+
Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
118+
mHasVibrator = vibrator != null && vibrator.hasVibrator();
107119
}
108120

109121
/**
@@ -130,13 +142,18 @@ private void handleShow() {
130142
mDialog.show();
131143
mDialog.getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_DISABLE_EXPAND);
132144
}
145+
133146
/**
134147
* Create the global actions dialog.
135148
* @return A new dialog.
136149
*/
137150
private AlertDialog createDialog() {
138-
mSilentModeAction = new SilentModeAction(mContext, mAudioManager, mHandler);
139-
151+
// Simple toggle style if there's no vibrator, otherwise use a tri-state
152+
if (!mHasVibrator) {
153+
mSilentModeAction = new SilentModeToggleAction();
154+
} else {
155+
mSilentModeAction = new SilentModeTriStateAction(mContext, mAudioManager, mHandler);
156+
}
140157
mAirplaneModeOn = new ToggleAction(
141158
R.drawable.ic_lock_airplane_mode,
142159
R.drawable.ic_lock_airplane_mode_off,
@@ -145,7 +162,7 @@ private AlertDialog createDialog() {
145162
R.string.global_actions_airplane_mode_off_status) {
146163

147164
void onToggle(boolean on) {
148-
if (Boolean.parseBoolean(
165+
if (mHasTelephony && Boolean.parseBoolean(
149166
SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) {
150167
mIsWaitingForEcmExit = true;
151168
// Launch ECM exit dialog
@@ -160,6 +177,8 @@ void onToggle(boolean on) {
160177

161178
@Override
162179
protected void changeStateFromPress(boolean buttonOn) {
180+
if (!mHasTelephony) return;
181+
163182
// In ECM mode airplane state cannot be changed
164183
if (!(Boolean.parseBoolean(
165184
SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE)))) {
@@ -176,6 +195,7 @@ public boolean showBeforeProvisioning() {
176195
return false;
177196
}
178197
};
198+
onAirplaneModeChanged();
179199

180200
mItems = new ArrayList<Action>();
181201

@@ -247,6 +267,7 @@ public boolean showBeforeProvisioning() {
247267
mItems.add(switchToUser);
248268
}
249269
}
270+
250271
mAdapter = new MyAdapter();
251272

252273
final AlertDialog.Builder ab = new AlertDialog.Builder(mContext);
@@ -273,8 +294,7 @@ public boolean onItemLongClick(AdapterView<?> parent, View view, int position,
273294
}
274295

275296
private void prepareDialog() {
276-
final boolean silentModeOn =
277-
mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL;
297+
refreshSilentMode();
278298
mAirplaneModeOn.updateState(mAirplaneState);
279299
mAdapter.notifyDataSetChanged();
280300
if (mKeyguardShowing) {
@@ -288,6 +308,15 @@ private void prepareDialog() {
288308
}
289309
}
290310

311+
private void refreshSilentMode() {
312+
if (!mHasVibrator) {
313+
final boolean silentModeOn =
314+
mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL;
315+
((ToggleAction)mSilentModeAction).updateState(
316+
silentModeOn ? ToggleAction.State.On : ToggleAction.State.Off);
317+
}
318+
}
319+
291320
/** {@inheritDoc} */
292321
public void onDismiss(DialogInterface dialog) {
293322
if (SHOW_SILENT_TOGGLE) {
@@ -297,7 +326,7 @@ public void onDismiss(DialogInterface dialog) {
297326

298327
/** {@inheritDoc} */
299328
public void onClick(DialogInterface dialog, int which) {
300-
if (!(mAdapter.getItem(which) instanceof SilentModeAction)) {
329+
if (!(mAdapter.getItem(which) instanceof SilentModeTriStateAction)) {
301330
dialog.dismiss();
302331
}
303332
mAdapter.getItem(which).onPress();
@@ -495,12 +524,12 @@ public boolean inTransition() {
495524
*/
496525
public ToggleAction(int enabledIconResId,
497526
int disabledIconResid,
498-
int essage,
527+
int message,
499528
int enabledStatusMessageResId,
500529
int disabledStatusMessageResId) {
501530
mEnabledIconResId = enabledIconResId;
502531
mDisabledIconResid = disabledIconResid;
503-
mMessageResId = essage;
532+
mMessageResId = message;
504533
mEnabledStatusMessageResId = enabledStatusMessageResId;
505534
mDisabledStatusMessageResId = disabledStatusMessageResId;
506535
}
@@ -583,21 +612,44 @@ public void updateState(State state) {
583612
}
584613
}
585614

586-
private static class SilentModeAction implements Action, View.OnClickListener {
615+
private class SilentModeToggleAction extends ToggleAction {
616+
public SilentModeToggleAction() {
617+
super(R.drawable.ic_audio_vol_mute,
618+
R.drawable.ic_audio_vol,
619+
R.string.global_action_toggle_silent_mode,
620+
R.string.global_action_silent_mode_on_status,
621+
R.string.global_action_silent_mode_off_status);
622+
}
623+
624+
void onToggle(boolean on) {
625+
if (on) {
626+
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
627+
} else {
628+
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
629+
}
630+
}
631+
632+
public boolean showDuringKeyguard() {
633+
return true;
634+
}
635+
636+
public boolean showBeforeProvisioning() {
637+
return false;
638+
}
639+
}
640+
641+
private static class SilentModeTriStateAction implements Action, View.OnClickListener {
587642

588643
private final int[] ITEM_IDS = { R.id.option1, R.id.option2, R.id.option3 };
589644

590645
private final AudioManager mAudioManager;
591646
private final Handler mHandler;
592-
private final boolean mHasVibrator;
593647
private final Context mContext;
594648

595-
SilentModeAction(Context context, AudioManager audioManager, Handler handler) {
649+
SilentModeTriStateAction(Context context, AudioManager audioManager, Handler handler) {
596650
mAudioManager = audioManager;
597651
mHandler = handler;
598652
mContext = context;
599-
Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
600-
mHasVibrator = vibrator != null && vibrator.hasVibrator();
601653
}
602654

603655
private int ringerModeToIndex(int ringerMode) {
@@ -621,9 +673,6 @@ public View create(Context context, View convertView, ViewGroup parent,
621673
// Set up click handler
622674
itemView.setTag(i);
623675
itemView.setOnClickListener(this);
624-
if (itemView.getId() == R.id.option2 && !mHasVibrator) {
625-
itemView.setVisibility(View.GONE);
626-
}
627676
}
628677
return v;
629678
}
@@ -683,6 +732,7 @@ public void onReceive(Context context, Intent intent) {
683732
PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
684733
@Override
685734
public void onServiceStateChanged(ServiceState serviceState) {
735+
if (!mHasTelephony) return;
686736
final boolean inAirplaneMode = serviceState.getState() == ServiceState.STATE_POWER_OFF;
687737
mAirplaneState = inAirplaneMode ? ToggleAction.State.On : ToggleAction.State.Off;
688738
mAirplaneModeOn.updateState(mAirplaneState);
@@ -699,6 +749,13 @@ public void onReceive(Context context, Intent intent) {
699749
}
700750
};
701751

752+
private ContentObserver mAirplaneModeObserver = new ContentObserver(new Handler()) {
753+
@Override
754+
public void onChange(boolean selfChange) {
755+
onAirplaneModeChanged();
756+
}
757+
};
758+
702759
private static final int MESSAGE_DISMISS = 0;
703760
private static final int MESSAGE_REFRESH = 1;
704761
private static final int MESSAGE_SHOW = 2;
@@ -713,6 +770,7 @@ public void handleMessage(Message msg) {
713770
}
714771
break;
715772
case MESSAGE_REFRESH:
773+
refreshSilentMode();
716774
mAdapter.notifyDataSetChanged();
717775
break;
718776
case MESSAGE_SHOW:
@@ -722,6 +780,18 @@ public void handleMessage(Message msg) {
722780
}
723781
};
724782

783+
private void onAirplaneModeChanged() {
784+
// Let the service state callbacks handle the state.
785+
if (mHasTelephony) return;
786+
787+
boolean airplaneModeOn = Settings.System.getInt(
788+
mContext.getContentResolver(),
789+
Settings.System.AIRPLANE_MODE_ON,
790+
0) == 1;
791+
mAirplaneState = airplaneModeOn ? ToggleAction.State.On : ToggleAction.State.Off;
792+
mAirplaneModeOn.updateState(mAirplaneState);
793+
}
794+
725795
/**
726796
* Change the airplane mode system setting
727797
*/
@@ -734,6 +804,9 @@ private void changeAirplaneModeSystemSetting(boolean on) {
734804
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
735805
intent.putExtra("state", on);
736806
mContext.sendBroadcast(intent);
807+
if (!mHasTelephony) {
808+
mAirplaneState = on ? ToggleAction.State.On : ToggleAction.State.Off;
809+
}
737810
}
738811

739812
private IWindowManager getWindowManager() {

0 commit comments

Comments
 (0)