Skip to content

Commit a56f8f7

Browse files
Jim MillerAndroid (Google) Code Review
authored andcommitted
Merge "Fix EmergencyDialer button on devices without telephony hardware" into jb-mr1-dev
2 parents 2b0442f + 47df44a commit a56f8f7

File tree

5 files changed

+49
-81
lines changed

5 files changed

+49
-81
lines changed

policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,6 @@ public class KeyguardHostView extends KeyguardViewBase {
6161
static final int APPWIDGET_HOST_ID = 0x4B455947;
6262
private static final String KEYGUARD_WIDGET_PREFS = "keyguard_widget_prefs";
6363

64-
// time after launching EmergencyDialer before the screen goes blank.
65-
private static final int EMERGENCY_CALL_TIMEOUT = 10000;
66-
67-
// intent action for launching emergency dialer activity.
68-
static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL";
69-
7064
private static final String TAG = "KeyguardViewHost";
7165

7266
private static final int SECURITY_SELECTOR_ID = R.id.keyguard_selector_view;
@@ -80,7 +74,6 @@ public class KeyguardHostView extends KeyguardViewBase {
8074
private AppWidgetHost mAppWidgetHost;
8175
private KeyguardWidgetPager mAppWidgetContainer;
8276
private ViewFlipper mViewFlipper;
83-
private Button mEmergencyDialerButton;
8477
private boolean mEnableMenuKey;
8578
private boolean mIsVerifyUnlockOnly;
8679
private boolean mEnableFallback; // TODO: This should get the value from KeyguardPatternView
@@ -146,14 +139,6 @@ protected void onFinishInflate() {
146139
Log.v("*********", "Can't find view id " + mViewIds[i]);
147140
}
148141
}
149-
150-
// Enable emergency dialer button
151-
mEmergencyDialerButton = (Button) findViewById(R.id.emergency_call_button);
152-
mEmergencyDialerButton.setOnClickListener(new OnClickListener() {
153-
public void onClick(View v) {
154-
takeEmergencyCallAction();
155-
}
156-
});
157142
}
158143

