Use proper DashboardFragment APIs for SecuritySettingsV2

Next CL will add tests.

Bug: 32953042
Test: TODO
Change-Id: I0cb0e4eb216d3e9408675486f1cd73ba82d8ca36
This commit is contained in:
Fan Zhang
2018-01-03 15:02:02 -08:00
parent b8b9b283fe
commit 361e55bb4c
12 changed files with 175 additions and 294 deletions

View File

@@ -47,6 +47,7 @@
<Preference
android:key="lockscreen_preferences"
android:title="@string/lockscreen_settings_title"
android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.security.LockscreenDashboardFragment" />
<Preference
@@ -77,6 +78,7 @@
<SwitchPreference
android:key="visiblepattern_profile"
android:summary="@string/summary_placeholder"
android:title="@string/lockpattern_settings_enable_visible_pattern_title_profile" />
<Preference
@@ -95,8 +97,8 @@
<Preference
android:key="location"
android:title="@string/location_settings_title"
android:fragment="com.android.settings.location.LocationSettings">
</Preference>
android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.location.LocationSettings" />
<SwitchPreference
android:key="show_password"
@@ -109,14 +111,16 @@
android:order="40"
android:key="security_settings_device_admin_category">
<Preference android:key="manage_device_admin"
<Preference
android:key="manage_device_admin"
android:title="@string/manage_device_admin"
android:persistent="false"
android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.DeviceAdminSettings" />
<Preference android:key="enterprise_privacy"
<Preference
android:key="enterprise_privacy"
android:title="@string/enterprise_privacy_settings"
android:persistent="false"
android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.enterprise.EnterprisePrivacySettings" />
</PreferenceCategory>
@@ -144,7 +148,7 @@
android:order="70"
android:key="manage_trust_agents"
android:title="@string/manage_trust_agents"
android:persistent="false"
android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.security.trustagent.TrustAgentSettings" />
<Preference

View File

