diff --git a/res/values/strings.xml b/res/values/strings.xml index dabb721b536..1110553bc78 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -696,6 +696,8 @@ Automatically lock %1$s after sleep + + %1$s after sleep, except when kept unlocked by %2$s Show owner info on lock screen @@ -2578,6 +2580,8 @@ Vibrate on touch Power button instantly locks + + Except when kept unlocked by %1$s Set unlock pattern diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java index 70131549ac7..0af022ac6a2 100644 --- a/src/com/android/settings/SecuritySettings.java +++ b/src/com/android/settings/SecuritySettings.java @@ -115,6 +115,8 @@ public class SecuritySettings extends SettingsPreferenceFragment private boolean mIsPrimary; + private Preference mClickedTrustAgentPreference; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -207,6 +209,41 @@ public class SecuritySettings extends SettingsPreferenceFragment } } + // Trust Agent preferences + PreferenceGroup securityCategory = (PreferenceGroup) + root.findPreference(KEY_SECURITY_CATEGORY); + if (securityCategory != null) { + PackageManager pm = getPackageManager(); + List resolveInfos = pm.queryIntentServices(TRUST_AGENT_INTENT, + PackageManager.GET_META_DATA); + List enabledTrustAgents = mLockPatternUtils.getEnabledTrustAgents(); + if (enabledTrustAgents != null && !enabledTrustAgents.isEmpty()) { + for (ResolveInfo resolveInfo : resolveInfos) { + if (resolveInfo.serviceInfo == null) continue; + if (!TrustAgentUtils.checkProvidePermission(resolveInfo, pm)) continue; + TrustAgentUtils.TrustAgentComponentInfo trustAgentComponentInfo = + TrustAgentUtils.getSettingsComponent(pm, resolveInfo); + if (trustAgentComponentInfo.componentName == null || + !enabledTrustAgents.contains( + TrustAgentUtils.getComponentName(resolveInfo)) || + TextUtils.isEmpty(trustAgentComponentInfo.title)) continue; + Preference trustAgentPreference = + new Preference(securityCategory.getContext()); + trustAgentPreference.setKey(KEY_TRUST_AGENT); + trustAgentPreference.setTitle(trustAgentComponentInfo.title); + trustAgentPreference.setSummary(trustAgentComponentInfo.summary); + // Create intent for this preference. + Intent intent = new Intent(); + intent.setComponent(trustAgentComponentInfo.componentName); + intent.setAction(Intent.ACTION_MAIN); + trustAgentPreference.setIntent(intent); + // Add preference to the settings menu. + securityCategory.addPreference(trustAgentPreference); + break; // Only render the first one. + } + } + } + // lock after preference mLockAfter = (ListPreference) root.findPreference(KEY_LOCK_AFTER_TIMEOUT); if (mLockAfter != null) { @@ -224,13 +261,19 @@ public class SecuritySettings extends SettingsPreferenceFragment // lock instantly on power key press mPowerButtonInstantlyLocks = (CheckBoxPreference) root.findPreference( KEY_POWER_INSTANTLY_LOCKS); + Preference trustAgentPreference = root.findPreference(KEY_TRUST_AGENT); + if (mPowerButtonInstantlyLocks != null && + trustAgentPreference != null && + trustAgentPreference.getTitle().length() > 0) { + mPowerButtonInstantlyLocks.setSummary(getString( + R.string.lockpattern_settings_power_button_instantly_locks_summary, + trustAgentPreference.getTitle())); + } // don't display visible pattern if biometric and backup is not pattern if (resid == R.xml.security_settings_biometric_weak && mLockPatternUtils.getKeyguardStoredPasswordQuality() != DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { - PreferenceGroup securityCategory = (PreferenceGroup) - root.findPreference(KEY_SECURITY_CATEGORY); if (securityCategory != null && mVisiblePattern != null) { securityCategory.removePreference(root.findPreference(KEY_VISIBLE_PATTERN)); } @@ -308,41 +351,6 @@ public class SecuritySettings extends SettingsPreferenceFragment mToggleVerifyApps.setEnabled(false); } - // Trust Agent preferences - PreferenceGroup securityCategory = (PreferenceGroup) - root.findPreference(KEY_SECURITY_CATEGORY); - if (securityCategory != null) { - PackageManager pm = getPackageManager(); - List resolveInfos = pm.queryIntentServices(TRUST_AGENT_INTENT, - PackageManager.GET_META_DATA); - List enabledTrustAgents = mLockPatternUtils.getEnabledTrustAgents(); - if (enabledTrustAgents != null && !enabledTrustAgents.isEmpty()) { - for (ResolveInfo resolveInfo : resolveInfos) { - if (resolveInfo.serviceInfo == null) continue; - if (!TrustAgentUtils.checkProvidePermission(resolveInfo, pm)) continue; - TrustAgentUtils.TrustAgentComponentInfo trustAgentComponentInfo = - TrustAgentUtils.getSettingsComponent(pm, resolveInfo); - if (trustAgentComponentInfo.componentName == null || - !enabledTrustAgents.contains( - TrustAgentUtils.getComponentName(resolveInfo)) || - TextUtils.isEmpty(trustAgentComponentInfo.title)) continue; - Preference trustAgentPreference = - new Preference(securityCategory.getContext()); - trustAgentPreference.setKey(KEY_TRUST_AGENT); - trustAgentPreference.setTitle(trustAgentComponentInfo.title); - trustAgentPreference.setSummary(trustAgentComponentInfo.summary); - // Create intent for this preference. - Intent intent = new Intent(); - intent.setComponent(trustAgentComponentInfo.componentName); - intent.setAction(Intent.ACTION_MAIN); - trustAgentPreference.setIntent(intent); - // Add preference to the settings menu. - securityCategory.addPreference(trustAgentPreference); - break; // Only render the first one. - } - } - } - return root; } @@ -439,7 +447,14 @@ public class SecuritySettings extends SettingsPreferenceFragment best = i; } } - mLockAfter.setSummary(getString(R.string.lock_after_timeout_summary, entries[best])); + + Preference preference = getPreferenceScreen().findPreference(KEY_TRUST_AGENT); + if (preference != null && preference.getTitle().length() > 0) { + mLockAfter.setSummary(getString(R.string.lock_after_timeout_summary_with_exception, + entries[best], preference.getTitle())); + } else { + mLockAfter.setSummary(getString(R.string.lock_after_timeout_summary, entries[best])); + } } private void disableUnusableTimeouts(long maxTimeout) { @@ -562,9 +577,12 @@ public class SecuritySettings extends SettingsPreferenceFragment } else if (KEY_TRUST_AGENT.equals(key)) { ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this.getActivity(), this); - if (!helper.launchConfirmationActivity(CHANGE_TRUST_AGENT_SETTINGS, null, null)) { + mClickedTrustAgentPreference = preference; + if (!helper.launchConfirmationActivity(CHANGE_TRUST_AGENT_SETTINGS, null, null) && + preference.getIntent() != null) { // If this returns false, it means no password confirmation is required. startActivity(preference.getIntent()); + mClickedTrustAgentPreference = null; } } else { // If we didn't handle it, let preferences handle it. @@ -597,12 +615,12 @@ public class SecuritySettings extends SettingsPreferenceFragment // because mBiometricWeakLiveliness could be null return; } else if (requestCode == CHANGE_TRUST_AGENT_SETTINGS && resultCode == Activity.RESULT_OK) { - Preference preference = getPreferenceScreen().findPreference(KEY_TRUST_AGENT); - if (preference != null) { - Intent intent = preference.getIntent(); + if (mClickedTrustAgentPreference != null) { + Intent intent = mClickedTrustAgentPreference.getIntent(); if (intent != null) { startActivity(intent); } + mClickedTrustAgentPreference = null; } } createPreferenceHierarchy();