summaryrefslogtreecommitdiffstats
path: root/packages/Keyguard/src/com/android
diff options
context:
space:
mode:
Diffstat (limited to 'packages/Keyguard/src/com/android')
-rw-r--r--packages/Keyguard/src/com/android/keyguard/CarrierText.java19
-rw-r--r--packages/Keyguard/src/com/android/keyguard/EmergencyButton.java10
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java1
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java3
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java8
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java17
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java9
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java60
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