@@ -218,6 +218,10 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
preference.setSummary(tile.summary);
} else if (tile.metaData != null
&& tile.metaData.containsKey(META_DATA_PREFERENCE_SUMMARY_URI)) {
// Set a placeholder summary before starting to fetch real summary, this is necessary
// to avoid preference height change.
preference.setSummary(R.string.summary_placeholder);
ThreadUtils.postOnBackgroundThread(() -> {
final Map<String, IContentProvider> providerMap = new ArrayMap<>();
final String uri = tile.metaData.getString(META_DATA_PREFERENCE_SUMMARY_URI);

View File

@@ -75,7 +75,7 @@ import com.android.settings.print.PrintSettingsFragment;
import com.android.settings.security.EncryptionAndCredential;
import com.android.settings.security.LockscreenDashboardFragment;
import com.android.settings.security.ScreenPinningSettings;
import com.android.settings.security.SecuritySettings;
import com.android.settings.security.SecuritySettingsV2;
import com.android.settings.security.screenlock.ScreenLockSettings;
import com.android.settings.sim.SimSettings;
import com.android.settings.support.SupportDashboardActivity;
@@ -135,7 +135,7 @@ public final class SearchIndexableResources {
addIndex(LocationSettings.class);
addIndex(LocationMode.class);
addIndex(ScanningSettings.class);
addIndex(SecuritySettings.class);
addIndex(SecuritySettingsV2.class);
addIndex(ScreenLockSettings.class);
addIndex(EncryptionAndCredential.class);
addIndex(ScreenPinningSettings.class);
@@ -179,5 +179,7 @@ public final class SearchIndexableResources {
private SearchIndexableResources() {
}
public static Collection<Class> providerValues() { return sProviders;}
public static Collection<Class> providerValues() {
return sProviders;
}
}

View File

@@ -30,7 +30,6 @@ import android.text.TextUtils;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.widget.GearPreference;
public class ChangeProfileScreenLockPreferenceController extends
ChangeScreenLockPreferenceController {
@@ -42,12 +41,6 @@ public class ChangeProfileScreenLockPreferenceController extends
super(context, host);
}
@Override
public void onGearClick(GearPreference p) {
}
@Override
public boolean isAvailable() {
if (mProfileChallengeUserId == UserHandle.USER_NULL ||
!mLockPatternUtils.isSeparateProfileChallengeAllowed(mProfileChallengeUserId)) {

View File

@@ -79,13 +79,19 @@ public class ChangeScreenLockPreferenceController extends AbstractPreferenceCont
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreference = (RestrictedPreference) screen.findPreference(getPreferenceKey());
if (mPreference != null && mPreference instanceof GearPreference) {
((GearPreference) mPreference).setOnGearClickListener(this);
}
}
@Override
public void updateState(Preference preference) {
if (mPreference != null && mPreference instanceof GearPreference) {
if (mLockPatternUtils.isSecure(mUserId)
|| !mLockPatternUtils.isLockScreenDisabled(mUserId)) {
((GearPreference) mPreference).setOnGearClickListener(this);
} else {
((GearPreference) mPreference).setOnGearClickListener(null);
}
}
updateSummary(preference, mUserId);
disableIfPasswordQualityManaged(mUserId);
if (!mLockPatternUtils.isSeparateProfileChallengeEnabled(mProfileChallengeUserId)) {
@@ -148,6 +154,7 @@ public class ChangeScreenLockPreferenceController extends AbstractPreferenceCont
break;
}
}
mPreference.setEnabled(true);
}
/**

View File

@@ -66,7 +66,8 @@ public class EncryptionAndCredential extends DashboardFragment {
Lifecycle lifecycle) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
final EncryptionStatusPreferenceController encryptStatusController =
new EncryptionStatusPreferenceController(context, PREF_KEY_ENCRYPTION_DETAIL_PAGE);
new EncryptionStatusPreferenceController(context,
PREF_KEY_ENCRYPTION_DETAIL_PAGE);
controllers.add(encryptStatusController);
controllers.add(new PreferenceCategoryController(context,
"encryption_and_credentials_status_category",

View File

@@ -27,18 +27,32 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.notification.LockScreenNotificationPreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnResume;
public class LockScreenPreferenceController extends BasePreferenceController {
public class LockScreenPreferenceController extends BasePreferenceController implements
LifecycleObserver, OnResume {
static final String KEY_LOCKSCREEN_PREFERENCES = "lockscreen_preferences";
private static final int MY_USER_ID = UserHandle.myUserId();
private final LockPatternUtils mLockPatternUtils;
private Preference mPreference;
public LockScreenPreferenceController(Context context) {
public LockScreenPreferenceController(Context context, Lifecycle lifecycle) {
super(context, KEY_LOCKSCREEN_PREFERENCES);
mLockPatternUtils = FeatureFactory.getFactory(context)
.getSecurityFeatureProvider().getLockPatternUtils(context);
if (lifecycle != null) {
lifecycle.addObserver(this);
}
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreference = screen.findPreference(getPreferenceKey());
}
@Override
@@ -54,12 +68,13 @@ public class LockScreenPreferenceController extends BasePreferenceController {
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
final Preference lockscreenPreferences = screen.findPreference(getPreferenceKey());
if (lockscreenPreferences != null) {
lockscreenPreferences.setSummary(
public void updateState(Preference preference) {
preference.setSummary(
LockScreenNotificationPreferenceController.getSummaryResource(mContext));
}
@Override
public void onResume() {
mPreference.setVisible(isAvailable());
}
}

View File

@@ -1,33 +1,28 @@
package com.android.settings.security;
import static com.android.settings.security.EncryptionStatusPreferenceController.PREF_KEY_ENCRYPTION_SECURITY_PAGE;
import static com.android.settings.security.EncryptionStatusPreferenceController
.PREF_KEY_ENCRYPTION_SECURITY_PAGE;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.enterprise.EnterprisePrivacyPreferenceController;
import com.android.settings.enterprise.ManageDeviceAdminPreferenceController;
import com.android.settings.location.LocationPreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.security.trustagent.ManageTrustAgentsPreferenceController;
import com.android.settings.security.trustagent.TrustAgentListPreferenceController;
import com.android.settings.widget.PreferenceCategoryController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import java.util.ArrayList;
import java.util.List;
@@ -43,59 +38,11 @@ public class SecuritySettingsV2 extends DashboardFragment {
public static final int UNIFY_LOCK_CONFIRM_PROFILE_REQUEST = 129;
public static final int UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST = 130;
// Security status
private static final String KEY_SECURITY_STATUS = "security_status";
private static final String SECURITY_STATUS_KEY_PREFIX = "security_status_";
private static final int MY_USER_ID = UserHandle.myUserId();
private DashboardFeatureProvider mDashboardFeatureProvider;
private SecurityFeatureProvider mSecurityFeatureProvider;
private UserManager mUm;
private ChooseLockSettingsHelper mChooseLockSettingsHelper;
private LockPatternUtils mLockPatternUtils;
private int mProfileChallengeUserId;
private LocationPreferenceController mLocationController;
private ManageDeviceAdminPreferenceController mManageDeviceAdminPreferenceController;
private EnterprisePrivacyPreferenceController mEnterprisePrivacyPreferenceController;
private EncryptionStatusPreferenceController mEncryptionStatusPreferenceController;
private ManageTrustAgentsPreferenceController mManageTrustAgentsPreferenceController;
private ScreenPinningPreferenceController mScreenPinningPreferenceController;
private SimLockPreferenceController mSimLockPreferenceController;
private ShowPasswordPreferenceController mShowPasswordPreferenceController;
private TrustAgentListPreferenceController mTrustAgentListPreferenceController;
private LockScreenPreferenceController mLockScreenPreferenceController;
private ChangeScreenLockPreferenceController mChangeScreenLockPreferenceController;
private ChangeProfileScreenLockPreferenceController
mChangeProfileScreenLockPreferenceController;
private LockUnificationPreferenceController mLockUnificationPreferenceController;
private VisiblePatternProfilePreferenceController mVisiblePatternProfilePreferenceController;
private FingerprintStatusPreferenceController mFingerprintStatusPreferenceController;
private FingerprintProfileStatusPreferenceController
mFingerprintProfileStatusPreferenceController;
@Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.SECURITY;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
mSecurityFeatureProvider = FeatureFactory.getFactory(context).getSecurityFeatureProvider();
mLocationController = new LocationPreferenceController(context, getLifecycle());
mLockPatternUtils = mSecurityFeatureProvider.getLockPatternUtils(context);
mUm = UserManager.get(context);
mDashboardFeatureProvider = FeatureFactory.getFactory(context)
.getDashboardFeatureProvider(context);
mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity());
}
@Override
protected int getPreferenceScreenResId() {
return R.xml.security_settings_v2;
@@ -106,7 +53,6 @@ public class SecuritySettingsV2 extends DashboardFragment {
return TAG;
}
@Override
public int getHelpResource() {
return R.string.help_url_security;
@@ -114,161 +60,7 @@ public class SecuritySettingsV2 extends DashboardFragment {
@Override
protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
mManageDeviceAdminPreferenceController
= new ManageDeviceAdminPreferenceController(context);
mEnterprisePrivacyPreferenceController
= new EnterprisePrivacyPreferenceController(context);
mManageTrustAgentsPreferenceController = new ManageTrustAgentsPreferenceController(context);
mScreenPinningPreferenceController = new ScreenPinningPreferenceController(context);
mSimLockPreferenceController = new SimLockPreferenceController(context);
mShowPasswordPreferenceController = new ShowPasswordPreferenceController(context);
mEncryptionStatusPreferenceController = new EncryptionStatusPreferenceController(
context, PREF_KEY_ENCRYPTION_SECURITY_PAGE);
mTrustAgentListPreferenceController = new TrustAgentListPreferenceController(getActivity(),
this /* host */, getLifecycle());
mLockScreenPreferenceController = new LockScreenPreferenceController(context);
mChangeScreenLockPreferenceController = new ChangeScreenLockPreferenceController(context,
this /* host */);
mChangeProfileScreenLockPreferenceController =
new ChangeProfileScreenLockPreferenceController(context, this /* host */);
mLockUnificationPreferenceController = new LockUnificationPreferenceController(context,
this /* host */);
mVisiblePatternProfilePreferenceController =
new VisiblePatternProfilePreferenceController(context);
mFingerprintStatusPreferenceController = new FingerprintStatusPreferenceController(context);
mFingerprintProfileStatusPreferenceController =
new FingerprintProfileStatusPreferenceController(context);
return null;
}
/**
* Important!
*
* Don't forget to update the SecuritySearchIndexProvider if you are doing any change in the
* logic or adding/removing preferences here.
*/
private PreferenceScreen createPreferenceHierarchy() {
final PreferenceScreen root = getPreferenceScreen();
mTrustAgentListPreferenceController.displayPreference(root);
mLockScreenPreferenceController.displayPreference(root);
mChangeScreenLockPreferenceController.displayPreference(root);
mChangeProfileScreenLockPreferenceController.displayPreference(root);
mLockUnificationPreferenceController.displayPreference(root);
mVisiblePatternProfilePreferenceController.displayPreference(root);
mFingerprintStatusPreferenceController.displayPreference(root);
mFingerprintProfileStatusPreferenceController.displayPreference(root);
mSimLockPreferenceController.displayPreference(root);
mScreenPinningPreferenceController.displayPreference(root);
// Advanced Security features
mManageTrustAgentsPreferenceController.displayPreference(root);
// PreferenceGroup securityStatusPreferenceGroup =
// (PreferenceGroup) root.findPreference(KEY_SECURITY_STATUS);
// final List<Preference> tilePrefs = mDashboardFeatureProvider.getPreferencesForCategory(
// getActivity(), getPrefContext(), getMetricsCategory(),
// CategoryKey.CATEGORY_SECURITY);
// int numSecurityStatusPrefs = 0;
// if (tilePrefs != null && !tilePrefs.isEmpty()) {
// for (Preference preference : tilePrefs) {
// if (!TextUtils.isEmpty(preference.getKey())
// && preference.getKey().startsWith(SECURITY_STATUS_KEY_PREFIX)) {
// // Injected security status settings are placed under the Security status
// // category.
// securityStatusPreferenceGroup.addPreference(preference);
// numSecurityStatusPrefs++;
// } else {
// // Other injected settings are placed under the Security preference screen.
// root.addPreference(preference);
// }
// }
// }
//
// if (numSecurityStatusPrefs == 0) {
// root.removePreference(securityStatusPreferenceGroup);
// } else if (numSecurityStatusPrefs > 0) {
// // Update preference data with tile data. Security feature provider only updates the
// // data if it actually needs to be changed.
// mSecurityFeatureProvider.updatePreferences(getActivity(), root,
// mDashboardFeatureProvider.getTilesForCategory(
// CategoryKey.CATEGORY_SECURITY));
// }
mLocationController.displayPreference(root);
mManageDeviceAdminPreferenceController.updateState(
root.findPreference(mManageDeviceAdminPreferenceController.getPreferenceKey()));
mEnterprisePrivacyPreferenceController.displayPreference(root);
final Preference enterprisePrivacyPreference = root.findPreference(
mEnterprisePrivacyPreferenceController.getPreferenceKey());
mEnterprisePrivacyPreferenceController.updateState(enterprisePrivacyPreference);
return root;
}
@Override
public void onResume() {
super.onResume();
// Make sure we reload the preference hierarchy since some of these settings
// depend on others...
createPreferenceHierarchy();
final Preference visiblePatternProfilePref = getPreferenceScreen().findPreference(
mVisiblePatternProfilePreferenceController.getPreferenceKey());
if (visiblePatternProfilePref != null) {
visiblePatternProfilePref
.setOnPreferenceChangeListener(mVisiblePatternProfilePreferenceController);
mVisiblePatternProfilePreferenceController.updateState(visiblePatternProfilePref);
}
final Preference showPasswordPref = getPreferenceScreen().findPreference(
mShowPasswordPreferenceController.getPreferenceKey());
showPasswordPref.setOnPreferenceChangeListener(mShowPasswordPreferenceController);
mShowPasswordPreferenceController.updateState(showPasswordPref);
final Preference lockUnificationPref = getPreferenceScreen().findPreference(
mLockUnificationPreferenceController.getPreferenceKey());
lockUnificationPref.setOnPreferenceChangeListener(mLockUnificationPreferenceController);
mLockUnificationPreferenceController.updateState(lockUnificationPref);
final Preference changeDeviceLockPref = getPreferenceScreen().findPreference(
mChangeScreenLockPreferenceController.getPreferenceKey());
mChangeScreenLockPreferenceController.updateState(changeDeviceLockPref);
mFingerprintStatusPreferenceController.updateState(
getPreferenceScreen().findPreference(
mFingerprintStatusPreferenceController.getPreferenceKey()));
mFingerprintProfileStatusPreferenceController.updateState(
getPreferenceScreen().findPreference(
mFingerprintProfileStatusPreferenceController.getPreferenceKey()));
final Preference changeProfileLockPref = getPreferenceScreen().findPreference(
mChangeProfileScreenLockPreferenceController.getPreferenceKey());
mChangeProfileScreenLockPreferenceController.updateState(changeProfileLockPref);
final Preference encryptionStatusPref = getPreferenceScreen().findPreference(
mEncryptionStatusPreferenceController.getPreferenceKey());
mEncryptionStatusPreferenceController.updateState(encryptionStatusPref);
mTrustAgentListPreferenceController.onResume();
mLocationController.updateSummary();
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
if (mTrustAgentListPreferenceController.handlePreferenceTreeClick(preference)) {
return true;
}
if (mChangeScreenLockPreferenceController.handlePreferenceTreeClick(preference)) {
return true;
}
if (mChangeProfileScreenLockPreferenceController.handlePreferenceTreeClick(preference)) {
return true;
}
// If we didn't handle it, let preferences handle it.
return super.onPreferenceTreeClick(preference);
return buildPreferenceControllers(context, getLifecycle(), this /* host*/);
}
/**
@@ -276,38 +68,66 @@ public class SecuritySettingsV2 extends DashboardFragment {
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (getPreferenceController(TrustAgentListPreferenceController.class)
.handleActivityResult(requestCode, resultCode)) {
return;
}
if (getPreferenceController(LockUnificationPreferenceController.class)
.handleActivityResult(requestCode, resultCode, data)) {
return;
}
super.onActivityResult(requestCode, resultCode, data);
if (mTrustAgentListPreferenceController.handleActivityResult(requestCode, resultCode)) {
return;
}
if (mLockUnificationPreferenceController.handleActivityResult(
requestCode, resultCode, data)) {
return;
void launchConfirmDeviceLockForUnification() {
getPreferenceController(LockUnificationPreferenceController.class)
.launchConfirmDeviceLockForUnification();
}
createPreferenceHierarchy();
void unifyUncompliantLocks() {
getPreferenceController(LockUnificationPreferenceController.class).unifyUncompliantLocks();
}
void updateUnificationPreference() {
getPreferenceController(LockUnificationPreferenceController.class).updateState(null);
}
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Lifecycle lifecycle, SecuritySettingsV2 host) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new LocationPreferenceController(context, lifecycle));
controllers.add(new ManageDeviceAdminPreferenceController(context));
controllers.add(new EnterprisePrivacyPreferenceController(context));
controllers.add(new ManageTrustAgentsPreferenceController(context));
controllers.add(new ScreenPinningPreferenceController(context));
controllers.add(new SimLockPreferenceController(context));
controllers.add(new ShowPasswordPreferenceController(context));
controllers.add(new FingerprintStatusPreferenceController(context));
controllers.add(new EncryptionStatusPreferenceController(context,
PREF_KEY_ENCRYPTION_SECURITY_PAGE));
controllers.add(new TrustAgentListPreferenceController(context, host, lifecycle));
controllers.add(new LockScreenPreferenceController(context, lifecycle));
controllers.add(new ChangeScreenLockPreferenceController(context, host));
final List<AbstractPreferenceController> profileSecurityControllers = new ArrayList<>();
profileSecurityControllers.add(new ChangeProfileScreenLockPreferenceController(
context, host));
profileSecurityControllers.add(new LockUnificationPreferenceController(context, host));
profileSecurityControllers.add(new VisiblePatternProfilePreferenceController(
context, lifecycle));
profileSecurityControllers.add(new FingerprintProfileStatusPreferenceController(context));
controllers.add(new PreferenceCategoryController(context, "security_category_profile",
profileSecurityControllers));
controllers.addAll(profileSecurityControllers);
return controllers;
}
/**
* For Search. Please keep it in sync when updating "createPreferenceHierarchy()"
*/
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new SecuritySearchIndexProvider();
void launchConfirmDeviceLockForUnification() {
mLockUnificationPreferenceController.launchConfirmDeviceLockForUnification();
}
void unifyUncompliantLocks() {
mLockUnificationPreferenceController.unifyUncompliantLocks();
}
void updateUnificationPreference() {
mLockUnificationPreferenceController.updateState(null);
}
private static class SecuritySearchIndexProvider extends BaseSearchIndexProvider {
// TODO (b/68001777) Refactor indexing to include all XML and block other settings.
new BaseSearchIndexProvider() {
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(
@@ -319,7 +139,14 @@ public class SecuritySettingsV2 extends DashboardFragment {
index.add(sir);
return index;
}
@Override
public List<AbstractPreferenceController> getPreferenceControllers(Context
context) {
return buildPreferenceControllers(context, null /* lifecycle */,
null /* host*/);
}
};
static class SummaryProvider implements SummaryLoader.SummaryProvider {

View File

@@ -21,13 +21,19 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
import android.content.Context;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.Utils;
import com.android.settings.core.TogglePreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnResume;
public class VisiblePatternProfilePreferenceController extends TogglePreferenceController {
public class VisiblePatternProfilePreferenceController extends TogglePreferenceController
implements LifecycleObserver, OnResume {
private static final String KEY_VISIBLE_PATTERN_PROFILE = "visiblepattern_profile";
@@ -36,13 +42,18 @@ public class VisiblePatternProfilePreferenceController extends TogglePreferenceC
private final int mUserId = UserHandle.myUserId();
private final int mProfileChallengeUserId;
public VisiblePatternProfilePreferenceController(Context context) {
private Preference mPreference;
public VisiblePatternProfilePreferenceController(Context context, Lifecycle lifecycle) {
super(context, KEY_VISIBLE_PATTERN_PROFILE);
mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
mLockPatternUtils = FeatureFactory.getFactory(context)
.getSecurityFeatureProvider()
.getLockPatternUtils(context);
mProfileChallengeUserId = Utils.getManagedProfileId(mUm, mUserId);
if (lifecycle != null) {
lifecycle.addObserver(this);
}
}
@Override
@@ -69,4 +80,15 @@ public class VisiblePatternProfilePreferenceController extends TogglePreferenceC
mLockPatternUtils.setVisiblePatternEnabled(isChecked, mProfileChallengeUserId);
return true;
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreference = screen.findPreference(getPreferenceKey());
}
@Override
public void onResume() {
mPreference.setVisible(isAvailable());
}
}

View File

@@ -19,6 +19,7 @@ package com.android.settings.security.trustagent;
import static com.android.settings.security.SecuritySettingsV2.CHANGE_TRUST_AGENT_SETTINGS;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
@@ -56,20 +57,18 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro
private final LockPatternUtils mLockPatternUtils;
private final TrustAgentManager mTrustAgentManager;
private final Activity mActivity;
private final SecuritySettingsV2 mHost;
private Intent mTrustAgentClickIntent;
private PreferenceCategory mSecurityCategory;
public TrustAgentListPreferenceController(Activity activity, SecuritySettingsV2 host,
public TrustAgentListPreferenceController(Context context, SecuritySettingsV2 host,
Lifecycle lifecycle) {
super(activity);
final SecurityFeatureProvider provider = FeatureFactory.getFactory(activity)
super(context);
final SecurityFeatureProvider provider = FeatureFactory.getFactory(context)
.getSecurityFeatureProvider();
mActivity = activity;
mHost = host;
mLockPatternUtils = provider.getLockPatternUtils(activity);
mLockPatternUtils = provider.getLockPatternUtils(context);
mTrustAgentManager = provider.getTrustAgentManager();
if (lifecycle != null) {
lifecycle.addObserver(this);
@@ -90,6 +89,7 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mSecurityCategory = (PreferenceCategory) screen.findPreference(PREF_KEY_SECURITY_CATEGORY);
updateTrustAgents();
}
@Override
@@ -112,7 +112,8 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro
if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
return super.handlePreferenceTreeClick(preference);
}
final ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(mActivity, mHost);
final ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(
mHost.getActivity(), mHost);
mTrustAgentClickIntent = preference.getIntent();
boolean confirmationLaunched = helper.launchConfirmationActivity(
CHANGE_TRUST_AGENT_SETTINGS, preference.getTitle());
@@ -127,6 +128,10 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro
@Override
public void onResume() {
updateTrustAgents();
}
private void updateTrustAgents() {
if (mSecurityCategory == null) {
return;
}

View File

@@ -1,3 +1,3 @@
com.android.settings.display.ScreenZoomPreferenceFragmentForSetupWizard
com.android.settings.search.indexing.FakeSettingsFragment
com.android.settings.security.SecuritySettingsV2
com.android.settings.security.SecuritySettings

View File

@@ -23,6 +23,7 @@ import static com.android.settings.security.trustagent.TrustAgentListPreferenceC
.PREF_KEY_TRUST_AGENT;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -127,6 +128,6 @@ public class TrustAgentListPreferenceControllerTest {
mController.displayPreference(mScreen);
mController.onResume();
verify(mCategory).addPreference(any(Preference.class));
verify(mCategory, atLeastOnce()).addPreference(any(Preference.class));
}
}