diff options
Diffstat (limited to 'packages/Keyguard/src/com/android/keyguard')
8 files changed, 101 insertions, 26 deletions
diff --git a/packages/Keyguard/src/com/android/keyguard/CarrierText.java b/packages/Keyguard/src/com/android/keyguard/CarrierText.java index 8dd56fa..f21ce7f 100644 --- a/packages/Keyguard/src/com/android/keyguard/CarrierText.java +++ b/packages/Keyguard/src/com/android/keyguard/CarrierText.java @@ -188,6 +188,25 @@ public class CarrierText extends TextView { } } } + /* + * In the case where there is only one sim inserted in a multisim device, if + * the voice registration service state is reported as 12 (no service with emergency) + * for at least one of the sim concatenate the sim state with Emergency calls only" + */ + if (N < TelephonyManager.getDefault().getPhoneCount() && + mKeyguardUpdateMonitor.isEmergencyOnly()) { + int presentSubId = mKeyguardUpdateMonitor.getPresentSubId(); + + if (DEBUG) { + Log.d(TAG, " Present sim - sub id: " + presentSubId); + } + if (presentSubId != -1) { + CharSequence emergencyOnlyText = + getContext().getText(com.android.internal.R.string.emergency_calls_only); + displayText = getCarrierTextForSimState( + mKeyguardUpdateMonitor.getSimState(presentSubId), emergencyOnlyText); + } + } if (allSimsMissing) { if (N != 0) { // Shows "No SIM card | Emergency calls only" on devices that are voice-capable. diff --git a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java index cbf22c0..93809af 100644 --- a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java +++ b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java @@ -16,15 +16,18 @@ package com.android.keyguard; +import android.app.ActivityManagerNative; import android.app.ActivityOptions; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.os.PowerManager; +import android.os.RemoteException; import android.os.SystemClock; import android.os.UserHandle; import android.telecom.TelecomManager; import android.util.AttributeSet; +import android.util.Slog; import android.view.View; import android.widget.Button; @@ -46,6 +49,8 @@ public class EmergencyButton extends Button { | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_CLEAR_TOP); + private static final String LOG_TAG = "EmergencyButton"; + KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { @Override @@ -121,6 +126,11 @@ public class EmergencyButton extends Button { // TODO: implement a shorter timeout once new PowerManager API is ready. // should be the equivalent to the old userActivity(EMERGENCY_CALL_TIMEOUT) mPowerManager.userActivity(SystemClock.uptimeMillis(), true); + try { + ActivityManagerNative.getDefault().stopLockTaskMode(); + } catch (RemoteException e) { + Slog.w(LOG_TAG, "Failed to stop app pinning"); + } if (isInCall()) { resumeCall(); if (mEmergencyButtonCallback != null) { diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java index b03871a..7fbd658 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java @@ -147,6 +147,7 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout private void onPasswordChecked(boolean matched, int timeoutMs, boolean isValidPassword) { if (matched) { + mLockPatternUtils.sanitizePassword(); mDismissing = true; mCallback.reportUnlockAttempt(true, 0); mCallback.dismiss(true); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java index e8dd871..446f6c1 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java @@ -133,7 +133,7 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit mLockPatternView.setSaveEnabled(false); mLockPatternView.setOnPatternListener(new UnlockPatternListener()); mLockPatternView.setLockPatternUtils(mLockPatternUtils); - mLockPatternView.setLockPatternSize(mLockPatternUtils.getLockPatternSize()); + mLockPatternView.setLockPatternSize(mLockPatternUtils.getLockPatternSize(KeyguardUpdateMonitor.getCurrentUser())); mLockPatternView.setVisibleDots(mLockPatternUtils.isVisibleDotsEnabled( KeyguardUpdateMonitor.getCurrentUser())); @@ -262,6 +262,7 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit private void onPatternChecked(boolean matched, int timeoutMs, boolean isValidPattern) { if (matched) { + mLockPatternUtils.sanitizePassword(); mCallback.reportUnlockAttempt(true, 0); mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Correct); mCallback.dismiss(true); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java index 77215a7..827b378 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -19,6 +19,7 @@ import android.app.Activity; import android.app.AlertDialog; import android.app.admin.DevicePolicyManager; import android.content.Context; +import android.os.RemoteException; import android.os.UserHandle; import android.util.AttributeSet; import android.util.Log; @@ -26,6 +27,7 @@ import android.util.Slog; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; +import android.view.WindowManagerGlobal; import android.widget.FrameLayout; import com.android.internal.widget.LockPatternUtils; @@ -353,6 +355,12 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe } } if (finish) { + try { + WindowManagerGlobal.getWindowManagerService() + .setLiveLockscreenEdgeDetector(false); + } catch (RemoteException e){ + Log.e(TAG, e.getMessage()); + } mSecurityCallback.finish(strongAuth); } return finish; diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java index 6012c45..a47e3f5 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java @@ -202,25 +202,10 @@ public class KeyguardSecurityViewFlipper extends ViewFlipper implements Keyguard final int widthSize = MeasureSpec.getSize(widthSpec); final int heightSize = MeasureSpec.getSize(heightSpec); - int maxWidth = widthSize; - int maxHeight = heightSize; final int count = getChildCount(); - for (int i = 0; i < count; i++) { - final View child = getChildAt(i); - final LayoutParams lp = (LayoutParams) child.getLayoutParams(); - - if (lp.maxWidth > 0 && lp.maxWidth < maxWidth) { - maxWidth = lp.maxWidth; - } - if (lp.maxHeight > 0 && lp.maxHeight < maxHeight) { - maxHeight = lp.maxHeight; - } - } final int wPadding = getPaddingLeft() + getPaddingRight(); final int hPadding = getPaddingTop() + getPaddingBottom(); - maxWidth = Math.max(0, maxWidth - wPadding); - maxHeight = Math.max(0, maxHeight - hPadding); int width = widthMode == MeasureSpec.EXACTLY ? widthSize : 0; int height = heightMode == MeasureSpec.EXACTLY ? heightSize : 0; @@ -228,6 +213,8 @@ public class KeyguardSecurityViewFlipper extends ViewFlipper implements Keyguard final View child = getChildAt(i); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + int maxWidth = Math.max(0, lp.maxWidth - wPadding); + int maxHeight = Math.max(0, lp.maxHeight - hPadding); final int childWidthSpec = makeChildMeasureSpec(maxWidth, lp.width); final int childHeightSpec = makeChildMeasureSpec(maxHeight, lp.height); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java index 4d26adf..0d74184 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java @@ -260,6 +260,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { mRemainingAttempts = -1; KeyguardUpdateMonitor.getInstance(getContext()) .reportSimUnlocked(mSubId); + mShowDefaultMessage = true; if (mCallback != null) { mCallback.dismiss(true); } @@ -327,8 +328,12 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { msg = rez.getString(R.string.kg_sim_pin_instructions); } else { SubscriptionInfo info = monitor.getSubscriptionInfoForSubId(mSubId); - CharSequence displayName = info != null ? info.getDisplayName() : ""; // don't crash - msg = rez.getString(R.string.kg_sim_pin_instructions_multi, displayName); + if (rez.getBoolean(R.bool.kg_sim_display_name)) { + CharSequence displayName = info != null ? info.getDisplayName() : ""; // don't crash + msg = rez.getString(R.string.kg_sim_pin_instructions_multi, displayName); + } else { + msg = rez.getString(R.string.kg_sim_pin_instructions); + } if (info != null) { color = info.getIconTint(); } diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index 5e09729..70a9f5c 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -69,6 +69,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map.Entry; +import cyanogenmod.providers.CMSettings; + import static android.os.BatteryManager.BATTERY_HEALTH_UNKNOWN; import static android.os.BatteryManager.BATTERY_STATUS_FULL; import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN; @@ -381,6 +383,36 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { return mSubscriptionInfo; } + public boolean isEmergencyOnly() { + boolean isEmerg = false; + ServiceState state; + for (int slotId = 0; slotId < TelephonyManager.getDefault().getPhoneCount(); slotId++) { + state = null; + int[] subId = mSubscriptionManager.getSubId(slotId); + if (subId != null && subId.length > 0) { + state = mServiceStates.get(subId[0]); + } + if (state != null) { + if (state.getVoiceRegState() == ServiceState.STATE_IN_SERVICE) + return false; + else if (state.isEmergencyOnly()) { + isEmerg = true; + } + } + } + return isEmerg; + } + + public int getPresentSubId() { + for (int slotId = 0; slotId < TelephonyManager.getDefault().getPhoneCount(); slotId++) { + int[] subId = mSubscriptionManager.getSubId(slotId); + if (subId != null && subId.length > 0 && getSimState(subId[0]) != State.ABSENT) { + return subId[0]; + } + } + return -1; + } + @Override public void onTrustManagedChanged(boolean managed, int userId) { mUserTrustIsManaged.put(userId, managed); @@ -430,7 +462,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } } - private void handleFingerprintAuthenticated() { + + private void handleFingerprintAuthenticated(int authUserId) { try { final int userId; try { @@ -439,6 +472,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { Log.e(TAG, "Failed to get current user id: ", e); return; } + if (userId != authUserId) { + Log.d(TAG, "Fingerprint authenticated for wrong user: " + authUserId); + return; + } if (isFingerprintDisabled(userId)) { Log.d(TAG, "Fingerprint disabled by DPM for userId: " + userId); return; @@ -705,7 +742,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { @Override public void onAuthenticationSucceeded(AuthenticationResult result) { - handleFingerprintAuthenticated(); + handleFingerprintAuthenticated(result.getUserId()); } @Override @@ -1048,9 +1085,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } private boolean shouldListenForFingerprint() { - return (mKeyguardIsVisible || !mDeviceInteractive || mBouncer || mGoingToSleep) - && !mSwitchingUser && !mFingerprintAlreadyAuthenticated - && !isFingerprintDisabled(getCurrentUser()); + if (!mSwitchingUser && !mFingerprintAlreadyAuthenticated + && !isFingerprintDisabled(getCurrentUser())) { + if (mContext.getResources().getBoolean( + com.android.keyguard.R.bool.config_fingerprintWakeAndUnlock)) { + return mKeyguardIsVisible || !mDeviceInteractive || mBouncer || mGoingToSleep; + } else { + return mDeviceInteractive && (mKeyguardIsVisible || mBouncer); + } + } + return false; } private void startListeningForFingerprint() { @@ -1088,8 +1132,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } private boolean isDeviceProvisionedInSettingsDb() { - return Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.DEVICE_PROVISIONED, 0) != 0; + return CMSettings.Secure.getInt(mContext.getContentResolver(), + CMSettings.Secure.CM_SETUP_WIZARD_COMPLETED, 0) != 0; } private void watchForDeviceProvisioning() { @@ -1106,7 +1150,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { }; mContext.getContentResolver().registerContentObserver( - Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED), + CMSettings.Secure.getUriFor(CMSettings.Secure.CM_SETUP_WIZARD_COMPLETED), false, mDeviceProvisionedObserver); // prevent a race condition between where we check the flag and where we register the |