Fix the problem that the autofill could be searched.

PreferenceCategory will not be indexed by default. The auto fill
category use the AutofillPreferenceCategory class in the xml so
it will be indexed.
The solution is to create a controller to replace AutofillPreferenceCategory.

Fix: 185914894
Test: manual adb test to see the log
Change-Id: Id0e3bcc33a3132434a6bd1fe91e1c6915116d06d
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index f29930c..86544cd 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 025c51f..1c3b8f2 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;
-    }
-}