Fixing emergency dialer flicker on lock screen (issue 5314293)
Change-Id: Ia9bf4acb84923e200b89ee55fc53bc92877001cf
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 4d828c4..e3a4df9 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -936,9 +936,11 @@
*
* If there's currently a call in progress, the button will take them to the call
* @param button the button to update
+ * @param showIfCapable indicates whether the button should be shown if emergency calls are
+ * possible on the device
*/
- public void updateEmergencyCallButtonState(Button button) {
- if (isEmergencyCallCapable()) {
+ public void updateEmergencyCallButtonState(Button button, boolean showIfCapable) {
+ if (isEmergencyCallCapable() && showIfCapable) {
button.setVisibility(View.VISIBLE);
} else {
button.setVisibility(View.GONE);
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml
index 07b4837..dd29164 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml
@@ -80,7 +80,8 @@
android:layout_alignParentBottom="true"
android:drawableLeft="@drawable/ic_emergency"
style="@style/Widget.Button.Transparent"
- android:drawablePadding="8dip"/>
+ android:drawablePadding="8dip"
+ android:visibility="gone"/>
</RelativeLayout>>
diff --git a/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java b/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java
index 6ff9a60..f7d936c 100644
--- a/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java
@@ -112,7 +112,7 @@
mUpdateMonitor = updateMonitor;
mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, updateMonitor,
- lockPatternUtils, callback);
+ lockPatternUtils, callback, true);
}
public void afterTextChanged(Editable s) {
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
index 8654a25..61e30bf 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
@@ -87,7 +87,7 @@
private LockPatternUtils mLockPatternUtils;
private KeyguardUpdateMonitor mUpdateMonitor;
private Button mEmergencyCallButton;
- private boolean mShouldEnableUnlock;
+ private boolean mUnlockDisabledDueToSimState;
// Shadowed text values
private CharSequence mCarrierText;
@@ -97,7 +97,7 @@
private CharSequence mOwnerInfoText;
private boolean mShowingStatus;
private KeyguardScreenCallback mCallback;
- private boolean mHideEmergencyCallButton = false;
+ private final boolean mShowEmergencyButtonByDefault;
private class TransientTextManager {
private TextView mTextView;
@@ -149,7 +149,8 @@
};
public KeyguardStatusViewManager(View view, KeyguardUpdateMonitor updateMonitor,
- LockPatternUtils lockPatternUtils, KeyguardScreenCallback callback) {
+ LockPatternUtils lockPatternUtils, KeyguardScreenCallback callback,
+ boolean showEmergencyButtonByDefault) {
mContainer = view;
mDateFormatString = getContext().getString(R.string.full_wday_month_day_no_year);
mLockPatternUtils = lockPatternUtils;
@@ -163,6 +164,7 @@
mOwnerInfoView = (TextView) findViewById(R.id.propertyOf);
mTransportView = (TransportControlView) findViewById(R.id.transport);
mEmergencyCallButton = (Button) findViewById(R.id.emergencyCallButton);
+ mShowEmergencyButtonByDefault = showEmergencyButtonByDefault;
if (mEmergencyCallButton != null) {
mEmergencyCallButton.setText(R.string.lockscreen_emergency_call);
mEmergencyCallButton.setOnClickListener(this);
@@ -393,10 +395,6 @@
}
}
- boolean shouldEnableUnlock() {
- return mShouldEnableUnlock;
- }
-
/**
* Determine the current status of the lock screen given the sim state and other stuff.
*/
@@ -443,9 +441,8 @@
CharSequence carrierText = null;
int carrierHelpTextId = 0;
- mShouldEnableUnlock = true;
+ mUnlockDisabledDueToSimState = false;
mStatus = getStatusForIccState(simState);
-
switch (mStatus) {
case Normal:
carrierText = LockPatternUtils.getCarrierString(mUpdateMonitor.getTelephonyPlmn(),
@@ -466,13 +463,14 @@
case SimPermDisabled:
carrierText = getContext().getText(R.string.lockscreen_missing_sim_message_short);
carrierHelpTextId = R.string.lockscreen_permanent_disabled_sim_instructions;
+ mUnlockDisabledDueToSimState = true;
break;
case SimMissingLocked:
carrierText = LockPatternUtils.getCarrierString(mUpdateMonitor.getTelephonyPlmn(),
getContext().getText(R.string.lockscreen_missing_sim_message_short));
carrierHelpTextId = R.string.lockscreen_missing_sim_instructions;
- mShouldEnableUnlock = false;
+ mUnlockDisabledDueToSimState = true;
break;
case SimLocked:
@@ -484,7 +482,7 @@
carrierText = LockPatternUtils.getCarrierString(mUpdateMonitor.getTelephonyPlmn(),
getContext().getText(R.string.lockscreen_sim_puk_locked_message));
if (!mLockPatternUtils.isPukUnlockScreenEnable()) {
- mShouldEnableUnlock = false;
+ mUnlockDisabledDueToSimState = true;
}
break;
}
@@ -556,10 +554,8 @@
private void updateEmergencyCallButtonState() {
if (mEmergencyCallButton != null) {
- mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton);
- if (mHideEmergencyCallButton) {
- mEmergencyCallButton.setVisibility(View.GONE);
- }
+ boolean showIfCapable = mShowEmergencyButtonByDefault || mUnlockDisabledDueToSimState;
+ mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton, showIfCapable);
}
}
@@ -608,9 +604,4 @@
mCallback.takeEmergencyCallAction();
}
}
-
- public void hideEmergencyCallButton() {
- mHideEmergencyCallButton = true;
- }
-
}
diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java
index 4f6df36..3469483 100644
--- a/policy/src/com/android/internal/policy/impl/LockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/LockScreen.java
@@ -336,10 +336,7 @@
}
mStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor, mLockPatternUtils,
- mCallback);
-
- // LockScreen doesn't show the emergency call button by default
- mStatusViewManager.hideEmergencyCallButton();
+ mCallback, false);
setFocusable(true);
setFocusableInTouchMode(true);
diff --git a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
index 2f2d3b7..6d2f2f2 100644
--- a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
@@ -98,7 +98,7 @@
}
mStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor, mLockPatternUtils,
- mCallback);
+ mCallback, true);
final int quality = lockPatternUtils.getKeyguardStoredPasswordQuality();
mIsAlpha = DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC == quality
diff --git a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
index 0cafeb5..e70892c 100644
--- a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
@@ -171,7 +171,7 @@
}
mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor,
- mLockPatternUtils, mCallback);
+ mLockPatternUtils, mCallback, true);
mLockPatternView = (LockPatternView) findViewById(R.id.lockPattern);
diff --git a/policy/src/com/android/internal/policy/impl/SimPukUnlockScreen.java b/policy/src/com/android/internal/policy/impl/SimPukUnlockScreen.java
index 520d302..35421c7 100644
--- a/policy/src/com/android/internal/policy/impl/SimPukUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/SimPukUnlockScreen.java
@@ -117,7 +117,7 @@
requestFocus(mPukText);
mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, updateMonitor,
- lockpatternutils, callback);
+ lockpatternutils, callback, true);
setFocusableInTouchMode(true);
}
diff --git a/policy/src/com/android/internal/policy/impl/SimUnlockScreen.java b/policy/src/com/android/internal/policy/impl/SimUnlockScreen.java
index 1acf681..184748a 100644
--- a/policy/src/com/android/internal/policy/impl/SimUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/SimUnlockScreen.java
@@ -100,7 +100,7 @@
mOkButton.setOnClickListener(this);
mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, updateMonitor,
- lockpatternutils, callback);
+ lockpatternutils, callback, true);
setFocusableInTouchMode(true);
}