1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 19fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles Heimport static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; 20fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles Heimport static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 21fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He 22487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millettimport android.app.Activity; 232c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunneimport android.app.AlertDialog; 2452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarriimport android.app.Dialog; 2552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarriimport android.app.FragmentManager; 264037c7f27c849a1ada0980ad881636fc940a0b85Dianne Hackbornimport android.app.admin.DevicePolicyManager; 27524a63b493c2c9692dd09669173c96e69e09297cIdo Ofirimport android.content.ComponentName; 28abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Context; 292c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunneimport android.content.DialogInterface; 30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 31bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich canningsimport android.content.pm.PackageManager; 32bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich canningsimport android.content.pm.ResolveInfo; 33d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglioimport android.content.res.Resources; 343bcd76ce63c77b229e2d25a0191ccb568824f5c4Jason Monkimport android.hardware.fingerprint.FingerprintManager; 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 3680753bc275ba82a08671325771f96306848d41c3Junda Liuimport android.os.PersistableBundle; 37bb06a427eb471227cf42a8078a54ca0581309493Dianne Hackbornimport android.os.UserHandle; 38783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Millerimport android.os.UserManager; 39fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles Heimport android.os.storage.StorageManager; 40d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglioimport android.provider.SearchIndexableResource; 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings; 426f482447b05492906755d91ac4c29ec505a8a544Ido Ofirimport android.service.trust.TrustAgentService; 435c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Aminiimport android.support.annotation.VisibleForTesting; 4439b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v14.preference.SwitchPreference; 4539b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 4639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference.OnPreferenceChangeListener; 4739b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceGroup; 4839b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceScreen; 4980753bc275ba82a08671325771f96306848d41c3Junda Liuimport android.telephony.CarrierConfigManager; 50ca7566125e00ed267aba831bd1d6d1ad78d90c17Wink Savilleimport android.telephony.SubscriptionInfo; 513bcd76ce63c77b229e2d25a0191ccb568824f5c4Jason Monkimport android.telephony.SubscriptionManager; 523bcd76ce63c77b229e2d25a0191ccb568824f5c4Jason Monkimport android.telephony.TelephonyManager; 53524a63b493c2c9692dd09669173c96e69e09297cIdo Ofirimport android.text.TextUtils; 5486624a21540e2cd336573a55adb5d3997e4a717dJim Millerimport android.util.Log; 55301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang 56265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent; 57a6a8a1479b970d8a84395453703348fe42d17438Gilles Debunneimport com.android.internal.widget.LockPatternUtils; 58fe7655914de3852093c35600df996824d03ddf63Jim Millerimport com.android.settings.TrustAgentUtils.TrustAgentComponentInfo; 591e516287bd0c910f83d2ead28bf67e26dfbead86Fan Zhangimport com.android.settings.core.instrumentation.InstrumentedDialogFragment; 60301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhangimport com.android.settings.dashboard.DashboardFeatureProvider; 615c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Aminiimport com.android.settings.dashboard.SummaryLoader; 62ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport com.android.settings.enterprise.EnterprisePrivacyPreferenceController; 63ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport com.android.settings.enterprise.ManageDeviceAdminPreferenceController; 645ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggiimport com.android.settings.fingerprint.FingerprintSettings; 6581610543a9d26cf52a4b8aad0bbdde4aa010e197Doris Lingimport com.android.settings.location.LocationPreferenceController; 66cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Lingimport com.android.settings.notification.LockScreenNotificationPreferenceController; 67301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhangimport com.android.settings.overlay.FeatureFactory; 68d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglioimport com.android.settings.search.BaseSearchIndexProvider; 69d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglioimport com.android.settings.search.Indexable; 70d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglioimport com.android.settings.search.SearchIndexableRaw; 7193582995daff3b92b89a24c271fbd719293a41daDoris Lingimport com.android.settings.security.OwnerInfoPreferenceController; 724774b58b4c0d53f6a436397cb099b95ac08d6923Shahriyar Aminiimport com.android.settings.security.SecurityFeatureProvider; 73ccae73f228f98bc8412c435a273525514d78843aZachary Iqbalimport com.android.settings.trustagent.TrustAgentManager; 7462e66c9ca4dc7140b9089519c171cd1cc40b0c63Fan Zhangimport com.android.settings.widget.GearPreference; 75550d068abd5a38e77507eab704ecdf1be70695cbSudheer Shankaimport com.android.settingslib.RestrictedLockUtils; 769c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport com.android.settingslib.RestrictedPreference; 77301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhangimport com.android.settingslib.drawer.CategoryKey; 78a6a8a1479b970d8a84395453703348fe42d17438Gilles Debunne 7986624a21540e2cd336573a55adb5d3997e4a717dJim Millerimport java.util.ArrayList; 80bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich canningsimport java.util.List; 815ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Gesture lock pattern settings. 84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 85565653cef1039ab4e34e505185f1c77d847357cdJulia Reynoldspublic class SecuritySettings extends SettingsPreferenceFragment 86f61f11b87029d41521bedff56132a068a172190fSuprabh Shukla implements OnPreferenceChangeListener, Indexable, 8762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos GearPreference.OnGearClickListener { 889218687e4baaf0226ef16b58f78123d979711e5dJim Miller 899218687e4baaf0226ef16b58f78123d979711e5dJim Miller private static final String TAG = "SecuritySettings"; 90301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang 91250b9bee685de8f4060dd410f0894c22de1909cfJim Miller private static final String TRUST_AGENT_CLICK_INTENT = "trust_agent_click_intent"; 926f482447b05492906755d91ac4c29ec505a8a544Ido Ofir private static final Intent TRUST_AGENT_INTENT = 936f482447b05492906755d91ac4c29ec505a8a544Ido Ofir new Intent(TrustAgentService.SERVICE_INTERFACE); 946f8fb436178d12d11d6ab59671168f0603bdbdcbJason parks 95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Lock Settings 9691d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private static final String KEY_UNLOCK_SET_OR_CHANGE = "unlock_set_or_change"; 9752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private static final String KEY_UNLOCK_SET_OR_CHANGE_PROFILE = "unlock_set_or_change_profile"; 9852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private static final String KEY_VISIBLE_PATTERN_PROFILE = "visiblepattern_profile"; 99edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani private static final String KEY_SECURITY_CATEGORY = "security_category"; 1002db8c867d170c02bae267503b0111d4076b8df21Doris Ling @VisibleForTesting 1012db8c867d170c02bae267503b0111d4076b8df21Doris Ling static final String KEY_MANAGE_TRUST_AGENTS = "manage_trust_agents"; 10252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private static final String KEY_UNIFICATION = "unification"; 103cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling @VisibleForTesting 104cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling static final String KEY_LOCKSCREEN_PREFERENCES = "lockscreen_preferences"; 1053a50f5c290971367a2274f7c5da9eafd779e63ecMatthew Fritze private static final String KEY_ENCRYPTION_AND_CREDENTIALS = "encryption_and_credential"; 1063a50f5c290971367a2274f7c5da9eafd779e63ecMatthew Fritze private static final String KEY_LOCATION_SCANNING = "location_scanning"; 107ef3e701b78134baf753484c44b7d1915029faa3fJim Miller 10891d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST = 123; 1096f482447b05492906755d91ac4c29ec505a8a544Ido Ofir private static final int CHANGE_TRUST_AGENT_SETTINGS = 126; 11052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST_PROFILE = 127; 11152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private static final int UNIFY_LOCK_CONFIRM_DEVICE_REQUEST = 128; 11252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private static final int UNIFY_LOCK_CONFIRM_PROFILE_REQUEST = 129; 11326632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra private static final int UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST = 130; 11452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private static final String TAG_UNIFICATION_DIALOG = "unification_dialog"; 1157031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 11691d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh // Misc Settings 11781610543a9d26cf52a4b8aad0bbdde4aa010e197Doris Ling private static final String KEY_SIM_LOCK = "sim_lock_settings"; 11891d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private static final String KEY_SHOW_PASSWORD = "show_password"; 1196f482447b05492906755d91ac4c29ec505a8a544Ido Ofir private static final String KEY_TRUST_AGENT = "trust_agent"; 12027d7ea56f3f02ea7efaf1e57b5d6758ddb56c353Jason Monk private static final String KEY_SCREEN_PINNING = "screen_pinning_settings"; 12147d380f1e6c823cea444004cb799d4c791145cc6Jim Miller 122c60464e46d867cc962e9bb16307ab6df45ba389bShahriyar Amini // Security status 123c60464e46d867cc962e9bb16307ab6df45ba389bShahriyar Amini private static final String KEY_SECURITY_STATUS = "security_status"; 124c60464e46d867cc962e9bb16307ab6df45ba389bShahriyar Amini private static final String SECURITY_STATUS_KEY_PREFIX = "security_status_"; 125c60464e46d867cc962e9bb16307ab6df45ba389bShahriyar Amini 1265c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini // Package verifier Settings 1275c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) 128c60464e46d867cc962e9bb16307ab6df45ba389bShahriyar Amini static final String KEY_PACKAGE_VERIFIER_STATUS = "security_status_package_verifier"; 1295c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini private static final int PACKAGE_VERIFIER_STATE_ENABLED = 1; 1305c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini 131ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski // Device management settings 132ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski private static final String KEY_ENTERPRISE_PRIVACY = "enterprise_privacy"; 133ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski private static final String KEY_MANAGE_DEVICE_ADMIN = "manage_device_admin"; 134ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski 1354a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller // These switch preferences need special handling since they're not all stored in Settings. 13662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private static final String SWITCH_PREFERENCE_KEYS[] = { 137f61f11b87029d41521bedff56132a068a172190fSuprabh Shukla KEY_SHOW_PASSWORD, KEY_UNIFICATION, KEY_VISIBLE_PATTERN_PROFILE 138a1276e49561016cb1f82f1d2d5d15b356c422374Mahaver Chopra }; 1394a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller 140fe7655914de3852093c35600df996824d03ddf63Jim Miller // Only allow one trust agent on the platform. 141fe7655914de3852093c35600df996824d03ddf63Jim Miller private static final boolean ONLY_ONE_TRUST_AGENT = true; 142fe7655914de3852093c35600df996824d03ddf63Jim Miller 1435437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roos private static final int MY_USER_ID = UserHandle.myUserId(); 1445437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roos 145301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang private DashboardFeatureProvider mDashboardFeatureProvider; 146f48206e37e8a88a2f5f9b019995488696f8bf964Maggie Benthall private DevicePolicyManager mDPM; 1474774b58b4c0d53f6a436397cb099b95ac08d6923Shahriyar Amini private SecurityFeatureProvider mSecurityFeatureProvider; 148ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal private TrustAgentManager mTrustAgentManager; 1490183fb5394f105d544472a52b2b4ba628e01da92Wink Saville private SubscriptionManager mSubscriptionManager; 15044879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen private UserManager mUm; 151122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 15200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller private ChooseLockSettingsHelper mChooseLockSettingsHelper; 153122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller private LockPatternUtils mLockPatternUtils; 154e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic private ManagedLockPasswordProvider mManagedPasswordProvider; 15591d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh 15652681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private SwitchPreference mVisiblePatternProfile; 15756462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri private SwitchPreference mUnifyProfile; 15852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 1594a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller private SwitchPreference mShowPassword; 16091d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh 16144879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen private boolean mIsAdmin; 1627fb4f850eabc017bab6090bf9268cf3fae1e08ebAmith Yamasani 163250b9bee685de8f4060dd410f0894c22de1909cfJim Miller private Intent mTrustAgentClickIntent; 1641682a0d1be53562a8ca2d0eb8fcd41b07af2f144Ido Ofir 1656934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri private int mProfileChallengeUserId; 1666934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri 16752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private String mCurrentDevicePassword; 16852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private String mCurrentProfilePassword; 16952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 17081610543a9d26cf52a4b8aad0bbdde4aa010e197Doris Ling private LocationPreferenceController mLocationcontroller; 171ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski private ManageDeviceAdminPreferenceController mManageDeviceAdminPreferenceController; 172ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski private EnterprisePrivacyPreferenceController mEnterprisePrivacyPreferenceController; 173cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling private LockScreenNotificationPreferenceController mLockScreenNotificationPreferenceController; 17481610543a9d26cf52a4b8aad0bbdde4aa010e197Doris Ling 175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 1766507613ebcd22e4691c2af92a5c161bd327db336Fan Zhang public int getMetricsCategory() { 1779d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren return MetricsEvent.SECURITY; 1788a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 1798a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 1808a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 181d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle savedInstanceState) { 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedInstanceState); 183122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 184301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang final Activity activity = getActivity(); 1850183fb5394f105d544472a52b2b4ba628e01da92Wink Saville 186301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang mSubscriptionManager = SubscriptionManager.from(activity); 187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 188301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang mLockPatternUtils = new LockPatternUtils(activity); 189301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang 190301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang mManagedPasswordProvider = ManagedLockPasswordProvider.get(activity, MY_USER_ID); 191e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic 192abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 193122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 194301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang mUm = UserManager.get(activity); 195301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang 196301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang mChooseLockSettingsHelper = new ChooseLockSettingsHelper(activity); 19744879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen 198301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang mDashboardFeatureProvider = FeatureFactory.getFactory(activity) 199301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang .getDashboardFeatureProvider(activity); 200250b9bee685de8f4060dd410f0894c22de1909cfJim Miller 2014774b58b4c0d53f6a436397cb099b95ac08d6923Shahriyar Amini mSecurityFeatureProvider = FeatureFactory.getFactory(activity).getSecurityFeatureProvider(); 2024774b58b4c0d53f6a436397cb099b95ac08d6923Shahriyar Amini 203ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal mTrustAgentManager = mSecurityFeatureProvider.getTrustAgentManager(); 204ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal 205250b9bee685de8f4060dd410f0894c22de1909cfJim Miller if (savedInstanceState != null 206250b9bee685de8f4060dd410f0894c22de1909cfJim Miller && savedInstanceState.containsKey(TRUST_AGENT_CLICK_INTENT)) { 207250b9bee685de8f4060dd410f0894c22de1909cfJim Miller mTrustAgentClickIntent = savedInstanceState.getParcelable(TRUST_AGENT_CLICK_INTENT); 208250b9bee685de8f4060dd410f0894c22de1909cfJim Miller } 20981610543a9d26cf52a4b8aad0bbdde4aa010e197Doris Ling 21081610543a9d26cf52a4b8aad0bbdde4aa010e197Doris Ling mLocationcontroller = new LocationPreferenceController(activity); 211ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski mManageDeviceAdminPreferenceController 212ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski = new ManageDeviceAdminPreferenceController(activity); 213ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski mEnterprisePrivacyPreferenceController 214ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski = new EnterprisePrivacyPreferenceController(activity, null /* lifecycle */); 215cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling mLockScreenNotificationPreferenceController 216cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling = new LockScreenNotificationPreferenceController(activity); 21702cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani } 2185ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 219d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio private static int getResIdForLockUnlockScreen(Context context, 220e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic LockPatternUtils lockPatternUtils, ManagedLockPasswordProvider managedPasswordProvider, 221e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic int userId) { 22252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri final boolean isMyUser = userId == MY_USER_ID; 22336972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller int resid = 0; 22452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (!lockPatternUtils.isSecure(userId)) { 22552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (!isMyUser) { 22652681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri resid = R.xml.security_settings_lockscreen_profile; 22752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } else if (lockPatternUtils.isLockScreenDisabled(userId)) { 22836972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_lockscreen; 22936972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller } else { 23036972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_chooser; 23136972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller } 232122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } else { 23352681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri switch (lockPatternUtils.getKeyguardStoredPasswordQuality(userId)) { 234af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 23552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri resid = isMyUser ? R.xml.security_settings_pattern 23652681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri : R.xml.security_settings_pattern_profile; 237af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 238af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 2398fd852e7c2f488650095024aca9c51f8c7ddc3b3Nicolas Prevot case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: 24052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri resid = isMyUser ? R.xml.security_settings_pin 24152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri : R.xml.security_settings_pin_profile; 242af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 243af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 244af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 24557fbf694a53afb9c1924d81272179dceb3acfa4dKonstantin Lopyrev case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 24652681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri resid = isMyUser ? R.xml.security_settings_password 24752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri : R.xml.security_settings_password_profile; 248af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 249e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case DevicePolicyManager.PASSWORD_QUALITY_MANAGED: 250e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic resid = managedPasswordProvider.getResIdForLockUnlockScreen(!isMyUser); 251e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic break; 25200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller } 253122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 254d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio return resid; 255d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio } 256d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 257d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio /** 258d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio * Important! 259d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio * 2606f482447b05492906755d91ac4c29ec505a8a544Ido Ofir * Don't forget to update the SecuritySearchIndexProvider if you are doing any change in the 261d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio * logic or adding/removing preferences here. 262d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio */ 263d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio private PreferenceScreen createPreferenceHierarchy() { 264d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio PreferenceScreen root = getPreferenceScreen(); 265d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio if (root != null) { 266d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio root.removeAll(); 267d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio } 268d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio addPreferencesFromResource(R.xml.security_settings); 269d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio root = getPreferenceScreen(); 270122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 271c60464e46d867cc962e9bb16307ab6df45ba389bShahriyar Amini // Add category for security status 272c60464e46d867cc962e9bb16307ab6df45ba389bShahriyar Amini addPreferencesFromResource(R.xml.security_settings_status); 273c60464e46d867cc962e9bb16307ab6df45ba389bShahriyar Amini 274d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio // Add options for lock/unlock screen 275e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic final int resid = getResIdForLockUnlockScreen(getActivity(), mLockPatternUtils, 276e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic mManagedPasswordProvider, MY_USER_ID); 277d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio addPreferencesFromResource(resid); 2784112199ed654f8bd1cea2c9a29a24be3c148b2edJason parks 2797aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi // DO or PO installed in the user may disallow to change password. 2807aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi disableIfPasswordQualityManaged(KEY_UNLOCK_SET_OR_CHANGE, MY_USER_ID); 28141d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi 282462cce1a4caef7705766c6ebecd353f2e84a8543Clara Bayarri mProfileChallengeUserId = Utils.getManagedProfileId(mUm, MY_USER_ID); 28352681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (mProfileChallengeUserId != UserHandle.USER_NULL 28452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri && mLockPatternUtils.isSeparateProfileChallengeAllowed(mProfileChallengeUserId)) { 28552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri addPreferencesFromResource(R.xml.security_settings_profile); 28626632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra addPreferencesFromResource(R.xml.security_settings_unification); 28752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri final int profileResid = getResIdForLockUnlockScreen( 288e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic getActivity(), mLockPatternUtils, mManagedPasswordProvider, 289e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic mProfileChallengeUserId); 29052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri addPreferencesFromResource(profileResid); 29152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri maybeAddFingerprintPreference(root, mProfileChallengeUserId); 29256462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri if (!mLockPatternUtils.isSeparateProfileChallengeEnabled(mProfileChallengeUserId)) { 2937aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi final Preference lockPreference = 2947aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi root.findPreference(KEY_UNLOCK_SET_OR_CHANGE_PROFILE); 2957aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi final String summary = getContext().getString( 29652681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri R.string.lock_settings_profile_unified_summary); 29752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri lockPreference.setSummary(summary); 29856462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri lockPreference.setEnabled(false); 2997aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi // PO may disallow to change password for the profile, but screen lock and managed 3007aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi // profile's lock is the same. Disable main "Screen lock" menu. 3017aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi disableIfPasswordQualityManaged(KEY_UNLOCK_SET_OR_CHANGE, mProfileChallengeUserId); 3027aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi } else { 3037aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi // PO may disallow to change profile password, and the profile's password is 3047aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi // separated from screen lock password. Disable profile specific "Screen lock" menu. 3057aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi disableIfPasswordQualityManaged(KEY_UNLOCK_SET_OR_CHANGE_PROFILE, 3067aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi mProfileChallengeUserId); 3076934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri } 3086934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri } 3096934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri 31062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos Preference unlockSetOrChange = findPreference(KEY_UNLOCK_SET_OR_CHANGE); 31162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (unlockSetOrChange instanceof GearPreference) { 31262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos ((GearPreference) unlockSetOrChange).setOnGearClickListener(this); 31362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 31462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 31544879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen mIsAdmin = mUm.isAdminUser(); 3167fb4f850eabc017bab6090bf9268cf3fae1e08ebAmith Yamasani 31794d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller // Fingerprint and trust agents 3182db8c867d170c02bae267503b0111d4076b8df21Doris Ling int numberOfTrustAgent = 0; 3191682a0d1be53562a8ca2d0eb8fcd41b07af2f144Ido Ofir PreferenceGroup securityCategory = (PreferenceGroup) 3201682a0d1be53562a8ca2d0eb8fcd41b07af2f144Ido Ofir root.findPreference(KEY_SECURITY_CATEGORY); 3219d25005e7ab39bcc14722f7bdb977ceccb6107dcJim Miller if (securityCategory != null) { 32252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri maybeAddFingerprintPreference(securityCategory, UserHandle.myUserId()); 3232db8c867d170c02bae267503b0111d4076b8df21Doris Ling numberOfTrustAgent = addTrustAgentSettings(securityCategory); 324cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling setLockscreenPreferencesSummary(securityCategory); 3251682a0d1be53562a8ca2d0eb8fcd41b07af2f144Ido Ofir } 3261682a0d1be53562a8ca2d0eb8fcd41b07af2f144Ido Ofir 32752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri mVisiblePatternProfile = 32852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri (SwitchPreference) root.findPreference(KEY_VISIBLE_PATTERN_PROFILE); 32956462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri mUnifyProfile = (SwitchPreference) root.findPreference(KEY_UNIFICATION); 33052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 33191d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh // Append the rest of the settings 33291d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh addPreferencesFromResource(R.xml.security_settings_misc); 33391d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh 3345c68e12493d3c81324179c7c3ba6cd58279d648bAmith Yamasani // Do not display SIM lock for devices without an Icc card 335cd05e8859599658a546b5d4ee09068dd2833b901Wink Saville TelephonyManager tm = TelephonyManager.getDefault(); 33680753bc275ba82a08671325771f96306848d41c3Junda Liu CarrierConfigManager cfgMgr = (CarrierConfigManager) 33780753bc275ba82a08671325771f96306848d41c3Junda Liu getActivity().getSystemService(Context.CARRIER_CONFIG_SERVICE); 33880753bc275ba82a08671325771f96306848d41c3Junda Liu PersistableBundle b = cfgMgr.getConfig(); 33944879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen if (!mIsAdmin || !isSimIccReady() || 34080753bc275ba82a08671325771f96306848d41c3Junda Liu b.getBoolean(CarrierConfigManager.KEY_HIDE_SIM_LOCK_SETTINGS_BOOL)) { 34191d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh root.removePreference(root.findPreference(KEY_SIM_LOCK)); 342a98c353f8b18607f0c2e9af26b91bf6ffbe8dc78Kazuhiro Ondo } else { 34350e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest // Disable SIM lock if there is no ready SIM card. 34450e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest root.findPreference(KEY_SIM_LOCK).setEnabled(isSimReady()); 345386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang } 346b08853aad9f3ef2dc3ba1f1c7a513a16220d4d9eJason Monk if (Settings.System.getInt(getContentResolver(), 347b08853aad9f3ef2dc3ba1f1c7a513a16220d4d9eJason Monk Settings.System.LOCK_TO_APP_ENABLED, 0) != 0) { 348b08853aad9f3ef2dc3ba1f1c7a513a16220d4d9eJason Monk root.findPreference(KEY_SCREEN_PINNING).setSummary( 349b08853aad9f3ef2dc3ba1f1c7a513a16220d4d9eJason Monk getResources().getString(R.string.switch_on_text)); 35027d7ea56f3f02ea7efaf1e57b5d6758ddb56c353Jason Monk } 351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 35291d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh // Show password 3534a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller mShowPassword = (SwitchPreference) root.findPreference(KEY_SHOW_PASSWORD); 354feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn 355c5550c2012c505dfb27d9a8da8ecb4787f366283Kenny Root // Credential storage 35611bd33a564d4ae9a48195ad11dbbd09d80e59b55Emily Bernier final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); 3578877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 358fe7655914de3852093c35600df996824d03ddf63Jim Miller // Advanced Security features 3592db8c867d170c02bae267503b0111d4076b8df21Doris Ling initTrustAgentPreference(root, numberOfTrustAgent); 360fe7655914de3852093c35600df996824d03ddf63Jim Miller 361fe7655914de3852093c35600df996824d03ddf63Jim Miller // The above preferences come and go based on security state, so we need to update 362fe7655914de3852093c35600df996824d03ddf63Jim Miller // the index. This call is expected to be fairly cheap, but we may want to do something 363fe7655914de3852093c35600df996824d03ddf63Jim Miller // smarter in the future. 3645c83cfa27805ac0f96d04ac99f0e8fbde20329edMatthew Fritze final Activity activity = getActivity(); 3655c83cfa27805ac0f96d04ac99f0e8fbde20329edMatthew Fritze FeatureFactory.getFactory(activity).getSearchFeatureProvider().getIndexingManager(activity) 3668a42b074a7ccaf8325b571d261fda5b9a494a059Matthew Fritze .updateFromClassNameResource(SecuritySettings.class.getName(), 3678a42b074a7ccaf8325b571d261fda5b9a494a059Matthew Fritze true /* includeInSearchResults */); 368fe7655914de3852093c35600df996824d03ddf63Jim Miller 369c60464e46d867cc962e9bb16307ab6df45ba389bShahriyar Amini PreferenceGroup securityStatusPreferenceGroup = 370c60464e46d867cc962e9bb16307ab6df45ba389bShahriyar Amini (PreferenceGroup) root.findPreference(KEY_SECURITY_STATUS); 371f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling final List<Preference> tilePrefs = mDashboardFeatureProvider.getPreferencesForCategory( 372f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling getActivity(), getPrefContext(), getMetricsCategory(), 373f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling CategoryKey.CATEGORY_SECURITY); 374f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling int numSecurityStatusPrefs = 0; 375f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling if (tilePrefs != null && !tilePrefs.isEmpty()) { 376f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling for (Preference preference : tilePrefs) { 377f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling if (!TextUtils.isEmpty(preference.getKey()) 378f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling && preference.getKey().startsWith(SECURITY_STATUS_KEY_PREFIX)) { 379f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling // Injected security status settings are placed under the Security status 380f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling // category. 381f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling securityStatusPreferenceGroup.addPreference(preference); 382f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling numSecurityStatusPrefs++; 383f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling } else { 384f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling // Other injected settings are placed under the Security preference screen. 385f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling root.addPreference(preference); 3865c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini } 387301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang } 388f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling } 389301fe80fa7e63c3afe927919e4fa7bb386fa7fa2Fan Zhang 390f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling if (numSecurityStatusPrefs == 0) { 391f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling root.removePreference(securityStatusPreferenceGroup); 392f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling } else if (numSecurityStatusPrefs > 0) { 393f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling // Update preference data with tile data. Security feature provider only updates the 394f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling // data if it actually needs to be changed. 395f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling mSecurityFeatureProvider.updatePreferences(getActivity(), root, 396f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling mDashboardFeatureProvider.getTilesForCategory( 397f2cf2aea3777ef5298bb1131890552f5f619dd30Doris Ling CategoryKey.CATEGORY_SECURITY)); 3985c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini } 3994774b58b4c0d53f6a436397cb099b95ac08d6923Shahriyar Amini 4004a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller for (int i = 0; i < SWITCH_PREFERENCE_KEYS.length; i++) { 4014a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller final Preference pref = findPreference(SWITCH_PREFERENCE_KEYS[i]); 4024a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller if (pref != null) pref.setOnPreferenceChangeListener(this); 4034a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller } 40481610543a9d26cf52a4b8aad0bbdde4aa010e197Doris Ling 40581610543a9d26cf52a4b8aad0bbdde4aa010e197Doris Ling mLocationcontroller.displayPreference(root); 406ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski mManageDeviceAdminPreferenceController.updateState( 407ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski root.findPreference(KEY_MANAGE_DEVICE_ADMIN)); 408ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski mEnterprisePrivacyPreferenceController.displayPreference(root); 409ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski mEnterprisePrivacyPreferenceController.onResume(); 410ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski 411afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return root; 412afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 413afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 4142db8c867d170c02bae267503b0111d4076b8df21Doris Ling @VisibleForTesting 4152db8c867d170c02bae267503b0111d4076b8df21Doris Ling void initTrustAgentPreference(PreferenceScreen root, int numberOfTrustAgent) { 4162db8c867d170c02bae267503b0111d4076b8df21Doris Ling Preference manageAgents = root.findPreference(KEY_MANAGE_TRUST_AGENTS); 4172db8c867d170c02bae267503b0111d4076b8df21Doris Ling if (manageAgents != null) { 4182db8c867d170c02bae267503b0111d4076b8df21Doris Ling if (!mLockPatternUtils.isSecure(MY_USER_ID)) { 4192db8c867d170c02bae267503b0111d4076b8df21Doris Ling manageAgents.setEnabled(false); 4202db8c867d170c02bae267503b0111d4076b8df21Doris Ling manageAgents.setSummary(R.string.disabled_because_no_backup_security); 4212db8c867d170c02bae267503b0111d4076b8df21Doris Ling } else if (numberOfTrustAgent > 0) { 4222db8c867d170c02bae267503b0111d4076b8df21Doris Ling manageAgents.setSummary(getActivity().getResources().getQuantityString( 4232db8c867d170c02bae267503b0111d4076b8df21Doris Ling R.plurals.manage_trust_agents_summary_on, 4242db8c867d170c02bae267503b0111d4076b8df21Doris Ling numberOfTrustAgent, numberOfTrustAgent)); 4252db8c867d170c02bae267503b0111d4076b8df21Doris Ling } else { 4262db8c867d170c02bae267503b0111d4076b8df21Doris Ling manageAgents.setSummary(R.string.manage_trust_agents_summary); 4272db8c867d170c02bae267503b0111d4076b8df21Doris Ling } 4282db8c867d170c02bae267503b0111d4076b8df21Doris Ling } 4292db8c867d170c02bae267503b0111d4076b8df21Doris Ling } 4302db8c867d170c02bae267503b0111d4076b8df21Doris Ling 431cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling @VisibleForTesting 432cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling void setLockscreenPreferencesSummary(PreferenceGroup group) { 433cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling final Preference lockscreenPreferences = group.findPreference(KEY_LOCKSCREEN_PREFERENCES); 434cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling if (lockscreenPreferences != null) { 435cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling lockscreenPreferences.setSummary( 436cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling mLockScreenNotificationPreferenceController.getSummaryResource()); 437cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling } 438cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling } 439cee83e4bbf80da6193feb65b67a29a2a970fc73eDoris Ling 4407aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi /* 4417aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi * Sets the preference as disabled by admin if PASSWORD_QUALITY_MANAGED is set. 4427aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi * The preference must be a RestrictedPreference. 4437aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi */ 4447aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi private void disableIfPasswordQualityManaged(String preferenceKey, int userId) { 4457aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi final EnforcedAdmin admin = RestrictedLockUtils.checkIfPasswordQualityIsSet( 4467aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi getActivity(), userId); 4477aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi if (admin != null && mDPM.getPasswordQuality(admin.component, userId) == 4487aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi DevicePolicyManager.PASSWORD_QUALITY_MANAGED) { 4497aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi final RestrictedPreference pref = 4507aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi (RestrictedPreference) getPreferenceScreen().findPreference(preferenceKey); 4517aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi pref.setDisabledByAdmin(admin); 4527aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi } 4537aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi } 4547aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi 45552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private void maybeAddFingerprintPreference(PreferenceGroup securityCategory, int userId) { 45640db4bbbb5dd262d801b0247fbfac39c7ab383b0Clara Bayarri Preference fingerprintPreference = 45740db4bbbb5dd262d801b0247fbfac39c7ab383b0Clara Bayarri FingerprintSettings.getFingerprintPreferenceForUser( 45852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri securityCategory.getContext(), userId); 45940db4bbbb5dd262d801b0247fbfac39c7ab383b0Clara Bayarri if (fingerprintPreference != null) { 46040db4bbbb5dd262d801b0247fbfac39c7ab383b0Clara Bayarri securityCategory.addPreference(fingerprintPreference); 46194d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller } 46294d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller } 46394d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller 4642db8c867d170c02bae267503b0111d4076b8df21Doris Ling // Return the number of trust agents being added 4652db8c867d170c02bae267503b0111d4076b8df21Doris Ling private int addTrustAgentSettings(PreferenceGroup securityCategory) { 4665437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roos final boolean hasSecurity = mLockPatternUtils.isSecure(MY_USER_ID); 467ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal ArrayList<TrustAgentComponentInfo> agents = getActiveTrustAgents( 468ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal getActivity(), mTrustAgentManager, mLockPatternUtils, mDPM); 46994d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller for (int i = 0; i < agents.size(); i++) { 47094d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller final TrustAgentComponentInfo agent = agents.get(i); 471ec1052dbadbc472c0afff943a9b61e6d95ab8089Sudheer Shanka RestrictedPreference trustAgentPreference = 472ec1052dbadbc472c0afff943a9b61e6d95ab8089Sudheer Shanka new RestrictedPreference(securityCategory.getContext()); 47394d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller trustAgentPreference.setKey(KEY_TRUST_AGENT); 47494d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller trustAgentPreference.setTitle(agent.title); 47594d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller trustAgentPreference.setSummary(agent.summary); 47694d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller // Create intent for this preference. 47794d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller Intent intent = new Intent(); 47894d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller intent.setComponent(agent.componentName); 47994d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller intent.setAction(Intent.ACTION_MAIN); 48094d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller trustAgentPreference.setIntent(intent); 48194d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller // Add preference to the settings menu. 48294d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller securityCategory.addPreference(trustAgentPreference); 483088de47aa8595f9e4142ce0fe6885840b83edc93Adrian Roos 484ec1052dbadbc472c0afff943a9b61e6d95ab8089Sudheer Shanka trustAgentPreference.setDisabledByAdmin(agent.admin); 485ec1052dbadbc472c0afff943a9b61e6d95ab8089Sudheer Shanka if (!trustAgentPreference.isDisabledByAdmin() && !hasSecurity) { 48694d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller trustAgentPreference.setEnabled(false); 48794d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller trustAgentPreference.setSummary(R.string.disabled_because_no_backup_security); 48894d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller } 48994d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller } 4902db8c867d170c02bae267503b0111d4076b8df21Doris Ling return agents.size(); 49194d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller } 49294d4bd9390b9b9003788a2e779e2b4b256d07c3bJim Miller 4930b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest /* Return true if a there is a Slot that has Icc. 4940b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest */ 4950b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest private boolean isSimIccReady() { 4960b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest TelephonyManager tm = TelephonyManager.getDefault(); 4970b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest final List<SubscriptionInfo> subInfoList = 4980b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest mSubscriptionManager.getActiveSubscriptionInfoList(); 4990b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest 5000b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest if (subInfoList != null) { 5010b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest for (SubscriptionInfo subInfo : subInfoList) { 502247842017e2a3b330b13b469ac8f9f3d3fa19a0eSanket Padawe if (tm.hasIccCard(subInfo.getSimSlotIndex())) { 5030b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest return true; 5040b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest } 5050b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest } 5060b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest } 5070b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest 5080b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest return false; 5090b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest } 5100b8788aae47932db56bf71869c5d58e0338420a4PauloftheWest 51150e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest /* Return true if a SIM is ready for locking. 51250e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest * TODO: consider adding to TelephonyManager or SubscritpionManasger. 51350e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest */ 5140183fb5394f105d544472a52b2b4ba628e01da92Wink Saville private boolean isSimReady() { 51550e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest int simState = TelephonyManager.SIM_STATE_UNKNOWN; 5160183fb5394f105d544472a52b2b4ba628e01da92Wink Saville final List<SubscriptionInfo> subInfoList = 5170183fb5394f105d544472a52b2b4ba628e01da92Wink Saville mSubscriptionManager.getActiveSubscriptionInfoList(); 51850e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest if (subInfoList != null) { 519ca7566125e00ed267aba831bd1d6d1ad78d90c17Wink Saville for (SubscriptionInfo subInfo : subInfoList) { 5203ada2ecbe02c98da529aa106e538a4439219cb62Stuart Scott simState = TelephonyManager.getDefault().getSimState(subInfo.getSimSlotIndex()); 52150e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest if((simState != TelephonyManager.SIM_STATE_ABSENT) && 52250e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest (simState != TelephonyManager.SIM_STATE_UNKNOWN)){ 52350e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest return true; 52450e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest } 52550e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest } 52650e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest } 52750e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest return false; 52850e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest } 52950e6ecacf99c30bf239e68bd54895e3632315063PauloftheWest 530ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal private static ArrayList<TrustAgentComponentInfo> getActiveTrustAgents(Context context, 531ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal TrustAgentManager trustAgentManager, LockPatternUtils utils, 532ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal DevicePolicyManager dpm) { 533ec1052dbadbc472c0afff943a9b61e6d95ab8089Sudheer Shanka PackageManager pm = context.getPackageManager(); 534fe7655914de3852093c35600df996824d03ddf63Jim Miller ArrayList<TrustAgentComponentInfo> result = new ArrayList<TrustAgentComponentInfo>(); 535fe7655914de3852093c35600df996824d03ddf63Jim Miller List<ResolveInfo> resolveInfos = pm.queryIntentServices(TRUST_AGENT_INTENT, 536fe7655914de3852093c35600df996824d03ddf63Jim Miller PackageManager.GET_META_DATA); 5375437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roos List<ComponentName> enabledTrustAgents = utils.getEnabledTrustAgents(MY_USER_ID); 538088de47aa8595f9e4142ce0fe6885840b83edc93Adrian Roos 539ec1052dbadbc472c0afff943a9b61e6d95ab8089Sudheer Shanka EnforcedAdmin admin = RestrictedLockUtils.checkIfKeyguardFeaturesDisabled(context, 540ec1052dbadbc472c0afff943a9b61e6d95ab8089Sudheer Shanka DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS, UserHandle.myUserId()); 541088de47aa8595f9e4142ce0fe6885840b83edc93Adrian Roos 542fe7655914de3852093c35600df996824d03ddf63Jim Miller if (enabledTrustAgents != null && !enabledTrustAgents.isEmpty()) { 543fe7655914de3852093c35600df996824d03ddf63Jim Miller for (int i = 0; i < resolveInfos.size(); i++) { 544fe7655914de3852093c35600df996824d03ddf63Jim Miller ResolveInfo resolveInfo = resolveInfos.get(i); 545fe7655914de3852093c35600df996824d03ddf63Jim Miller if (resolveInfo.serviceInfo == null) continue; 546ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal if (!trustAgentManager.shouldProvideTrust(resolveInfo, pm)) { 547ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal continue; 548ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal } 549fe7655914de3852093c35600df996824d03ddf63Jim Miller TrustAgentComponentInfo trustAgentComponentInfo = 550fe7655914de3852093c35600df996824d03ddf63Jim Miller TrustAgentUtils.getSettingsComponent(pm, resolveInfo); 551fe7655914de3852093c35600df996824d03ddf63Jim Miller if (trustAgentComponentInfo.componentName == null || 552fe7655914de3852093c35600df996824d03ddf63Jim Miller !enabledTrustAgents.contains( 553fe7655914de3852093c35600df996824d03ddf63Jim Miller TrustAgentUtils.getComponentName(resolveInfo)) || 554fe7655914de3852093c35600df996824d03ddf63Jim Miller TextUtils.isEmpty(trustAgentComponentInfo.title)) continue; 555ec1052dbadbc472c0afff943a9b61e6d95ab8089Sudheer Shanka if (admin != null && dpm.getTrustAgentConfiguration( 556088de47aa8595f9e4142ce0fe6885840b83edc93Adrian Roos null, TrustAgentUtils.getComponentName(resolveInfo)) == null) { 557ec1052dbadbc472c0afff943a9b61e6d95ab8089Sudheer Shanka trustAgentComponentInfo.admin = admin; 558088de47aa8595f9e4142ce0fe6885840b83edc93Adrian Roos } 559fe7655914de3852093c35600df996824d03ddf63Jim Miller result.add(trustAgentComponentInfo); 560fe7655914de3852093c35600df996824d03ddf63Jim Miller if (ONLY_ONE_TRUST_AGENT) break; 561fe7655914de3852093c35600df996824d03ddf63Jim Miller } 562fe7655914de3852093c35600df996824d03ddf63Jim Miller } 563fe7655914de3852093c35600df996824d03ddf63Jim Miller return result; 564fe7655914de3852093c35600df996824d03ddf63Jim Miller } 565fe7655914de3852093c35600df996824d03ddf63Jim Miller 56673c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos private static CharSequence getActiveTrustAgentLabel(Context context, 56773c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos TrustAgentManager trustAgentManager, LockPatternUtils utils, 56873c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos DevicePolicyManager dpm) { 56973c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos ArrayList<TrustAgentComponentInfo> agents = getActiveTrustAgents(context, 57073c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos trustAgentManager, utils, dpm); 57173c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos return agents.isEmpty() ? null : agents.get(0).title; 57273c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos } 57373c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos 5742c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne @Override 57562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos public void onGearClick(GearPreference p) { 57662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (KEY_UNLOCK_SET_OR_CHANGE.equals(p.getKey())) { 57762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos startFragment(this, SecuritySubSettings.class.getName(), 0, 0, null); 57862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 57962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 58062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 58162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos @Override 582250b9bee685de8f4060dd410f0894c22de1909cfJim Miller public void onSaveInstanceState(Bundle outState) { 583250b9bee685de8f4060dd410f0894c22de1909cfJim Miller super.onSaveInstanceState(outState); 584250b9bee685de8f4060dd410f0894c22de1909cfJim Miller if (mTrustAgentClickIntent != null) { 585250b9bee685de8f4060dd410f0894c22de1909cfJim Miller outState.putParcelable(TRUST_AGENT_CLICK_INTENT, mTrustAgentClickIntent); 586250b9bee685de8f4060dd410f0894c22de1909cfJim Miller } 587250b9bee685de8f4060dd410f0894c22de1909cfJim Miller } 588250b9bee685de8f4060dd410f0894c22de1909cfJim Miller 589250b9bee685de8f4060dd410f0894c22de1909cfJim Miller @Override 590d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onResume() { 591afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 592afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 59386624a21540e2cd336573a55adb5d3997e4a717dJim Miller // Make sure we reload the preference hierarchy since some of these settings 59486624a21540e2cd336573a55adb5d3997e4a717dJim Miller // depend on others... 59586624a21540e2cd336573a55adb5d3997e4a717dJim Miller createPreferenceHierarchy(); 59686624a21540e2cd336573a55adb5d3997e4a717dJim Miller 59752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (mVisiblePatternProfile != null) { 59856462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri mVisiblePatternProfile.setChecked(mLockPatternUtils.isVisiblePatternEnabled( 59952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri mProfileChallengeUserId)); 60052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 60152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 60256462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri updateUnificationPreference(); 60356462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri 604b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani if (mShowPassword != null) { 605b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani mShowPassword.setChecked(Settings.System.getInt(getContentResolver(), 606b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani Settings.System.TEXT_SHOW_PASSWORD, 1) != 0); 607b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani } 608b0883cb384fc7ad46e011a72355c9fda924e5b28Hung-ying Tyan 60981610543a9d26cf52a4b8aad0bbdde4aa010e197Doris Ling mLocationcontroller.updateSummary(); 610afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 611afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 61256462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri private void updateUnificationPreference() { 61356462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri if (mUnifyProfile != null) { 61456462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri mUnifyProfile.setChecked(!mLockPatternUtils.isSeparateProfileChallengeEnabled( 61556462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri mProfileChallengeUserId)); 61656462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri } 61756462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri } 61856462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri 619afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 62039b467482d1bf256a111c757e9b7621c6f523271Jason Monk public boolean onPreferenceTreeClick(Preference preference) { 621afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final String key = preference.getKey(); 622bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller if (KEY_UNLOCK_SET_OR_CHANGE.equals(key)) { 623fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He // TODO(b/35930129): Remove once existing password can be passed into vold directly. 624fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He // Currently we need this logic to ensure that the QUIET_MODE is off for any work 625fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He // profile with unified challenge on FBE-enabled devices. Otherwise, vold would not be 626fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He // able to complete the operation due to the lack of (old) encryption key. 627fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He if (mProfileChallengeUserId != UserHandle.USER_NULL 628fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He && !mLockPatternUtils.isSeparateProfileChallengeEnabled(mProfileChallengeUserId) 629fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He && StorageManager.isFileEncryptedNativeOnly()) { 630fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He if (Utils.startQuietModeDialogIfNecessary(this.getActivity(), mUm, 631fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He mProfileChallengeUserId)) { 632fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He return false; 633fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He } 634fc6c0169698075ae6458c2e0a1288ac1b52a407fCharles He } 63517e9e1933055b207473b488595b2887bfcaea32eJim Miller startFragment(this, "com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment", 6365bdf0423f9dbc3cf5970045aacdfef79daacc430Fabrice Di Meglio R.string.lock_settings_picker_title, SET_OR_CHANGE_LOCK_METHOD_REQUEST, null); 6376934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri } else if (KEY_UNLOCK_SET_OR_CHANGE_PROFILE.equals(key)) { 63888d523bc5cc011bb0a4efc6abad201b244f5fbb5Bernard Chau if (Utils.startQuietModeDialogIfNecessary(this.getActivity(), mUm, 639616342bb9471f4dda6bcb1dd5c4e1ad7017e2441Ricky Wai mProfileChallengeUserId)) { 640616342bb9471f4dda6bcb1dd5c4e1ad7017e2441Ricky Wai return false; 641616342bb9471f4dda6bcb1dd5c4e1ad7017e2441Ricky Wai } 6426934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri Bundle extras = new Bundle(); 6436934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri extras.putInt(Intent.EXTRA_USER_ID, mProfileChallengeUserId); 64452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri startFragment(this, "com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment", 64552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri R.string.lock_settings_picker_title_profile, 64652681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri SET_OR_CHANGE_LOCK_METHOD_REQUEST_PROFILE, extras); 6476f482447b05492906755d91ac4c29ec505a8a544Ido Ofir } else if (KEY_TRUST_AGENT.equals(key)) { 6486f482447b05492906755d91ac4c29ec505a8a544Ido Ofir ChooseLockSettingsHelper helper = 6496f482447b05492906755d91ac4c29ec505a8a544Ido Ofir new ChooseLockSettingsHelper(this.getActivity(), this); 650250b9bee685de8f4060dd410f0894c22de1909cfJim Miller mTrustAgentClickIntent = preference.getIntent(); 6518a09b619aeb233e2aab1919301f162d8acf1f0f0Jorim Jaggi boolean confirmationLaunched = helper.launchConfirmationActivity( 6528a09b619aeb233e2aab1919301f162d8acf1f0f0Jorim Jaggi CHANGE_TRUST_AGENT_SETTINGS, preference.getTitle()); 6538a09b619aeb233e2aab1919301f162d8acf1f0f0Jorim Jaggi if (!confirmationLaunched&& mTrustAgentClickIntent != null) { 6546f482447b05492906755d91ac4c29ec505a8a544Ido Ofir // If this returns false, it means no password confirmation is required. 655250b9bee685de8f4060dd410f0894c22de1909cfJim Miller startActivity(mTrustAgentClickIntent); 656250b9bee685de8f4060dd410f0894c22de1909cfJim Miller mTrustAgentClickIntent = null; 6576f482447b05492906755d91ac4c29ec505a8a544Ido Ofir } 65836972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller } else { 65936972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller // If we didn't handle it, let preferences handle it. 66039b467482d1bf256a111c757e9b7621c6f523271Jason Monk return super.onPreferenceTreeClick(preference); 661afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 66236972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller return true; 663afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 664afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 665afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 666a6a8a1479b970d8a84395453703348fe42d17438Gilles Debunne * see confirmPatternThenDisableAndClear 667afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 668afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 669d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onActivityResult(int requestCode, int resultCode, Intent data) { 670afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onActivityResult(requestCode, resultCode, data); 671f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos if (requestCode == CHANGE_TRUST_AGENT_SETTINGS && resultCode == Activity.RESULT_OK) { 672250b9bee685de8f4060dd410f0894c22de1909cfJim Miller if (mTrustAgentClickIntent != null) { 673250b9bee685de8f4060dd410f0894c22de1909cfJim Miller startActivity(mTrustAgentClickIntent); 674250b9bee685de8f4060dd410f0894c22de1909cfJim Miller mTrustAgentClickIntent = null; 6756f482447b05492906755d91ac4c29ec505a8a544Ido Ofir } 676250b9bee685de8f4060dd410f0894c22de1909cfJim Miller return; 67752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } else if (requestCode == UNIFY_LOCK_CONFIRM_DEVICE_REQUEST 67852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri && resultCode == Activity.RESULT_OK) { 67952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri mCurrentDevicePassword = 68052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri data.getStringExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD); 68152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri launchConfirmProfileLockForUnification(); 68252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri return; 68352681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } else if (requestCode == UNIFY_LOCK_CONFIRM_PROFILE_REQUEST 68452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri && resultCode == Activity.RESULT_OK) { 68552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri mCurrentProfilePassword = 68652681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri data.getStringExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD); 68752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri unifyLocks(); 68852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri return; 68926632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra } else if (requestCode == UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST 69026632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra && resultCode == Activity.RESULT_OK) { 69126632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra ununifyLocks(); 69226632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra return; 693487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett } 694122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller createPreferenceHierarchy(); 695afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 696f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 69752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private void launchConfirmDeviceLockForUnification() { 69852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri final String title = getActivity().getString( 69926632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra R.string.unlock_set_unlock_launch_picker_title); 70052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri final ChooseLockSettingsHelper helper = 70152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri new ChooseLockSettingsHelper(getActivity(), this); 70252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (!helper.launchConfirmationActivity( 70326632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra UNIFY_LOCK_CONFIRM_DEVICE_REQUEST, title, true, MY_USER_ID)) { 70452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri launchConfirmProfileLockForUnification(); 70552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 70652681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 70752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 70852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private void launchConfirmProfileLockForUnification() { 70952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri final String title = getActivity().getString( 71026632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra R.string.unlock_set_unlock_launch_picker_title_profile); 71152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri final ChooseLockSettingsHelper helper = 71252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri new ChooseLockSettingsHelper(getActivity(), this); 71352681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (!helper.launchConfirmationActivity( 71452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri UNIFY_LOCK_CONFIRM_PROFILE_REQUEST, title, true, mProfileChallengeUserId)) { 71552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri unifyLocks(); 71652681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri createPreferenceHierarchy(); 71752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 71852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 71952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 72052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri private void unifyLocks() { 72152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri int profileQuality = 72252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri mLockPatternUtils.getKeyguardStoredPasswordQuality(mProfileChallengeUserId); 72352681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (profileQuality == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { 72452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri mLockPatternUtils.saveLockPattern( 72552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri LockPatternUtils.stringToPattern(mCurrentProfilePassword), 72626632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra mCurrentDevicePassword, MY_USER_ID); 72752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } else { 72852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri mLockPatternUtils.saveLockPassword( 72952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri mCurrentProfilePassword, mCurrentDevicePassword, 73026632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra profileQuality, MY_USER_ID); 73152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 732a0a073864a8948fc016bbfd26a04a7374d6a2c73Ricky Wai mLockPatternUtils.setSeparateProfileChallengeEnabled(mProfileChallengeUserId, false, 733a0a073864a8948fc016bbfd26a04a7374d6a2c73Ricky Wai mCurrentProfilePassword); 7344af1661bfb62f322b066d7a7fd537e5c1deb989cDaniel U final boolean profilePatternVisibility = 7354af1661bfb62f322b066d7a7fd537e5c1deb989cDaniel U mLockPatternUtils.isVisiblePatternEnabled(mProfileChallengeUserId); 7364af1661bfb62f322b066d7a7fd537e5c1deb989cDaniel U mLockPatternUtils.setVisiblePatternEnabled(profilePatternVisibility, MY_USER_ID); 73752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri mCurrentDevicePassword = null; 73852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri mCurrentProfilePassword = null; 73952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 74052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 74156462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri private void unifyUncompliantLocks() { 7424bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai mLockPatternUtils.setSeparateProfileChallengeEnabled(mProfileChallengeUserId, false, 7434bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai mCurrentProfilePassword); 74456462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri startFragment(this, "com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment", 74556462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri R.string.lock_settings_picker_title, SET_OR_CHANGE_LOCK_METHOD_REQUEST, null); 74656462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri } 74756462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri 74826632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra private void ununifyLocks() { 74926632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra Bundle extras = new Bundle(); 75026632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra extras.putInt(Intent.EXTRA_USER_ID, mProfileChallengeUserId); 75126632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra startFragment(this, 75226632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra "com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment", 75326632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra R.string.lock_settings_picker_title_profile, 75426632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra SET_OR_CHANGE_LOCK_METHOD_REQUEST_PROFILE, extras); 75526632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra } 75626632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra 7570c5a401a58b30041d5fe712d78fccbd47f5b744dMaggie Benthall @Override 75886624a21540e2cd336573a55adb5d3997e4a717dJim Miller public boolean onPreferenceChange(Preference preference, Object value) { 759300e920f66c03b390ce738ccf4d4646ffa039d40arete boolean result = true; 7604a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller final String key = preference.getKey(); 7614a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils(); 76252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (KEY_VISIBLE_PATTERN_PROFILE.equals(key)) { 76388d523bc5cc011bb0a4efc6abad201b244f5fbb5Bernard Chau if (Utils.startQuietModeDialogIfNecessary(this.getActivity(), mUm, 764616342bb9471f4dda6bcb1dd5c4e1ad7017e2441Ricky Wai mProfileChallengeUserId)) { 765616342bb9471f4dda6bcb1dd5c4e1ad7017e2441Ricky Wai return false; 766616342bb9471f4dda6bcb1dd5c4e1ad7017e2441Ricky Wai } 76752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri lockPatternUtils.setVisiblePatternEnabled((Boolean) value, mProfileChallengeUserId); 76856462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri } else if (KEY_UNIFICATION.equals(key)) { 76988d523bc5cc011bb0a4efc6abad201b244f5fbb5Bernard Chau if (Utils.startQuietModeDialogIfNecessary(this.getActivity(), mUm, 770616342bb9471f4dda6bcb1dd5c4e1ad7017e2441Ricky Wai mProfileChallengeUserId)) { 771616342bb9471f4dda6bcb1dd5c4e1ad7017e2441Ricky Wai return false; 772616342bb9471f4dda6bcb1dd5c4e1ad7017e2441Ricky Wai } 77356462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri if ((Boolean) value) { 77456462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri final boolean compliantForDevice = 77556462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri (mLockPatternUtils.getKeyguardStoredPasswordQuality(mProfileChallengeUserId) 77656462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri >= DevicePolicyManager.PASSWORD_QUALITY_SOMETHING 77756462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri && mLockPatternUtils.isSeparateProfileChallengeAllowedToUnify( 77856462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri mProfileChallengeUserId)); 77956462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri UnificationConfirmationDialog dialog = 78056462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri UnificationConfirmationDialog.newIntance(compliantForDevice); 78156462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri dialog.show(getChildFragmentManager(), TAG_UNIFICATION_DIALOG); 78256462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri } else { 78326632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra final String title = getActivity().getString( 78426632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra R.string.unlock_set_unlock_launch_picker_title); 78526632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra final ChooseLockSettingsHelper helper = 78626632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra new ChooseLockSettingsHelper(getActivity(), this); 78726632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra if(!helper.launchConfirmationActivity( 78826632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST, title, true, MY_USER_ID)) { 78926632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra ununifyLocks(); 79026632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra } 79156462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri } 79252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } else if (KEY_SHOW_PASSWORD.equals(key)) { 7934a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 7944a9065e6547c24c751b0aecbc151e57bcbcf92eaJim Miller ((Boolean) value) ? 1 : 0); 795c04420ce2581627478b59cc5d8b453f1fa329e02Paul Lawrence lockPatternUtils.setVisiblePasswordEnabled((Boolean) value, MY_USER_ID); 79686624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 797300e920f66c03b390ce738ccf4d4646ffa039d40arete return result; 79886624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 799487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett 80093c0ee52cc5709ec7353fee5a01e4dd9000e42d1rich cannings @Override 80193c0ee52cc5709ec7353fee5a01e4dd9000e42d1rich cannings protected int getHelpResource() { 80293c0ee52cc5709ec7353fee5a01e4dd9000e42d1rich cannings return R.string.help_url_security; 80393c0ee52cc5709ec7353fee5a01e4dd9000e42d1rich cannings } 80493c0ee52cc5709ec7353fee5a01e4dd9000e42d1rich cannings 805d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio /** 806d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio * For Search. Please keep it in sync when updating "createPreferenceHierarchy()" 807d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio */ 808d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 809d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio new SecuritySearchIndexProvider(); 810d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 811fe7655914de3852093c35600df996824d03ddf63Jim Miller private static class SecuritySearchIndexProvider extends BaseSearchIndexProvider { 812d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 813d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio @Override 814d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio public List<SearchIndexableResource> getXmlResourcesToIndex( 815d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio Context context, boolean enabled) { 81641d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi final List<SearchIndexableResource> index = new ArrayList<SearchIndexableResource>(); 817d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 81841d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi final LockPatternUtils lockPatternUtils = new LockPatternUtils(context); 819e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic final ManagedLockPasswordProvider managedPasswordProvider = 820e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic ManagedLockPasswordProvider.get(context, MY_USER_ID); 82141d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi final DevicePolicyManager dpm = (DevicePolicyManager) 82241d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi context.getSystemService(Context.DEVICE_POLICY_SERVICE); 82341d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi final UserManager um = UserManager.get(context); 8247aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi final int profileUserId = Utils.getManagedProfileId(um, MY_USER_ID); 825d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 8267aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi // To add option for unlock screen, user's password must not be managed and 8277aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi // must not be unified with managed profile, whose password is managed. 8287aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi if (!isPasswordManaged(MY_USER_ID, context, dpm) 8297aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi && (profileUserId == UserHandle.USER_NULL 8307aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi || lockPatternUtils.isSeparateProfileChallengeAllowed(profileUserId) 8317aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi || !isPasswordManaged(profileUserId, context, dpm))) { 83241d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi // Add options for lock/unlock screen 83341d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi final int resId = getResIdForLockUnlockScreen(context, lockPatternUtils, 834e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic managedPasswordProvider, MY_USER_ID); 83541d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi index.add(getSearchResource(context, resId)); 83641d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi } 837d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 83852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (profileUserId != UserHandle.USER_NULL 8397aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi && lockPatternUtils.isSeparateProfileChallengeAllowed(profileUserId) 8407aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi && !isPasswordManaged(profileUserId, context, dpm)) { 84141d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi index.add(getSearchResource(context, getResIdForLockUnlockScreen(context, 842e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic lockPatternUtils, managedPasswordProvider, profileUserId))); 8436934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri } 8446934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri 84541d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi final SearchIndexableResource sir = getSearchResource(context, 846e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic SecuritySubSettings.getResIdForLockUnlockSubScreen(context, lockPatternUtils, 847e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic managedPasswordProvider)); 84862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos sir.className = SecuritySubSettings.class.getName(); 84941d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi index.add(sir); 85062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 851d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio // Append the rest of the settings 85241d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi index.add(getSearchResource(context, R.xml.security_settings_misc)); 85341d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi 85441d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi return index; 85541d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi } 856d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 85741d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi private SearchIndexableResource getSearchResource(Context context, int xmlResId) { 85841d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi final SearchIndexableResource sir = new SearchIndexableResource(context); 85941d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi sir.xmlResId = xmlResId; 86041d99408cb40f16a0f6833961fa4b77c4d025dafOleksandr Peletskyi return sir; 861d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio } 862d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 8637aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi private boolean isPasswordManaged(int userId, Context context, DevicePolicyManager dpm) { 8647aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi final EnforcedAdmin admin = RestrictedLockUtils.checkIfPasswordQualityIsSet( 8657aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi context, userId); 8667aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi return admin != null && dpm.getPasswordQuality(admin.component, userId) == 8677aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi DevicePolicyManager.PASSWORD_QUALITY_MANAGED; 8687aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi } 8697aeb56ce6b4090fdc58bf5fc4b22516d53aa003dOleksandr Peletskyi 870d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio @Override 871d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { 872d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>(); 873d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio final Resources res = context.getResources(); 874d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 875d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio final String screenTitle = res.getString(R.string.security_settings_title); 876d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 877d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio SearchIndexableRaw data = new SearchIndexableRaw(context); 878d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio data.title = screenTitle; 879d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio data.screenTitle = screenTitle; 880d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio result.add(data); 881d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 88244879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen final UserManager um = UserManager.get(context); 883d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 884f516e7dde0074416dbf51650cbfb9cc763027b27Julia Reynolds // Fingerprint 885ab50807d1edacb4fca5447525bb5270a853eaafcJeff Sharkey final FingerprintManager fpm = Utils.getFingerprintManagerOrNull(context); 886b528b26ea730fa468a92970f515c312a91bfcf37Jim Miller if (fpm != null && fpm.isHardwareDetected()) { 887c5fa6e26dffd43d8fab12117d7994d8ab6466048Jim Miller // This catches the title which can be overloaded in an overlay 888f516e7dde0074416dbf51650cbfb9cc763027b27Julia Reynolds data = new SearchIndexableRaw(context); 889f516e7dde0074416dbf51650cbfb9cc763027b27Julia Reynolds data.title = res.getString(R.string.security_settings_fingerprint_preference_title); 890f516e7dde0074416dbf51650cbfb9cc763027b27Julia Reynolds data.screenTitle = screenTitle; 891f516e7dde0074416dbf51650cbfb9cc763027b27Julia Reynolds result.add(data); 892c5fa6e26dffd43d8fab12117d7994d8ab6466048Jim Miller // Fallback for when the above doesn't contain "fingerprint" 893c5fa6e26dffd43d8fab12117d7994d8ab6466048Jim Miller data = new SearchIndexableRaw(context); 894c5fa6e26dffd43d8fab12117d7994d8ab6466048Jim Miller data.title = res.getString(R.string.fingerprint_manage_category_title); 895c5fa6e26dffd43d8fab12117d7994d8ab6466048Jim Miller data.screenTitle = screenTitle; 896c5fa6e26dffd43d8fab12117d7994d8ab6466048Jim Miller result.add(data); 897f516e7dde0074416dbf51650cbfb9cc763027b27Julia Reynolds } 898f516e7dde0074416dbf51650cbfb9cc763027b27Julia Reynolds 89952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri final LockPatternUtils lockPatternUtils = new LockPatternUtils(context); 900462cce1a4caef7705766c6ebecd353f2e84a8543Clara Bayarri final int profileUserId = Utils.getManagedProfileId(um, MY_USER_ID); 90152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (profileUserId != UserHandle.USER_NULL 90252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri && lockPatternUtils.isSeparateProfileChallengeAllowed(profileUserId)) { 90352681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (lockPatternUtils.getKeyguardStoredPasswordQuality(profileUserId) 90452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri >= DevicePolicyManager.PASSWORD_QUALITY_SOMETHING 90552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri && lockPatternUtils.isSeparateProfileChallengeAllowedToUnify( 90652681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri profileUserId)) { 90752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri data = new SearchIndexableRaw(context); 90852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri data.title = res.getString(R.string.lock_settings_profile_unification_title); 90952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri data.screenTitle = screenTitle; 91052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri result.add(data); 91152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 91252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 91352681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 914fe7655914de3852093c35600df996824d03ddf63Jim Miller // Advanced 9155437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roos if (lockPatternUtils.isSecure(MY_USER_ID)) { 916ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal final TrustAgentManager trustAgentManager = 917ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal FeatureFactory.getFactory(context).getSecurityFeatureProvider() 918ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal .getTrustAgentManager(); 919ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal final List<TrustAgentComponentInfo> agents = 920ccae73f228f98bc8412c435a273525514d78843aZachary Iqbal getActiveTrustAgents(context, trustAgentManager, lockPatternUtils, 921088de47aa8595f9e4142ce0fe6885840b83edc93Adrian Roos context.getSystemService(DevicePolicyManager.class)); 922fe7655914de3852093c35600df996824d03ddf63Jim Miller for (int i = 0; i < agents.size(); i++) { 923fe7655914de3852093c35600df996824d03ddf63Jim Miller final TrustAgentComponentInfo agent = agents.get(i); 924fe7655914de3852093c35600df996824d03ddf63Jim Miller data = new SearchIndexableRaw(context); 925fe7655914de3852093c35600df996824d03ddf63Jim Miller data.title = agent.title; 926fe7655914de3852093c35600df996824d03ddf63Jim Miller data.screenTitle = screenTitle; 927fe7655914de3852093c35600df996824d03ddf63Jim Miller result.add(data); 928fe7655914de3852093c35600df996824d03ddf63Jim Miller } 929fe7655914de3852093c35600df996824d03ddf63Jim Miller } 930d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio return result; 931d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio } 932d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 933d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio @Override 934d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio public List<String> getNonIndexableKeys(Context context) { 9353a50f5c290971367a2274f7c5da9eafd779e63ecMatthew Fritze final List<String> keys = super.getNonIndexableKeys(context); 936d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 937d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio LockPatternUtils lockPatternUtils = new LockPatternUtils(context); 938d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 939d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio // Do not display SIM lock for devices without an Icc card 94044879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen final UserManager um = UserManager.get(context); 94144879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen final TelephonyManager tm = TelephonyManager.from(context); 94244879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen if (!um.isAdminUser() || !tm.hasIccCard()) { 943d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio keys.add(KEY_SIM_LOCK); 944d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio } 945d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 946fe7655914de3852093c35600df996824d03ddf63Jim Miller // TrustAgent settings disappear when the user has no primary security. 9475437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roos if (!lockPatternUtils.isSecure(MY_USER_ID)) { 948fe7655914de3852093c35600df996824d03ddf63Jim Miller keys.add(KEY_TRUST_AGENT); 949fe7655914de3852093c35600df996824d03ddf63Jim Miller keys.add(KEY_MANAGE_TRUST_AGENTS); 950fe7655914de3852093c35600df996824d03ddf63Jim Miller } 951ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski 952ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski if (!(new EnterprisePrivacyPreferenceController(context, null /* lifecycle */)) 953ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski .isAvailable()) { 954ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski keys.add(KEY_ENTERPRISE_PRIVACY); 955ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski } 956fe7655914de3852093c35600df996824d03ddf63Jim Miller 9573a50f5c290971367a2274f7c5da9eafd779e63ecMatthew Fritze // Duplicate in special app access 9583a50f5c290971367a2274f7c5da9eafd779e63ecMatthew Fritze keys.add(KEY_MANAGE_DEVICE_ADMIN); 9593a50f5c290971367a2274f7c5da9eafd779e63ecMatthew Fritze // Duplicates between parent-child 9603a50f5c290971367a2274f7c5da9eafd779e63ecMatthew Fritze keys.add((new LocationPreferenceController(context)).getPreferenceKey()); 9613a50f5c290971367a2274f7c5da9eafd779e63ecMatthew Fritze keys.add(KEY_ENCRYPTION_AND_CREDENTIALS); 9623a50f5c290971367a2274f7c5da9eafd779e63ecMatthew Fritze keys.add(KEY_SCREEN_PINNING); 9633a50f5c290971367a2274f7c5da9eafd779e63ecMatthew Fritze keys.add(KEY_LOCATION_SCANNING); 9643a50f5c290971367a2274f7c5da9eafd779e63ecMatthew Fritze 965d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio return keys; 966d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio } 967d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio } 968d1d2f0222443ace71e0cd48c7ad1538627f7a286Fabrice Di Meglio 96962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos public static class SecuritySubSettings extends SettingsPreferenceFragment 97093582995daff3b92b89a24c271fbd719293a41daDoris Ling implements OnPreferenceChangeListener, OwnerInfoPreferenceController.OwnerInfoCallback { 97162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 97262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private static final String KEY_VISIBLE_PATTERN = "visiblepattern"; 97362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private static final String KEY_LOCK_AFTER_TIMEOUT = "lock_after_timeout"; 97462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private static final String KEY_POWER_INSTANTLY_LOCKS = "power_button_instantly_locks"; 97562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 97662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos // These switch preferences need special handling since they're not all stored in Settings. 97762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private static final String SWITCH_PREFERENCE_KEYS[] = { KEY_LOCK_AFTER_TIMEOUT, 978b4d55a20505351c90f526f4a29418572674ffb0eClara Bayarri KEY_VISIBLE_PATTERN, KEY_POWER_INSTANTLY_LOCKS }; 97962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 980900adce6ca6fa6e0034b43898ed663f0386ef998Sudheer Shanka private TimeoutListPreference mLockAfter; 98162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private SwitchPreference mVisiblePattern; 98262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private SwitchPreference mPowerButtonInstantlyLocks; 98362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 98473c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos private TrustAgentManager mTrustAgentManager; 98562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private LockPatternUtils mLockPatternUtils; 98662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private DevicePolicyManager mDPM; 98793582995daff3b92b89a24c271fbd719293a41daDoris Ling private OwnerInfoPreferenceController mOwnerInfoPreferenceController; 98862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 98962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos @Override 9906507613ebcd22e4691c2af92a5c161bd327db336Fan Zhang public int getMetricsCategory() { 99162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos return MetricsEvent.SECURITY; 99262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 99362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 99462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos @Override 99562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos public void onCreate(Bundle icicle) { 99662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos super.onCreate(icicle); 99773c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos SecurityFeatureProvider securityFeatureProvider = 99873c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos FeatureFactory.getFactory(getActivity()).getSecurityFeatureProvider(); 99973c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos mTrustAgentManager = securityFeatureProvider.getTrustAgentManager(); 100062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mLockPatternUtils = new LockPatternUtils(getContext()); 100162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mDPM = getContext().getSystemService(DevicePolicyManager.class); 100293582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPreferenceController = 100393582995daff3b92b89a24c271fbd719293a41daDoris Ling new OwnerInfoPreferenceController(getContext(), this, null /* lifecycle */); 10043686ef5e0331398612da213d4bdd7794d0fc7c2bAdrian Roos createPreferenceHierarchy(); 100562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 100662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 100762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos @Override 100862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos public void onResume() { 100962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos super.onResume(); 101062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 101162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos createPreferenceHierarchy(); 101262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 101362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mVisiblePattern != null) { 101456462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri mVisiblePattern.setChecked(mLockPatternUtils.isVisiblePatternEnabled( 101562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos MY_USER_ID)); 101662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 101762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mPowerButtonInstantlyLocks != null) { 10184f80f221c6f90c7d931caf7146efee483d8cb4ccWilliam Luh mPowerButtonInstantlyLocks.setChecked( 10194f80f221c6f90c7d931caf7146efee483d8cb4ccWilliam Luh mLockPatternUtils.getPowerButtonInstantlyLocks(MY_USER_ID)); 102062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 102162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 102293582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPreferenceController.updateSummary(); 102362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 102462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 102562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos @Override 102662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos public void onActivityResult(int requestCode, int resultCode, Intent data) { 102762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos super.onActivityResult(requestCode, resultCode, data); 102862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 102962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos createPreferenceHierarchy(); 103062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 103162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 103262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private void createPreferenceHierarchy() { 103362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos PreferenceScreen root = getPreferenceScreen(); 103462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (root != null) { 103562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos root.removeAll(); 103662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 103762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 103862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos final int resid = getResIdForLockUnlockSubScreen(getActivity(), 1039e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic new LockPatternUtils(getContext()), 1040e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic ManagedLockPasswordProvider.get(getContext(), MY_USER_ID)); 104162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos addPreferencesFromResource(resid); 104262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 104362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos // lock after preference 1044900adce6ca6fa6e0034b43898ed663f0386ef998Sudheer Shanka mLockAfter = (TimeoutListPreference) findPreference(KEY_LOCK_AFTER_TIMEOUT); 104562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mLockAfter != null) { 104662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos setupLockAfterPreference(); 104762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos updateLockAfterPreferenceSummary(); 104862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 104962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 105062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos // visible pattern 105162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mVisiblePattern = (SwitchPreference) findPreference(KEY_VISIBLE_PATTERN); 105262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 105362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos // lock instantly on power key press 105462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mPowerButtonInstantlyLocks = (SwitchPreference) findPreference( 105562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos KEY_POWER_INSTANTLY_LOCKS); 105673c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos CharSequence trustAgentLabel = getActiveTrustAgentLabel(getContext(), 105773c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos mTrustAgentManager, mLockPatternUtils, mDPM); 105873c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos if (mPowerButtonInstantlyLocks != null && !TextUtils.isEmpty(trustAgentLabel)) { 105962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mPowerButtonInstantlyLocks.setSummary(getString( 106062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos R.string.lockpattern_settings_power_button_instantly_locks_summary, 106173c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos trustAgentLabel)); 106262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 106362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 106493582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPreferenceController.displayPreference(getPreferenceScreen()); 106593582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPreferenceController.updateEnableState(); 106662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 106762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos for (int i = 0; i < SWITCH_PREFERENCE_KEYS.length; i++) { 106862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos final Preference pref = findPreference(SWITCH_PREFERENCE_KEYS[i]); 106962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (pref != null) pref.setOnPreferenceChangeListener(this); 107062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 107162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 107262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 107362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private void setupLockAfterPreference() { 107462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos // Compatible with pre-Froyo 107562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos long currentTimeout = Settings.Secure.getLong(getContentResolver(), 107662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, 5000); 107762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mLockAfter.setValue(String.valueOf(currentTimeout)); 107862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mLockAfter.setOnPreferenceChangeListener(this); 1079900adce6ca6fa6e0034b43898ed663f0386ef998Sudheer Shanka if (mDPM != null) { 1080900adce6ca6fa6e0034b43898ed663f0386ef998Sudheer Shanka final EnforcedAdmin admin = RestrictedLockUtils.checkIfMaximumTimeToLockIsSet( 1081900adce6ca6fa6e0034b43898ed663f0386ef998Sudheer Shanka getActivity()); 108236cce830b9319985b138432b89ea1022acf68785Ricky Wai final long adminTimeout = mDPM 108336cce830b9319985b138432b89ea1022acf68785Ricky Wai .getMaximumTimeToLockForUserAndProfiles(UserHandle.myUserId()); 108462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos final long displayTimeout = Math.max(0, 108562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos Settings.System.getInt(getContentResolver(), SCREEN_OFF_TIMEOUT, 0)); 1086900adce6ca6fa6e0034b43898ed663f0386ef998Sudheer Shanka // This setting is a slave to display timeout when a device policy is enforced. 1087900adce6ca6fa6e0034b43898ed663f0386ef998Sudheer Shanka // As such, maxLockTimeout = adminTimeout - displayTimeout. 1088900adce6ca6fa6e0034b43898ed663f0386ef998Sudheer Shanka // If there isn't enough time, shows "immediately" setting. 1089900adce6ca6fa6e0034b43898ed663f0386ef998Sudheer Shanka final long maxTimeout = Math.max(0, adminTimeout - displayTimeout); 1090900adce6ca6fa6e0034b43898ed663f0386ef998Sudheer Shanka mLockAfter.removeUnusableTimeouts(maxTimeout, admin); 109162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 109262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 109362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 109462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private void updateLockAfterPreferenceSummary() { 109562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos final String summary; 109662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mLockAfter.isDisabledByAdmin()) { 109762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos summary = getString(R.string.disabled_by_policy_title); 109862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } else { 109962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos // Update summary message with current value 110062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos long currentTimeout = Settings.Secure.getLong(getContentResolver(), 110162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, 5000); 110262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos final CharSequence[] entries = mLockAfter.getEntries(); 110362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos final CharSequence[] values = mLockAfter.getEntryValues(); 110462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos int best = 0; 110562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos for (int i = 0; i < values.length; i++) { 110662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos long timeout = Long.valueOf(values[i].toString()); 110762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (currentTimeout >= timeout) { 110862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos best = i; 110962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 111062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 111162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 111273c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos CharSequence trustAgentLabel = getActiveTrustAgentLabel(getContext(), 111373c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos mTrustAgentManager, mLockPatternUtils, mDPM); 111473c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos if (!TextUtils.isEmpty(trustAgentLabel)) { 111562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (Long.valueOf(values[best].toString()) == 0) { 111662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos summary = getString(R.string.lock_immediately_summary_with_exception, 111773c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos trustAgentLabel); 111862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } else { 111962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos summary = getString(R.string.lock_after_timeout_summary_with_exception, 112073c52f291d3a0a6230e18911fc8007375bd4c34bAdrian Roos entries[best], trustAgentLabel); 112162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 112262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } else { 112362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos summary = getString(R.string.lock_after_timeout_summary, entries[best]); 112462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 112562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 112662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mLockAfter.setSummary(summary); 112762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 112862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 112993582995daff3b92b89a24c271fbd719293a41daDoris Ling @Override 113093582995daff3b92b89a24c271fbd719293a41daDoris Ling public void onOwnerInfoUpdated() { 113193582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPreferenceController.updateSummary(); 113262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 113362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 113462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private static int getResIdForLockUnlockSubScreen(Context context, 1135e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic LockPatternUtils lockPatternUtils, 1136e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic ManagedLockPasswordProvider managedPasswordProvider) { 113762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (lockPatternUtils.isSecure(MY_USER_ID)) { 113862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos switch (lockPatternUtils.getKeyguardStoredPasswordQuality(MY_USER_ID)) { 113962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 114062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos return R.xml.security_settings_pattern_sub; 114162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 114262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: 114362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos return R.xml.security_settings_pin_sub; 114462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 114562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 114662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 114762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos return R.xml.security_settings_password_sub; 1148e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case DevicePolicyManager.PASSWORD_QUALITY_MANAGED: 1149e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic return managedPasswordProvider.getResIdForLockUnlockSubScreen(); 115062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 115162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } else if (!lockPatternUtils.isLockScreenDisabled(MY_USER_ID)) { 115262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos return R.xml.security_settings_slide_sub; 115362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 115462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos return 0; 115562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 115662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos 115762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos @Override 115862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos public boolean onPreferenceChange(Preference preference, Object value) { 115962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos String key = preference.getKey(); 116062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (KEY_POWER_INSTANTLY_LOCKS.equals(key)) { 116162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mLockPatternUtils.setPowerButtonInstantlyLocks((Boolean) value, MY_USER_ID); 116262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } else if (KEY_LOCK_AFTER_TIMEOUT.equals(key)) { 116362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos int timeout = Integer.parseInt((String) value); 116462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos try { 116562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos Settings.Secure.putInt(getContentResolver(), 116662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, timeout); 116762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } catch (NumberFormatException e) { 116862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos Log.e("SecuritySettings", "could not persist lockAfter timeout setting", e); 116962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 1170de4f471e558620f2cce57b4160e3c728baef2fbbJulia Reynolds setupLockAfterPreference(); 117162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos updateLockAfterPreferenceSummary(); 117262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } else if (KEY_VISIBLE_PATTERN.equals(key)) { 117362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mLockPatternUtils.setVisiblePatternEnabled((Boolean) value, MY_USER_ID); 117462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 117562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos return true; 117662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 117762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 117852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 11791e516287bd0c910f83d2ead28bf67e26dfbead86Fan Zhang public static class UnificationConfirmationDialog extends InstrumentedDialogFragment { 118056462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri private static final String EXTRA_COMPLIANT = "compliant"; 118152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 118256462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri public static UnificationConfirmationDialog newIntance(boolean compliant) { 118352681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri UnificationConfirmationDialog dialog = new UnificationConfirmationDialog(); 118456462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri Bundle args = new Bundle(); 118556462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri args.putBoolean(EXTRA_COMPLIANT, compliant); 118656462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri dialog.setArguments(args); 118752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri return dialog; 118852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 118952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 119052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri @Override 119152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri public void show(FragmentManager manager, String tag) { 119252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri if (manager.findFragmentByTag(tag) == null) { 119352681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri // Prevent opening multiple dialogs if tapped on button quickly 119452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri super.show(manager, tag); 119552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 119652681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 119752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 119852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri @Override 119952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri public Dialog onCreateDialog(Bundle savedInstanceState) { 120052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri final SecuritySettings parentFragment = ((SecuritySettings) getParentFragment()); 120156462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri final boolean compliant = getArguments().getBoolean(EXTRA_COMPLIANT); 120252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri return new AlertDialog.Builder(getActivity()) 120352681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri .setTitle(R.string.lock_settings_profile_unification_dialog_title) 120456462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri .setMessage(compliant ? R.string.lock_settings_profile_unification_dialog_body 120556462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri : R.string.lock_settings_profile_unification_dialog_uncompliant_body) 120626632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra .setPositiveButton( 120726632097ba7ae5d9a4fb3db08be588e686520f55Mahaver Chopra compliant ? R.string.lock_settings_profile_unification_dialog_confirm 120856462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri : R.string.lock_settings_profile_unification_dialog_uncompliant_confirm, 120952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri new DialogInterface.OnClickListener() { 121052681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri @Override 121152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri public void onClick(DialogInterface dialog, int whichButton) { 121256462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri if (compliant) { 121356462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri parentFragment.launchConfirmDeviceLockForUnification(); 121456462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri } else { 121556462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri parentFragment.unifyUncompliantLocks(); 121656462d668a7a81ef17c01b1ca70a9d462eae79d2Clara Bayarri } 121752681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 121852681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 121952681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri ) 1220f6fc22092a8dede9b983b5e30cab2979193bf0c6Ricky Wai .setNegativeButton(R.string.cancel, null) 122152681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri .create(); 122252681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 1223f6fc22092a8dede9b983b5e30cab2979193bf0c6Ricky Wai 1224f6fc22092a8dede9b983b5e30cab2979193bf0c6Ricky Wai @Override 1225f6fc22092a8dede9b983b5e30cab2979193bf0c6Ricky Wai public void onDismiss(DialogInterface dialog) { 1226f6fc22092a8dede9b983b5e30cab2979193bf0c6Ricky Wai super.onDismiss(dialog); 1227f6fc22092a8dede9b983b5e30cab2979193bf0c6Ricky Wai ((SecuritySettings) getParentFragment()).updateUnificationPreference(); 1228f6fc22092a8dede9b983b5e30cab2979193bf0c6Ricky Wai } 12291e516287bd0c910f83d2ead28bf67e26dfbead86Fan Zhang 12301e516287bd0c910f83d2ead28bf67e26dfbead86Fan Zhang @Override 12311e516287bd0c910f83d2ead28bf67e26dfbead86Fan Zhang public int getMetricsCategory() { 12321e516287bd0c910f83d2ead28bf67e26dfbead86Fan Zhang return MetricsEvent.DIALOG_UNIFICATION_CONFIRMATION; 12331e516287bd0c910f83d2ead28bf67e26dfbead86Fan Zhang } 123452681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri } 123552681ece0454f830401388a71f0db4ff8b1d126bClara Bayarri 12365c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini static class SummaryProvider implements SummaryLoader.SummaryProvider { 12375c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini 12385c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini private final Context mContext; 12395c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini private final SummaryLoader mSummaryLoader; 12405c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini 12415c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini public SummaryProvider(Context context, SummaryLoader summaryLoader) { 12425c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini mContext = context; 12435c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini mSummaryLoader = summaryLoader; 12445c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini } 12455c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini 12465c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini @Override 12475c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini public void setListening(boolean listening) { 124848ffe67611c68d966795bf95e4ec5438b7a2db27Doris Ling if (listening) { 124948ffe67611c68d966795bf95e4ec5438b7a2db27Doris Ling final FingerprintManager fpm = 125048ffe67611c68d966795bf95e4ec5438b7a2db27Doris Ling Utils.getFingerprintManagerOrNull(mContext); 12512cab298f13233a0fb2bf27d5fa5fc5271c33843bFan Zhang if (fpm != null && fpm.isHardwareDetected()) { 12522cab298f13233a0fb2bf27d5fa5fc5271c33843bFan Zhang mSummaryLoader.setSummary(this, 125348ffe67611c68d966795bf95e4ec5438b7a2db27Doris Ling mContext.getString(R.string.security_dashboard_summary)); 12542cab298f13233a0fb2bf27d5fa5fc5271c33843bFan Zhang } else { 125548ffe67611c68d966795bf95e4ec5438b7a2db27Doris Ling mSummaryLoader.setSummary(this, mContext.getString( 125648ffe67611c68d966795bf95e4ec5438b7a2db27Doris Ling R.string.security_dashboard_summary_no_fingerprint)); 12575c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini } 12585c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini } 12595c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini } 12605c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini } 12615c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini 12625c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY = 12635c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini new SummaryLoader.SummaryProviderFactory() { 12645c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini @Override 12655c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity, 12665c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini SummaryLoader summaryLoader) { 12675c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini return new SummaryProvider(activity, summaryLoader); 12685c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini } 12695c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini }; 12705c1ad614a68d4e1287d4161651a60eb6748637b1Shahriyar Amini 1271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 1272