Merge "Fix the problem that the autofill could be searched." into tm-dev
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index c422df9..cbf7704 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -648,7 +648,7 @@
             android:title="@string/reset_shortcut_manager_throttling" />
     </PreferenceCategory>
 
-    <com.android.settings.development.autofill.AutofillPreferenceCategory
+    <PreferenceCategory
         android:key="debug_autofill_category"
         android:title="@string/debug_autofill_category"
         settings:searchable="false"
@@ -672,7 +672,7 @@
             android:key="autofill_reset_developer_options"
             android:title="@string/autofill_reset_developer_options" />
 
-    </com.android.settings.development.autofill.AutofillPreferenceCategory>
+    </PreferenceCategory>
 
     <PreferenceCategory
         android:key="storage_category"
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 434bcfd..57114e2 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -47,6 +47,7 @@
 import com.android.settings.Utils;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.dashboard.RestrictedDashboardFragment;
+import com.android.settings.development.autofill.AutofillCategoryController;
 import com.android.settings.development.autofill.AutofillLoggingLevelPreferenceController;
 import com.android.settings.development.autofill.AutofillResetOptionsPreferenceController;
 import com.android.settings.development.bluetooth.AbstractBluetoothDialogPreferenceController;
@@ -566,6 +567,7 @@
         controllers.add(new DefaultLaunchPreferenceController(context, "density"));
         controllers.add(new DefaultLaunchPreferenceController(context, "background_check"));
         controllers.add(new DefaultLaunchPreferenceController(context, "inactive_apps"));
+        controllers.add(new AutofillCategoryController(context, lifecycle));
         controllers.add(new AutofillLoggingLevelPreferenceController(context, lifecycle));
         controllers.add(new AutofillResetOptionsPreferenceController(context));
         controllers.add(new BluetoothCodecDialogPreferenceController(context, lifecycle,
diff --git a/src/com/android/settings/development/autofill/AutofillCategoryController.java b/src/com/android/settings/development/autofill/AutofillCategoryController.java
new file mode 100644
index 0000000..91b3b9c
--- /dev/null
+++ b/src/com/android/settings/development/autofill/AutofillCategoryController.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2022 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.autofill;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Looper;
+import android.provider.Settings;
+import android.util.Log;
+import android.view.autofill.AutofillManager;
+
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+/**
+ * Controller class for observing the state of AutofillManager.
+ */
+public class AutofillCategoryController extends DeveloperOptionsPreferenceController implements
+        LifecycleObserver, OnStart, OnStop {
+
+    private static final String TAG = "AutofillCategoryController";
+
+    private static final String CATEGORY_KEY = "debug_autofill_category";
+    private static final long DELAYED_MESSAGE_TIME_MS = 2000;
+
+    private ContentResolver mContentResolver;
+    private ContentObserver mSettingsObserver;
+    private final Handler mHandler = new Handler(Looper.getMainLooper());
+
+    public AutofillCategoryController(Context context, Lifecycle lifecycle) {
+        super(context);
+
+        if (lifecycle != null) {
+            lifecycle.addObserver(this);
+        }
+
+        mSettingsObserver = new ContentObserver(mHandler) {
+            @Override
+            public void onChange(boolean selfChange, Uri uri, int userId) {
+                // We cannot apply the change yet because AutofillManager.isEnabled() state is
+                // updated by a ContentObserver as well and there's no guarantee of which observer
+                // is called first - hence, it's possible that the state didn't change here yet.
+                mHandler.postDelayed(
+                        () -> mPreference.notifyDependencyChange(shouldDisableDependents()),
+                        DELAYED_MESSAGE_TIME_MS);
+            }
+        };
+        mContentResolver = context.getContentResolver();
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return CATEGORY_KEY;
+    }
+
+    @Override
+    public void onStart() {
+        mContentResolver.registerContentObserver(
+                Settings.Secure.getUriFor(Settings.Secure.AUTOFILL_SERVICE), false,
+                mSettingsObserver);
+
+    }
+
+    @Override
+    public void onStop() {
+        mContentResolver.unregisterContentObserver(mSettingsObserver);
+    }
+
+    // PreferenceCategory.isEnabled() always return false, so we rather not change that logic
+    // decide whether the children should be shown using isAutofillEnabled() instead.
+    private boolean isAutofillEnabled() {
+        final AutofillManager afm = mContext.getSystemService(AutofillManager.class);
+        final boolean enabled = afm != null && afm.isEnabled();
+        Log.v(TAG, "isAutofillEnabled(): " + enabled);
+        return enabled;
+    }
+
+    private boolean shouldDisableDependents() {
+        final boolean shouldIt = !isAutofillEnabled();
+        Log.v(TAG, "shouldDisableDependents(): " + shouldIt);
+        return shouldIt;
+    }
+}
diff --git a/src/com/android/settings/development/autofill/AutofillPreferenceCategory.java b/src/com/android/settings/development/autofill/AutofillPreferenceCategory.java
deleted file mode 100644
index cbfbdd3..0000000
--- a/src/com/android/settings/development/autofill/AutofillPreferenceCategory.java
+++ /dev/null
@@ -1,86 +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.autofill;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.Looper;
-import android.provider.Settings;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.autofill.AutofillManager;
-
-import androidx.preference.PreferenceCategory;
-
-public final class AutofillPreferenceCategory extends PreferenceCategory {
-
-    private static final String TAG = "AutofillPreferenceCategory";
-    private static final long DELAYED_MESSAGE_TIME_MS = 2000;
-
-    private final ContentResolver mContentResolver;
-    private final ContentObserver mSettingsObserver;
-    private final Handler mHandler = new Handler(Looper.getMainLooper());
-
-    public AutofillPreferenceCategory(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        mSettingsObserver = new ContentObserver(mHandler) {
-            @Override
-            public void onChange(boolean selfChange, Uri uri, int userId) {
-                // We cannot apply the change yet because AutofillManager.isEnabled() state is
-                // updated by a ContentObserver as well and there's no guarantee of which observer
-                // is called first - hence, it's possible that the state didn't change here yet.
-                mHandler.postDelayed(() -> notifyDependencyChange(shouldDisableDependents()),
-                        DELAYED_MESSAGE_TIME_MS);
-            }
-        };
-        mContentResolver = context.getContentResolver();
-    }
-
-    @Override
-    public void onAttached() {
-        super.onAttached();
-
-        mContentResolver.registerContentObserver(
-                Settings.Secure.getUriFor(Settings.Secure.AUTOFILL_SERVICE), false,
-                mSettingsObserver);
-    }
-
-    @Override
-    public void onDetached() {
-        mContentResolver.unregisterContentObserver(mSettingsObserver);
-
-        super.onDetached();
-    }
-
-    // PreferenceCategory.isEnabled() always return false, so we rather not change that logic
-    // decide whether the children should be shown using isAutofillEnabled() instead.
-    private boolean isAutofillEnabled() {
-        final AutofillManager afm = getContext().getSystemService(AutofillManager.class);
-        final boolean enabled = afm != null && afm.isEnabled();
-        Log.v(TAG, "isAutofillEnabled(): " + enabled);
-        return enabled;
-    }
-
-    @Override
-    public boolean shouldDisableDependents() {
-        final boolean shouldIt = !isAutofillEnabled();
-        Log.v(TAG, "shouldDisableDependents(): " + shouldIt);
-        return shouldIt;
-    }
-}