diff --git a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java index 6badaaf542d14..8cdcb7a36b372 100644 --- a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java +++ b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java @@ -102,6 +102,8 @@ public class EmergencyButton extends Button { == TelephonyManager.CALL_STATE_OFFHOOK) { mLockPatternUtils.resumeCall(); } else { + final boolean bypassHandler = true; + KeyguardUpdateMonitor.getInstance(mContext).reportEmergencyCallAction(bypassHandler); Intent intent = new Intent(ACTION_EMERGENCY_DIAL); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java index 3e499b2b0be73..c2cd32f79298c 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java @@ -295,6 +295,13 @@ public class KeyguardFaceUnlockView extends LinearLayout implements KeyguardSecu } } } + + @Override + public void onEmergencyCallAction() { + if (mBiometricUnlock != null) { + mBiometricUnlock.stop(); + } + } }; @Override diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index dcec6541ce5d3..f4bbf9adda387 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -91,6 +91,7 @@ public class KeyguardUpdateMonitor { private static final int MSG_SET_CURRENT_CLIENT_ID = 315; protected static final int MSG_SET_PLAYBACK_STATE = 316; protected static final int MSG_USER_INFO_CHANGED = 317; + protected static final int MSG_REPORT_EMERGENCY_CALL_ACTION = 318; private static KeyguardUpdateMonitor sInstance; @@ -181,6 +182,9 @@ public class KeyguardUpdateMonitor { case MSG_USER_INFO_CHANGED: handleUserInfoChanged(msg.arg1); break; + case MSG_REPORT_EMERGENCY_CALL_ACTION: + handleReportEmergencyCallAction(); + break; } } }; @@ -758,6 +762,18 @@ public class KeyguardUpdateMonitor { } } + /** + * Handle {@link #MSG_REPORT_EMERGENCY_CALL_ACTION} + */ + private void handleReportEmergencyCallAction() { + for (int i = 0; i < mCallbacks.size(); i++) { + KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); + if (cb != null) { + cb.onEmergencyCallAction(); + } + } + } + public boolean isKeyguardVisible() { return mKeyguardIsVisible; } @@ -902,6 +918,22 @@ public class KeyguardUpdateMonitor { handleSimStateChange(new SimArgs(IccCardConstants.State.READY)); } + /** + * Report that the emergency call button has been pressed and the emergency dialer is + * about to be displayed. + * + * @param bypassHandler runs immediately. + * + * NOTE: Must be called from UI thread if bypassHandler == true. + */ + public void reportEmergencyCallAction(boolean bypassHandler) { + if (!bypassHandler) { + mHandler.obtainMessage(MSG_REPORT_EMERGENCY_CALL_ACTION).sendToTarget(); + } else { + handleReportEmergencyCallAction(); + } + } + public CharSequence getTelephonyPlmn() { return mTelephonyPlmn; } diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java index 30b43f5e87e7a..b0511e56a6b19 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java @@ -131,4 +131,8 @@ class KeyguardUpdateMonitorCallback { */ public void onMusicPlaybackStateChanged(int playbackState, long eventTime) { } + /** + * Called when the emergency call button is pressed. + */ + void onEmergencyCallAction() { } }