diff options
author | Jim Miller <jaggies@google.com> | 2012-09-06 18:45:18 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-06 18:45:18 -0700 |
commit | a56f8f7ca2298f1516115be60e07a8193737293e (patch) | |
tree | 2643aa259c8fa8c17ee2d3ee876d91104cccd92e | |
parent | 2b0442f33029c6b6cf1247a1633a97f5908d6cab (diff) | |
parent | 47df44aad773fb2a46d4c07e20278c7d8c0b16be (diff) | |
download | frameworks_base-a56f8f7ca2298f1516115be60e07a8193737293e.zip frameworks_base-a56f8f7ca2298f1516115be60e07a8193737293e.tar.gz frameworks_base-a56f8f7ca2298f1516115be60e07a8193737293e.tar.bz2 |
Merge "Fix EmergencyDialer button on devices without telephony hardware" into jb-mr1-dev
5 files changed, 49 insertions, 81 deletions
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java index 7e148b3..00bc9be 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java @@ -61,12 +61,6 @@ public class KeyguardHostView extends KeyguardViewBase { static final int APPWIDGET_HOST_ID = 0x4B455947; private static final String KEYGUARD_WIDGET_PREFS = "keyguard_widget_prefs"; - // time after launching EmergencyDialer before the screen goes blank. - private static final int EMERGENCY_CALL_TIMEOUT = 10000; - - // intent action for launching emergency dialer activity. - static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL"; - private static final String TAG = "KeyguardViewHost"; private static final int SECURITY_SELECTOR_ID = R.id.keyguard_selector_view; @@ -80,7 +74,6 @@ public class KeyguardHostView extends KeyguardViewBase { private AppWidgetHost mAppWidgetHost; private KeyguardWidgetPager mAppWidgetContainer; private ViewFlipper mViewFlipper; - private Button mEmergencyDialerButton; private boolean mEnableMenuKey; private boolean mIsVerifyUnlockOnly; private boolean mEnableFallback; // TODO: This should get the value from KeyguardPatternView @@ -146,14 +139,6 @@ public class KeyguardHostView extends KeyguardViewBase { Log.v("*********", "Can't find view id " + mViewIds[i]); } } - - // Enable emergency dialer button - mEmergencyDialerButton = (Button) findViewById(R.id.emergency_call_button); - mEmergencyDialerButton.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - takeEmergencyCallAction(); - } - }); } void setLockPatternUtils(LockPatternUtils utils) { @@ -229,22 +214,6 @@ public class KeyguardHostView extends KeyguardViewBase { }; - /** - * Shows the emergency dialer or returns the user to the existing call. - */ - public void takeEmergencyCallAction() { - mCallback.userActivity(EMERGENCY_CALL_TIMEOUT); - if (TelephonyManager.getDefault().getCallState() - == TelephonyManager.CALL_STATE_OFFHOOK) { - mLockPatternUtils.resumeCall(); - } else { - Intent intent = new Intent(ACTION_EMERGENCY_DIAL); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); - getContext().startActivity(intent); - } - } - private void showDialog(String title, String message) { final AlertDialog dialog = new AlertDialog.Builder(mContext) .setTitle(title) @@ -530,12 +499,14 @@ public class KeyguardHostView extends KeyguardViewBase { public void onScreenTurnedOn() { if (DEBUG) Log.d(TAG, "screen on"); showSecurityScreen(mCurrentSecurityId); + getSecurityView(mCurrentSecurityId).onResume(); } @Override public void onScreenTurnedOff() { if (DEBUG) Log.d(TAG, "screen off"); showSecurityScreen(SECURITY_SELECTOR_ID); + getSecurityView(mCurrentSecurityId).onPause(); } @Override diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityModel.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityModel.java index a19b35d..75c4a7c 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityModel.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityModel.java @@ -69,7 +69,8 @@ public class KeyguardSecurityModel { SecurityMode mode = SecurityMode.None; if (simState == IccCardConstants.State.PIN_REQUIRED) { mode = SecurityMode.SimPin; - } else if (simState == IccCardConstants.State.PUK_REQUIRED) { + } else if (simState == IccCardConstants.State.PUK_REQUIRED + && mLockPatternUtils.isPukUnlockScreenEnable()) { mode = SecurityMode.SimPuk; } else { final int security = mLockPatternUtils.getKeyguardStoredPasswordQuality(); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java index 28f5e8c..95772af 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java @@ -25,6 +25,7 @@ import android.content.Intent; import android.os.RemoteException; import android.os.UserHandle; import android.provider.MediaStore; +import android.telephony.TelephonyManager; import android.util.AttributeSet; import android.util.Log; import android.util.Slog; @@ -33,6 +34,7 @@ import android.widget.Button; import android.widget.LinearLayout; import com.android.internal.telephony.IccCardConstants; +import com.android.internal.telephony.IccCardConstants.State; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.multiwaveview.GlowPadView; import com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener; @@ -43,6 +45,9 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri private static final String TAG = "SecuritySelectorView"; private static final String ASSIST_ICON_METADATA_NAME = "com.android.systemui.action_assist_icon"; + private static final int EMERGENCY_CALL_TIMEOUT = 10000; // screen timeout after starting e.d. + static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL"; + private KeyguardSecurityCallback mCallback; private GlowPadView mGlowPadView; private Button mEmergencyCallButton; @@ -98,9 +103,19 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri }; - KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { + private void updateEmergencyCallButton(State simState, int phoneState) { + if (mEmergencyCallButton != null) { + boolean en = mLockPatternUtils.isEmergencyCallCapable() + || (phoneState == TelephonyManager.CALL_STATE_OFFHOOK); // voice call in progress + if (en && KeyguardUpdateMonitor.isSimLocked(simState)) { + // Some countries can't handle emergency calls while SIM is locked. + en = mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked(); + } + mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton, phoneState, en); + } + } - private boolean mEmergencyDialerDisableBecauseSimLocked; + KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { @Override public void onDevicePolicyManagerStateChanged() { @@ -108,19 +123,15 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri } @Override - public void onSimStateChanged(IccCardConstants.State simState) { - // Some carriers aren't capable of handling emergency calls while the SIM is locked - mEmergencyDialerDisableBecauseSimLocked = KeyguardUpdateMonitor.isSimLocked(simState) - && !mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked(); + public void onSimStateChanged(State simState) { + int phoneState = KeyguardUpdateMonitor.getInstance(mContext).getPhoneState(); + updateEmergencyCallButton(simState, phoneState); updateTargets(); } void onPhoneStateChanged(int phoneState) { - if (mEmergencyCallButton != null) { - mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked(); - mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton, - phoneState, !mEmergencyDialerDisableBecauseSimLocked); - } + State simState = KeyguardUpdateMonitor.getInstance(mContext).getSimState(); + updateEmergencyCallButton(simState, phoneState); }; }; @@ -149,9 +160,30 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view); mGlowPadView.setOnTriggerListener(mOnTriggerListener); mEmergencyCallButton = (Button) findViewById(R.id.emergency_call_button); + mEmergencyCallButton.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + takeEmergencyCallAction(); + } + }); updateTargets(); } + /** + * Shows the emergency dialer or returns the user to the existing call. + */ + public void takeEmergencyCallAction() { + mCallback.userActivity(EMERGENCY_CALL_TIMEOUT); + if (TelephonyManager.getDefault().getCallState() + == TelephonyManager.CALL_STATE_OFFHOOK) { + mLockPatternUtils.resumeCall(); + } else { + Intent intent = new Intent(ACTION_EMERGENCY_DIAL); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); + getContext().startActivity(intent); + } + } + public boolean isTargetPresent(int resId) { return mGlowPadView.getTargetPosition(resId) != -1; } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusView.java index 481e9ad..5704425 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusView.java @@ -21,6 +21,7 @@ import android.util.AttributeSet; import android.widget.GridLayout; public class KeyguardStatusView extends GridLayout { + @SuppressWarnings("unused") private KeyguardStatusViewManager mStatusViewManager; public KeyguardStatusView(Context context) { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusViewManager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusViewManager.java index 20fad0b..e325f94 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusViewManager.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusViewManager.java @@ -32,11 +32,10 @@ import android.text.TextUtils; import android.text.format.DateFormat; import android.util.Log; import android.view.View; -import android.widget.Button; import android.widget.TextView; /*** - * Manages a number of views inside of LockScreen layouts. See below for a list of widgets + * Manages a number of views inside of the given layout. See below for a list of widgets. */ class KeyguardStatusViewManager { private static final boolean DEBUG = false; @@ -92,21 +91,12 @@ class KeyguardStatusViewManager { private boolean mShowingStatus; private CharSequence mPlmn; private CharSequence mSpn; - protected int mPhoneState; private DigitalClock mDigitalClock; protected boolean mBatteryCharged; protected boolean mBatteryIsLow; - private boolean mEmergencyButtonEnabledBecauseSimLocked; - private Button mEmergencyCallButton; - private boolean mEmergencyCallButtonEnabledInScreen; /** - * * @param view the containing view of all widgets - * @param updateMonitor the update monitor to use - * @param lockPatternUtils lock pattern util object - * @param callback used to invoke emergency dialer - * @param emergencyButtonEnabledInScreen whether emergency button is enabled by default */ public KeyguardStatusViewManager(View view) { if (DEBUG) Log.v(TAG, "KeyguardStatusViewManager()"); @@ -364,7 +354,6 @@ class KeyguardStatusViewManager { CharSequence carrierText = null; int carrierHelpTextId = 0; - mEmergencyButtonEnabledBecauseSimLocked = false; mStatus = getStatusForIccState(simState); mSimState = simState; switch (mStatus) { @@ -394,7 +383,6 @@ class KeyguardStatusViewManager { carrierText = getContext().getText( R.string.lockscreen_permanent_disabled_sim_message_short); carrierHelpTextId = R.string.lockscreen_permanent_disabled_sim_instructions; - mEmergencyButtonEnabledBecauseSimLocked = true; break; case SimMissingLocked: @@ -402,33 +390,25 @@ class KeyguardStatusViewManager { getContext().getText(R.string.lockscreen_missing_sim_message_short), mPlmn); carrierHelpTextId = R.string.lockscreen_missing_sim_instructions; - mEmergencyButtonEnabledBecauseSimLocked = true; break; case SimLocked: carrierText = makeCarrierStringOnEmergencyCapable( getContext().getText(R.string.lockscreen_sim_locked_message), mPlmn); - mEmergencyButtonEnabledBecauseSimLocked = true; break; case SimPukLocked: carrierText = makeCarrierStringOnEmergencyCapable( getContext().getText(R.string.lockscreen_sim_puk_locked_message), mPlmn); - if (!mLockPatternUtils.isPukUnlockScreenEnable()) { - // This means we're showing the PUK unlock screen - mEmergencyButtonEnabledBecauseSimLocked = true; - } break; } setCarrierText(carrierText); setCarrierHelpText(carrierHelpTextId); - updateEmergencyCallButtonState(mPhoneState); } - /* * Add emergencyCallMessage to carrier string only if phone supports emergency calls. */ @@ -500,17 +480,6 @@ class KeyguardStatusViewManager { } } - private void updateEmergencyCallButtonState(int phoneState) { - if (mEmergencyCallButton != null) { - boolean enabledBecauseSimLocked = - mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked() - && mEmergencyButtonEnabledBecauseSimLocked; - boolean shown = mEmergencyCallButtonEnabledInScreen || enabledBecauseSimLocked; - mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton, - phoneState, shown); - } - } - private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { @Override @@ -537,12 +506,6 @@ class KeyguardStatusViewManager { } @Override - public void onPhoneStateChanged(int phoneState) { - mPhoneState = phoneState; - updateEmergencyCallButtonState(phoneState); - } - - @Override public void onSimStateChanged(IccCardConstants.State simState) { updateCarrierStateWithSimStatus(simState); } |