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());
     }
 }