159144
void setLockPatternUtils(LockPatternUtils utils) {
@@ -229,22 +214,6 @@ public void setOnDismissRunnable(Runnable runnable) {
229214

230215
};
231216

232-
/**
233-
* Shows the emergency dialer or returns the user to the existing call.
234-
*/
235-
public void takeEmergencyCallAction() {
236-
mCallback.userActivity(EMERGENCY_CALL_TIMEOUT);
237-
if (TelephonyManager.getDefault().getCallState()
238-
== TelephonyManager.CALL_STATE_OFFHOOK) {
239-
mLockPatternUtils.resumeCall();
240-
} else {
241-
Intent intent = new Intent(ACTION_EMERGENCY_DIAL);
242-
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
243-
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
244-
getContext().startActivity(intent);
245-
}
246-
}
247-
248217
private void showDialog(String title, String message) {
249218
final AlertDialog dialog = new AlertDialog.Builder(mContext)
250219
.setTitle(title)
@@ -530,12 +499,14 @@ private void showSecurityScreen(int securityViewId) {
530499
public void onScreenTurnedOn() {
531500
if (DEBUG) Log.d(TAG, "screen on");
532501
showSecurityScreen(mCurrentSecurityId);
502+
getSecurityView(mCurrentSecurityId).onResume();
533503
}
534504

535505
@Override
536506
public void onScreenTurnedOff() {
537507
if (DEBUG) Log.d(TAG, "screen off");
538508
showSecurityScreen(SECURITY_SELECTOR_ID);
509+
getSecurityView(mCurrentSecurityId).onPause();
539510
}
540511

541512
@Override

policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityModel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ SecurityMode getSecurityMode() {
6969
SecurityMode mode = SecurityMode.None;
7070
if (simState == IccCardConstants.State.PIN_REQUIRED) {
7171
mode = SecurityMode.SimPin;
72-
} else if (simState == IccCardConstants.State.PUK_REQUIRED) {
72+
} else if (simState == IccCardConstants.State.PUK_REQUIRED
73+
&& mLockPatternUtils.isPukUnlockScreenEnable()) {
7374
mode = SecurityMode.SimPuk;
7475
} else {
7576
final int security = mLockPatternUtils.getKeyguardStoredPasswordQuality();

policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import android.os.RemoteException;
2626
import android.os.UserHandle;
2727
import android.provider.MediaStore;
28+
import android.telephony.TelephonyManager;
2829
import android.util.AttributeSet;
2930
import android.util.Log;
3031
import android.util.Slog;
@@ -33,6 +34,7 @@
3334
import android.widget.LinearLayout;
3435

3536
import com.android.internal.telephony.IccCardConstants;
37+
import com.android.internal.telephony.IccCardConstants.State;
3638
import com.android.internal.widget.LockPatternUtils;
3739
import com.android.internal.widget.multiwaveview.GlowPadView;
3840
import com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener;
@@ -43,6 +45,9 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri
4345
private static final String TAG = "SecuritySelectorView";
4446
private static final String ASSIST_ICON_METADATA_NAME =
4547
"com.android.systemui.action_assist_icon";
48+
private static final int EMERGENCY_CALL_TIMEOUT = 10000; // screen timeout after starting e.d.
49+
static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL";
50+
4651
private KeyguardSecurityCallback mCallback;
4752
private GlowPadView mGlowPadView;
4853
private Button mEmergencyCallButton;
@@ -98,29 +103,35 @@ public void onFinishFinalAnimation() {
98103

99104
};
100105

101-
KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
106+
private void updateEmergencyCallButton(State simState, int phoneState) {
107+
if (mEmergencyCallButton != null) {
108+
boolean en = mLockPatternUtils.isEmergencyCallCapable()
109+
|| (phoneState == TelephonyManager.CALL_STATE_OFFHOOK); // voice call in progress
110+
if (en && KeyguardUpdateMonitor.isSimLocked(simState)) {
111+
// Some countries can't handle emergency calls while SIM is locked.
112+
en = mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked();
113+
}
114+
mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton, phoneState, en);
115+
}
116+
}
102117

103-
private boolean mEmergencyDialerDisableBecauseSimLocked;
118+
KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
104119

105120
@Override
106121
public void onDevicePolicyManagerStateChanged() {
107122
updateTargets();
108123
}
109124

110125
@Override
111-
public void onSimStateChanged(IccCardConstants.State simState) {
112-
// Some carriers aren't capable of handling emergency calls while the SIM is locked
113-
mEmergencyDialerDisableBecauseSimLocked = KeyguardUpdateMonitor.isSimLocked(simState)
114-
&& !mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked();
126+
public void onSimStateChanged(State simState) {
127+
int phoneState = KeyguardUpdateMonitor.getInstance(mContext).getPhoneState();
128+
updateEmergencyCallButton(simState, phoneState);
115129
updateTargets();
116130
}
117131

118132
void onPhoneStateChanged(int phoneState) {
119-
if (mEmergencyCallButton != null) {
120-
mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked();
121-
mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton,
122-
phoneState, !mEmergencyDialerDisableBecauseSimLocked);
123-
}
133+
State simState = KeyguardUpdateMonitor.getInstance(mContext).getSimState();
134+
updateEmergencyCallButton(simState, phoneState);
124135
};
125136
};
126137

@@ -149,9 +160,30 @@ protected void onFinishInflate() {
149160
mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view);
150161
mGlowPadView.setOnTriggerListener(mOnTriggerListener);
151162
mEmergencyCallButton = (Button) findViewById(R.id.emergency_call_button);
163+
mEmergencyCallButton.setOnClickListener(new OnClickListener() {
164+
public void onClick(View v) {
165+
takeEmergencyCallAction();
166+
}
167+
});
152168
updateTargets();
153169
}
154170

171+
/**
172+
* Shows the emergency dialer or returns the user to the existing call.
173+
*/
174+
public void takeEmergencyCallAction() {
175+
mCallback.userActivity(EMERGENCY_CALL_TIMEOUT);
176+
if (TelephonyManager.getDefault().getCallState()
177+
== TelephonyManager.CALL_STATE_OFFHOOK) {
178+
mLockPatternUtils.resumeCall();
179+
} else {
180+
Intent intent = new Intent(ACTION_EMERGENCY_DIAL);
181+
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
182+
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
183+
getContext().startActivity(intent);
184+
}
185+
}
186+
155187
public boolean isTargetPresent(int resId) {
156188
return mGlowPadView.getTargetPosition(resId) != -1;
157189
}

policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusView.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import android.widget.GridLayout;
2222

2323
public class KeyguardStatusView extends GridLayout {
24+
@SuppressWarnings("unused")
2425
private KeyguardStatusViewManager mStatusViewManager;
2526

2627
public KeyguardStatusView(Context context) {

policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusViewManager.java

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,10 @@
3232
import android.text.format.DateFormat;
3333
import android.util.Log;
3434
import android.view.View;
35-
import android.widget.Button;
3635
import android.widget.TextView;
3736

3837
/***
39-
* Manages a number of views inside of LockScreen layouts. See below for a list of widgets
38+
* Manages a number of views inside of the given layout. See below for a list of widgets.
4039
*/
4140
class KeyguardStatusViewManager {
4241
private static final boolean DEBUG = false;
@@ -92,21 +91,12 @@ class KeyguardStatusViewManager {
9291
private boolean mShowingStatus;
9392
private CharSequence mPlmn;
9493
private CharSequence mSpn;
95-
protected int mPhoneState;
9694
private DigitalClock mDigitalClock;
9795
protected boolean mBatteryCharged;
9896
protected boolean mBatteryIsLow;
99-
private boolean mEmergencyButtonEnabledBecauseSimLocked;
100-
private Button mEmergencyCallButton;
101-
private boolean mEmergencyCallButtonEnabledInScreen;
10297

10398
/**
104-
*
10599
* @param view the containing view of all widgets
106-
* @param updateMonitor the update monitor to use
107-
* @param lockPatternUtils lock pattern util object
108-
* @param callback used to invoke emergency dialer
109-
* @param emergencyButtonEnabledInScreen whether emergency button is enabled by default
110100
*/
111101
public KeyguardStatusViewManager(View view) {
112102
if (DEBUG) Log.v(TAG, "KeyguardStatusViewManager()");
@@ -364,7 +354,6 @@ private void updateCarrierStateWithSimStatus(IccCardConstants.State simState) {
364354

365355
CharSequence carrierText = null;
366356
int carrierHelpTextId = 0;
367-
mEmergencyButtonEnabledBecauseSimLocked = false;
368357
mStatus = getStatusForIccState(simState);
369358
mSimState = simState;
370359
switch (mStatus) {
@@ -394,41 +383,32 @@ private void updateCarrierStateWithSimStatus(IccCardConstants.State simState) {
394383
carrierText = getContext().getText(
395384
R.string.lockscreen_permanent_disabled_sim_message_short);
396385
carrierHelpTextId = R.string.lockscreen_permanent_disabled_sim_instructions;
397-
mEmergencyButtonEnabledBecauseSimLocked = true;
398386
break;
399387

400388
case SimMissingLocked:
401389
carrierText = makeCarrierStringOnEmergencyCapable(
402390
getContext().getText(R.string.lockscreen_missing_sim_message_short),
403391
mPlmn);
404392
carrierHelpTextId = R.string.lockscreen_missing_sim_instructions;
405-
mEmergencyButtonEnabledBecauseSimLocked = true;
406393
break;
407394

408395
case SimLocked:
409396
carrierText = makeCarrierStringOnEmergencyCapable(
410397
getContext().getText(R.string.lockscreen_sim_locked_message),
411398
mPlmn);
412-
mEmergencyButtonEnabledBecauseSimLocked = true;
413399
break;
414400

415401
case SimPukLocked:
416402
carrierText = makeCarrierStringOnEmergencyCapable(
417403
getContext().getText(R.string.lockscreen_sim_puk_locked_message),
418404
mPlmn);
419-
if (!mLockPatternUtils.isPukUnlockScreenEnable()) {
420-
// This means we're showing the PUK unlock screen
421-
mEmergencyButtonEnabledBecauseSimLocked = true;
422-
}
423405
break;
424406
}
425407

426408
setCarrierText(carrierText);
427409
setCarrierHelpText(carrierHelpTextId);
428-
updateEmergencyCallButtonState(mPhoneState);
429410
}
430411

431-
432412
/*
433413
* Add emergencyCallMessage to carrier string only if phone supports emergency calls.
434414
*/
@@ -500,17 +480,6 @@ public boolean shouldShowStatusLines() {
500480
}
501481
}
502482

503-
private void updateEmergencyCallButtonState(int phoneState) {
504-
if (mEmergencyCallButton != null) {
505-
boolean enabledBecauseSimLocked =
506-
mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked()
507-
&& mEmergencyButtonEnabledBecauseSimLocked;
508-
boolean shown = mEmergencyCallButtonEnabledInScreen || enabledBecauseSimLocked;
509-
mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton,
510-
phoneState, shown);
511-
}
512-
}
513-
514483
private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
515484

516485
@Override
@@ -536,12 +505,6 @@ public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) {
536505
updateCarrierStateWithSimStatus(mSimState);
537506
}
538507

539-
@Override
540-
public void onPhoneStateChanged(int phoneState) {
541-
mPhoneState = phoneState;
542-
updateEmergencyCallButtonState(phoneState);
543-
}
544-
545508
@Override
546509
public void onSimStateChanged(IccCardConstants.State simState) {
547510
updateCarrierStateWithSimStatus(simState);

0 commit comments

Comments
 (0)