Merge "Use FooterPreference in FingerprintSettings page"
diff --git a/res/xml/add_account_settings.xml b/res/xml/add_account_settings.xml
index 2ea3326..1bc9149 100644
--- a/res/xml/add_account_settings.xml
+++ b/res/xml/add_account_settings.xml
@@ -19,4 +19,11 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="add_account_screen"
android:title="@string/header_add_an_account"
- settings:controller="com.android.settings.accounts.ChooseAccountPreferenceController"/>
+ settings:controller="com.android.settings.accounts.ChooseAccountPreferenceController">
+
+ <com.android.settingslib.widget.FooterPreference
+ android:key="add_account_enterprise_disclosure_footer"
+ android:selectable="false"
+ settings:searchable="false"
+ settings:controller="com.android.settings.accounts.EnterpriseDisclosurePreferenceController"/>
+</PreferenceScreen>
diff --git a/res/xml/feature_flags_settings.xml b/res/xml/feature_flags_settings.xml
index 8dc5ab3..0e509a8 100644
--- a/res/xml/feature_flags_settings.xml
+++ b/res/xml/feature_flags_settings.xml
@@ -25,4 +25,10 @@
android:layout="@layout/preference_category_no_label"
android:title="@string/summary_placeholder"
settings:controller="com.android.settings.development.featureflags.FeatureFlagsPreferenceController" />
+
+ <com.android.settingslib.widget.FooterPreference
+ android:key="feature_flag_footer"
+ android:title="@string/experimental_category_title"
+ android:selectable="false"
+ settings:searchable="false"/>
</PreferenceScreen>
diff --git a/src/com/android/settings/accounts/ChooseAccountFragment.java b/src/com/android/settings/accounts/ChooseAccountFragment.java
index 448da6b..8f3318e 100644
--- a/src/com/android/settings/accounts/ChooseAccountFragment.java
+++ b/src/com/android/settings/accounts/ChooseAccountFragment.java
@@ -24,10 +24,6 @@
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.dashboard.DashboardFragment;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-import java.util.ArrayList;
-import java.util.List;
/**
* Activity asking a user to select an account to be set up.
@@ -55,8 +51,6 @@
use(ChooseAccountPreferenceController.class).initialize(authorities, accountTypesFilter,
userHandle, getActivity());
- use(EnterpriseDisclosurePreferenceController.class).setFooterPreferenceMixin(
- mFooterPreferenceMixin);
}
@Override
@@ -68,15 +62,4 @@
protected String getLogTag() {
return TAG;
}
-
- @Override
- protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- return buildControllers(context);
- }
-
- private static List<AbstractPreferenceController> buildControllers(Context context) {
- final List<AbstractPreferenceController> controllers = new ArrayList<>();
- controllers.add(new EnterpriseDisclosurePreferenceController(context));
- return controllers;
- }
}
diff --git a/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java b/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java
index 7a6e5fa..b4dbf3d 100644
--- a/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java
+++ b/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java
@@ -19,32 +19,23 @@
import android.content.Context;
import androidx.annotation.VisibleForTesting;
-import androidx.preference.PreferenceScreen;
+import androidx.preference.Preference;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.widget.FooterPreference;
-import com.android.settingslib.widget.FooterPreferenceMixinCompat;
public class EnterpriseDisclosurePreferenceController extends BasePreferenceController {
private final EnterprisePrivacyFeatureProvider mFeatureProvider;
- private FooterPreferenceMixinCompat mFooterPreferenceMixin;
- private PreferenceScreen mScreen;
- public EnterpriseDisclosurePreferenceController(Context context) {
+ public EnterpriseDisclosurePreferenceController(Context context, String key) {
// Preference key doesn't matter as we are creating the preference in code.
- super(context, "add_account_enterprise_disclosure_footer");
-
+ super(context, key);
mFeatureProvider = FeatureFactory.getFactory(mContext)
.getEnterprisePrivacyFeatureProvider(mContext);
}
- public void setFooterPreferenceMixin(FooterPreferenceMixinCompat footerPreferenceMixin) {
- mFooterPreferenceMixin = footerPreferenceMixin;
- }
-
@Override
public int getAvailabilityStatus() {
if (getDisclosure() == null) {
@@ -53,27 +44,17 @@
return AVAILABLE;
}
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- mScreen = screen;
- addEnterpriseDisclosure();
- }
-
@VisibleForTesting
CharSequence getDisclosure() {
return mFeatureProvider.getDeviceOwnerDisclosure();
}
- private void addEnterpriseDisclosure() {
+ @Override
+ public void updateState(Preference preference) {
final CharSequence disclosure = getDisclosure();
if (disclosure == null) {
return;
}
- final FooterPreference enterpriseDisclosurePreference =
- mFooterPreferenceMixin.createFooterPreference();
- enterpriseDisclosurePreference.setSelectable(false);
- enterpriseDisclosurePreference.setTitle(disclosure);
- mScreen.addPreference(enterpriseDisclosurePreference);
+ preference.setTitle(disclosure);
}
}
diff --git a/src/com/android/settings/development/featureflags/FeatureFlagFooterPreferenceController.java b/src/com/android/settings/development/featureflags/FeatureFlagFooterPreferenceController.java
deleted file mode 100644
index a0d7036..0000000
--- a/src/com/android/settings/development/featureflags/FeatureFlagFooterPreferenceController.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.development.featureflags;
-
-import android.content.Context;
-
-import com.android.settings.R;
-import com.android.settings.core.BasePreferenceController;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnStart;
-import com.android.settingslib.widget.FooterPreferenceMixinCompat;
-
-public class FeatureFlagFooterPreferenceController extends BasePreferenceController
- implements LifecycleObserver, OnStart {
-
- private FooterPreferenceMixinCompat mFooterMixin;
-
- public FeatureFlagFooterPreferenceController(Context context) {
- super(context, "feature_flag_footer_pref");
- }
-
- public void setFooterMixin(FooterPreferenceMixinCompat mixin) {
- mFooterMixin = mixin;
- }
-
- @Override
- public int getAvailabilityStatus() {
- return AVAILABLE;
- }
-
- @Override
- public void onStart() {
- mFooterMixin.createFooterPreference()
- .setTitle(R.string.experimental_category_title);
- }
-}
diff --git a/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java b/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java
index 613fb17..f0d7f1c 100644
--- a/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java
+++ b/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java
@@ -24,8 +24,6 @@
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.search.SearchIndexable;
@@ -55,7 +53,6 @@
@Override
public void onAttach(Context context) {
super.onAttach(context);
- use(FeatureFlagFooterPreferenceController.class).setFooterMixin(mFooterPreferenceMixin);
}
@Override
@@ -63,23 +60,6 @@
return 0;
}
- @Override
- protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- return buildPrefControllers(context, getSettingsLifecycle());
- }
-
- private static List<AbstractPreferenceController> buildPrefControllers(Context context,
- Lifecycle lifecycle) {
- final List<AbstractPreferenceController> controllers = new ArrayList<>();
- final FeatureFlagFooterPreferenceController footerController =
- new FeatureFlagFooterPreferenceController(context);
- if (lifecycle != null) {
- lifecycle.addObserver(footerController);
- }
- controllers.add(footerController);
- return controllers;
- }
-
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
@@ -97,11 +77,5 @@
protected boolean isPageSearchEnabled(Context context) {
return DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(context);
}
-
- @Override
- public List<AbstractPreferenceController> createPreferenceControllers(
- Context context) {
- return buildPrefControllers(context, null /* lifecycle */);
- }
};
}
diff --git a/tests/robotests/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceControllerTest.java
index b9c62c2..b10a729 100644
--- a/tests/robotests/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceControllerTest.java
@@ -18,46 +18,37 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
import android.content.Context;
-import androidx.preference.PreferenceManager;
-import androidx.preference.PreferenceScreen;
+import androidx.preference.Preference;
import com.android.settings.core.BasePreferenceController;
-import com.android.settingslib.widget.FooterPreferenceMixinCompat;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class EnterpriseDisclosurePreferenceControllerTest {
-
private static final String TEST_DISCLOSURE = "This is a test disclosure.";
- private ChooseAccountFragment mFragment;
private Context mContext;
private EnterpriseDisclosurePreferenceController mController;
- private FooterPreferenceMixinCompat mFooterPreferenceMixin;
- private PreferenceManager mPreferenceManager;
- private PreferenceScreen mPreferenceScreen;
+ private Preference mPreference;
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
- mController = spy(new EnterpriseDisclosurePreferenceController(mContext));
- mFragment = spy(new ChooseAccountFragment());
- mFooterPreferenceMixin = new FooterPreferenceMixinCompat(mFragment,
- mFragment.getSettingsLifecycle());
- mPreferenceManager = new PreferenceManager(mContext);
- mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
+ mController = spy(new EnterpriseDisclosurePreferenceController(mContext, "my_key"));
+ mPreference = spy(new Preference(mContext));
}
@Test
@@ -77,24 +68,20 @@
}
@Test
- public void displayPreference_hasDisclosure_shouldSetTitle() {
+ public void updateState_hasDisclosure_shouldSetTitle() {
doReturn(TEST_DISCLOSURE).when(mController).getDisclosure();
- doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
- doReturn(mPreferenceManager).when(mFragment).getPreferenceManager();
- mController.setFooterPreferenceMixin(mFooterPreferenceMixin);
- mController.displayPreference(mPreferenceScreen);
+ mController.updateState(mPreference);
- assertThat(mPreferenceScreen.getPreferenceCount()).isEqualTo(1);
- assertThat(mPreferenceScreen.getPreference(0).getTitle()).isEqualTo(TEST_DISCLOSURE);
+ assertThat(mPreference.getTitle()).isEqualTo(TEST_DISCLOSURE);
}
@Test
- public void displayPreference_noDisclosure_shouldBeInvisible() {
+ public void updateState_noDisclosure_shouldBeInvisible() {
doReturn(null).when(mController).getDisclosure();
- mController.displayPreference(mPreferenceScreen);
+ mController.updateState(mPreference);
- assertThat(mPreferenceScreen.getPreferenceCount()).isEqualTo(0);
+ verify(mPreference, never()).setTitle(any());
}
}