Merge "Support changes to SuggestionParser"
diff --git a/res/layout/app_header.xml b/res/layout/app_header.xml
index 6c13ae8..2d8a099 100644
--- a/res/layout/app_header.xml
+++ b/res/layout/app_header.xml
@@ -50,7 +50,8 @@
android:minWidth="0dp"
android:contentDescription="@string/notification_app_settings_button"
android:scaleType="center"
- android:src="@drawable/ic_info"
+ android:src="@drawable/ic_settings_24dp"
+ android:visibility="gone"
style="?android:attr/borderlessButtonStyle" />
</RelativeLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9336fee..8a1a76a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5295,6 +5295,10 @@
<string name="user_enable_calling_and_sms_confirm_title">Turn on phone calls & SMS?</string>
<!-- Message for confirmation of turning on calls and SMS [CHAR LIMIT=none] -->
<string name="user_enable_calling_and_sms_confirm_message">Call and SMS history will be shared with this user.</string>
+ <!-- Title for the emergency info preference [CHAR LIMIT=40] -->
+ <string name="emergency_info_title">Emergency information</string>
+ <!-- Description of the emergency info preference [CHAR LIMIT=80] -->
+ <string name="emergency_info_subtitle">Accessible through lock screen in the emergency dialer</string>
<!-- Application Restrictions screen title [CHAR LIMIT=45] -->
<string name="application_restrictions">Allow apps and content</string>
diff --git a/res/xml/user_settings.xml b/res/xml/user_settings.xml
index 4fefc10..ac2685f 100644
--- a/res/xml/user_settings.xml
+++ b/res/xml/user_settings.xml
@@ -35,5 +35,9 @@
android:key="add_users_when_locked"
android:title="@string/user_add_on_lockscreen_menu"
android:summary="@string/user_add_on_lockscreen_menu_summary" />
+ <Preference
+ android:key="emergency_info"
+ android:title="@string/emergency_info_title"
+ android:summary="@string/emergency_info_subtitle"/>
</PreferenceCategory>
</PreferenceScreen>
diff --git a/src/com/android/settings/AppHeader.java b/src/com/android/settings/AppHeader.java
index 36026bb..0351ed5 100644
--- a/src/com/android/settings/AppHeader.java
+++ b/src/com/android/settings/AppHeader.java
@@ -58,7 +58,7 @@
}
public static View setupHeaderView(final Activity activity, Drawable icon, CharSequence label,
- final String pkgName, final int uid, boolean includeAppInfo, int tintColorRes,
+ final String pkgName, final int uid, final boolean includeAppInfo, int tintColorRes,
View bar) {
final ImageView appIcon = (ImageView) bar.findViewById(R.id.app_icon);
appIcon.setImageDrawable(icon);
@@ -69,19 +69,20 @@
final TextView appName = (TextView) bar.findViewById(R.id.app_name);
appName.setText(label);
- final View appSettings = bar.findViewById(R.id.app_settings);
- if (includeAppInfo && pkgName != null && !pkgName.equals(Utils.OS_PKG)) {
- appSettings.setClickable(true);
- appSettings.setOnClickListener(new OnClickListener() {
+ if (pkgName != null && !pkgName.equals(Utils.OS_PKG)) {
+ bar.setClickable(true);
+ bar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- AppInfoBase.startAppInfoFragment(InstalledAppDetails.class,
- R.string.application_info_label, pkgName, uid, activity,
- INSTALLED_APP_DETAILS);
+ if (includeAppInfo) {
+ AppInfoBase.startAppInfoFragment(InstalledAppDetails.class,
+ R.string.application_info_label, pkgName, uid, activity,
+ INSTALLED_APP_DETAILS);
+ } else {
+ activity.finish();
+ }
}
});
- } else {
- appSettings.setVisibility(View.GONE);
}
return bar;
}
diff --git a/src/com/android/settings/ChooseLockSettingsHelper.java b/src/com/android/settings/ChooseLockSettingsHelper.java
index 70ecdfd..1035ef1 100644
--- a/src/com/android/settings/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/ChooseLockSettingsHelper.java
@@ -150,6 +150,23 @@
false, false, true, challenge, Utils.getCredentialOwnerUserId(mActivity));
}
+ /**
+ * If a pattern, password or PIN exists, prompt the user before allowing them to change it.
+ * @param message optional message to display about the action about to be done
+ * @param details optional detail message to display
+ * @param challenge a challenge to be verified against the device credential.
+ * This method can only be called internally.
+ * @param userId The userId for whom the lock should be confirmed.
+ * @return true if one exists and we launched an activity to confirm it
+ * @see #onActivityResult(int, int, android.content.Intent)
+ */
+ public boolean launchConfirmationActivity(int request, @Nullable CharSequence title,
+ @Nullable CharSequence header, @Nullable CharSequence description,
+ long challenge, int userId) {
+ return launchConfirmationActivity(request, title, header, description,
+ false, false, true, challenge, Utils.enforceSameOwner(mActivity, userId));
+ }
+
private boolean launchConfirmationActivity(int request, @Nullable CharSequence title,
@Nullable CharSequence header, @Nullable CharSequence description,
boolean returnCredentials, boolean external, boolean hasChallenge,
diff --git a/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java b/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java
index 86c9fca..40e3103 100644
--- a/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java
+++ b/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java
@@ -22,6 +22,7 @@
import android.app.ActivityOptions;
import android.app.IActivityManager;
import android.app.admin.DevicePolicyManager;
+import android.app.trust.TrustManager;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
@@ -63,12 +64,16 @@
private boolean mAllowFpAuthentication;
protected Button mCancelButton;
protected ImageView mFingerprintIcon;
+ protected int mEffectiveUserId;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAllowFpAuthentication = getActivity().getIntent().getBooleanExtra(
ALLOW_FP_AUTHENTICATION, false);
+ // Only take this argument into account if it belongs to the current profile.
+ Intent intent = getActivity().getIntent();
+ mEffectiveUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras());
}
@Override
@@ -78,7 +83,7 @@
mFingerprintIcon = (ImageView) view.findViewById(R.id.fingerprintIcon);
mFingerprintHelper = new FingerprintUiHelper(
mFingerprintIcon,
- (TextView) view.findViewById(R.id.errorText), this);
+ (TextView) view.findViewById(R.id.errorText), this, mEffectiveUserId);
boolean showCancelButton = getActivity().getIntent().getBooleanExtra(
SHOW_CANCEL_BUTTON, false);
mCancelButton.setVisibility(showCancelButton ? View.VISIBLE : View.GONE);
@@ -132,7 +137,12 @@
public void onAuthenticated() {
// Check whether we are still active.
if (getActivity() != null && getActivity().isResumed()) {
+ TrustManager trustManager =
+ (TrustManager) getActivity().getSystemService(Context.TRUST_SERVICE);
+ trustManager.setDeviceLockedForUser(mEffectiveUserId, false);
authenticationSucceeded();
+ authenticationSucceeded();
+ checkForPendingIntent();
}
}
diff --git a/src/com/android/settings/ConfirmLockPassword.java b/src/com/android/settings/ConfirmLockPassword.java
index f6347c1..e1362ea 100644
--- a/src/com/android/settings/ConfirmLockPassword.java
+++ b/src/com/android/settings/ConfirmLockPassword.java
@@ -99,7 +99,6 @@
private AppearAnimationUtils mAppearAnimationUtils;
private DisappearAnimationUtils mDisappearAnimationUtils;
private boolean mBlockImm;
- private int mEffectiveUserId;
// required constructor for fragments
public ConfirmLockPasswordFragment() {
@@ -110,9 +109,6 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLockPatternUtils = new LockPatternUtils(getActivity());
- Intent intent = getActivity().getIntent();
- // Only take this argument into account if it belongs to the current profile.
- mEffectiveUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras());
}
@Override
@@ -183,14 +179,13 @@
private int getDefaultDetails() {
boolean isProfile = Utils.isManagedProfile(
UserManager.get(getActivity()), mEffectiveUserId);
- if (mIsAlpha && !isProfile) {
- return R.string.lockpassword_confirm_your_password_generic;
- } else if (mIsAlpha && isProfile) {
- return R.string.lockpassword_confirm_your_password_generic_profile;
- } else if (!isProfile) {
- return R.string.lockpassword_confirm_your_pin_generic;
+ if (mIsAlpha) {
+ return isProfile ? R.string.lockpassword_confirm_your_password_generic_profile
+ : R.string.lockpassword_confirm_your_password_generic;
+ } else {
+ return isProfile ? R.string.lockpassword_confirm_your_pin_generic_profile
+ : R.string.lockpassword_confirm_your_pin_generic;
}
- return R.string.lockpassword_confirm_your_pin_generic_profile;
}
private int getErrorMessage() {
diff --git a/src/com/android/settings/ConfirmLockPattern.java b/src/com/android/settings/ConfirmLockPattern.java
index 5c72bd1..922d1c7 100644
--- a/src/com/android/settings/ConfirmLockPattern.java
+++ b/src/com/android/settings/ConfirmLockPattern.java
@@ -104,8 +104,6 @@
private AppearAnimationUtils mAppearAnimationUtils;
private DisappearAnimationUtils mDisappearAnimationUtils;
- private int mEffectiveUserId;
-
// required constructor for fragments
public ConfirmLockPatternFragment() {
@@ -115,9 +113,6 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLockPatternUtils = new LockPatternUtils(getActivity());
- Intent intent = getActivity().getIntent();
- // Only take this argument into account if it belongs to the current profile.
- mEffectiveUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras());
}
@Override
diff --git a/src/com/android/settings/ProfileChallengePreferenceFragment.java b/src/com/android/settings/ProfileChallengePreferenceFragment.java
index 4b57552..5d39641 100644
--- a/src/com/android/settings/ProfileChallengePreferenceFragment.java
+++ b/src/com/android/settings/ProfileChallengePreferenceFragment.java
@@ -25,6 +25,8 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.UserInfo;
+import android.hardware.fingerprint.Fingerprint;
+import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
@@ -34,12 +36,15 @@
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
import android.support.v7.preference.Preference.OnPreferenceClickListener;
+import android.util.Log;
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceScreen;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.fingerprint.FingerprintEnrollIntroduction;
+import com.android.settings.fingerprint.FingerprintSettings;
import java.util.Collections;
import java.util.HashSet;
@@ -218,6 +223,7 @@
PreferenceGroup securityCategory = (PreferenceGroup)
root.findPreference(KEY_SECURITY_CATEGORY);
if (securityCategory != null) {
+ maybeAddFingerprintPreference(securityCategory);
if (mLockPatternUtils.isSeparateProfileChallengeEnabled(mProfileUserId)) {
maybeAddUnificationPreference(securityCategory);
} else {
@@ -241,6 +247,14 @@
}
}
+ private void maybeAddFingerprintPreference(PreferenceGroup securityCategory) {
+ Preference fingerprintPreference =
+ FingerprintSettings.getFingerprintPreferenceForUser(getActivity(), mProfileUserId);
+ if (fingerprintPreference != null) {
+ securityCategory.addPreference(fingerprintPreference);
+ }
+ }
+
private void removeNonWhitelistedItems(PreferenceGroup prefScreen) {
int numPreferences = prefScreen.getPreferenceCount();
int i = 0;
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index d39203d..a324d9c 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -90,7 +90,6 @@
private static final String KEY_OWNER_INFO_SETTINGS = "owner_info_settings";
private static final String KEY_ADVANCED_SECURITY = "advanced_security";
private static final String KEY_MANAGE_TRUST_AGENTS = "manage_trust_agents";
- private static final String KEY_FINGERPRINT_SETTINGS = "fingerprint_settings";
private static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST = 123;
private static final int CHANGE_TRUST_AGENT_SETTINGS = 126;
@@ -375,32 +374,12 @@
}
private void maybeAddFingerprintPreference(PreferenceGroup securityCategory) {
- FingerprintManager fpm = (FingerprintManager) getActivity().getSystemService(
- Context.FINGERPRINT_SERVICE);
- if (!fpm.isHardwareDetected()) {
- Log.v(TAG, "No fingerprint hardware detected!!");
- return;
+ Preference fingerprintPreference =
+ FingerprintSettings.getFingerprintPreferenceForUser(
+ securityCategory.getContext(), UserHandle.myUserId());
+ if (fingerprintPreference != null) {
+ securityCategory.addPreference(fingerprintPreference);
}
- Preference fingerprintPreference = new Preference(securityCategory.getContext());
- fingerprintPreference.setKey(KEY_FINGERPRINT_SETTINGS);
- fingerprintPreference.setTitle(R.string.security_settings_fingerprint_preference_title);
- Intent intent = new Intent();
- final List<Fingerprint> items = fpm.getEnrolledFingerprints();
- final int fingerprintCount = items != null ? items.size() : 0;
- final String clazz;
- if (fingerprintCount > 0) {
- fingerprintPreference.setSummary(getResources().getQuantityString(
- R.plurals.security_settings_fingerprint_preference_summary,
- fingerprintCount, fingerprintCount));
- clazz = FingerprintSettings.class.getName();
- } else {
- fingerprintPreference.setSummary(
- R.string.security_settings_fingerprint_preference_summary_none);
- clazz = FingerprintEnrollIntroduction.class.getName();
- }
- intent.setClassName("com.android.settings", clazz);
- fingerprintPreference.setIntent(intent);
- securityCategory.addPreference(fingerprintPreference);
}
private void addTrustAgentSettings(PreferenceGroup securityCategory) {
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollBase.java b/src/com/android/settings/fingerprint/FingerprintEnrollBase.java
index 2843040..20bbadc 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollBase.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollBase.java
@@ -20,6 +20,7 @@
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
+import android.os.UserHandle;
import android.text.TextUtils;
import android.view.View;
import android.view.WindowManager;
@@ -42,6 +43,7 @@
static final int RESULT_TIMEOUT = FingerprintSettings.RESULT_TIMEOUT;
protected byte[] mToken;
+ protected int mUserId;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -53,6 +55,7 @@
mToken = savedInstanceState.getByteArray(
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
}
+ mUserId = getIntent().getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId());
}
@Override
@@ -127,6 +130,9 @@
Intent intent = new Intent();
intent.setClassName("com.android.settings", FingerprintEnrollEnrolling.class.getName());
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
+ if (mUserId != UserHandle.USER_NULL) {
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ }
return intent;
}
}
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
index 322a92c..36dfbfe 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
@@ -32,6 +32,7 @@
import android.graphics.drawable.Drawable;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import android.os.UserHandle;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.AnimationUtils;
@@ -221,6 +222,9 @@
Intent intent = getFinishIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
+ if (mUserId != UserHandle.USER_NULL) {
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ }
startActivity(intent);
finish();
}
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
index c17dc70..b858950 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
@@ -19,6 +19,7 @@
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import android.os.UserHandle;
import com.android.internal.logging.MetricsLogger;
import com.android.settings.ChooseLockSettingsHelper;
@@ -173,10 +174,17 @@
private void launchConfirmLock() {
long challenge = getSystemService(FingerprintManager.class).preEnroll();
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this);
- if (!helper.launchConfirmationActivity(CONFIRM_REQUEST,
+ boolean launchedConfirmationActivity = false;
+ if (mUserId == UserHandle.USER_NULL) {
+ launchedConfirmationActivity = helper.launchConfirmationActivity(CONFIRM_REQUEST,
getString(R.string.security_settings_fingerprint_preference_title),
- null, null, challenge)) {
-
+ null, null, challenge);
+ } else {
+ launchedConfirmationActivity = helper.launchConfirmationActivity(CONFIRM_REQUEST,
+ getString(R.string.security_settings_fingerprint_preference_title),
+ null, null, challenge, mUserId);
+ }
+ if (!launchedConfirmationActivity) {
// This shouldn't happen, as we should only end up at this step if a lock thingy is
// already set.
finish();
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
index 80124e0..8ec4ec0 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
@@ -20,6 +20,7 @@
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import android.os.UserHandle;
import android.view.View;
import android.widget.Button;
@@ -39,7 +40,7 @@
Button addButton = (Button) findViewById(R.id.add_another_button);
FingerprintManager fpm = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
- int enrolled = fpm.getEnrolledFingerprints().size();
+ int enrolled = fpm.getEnrolledFingerprints(mUserId).size();
int max = getResources().getInteger(
com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
if (enrolled >= max) {
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
index 61cecf4..c1347f5 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
@@ -46,14 +46,12 @@
setHeaderText(R.string.security_settings_fingerprint_enroll_introduction_title);
findViewById(R.id.cancel_button).setOnClickListener(this);
findViewById(R.id.learn_more_button).setOnClickListener(this);
- final int passwordQuality = new ChooseLockSettingsHelper(this).utils()
- .getActivePasswordQuality(UserHandle.myUserId());
updatePasswordQuality();
}
private void updatePasswordQuality() {
final int passwordQuality = new ChooseLockSettingsHelper(this).utils()
- .getActivePasswordQuality(UserHandle.myUserId());
+ .getActivePasswordQuality(mUserId);
mHasPassword = passwordQuality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
}
@@ -77,6 +75,9 @@
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, true);
+ if (mUserId != UserHandle.USER_NULL) {
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ }
startActivityForResult(intent, CHOOSE_LOCK_GENERIC_REQUEST);
}
@@ -93,7 +94,11 @@
}
protected Intent getFindSensorIntent() {
- return new Intent(this, FingerprintEnrollFindSensor.class);
+ Intent intent = new Intent(this, FingerprintEnrollFindSensor.class);
+ if (mUserId != UserHandle.USER_NULL) {
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ }
+ return intent;
}
@Override
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollOnboard.java b/src/com/android/settings/fingerprint/FingerprintEnrollOnboard.java
index 0990459..1b80589 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollOnboard.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollOnboard.java
@@ -20,6 +20,7 @@
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import android.os.UserHandle;
import com.android.internal.logging.MetricsLogger;
import com.android.settings.ChooseLockGeneric;
@@ -66,6 +67,9 @@
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, true);
+ if (mUserId != UserHandle.USER_NULL) {
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ }
startActivityForResult(intent, CHOOSE_LOCK_GENERIC_REQUEST);
}
@@ -76,6 +80,9 @@
private void launchFindSensor(byte[] token) {
Intent intent = getFindSensorIntent();
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
+ if (mUserId != UserHandle.USER_NULL) {
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ }
startActivity(intent);
finish();
}
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java b/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
index 72c06db..d0fcda0 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
@@ -18,10 +18,12 @@
import android.annotation.Nullable;
import android.app.Activity;
+import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Handler;
+import android.os.UserHandle;
import com.android.internal.logging.MetricsLogger;
import com.android.settings.ChooseLockSettingsHelper;
@@ -40,6 +42,8 @@
private Handler mHandler = new Handler();
private byte[] mToken;
private boolean mDone;
+ private int mUserId;
+ private FingerprintManager mFingerprintManager;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -50,8 +54,10 @@
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
+ mFingerprintManager = activity.getSystemService(FingerprintManager.class);
mToken = activity.getIntent().getByteArrayExtra(
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
+ mUserId = activity.getIntent().getIntExtra(Intent.EXTRA_USER_ID, UserHandle.USER_NULL);
}
@Override
@@ -74,8 +80,11 @@
mHandler.removeCallbacks(mTimeoutRunnable);
mEnrollmentSteps = -1;
mEnrollmentCancel = new CancellationSignal();
- getActivity().getSystemService(FingerprintManager.class).enroll(mToken, mEnrollmentCancel,
- 0 /* flags */, mEnrollmentCallback);
+ if (mUserId != UserHandle.USER_NULL) {
+ mFingerprintManager.setActiveUser(mUserId);
+ }
+ mFingerprintManager.enroll(mToken, mEnrollmentCancel,
+ 0 /* flags */, mEnrollmentCallback, mUserId);
mEnrolling = true;
}
diff --git a/src/com/android/settings/fingerprint/FingerprintSettings.java b/src/com/android/settings/fingerprint/FingerprintSettings.java
index 9e90c00..56e9b12 100644
--- a/src/com/android/settings/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/fingerprint/FingerprintSettings.java
@@ -72,6 +72,8 @@
*/
public class FingerprintSettings extends SubSettings {
+ private static final String TAG = "FingerprintSettings";
+
/**
* Used by the choose fingerprint wizard to indicate the wizard is
* finished, and each activity in the wizard should finish.
@@ -98,6 +100,8 @@
private static final long LOCKOUT_DURATION = 30000; // time we have to wait for fp to reset, ms
+ public static final String KEY_FINGERPRINT_SETTINGS = "fingerprint_settings";
+
@Override
public Intent getIntent() {
Intent modIntent = new Intent(super.getIntent());
@@ -765,4 +769,34 @@
return builder;
}
}
+
+ public static Preference getFingerprintPreferenceForUser(Context context, int userId) {
+ FingerprintManager fpm = (FingerprintManager) context.getSystemService(
+ Context.FINGERPRINT_SERVICE);
+ if (!fpm.isHardwareDetected()) {
+ Log.v(TAG, "No fingerprint hardware detected!!");
+ return null;
+ }
+ Preference fingerprintPreference = new Preference(context);
+ fingerprintPreference.setKey(KEY_FINGERPRINT_SETTINGS);
+ fingerprintPreference.setTitle(R.string.security_settings_fingerprint_preference_title);
+ Intent intent = new Intent();
+ final List<Fingerprint> items = fpm.getEnrolledFingerprints(userId);
+ final int fingerprintCount = items != null ? items.size() : 0;
+ final String clazz;
+ if (fingerprintCount > 0) {
+ fingerprintPreference.setSummary(context.getResources().getQuantityString(
+ R.plurals.security_settings_fingerprint_preference_summary,
+ fingerprintCount, fingerprintCount));
+ clazz = FingerprintSettings.class.getName();
+ } else {
+ fingerprintPreference.setSummary(
+ R.string.security_settings_fingerprint_preference_summary_none);
+ clazz = FingerprintEnrollIntroduction.class.getName();
+ }
+ intent.setClassName("com.android.settings", clazz);
+ intent.putExtra(Intent.EXTRA_USER_ID, userId);
+ fingerprintPreference.setIntent(intent);
+ return fingerprintPreference;
+ }
}
diff --git a/src/com/android/settings/fingerprint/FingerprintUiHelper.java b/src/com/android/settings/fingerprint/FingerprintUiHelper.java
index 245cbb4..cf37050 100644
--- a/src/com/android/settings/fingerprint/FingerprintUiHelper.java
+++ b/src/com/android/settings/fingerprint/FingerprintUiHelper.java
@@ -34,21 +34,26 @@
private ImageView mIcon;
private TextView mErrorTextView;
private CancellationSignal mCancellationSignal;
+ private int mUserId;
private Callback mCallback;
private FingerprintManager mFingerprintManager;
- public FingerprintUiHelper(ImageView icon, TextView errorTextView, Callback callback) {
+ public FingerprintUiHelper(ImageView icon, TextView errorTextView, Callback callback,
+ int userId) {
mFingerprintManager = icon.getContext().getSystemService(FingerprintManager.class);
mIcon = icon;
mErrorTextView = errorTextView;
mCallback = callback;
+ mUserId = userId;
}
public void startListening() {
- if (mFingerprintManager.getEnrolledFingerprints().size() > 0) {
+ if (mFingerprintManager.getEnrolledFingerprints(mUserId).size() > 0) {
mCancellationSignal = new CancellationSignal();
- mFingerprintManager.authenticate(null, mCancellationSignal, 0 /* flags */, this, null);
+ mFingerprintManager.setActiveUser(mUserId);
+ mFingerprintManager.authenticate(
+ null, mCancellationSignal, 0 /* flags */, this, null, mUserId);
setFingerprintIconVisibility(true);
mIcon.setImageResource(R.drawable.ic_fingerprint);
}
diff --git a/src/com/android/settings/notification/ZenModeAutomationSettings.java b/src/com/android/settings/notification/ZenModeAutomationSettings.java
index 33cff53..1bdb46a 100644
--- a/src/com/android/settings/notification/ZenModeAutomationSettings.java
+++ b/src/com/android/settings/notification/ZenModeAutomationSettings.java
@@ -81,6 +81,9 @@
@Override
public void onResume() {
super.onResume();
+ if (isUiRestricted()) {
+ return;
+ }
updateControls();
}
diff --git a/src/com/android/settings/notification/ZenModeEventRuleSettings.java b/src/com/android/settings/notification/ZenModeEventRuleSettings.java
index c5691d4..69c870a 100644
--- a/src/com/android/settings/notification/ZenModeEventRuleSettings.java
+++ b/src/com/android/settings/notification/ZenModeEventRuleSettings.java
@@ -72,6 +72,9 @@
@Override
public void onResume() {
super.onResume();
+ if (isUiRestricted()) {
+ return;
+ }
if (!mCreate) {
reloadCalendar();
}
diff --git a/src/com/android/settings/notification/ZenModeRuleSettingsBase.java b/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
index b0f12f8..19514ab 100644
--- a/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
+++ b/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
@@ -133,6 +133,9 @@
@Override
public void onResume() {
super.onResume();
+ if (isUiRestricted()) {
+ return;
+ }
updateControls();
}
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 3743396..99fd198 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -47,6 +47,9 @@
@Override
public void onResume() {
super.onResume();
+ if (isUiRestricted()) {
+ return;
+ }
updateControls();
}
diff --git a/src/com/android/settings/notification/ZenModeSettingsBase.java b/src/com/android/settings/notification/ZenModeSettingsBase.java
index 4c8663f..f1b5edf 100644
--- a/src/com/android/settings/notification/ZenModeSettingsBase.java
+++ b/src/com/android/settings/notification/ZenModeSettingsBase.java
@@ -28,7 +28,9 @@
import android.provider.Settings.Global;
import android.service.notification.ZenModeConfig;
import android.util.Log;
+import android.view.View;
+import com.android.settings.R;
import com.android.settings.RestrictedSettingsFragment;
import java.util.List;
@@ -67,11 +69,17 @@
maybeRefreshRules(true, true /*fireChanged*/);
mSettingsObserver.register();
if (isUiRestricted()) {
- finish();
+ getPreferenceScreen().removeAll();
+ return;
}
}
@Override
+ protected View initAdminSupportDetailsView() {
+ return getActivity().findViewById(R.id.admin_support_details);
+ }
+
+ @Override
public void onPause() {
super.onPause();
mSettingsObserver.unregister();
diff --git a/src/com/android/settings/print/PrintJobSettingsFragment.java b/src/com/android/settings/print/PrintJobSettingsFragment.java
index 80bf166..11b4ba2 100644
--- a/src/com/android/settings/print/PrintJobSettingsFragment.java
+++ b/src/com/android/settings/print/PrintJobSettingsFragment.java
@@ -153,9 +153,10 @@
private void processArguments() {
String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID);
- mPrintJobId = PrintJobId.unflattenFromString(printJobId);
- if (mPrintJobId == null) {
+ if (printJobId == null) {
finish();
+ } else {
+ mPrintJobId = PrintJobId.unflattenFromString(printJobId);
}
}
diff --git a/src/com/android/settings/print/PrintServiceSettingsFragment.java b/src/com/android/settings/print/PrintServiceSettingsFragment.java
index 5d20f65..2ac84f4 100644
--- a/src/com/android/settings/print/PrintServiceSettingsFragment.java
+++ b/src/com/android/settings/print/PrintServiceSettingsFragment.java
@@ -481,7 +481,8 @@
final int printerCount = mPrinters.size();
for (int i = 0; i < printerCount; i++) {
PrinterInfo printer = mPrinters.get(i);
- if (printer.getName().toLowerCase().contains(constraintLowerCase)) {
+ String name = printer.getName();
+ if (name != null && name.toLowerCase().contains(constraintLowerCase)) {
filteredPrinters.add(printer);
}
}
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 06ec966..8229464 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -101,6 +101,7 @@
private static final String KEY_USER_LIST = "user_list";
private static final String KEY_USER_ME = "user_me";
private static final String KEY_ADD_USER = "user_add";
+ private static final String KEY_EMERGENCY_INFO = "emergency_info";
private static final int MENU_REMOVE_USER = Menu.FIRST;
@@ -134,6 +135,7 @@
private DimmableIconPreference mAddUser;
private PreferenceGroup mLockScreenSettings;
private RestrictedSwitchPreference mAddUserWhenLocked;
+ private Preference mEmergencyInfoPreference;
private int mRemovingUserId = -1;
private int mAddedUserId = 0;
private boolean mAddingUser;
@@ -229,6 +231,8 @@
}
mLockScreenSettings = (PreferenceGroup) findPreference("lock_screen_settings");
mAddUserWhenLocked = (RestrictedSwitchPreference) findPreference("add_users_when_locked");
+ mEmergencyInfoPreference = findPreference(KEY_EMERGENCY_INFO);
+ mEmergencyInfoPreference.setOnPreferenceClickListener(this);
loadProfile();
setHasOptionsMenu(true);
IntentFilter filter = new IntentFilter(Intent.ACTION_USER_REMOVED);
@@ -917,6 +921,9 @@
} else {
onAddUserClicked(USER_TYPE_USER);
}
+ } else if (pref == mEmergencyInfoPreference) {
+ Intent intent = new Intent("com.android.emergency.EDIT_EMERGENGY_INFO");
+ startActivity(intent);
}
return false;
}