Moving developer settings to xml overrides instead of code swap

Bug: 330920490
Test: Verified on device
Flag: None
Change-Id: Ibba96a57c8eb7347399ab32577a0e395ae886e91
diff --git a/quickstep/src/com/android/launcher3/uioverrides/flags/DevOptionsUiHelper.kt b/quickstep/src/com/android/launcher3/uioverrides/flags/DevOptionsUiHelper.kt
index e94fa61..3881e9a 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/flags/DevOptionsUiHelper.kt
+++ b/quickstep/src/com/android/launcher3/uioverrides/flags/DevOptionsUiHelper.kt
@@ -16,32 +16,98 @@
 
 package com.android.launcher3.uioverrides.flags
 
+import android.content.Context
 import android.content.Intent
 import android.content.pm.PackageManager
 import android.net.Uri
-import android.os.Handler
 import android.provider.DeviceConfig
 import android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS
 import android.text.Html
+import android.util.AttributeSet
 import android.view.inputmethod.EditorInfo
+import android.widget.TextView
+import android.widget.Toast
+import androidx.core.widget.doAfterTextChanged
 import androidx.preference.Preference
+import androidx.preference.PreferenceCategory
 import androidx.preference.PreferenceGroup
 import androidx.preference.PreferenceViewHolder
 import androidx.preference.SwitchPreference
 import com.android.launcher3.ExtendedEditText
+import com.android.launcher3.LauncherPrefs
 import com.android.launcher3.R
+import com.android.launcher3.secondarydisplay.SecondaryDisplayLauncher
 import com.android.launcher3.uioverrides.plugins.PluginManagerWrapperImpl
+import com.android.launcher3.util.OnboardingPrefs.ALL_APPS_VISITED_COUNT
+import com.android.launcher3.util.OnboardingPrefs.HOME_BOUNCE_COUNT
+import com.android.launcher3.util.OnboardingPrefs.HOME_BOUNCE_SEEN
+import com.android.launcher3.util.OnboardingPrefs.HOTSEAT_DISCOVERY_TIP_COUNT
+import com.android.launcher3.util.OnboardingPrefs.HOTSEAT_LONGPRESS_TIP_SEEN
+import com.android.launcher3.util.OnboardingPrefs.TASKBAR_EDU_TOOLTIP_STEP
 import com.android.launcher3.util.PluginManagerWrapper
 import com.android.quickstep.util.DeviceConfigHelper
 import com.android.quickstep.util.DeviceConfigHelper.Companion.NAMESPACE_LAUNCHER
 import com.android.quickstep.util.DeviceConfigHelper.DebugInfo
 import com.android.systemui.shared.plugins.PluginEnabler
+import com.android.systemui.shared.plugins.PluginPrefs
+import java.util.Locale
 
 /** Helper class to generate UI for Device Config */
-class DevOptionsUiHelper {
+class DevOptionsUiHelper(c: Context, attr: AttributeSet?) : PreferenceGroup(c, attr) {
+
+    init {
+        layoutResource = R.layout.developer_options_top_bar
+        isPersistent = false
+    }
+
+    override fun onBindViewHolder(holder: PreferenceViewHolder) {
+        super.onBindViewHolder(holder)
+
+        // Initialize search
+        (holder.findViewById(R.id.filter_box) as TextView?)?.doAfterTextChanged {
+            val query: String = it.toString().lowercase(Locale.getDefault()).replace("_", " ")
+            filterPreferences(query, this)
+        }
+    }
+
+    private fun filterPreferences(query: String, pg: PreferenceGroup) {
+        val count = pg.preferenceCount
+        var visible = false
+        for (i in 0 until count) {
+            val preference = pg.getPreference(i)
+            if (preference is PreferenceGroup) {
+                filterPreferences(query, preference)
+            } else {
+                val title =
+                    preference.title.toString().lowercase(Locale.getDefault()).replace("_", " ")
+                preference.isVisible = query.isEmpty() || title.contains(query)
+            }
+            visible = visible or preference.isVisible
+        }
+        pg.isVisible = visible
+    }
+
+    override fun onAttached() {
+        super.onAttached()
+
+        removeAll()
+        inflateServerFlags(newCategory("Server flags", "Long press to reset"))
+        if (PluginPrefs.hasPlugins(context)) {
+            inflatePluginPrefs(newCategory("Plugins"))
+        }
+        addIntentTargets()
+        addOnboardingPrefsCategory()
+    }
+
+    private fun newCategory(titleText: String, subTitleText: String? = null) =
+        PreferenceCategory(context).apply {
+            title = titleText
+            summary = subTitleText
+            this@DevOptionsUiHelper.addPreference(this)
+        }
 
     /** Inflates preferences for all server flags in the provider PreferenceGroup */
-    fun inflateServerFlags(parent: PreferenceGroup) {
+    private fun inflateServerFlags(parent: PreferenceGroup) {
         val prefs = DeviceConfigHelper.prefs
         // Sort the keys in the order of modified first followed by natural order
         val allProps =
@@ -59,25 +125,21 @@
             if (it.isInt) return@forEach
             val info = it as DebugInfo<Boolean>
 
-            val preference =
-                object : SwitchPreference(parent.context) {
-                    override fun onBindViewHolder(holder: PreferenceViewHolder) {
-                        super.onBindViewHolder(holder)
-                        holder.itemView.setOnLongClickListener {
-                            prefs.edit().remove(key).apply()
-                            setChecked(info.getBoolValue())
-                            summary = info.getSummary()
-                            true
-                        }
-                    }
+            val preference = CustomSwitchPref { holder, pref ->
+                holder.itemView.setOnLongClickListener {
+                    prefs.edit().remove(pref.key).apply()
+                    pref.setChecked(info.getBoolValue())
+                    summary = info.getSummary()
+                    true
                 }
+            }
             preference.key = info.key
             preference.isPersistent = false
             preference.title = info.key
             preference.summary = info.getSummary()
             preference.setChecked(prefs.getBoolean(info.key, info.getBoolValue()))
             preference.setOnPreferenceChangeListener { _, newVal ->
-                DeviceConfigHelper.prefs.edit().putBoolean(info.key, newVal as Boolean).apply()
+                prefs.edit().putBoolean(info.key, newVal as Boolean).apply()
                 preference.summary = info.getSummary()
                 true
             }
@@ -89,36 +151,29 @@
             if (!it.isInt) return@forEach
             val info = it as DebugInfo<Int>
 
-            val preference =
-                object : Preference(parent.context) {
-                    override fun onBindViewHolder(holder: PreferenceViewHolder) {
-                        super.onBindViewHolder(holder)
-                        val textView = holder.findViewById(R.id.pref_edit_text) as ExtendedEditText
-                        textView.setText(info.getIntValueAsString())
-                        textView.setOnEditorActionListener { _, actionId, _ ->
-                            if (actionId == EditorInfo.IME_ACTION_DONE) {
-                                DeviceConfigHelper.prefs
-                                    .edit()
-                                    .putInt(key, textView.text.toString().toInt())
-                                    .apply()
-                                Handler().post { summary = info.getSummary() }
-                                true
-                            }
-                            false
-                        }
-                        textView.setOnBackKeyListener {
-                            textView.setText(info.getIntValueAsString())
-                            true
-                        }
-
-                        holder.itemView.setOnLongClickListener {
-                            prefs.edit().remove(key).apply()
-                            textView.setText(info.getIntValueAsString())
-                            summary = info.getSummary()
-                            true
-                        }
+            val preference = CustomPref { holder, pref ->
+                val textView = holder.findViewById(R.id.pref_edit_text) as ExtendedEditText
+                textView.setText(info.getIntValueAsString())
+                textView.setOnEditorActionListener { _, actionId, _ ->
+                    if (actionId == EditorInfo.IME_ACTION_DONE) {
+                        prefs.edit().putInt(pref.key, textView.text.toString().toInt()).apply()
+                        pref.summary = info.getSummary()
+                        true
                     }
+                    false
                 }
+                textView.setOnBackKeyListener {
+                    textView.setText(info.getIntValueAsString())
+                    true
+                }
+
+                holder.itemView.setOnLongClickListener {
+                    prefs.edit().remove(pref.key).apply()
+                    textView.setText(info.getIntValueAsString())
+                    pref.summary = info.getSummary()
+                    true
+                }
+            }
             preference.key = info.key
             preference.isPersistent = false
             preference.title = info.key
@@ -158,8 +213,7 @@
      * corresponding plugins on the device. When a plugin-group is enabled/disabled we also need to
      * notify the pluginManager manually since the broadcast-mechanism only works in sysui process
      */
-    fun inflatePluginPrefs(parent: PreferenceGroup) {
-        val context = parent.context
+    private fun inflatePluginPrefs(parent: PreferenceGroup) {
         val manager = PluginManagerWrapper.INSTANCE[context] as PluginManagerWrapperImpl
         val pm = context.packageManager
 
@@ -185,15 +239,12 @@
                 val pluginInfo = infoList[0]!!
                 val pluginUri = Uri.fromParts("package", pluginInfo.serviceInfo.packageName, null)
 
-                object : SwitchPreference(context) {
-                        override fun onBindViewHolder(holder: PreferenceViewHolder) {
-                            super.onBindViewHolder(holder)
-                            holder.itemView.setOnLongClickListener {
-                                context.startActivity(
-                                    Intent(ACTION_APPLICATION_DETAILS_SETTINGS, pluginUri)
-                                )
-                                true
-                            }
+                CustomSwitchPref { holder, _ ->
+                        holder.itemView.setOnLongClickListener {
+                            context.startActivity(
+                                Intent(ACTION_APPLICATION_DETAILS_SETTINGS, pluginUri)
+                            )
+                            true
                         }
                     }
                     .apply {
@@ -232,6 +283,113 @@
             }
     }
 
+    private fun addIntentTargets() {
+        val launchSandboxIntent =
+            Intent("com.android.quickstep.action.GESTURE_SANDBOX")
+                .setPackage(context.packageName)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+        newCategory("Gesture Navigation Sandbox").apply {
+            addPreference(
+                Preference(context).apply {
+                    title = "Launch Gesture Tutorial Steps menu"
+                    intent = Intent(launchSandboxIntent).putExtra("use_tutorial_menu", true)
+                }
+            )
+            addPreference(
+                Preference(context).apply {
+                    title = "Launch Back Tutorial"
+                    intent =
+                        Intent(launchSandboxIntent)
+                            .putExtra("use_tutorial_menu", false)
+                            .putExtra("tutorial_steps", arrayOf("BACK_NAVIGATION"))
+                }
+            )
+            addPreference(
+                Preference(context).apply {
+                    title = "Launch Home Tutorial"
+                    intent =
+                        Intent(launchSandboxIntent)
+                            .putExtra("use_tutorial_menu", false)
+                            .putExtra("tutorial_steps", arrayOf("HOME_NAVIGATION"))
+                }
+            )
+            addPreference(
+                Preference(context).apply {
+                    title = "Launch Overview Tutorial"
+                    intent =
+                        Intent(launchSandboxIntent)
+                            .putExtra("use_tutorial_menu", false)
+                            .putExtra("tutorial_steps", arrayOf("OVERVIEW_NAVIGATION"))
+                }
+            )
+        }
+
+        newCategory("Other activity targets").apply {
+            addPreference(
+                Preference(context).apply {
+                    title = "Launch Secondary Display"
+                    intent =
+                        Intent(context, SecondaryDisplayLauncher::class.java)
+                            .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+                }
+            )
+        }
+    }
+
+    private fun addOnboardingPrefsCategory() {
+        newCategory("Onboarding Flows").apply {
+            summary = "Reset these if you want to see the education again."
+            addOnboardPref(
+                "All Apps Bounce",
+                HOME_BOUNCE_SEEN.sharedPrefKey,
+                HOME_BOUNCE_COUNT.sharedPrefKey
+            )
+            addOnboardPref(
+                "Hybrid Hotseat Education",
+                HOTSEAT_DISCOVERY_TIP_COUNT.sharedPrefKey,
+                HOTSEAT_LONGPRESS_TIP_SEEN.sharedPrefKey
+            )
+            addOnboardPref("Taskbar Education", TASKBAR_EDU_TOOLTIP_STEP.sharedPrefKey)
+            addOnboardPref("All Apps Visited Count", ALL_APPS_VISITED_COUNT.sharedPrefKey)
+        }
+    }
+
+    private fun PreferenceCategory.addOnboardPref(title: String, vararg keys: String) =
+        this.addPreference(
+            Preference(context).also {
+                it.title = title
+                it.summary = "Tap to reset"
+                setOnPreferenceClickListener { _ ->
+                    LauncherPrefs.getPrefs(context)
+                        .edit()
+                        .apply { keys.forEach { key -> remove(key) } }
+                        .apply()
+                    Toast.makeText(context, "Reset $title", Toast.LENGTH_SHORT).show()
+                    true
+                }
+            }
+        )
+
+    private inner class CustomSwitchPref(
+        private val bindCallback: (holder: PreferenceViewHolder, pref: SwitchPreference) -> Unit
+    ) : SwitchPreference(context) {
+
+        override fun onBindViewHolder(holder: PreferenceViewHolder) {
+            super.onBindViewHolder(holder)
+            bindCallback.invoke(holder, this)
+        }
+    }
+
+    private inner class CustomPref(
+        private val bindCallback: (holder: PreferenceViewHolder, pref: Preference) -> Unit
+    ) : Preference(context) {
+
+        override fun onBindViewHolder(holder: PreferenceViewHolder) {
+            super.onBindViewHolder(holder)
+            bindCallback.invoke(holder, this)
+        }
+    }
+
     companion object {
         const val TAG = "DeviceConfigUIHelper"
 
diff --git a/quickstep/src/com/android/launcher3/uioverrides/flags/DeveloperOptionsUI.java b/quickstep/src/com/android/launcher3/uioverrides/flags/DeveloperOptionsUI.java
deleted file mode 100644
index ca8da08..0000000
--- a/quickstep/src/com/android/launcher3/uioverrides/flags/DeveloperOptionsUI.java
+++ /dev/null
@@ -1,240 +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.launcher3.uioverrides.flags;
-
-import static com.android.launcher3.settings.SettingsActivity.EXTRA_FRAGMENT_HIGHLIGHT_KEY;
-import static com.android.launcher3.util.OnboardingPrefs.ALL_APPS_VISITED_COUNT;
-import static com.android.launcher3.util.OnboardingPrefs.HOME_BOUNCE_COUNT;
-import static com.android.launcher3.util.OnboardingPrefs.HOME_BOUNCE_SEEN;
-import static com.android.launcher3.util.OnboardingPrefs.HOTSEAT_DISCOVERY_TIP_COUNT;
-import static com.android.launcher3.util.OnboardingPrefs.HOTSEAT_LONGPRESS_TIP_SEEN;
-import static com.android.launcher3.util.OnboardingPrefs.TASKBAR_EDU_TOOLTIP_STEP;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.EditText;
-import android.widget.Toast;
-
-import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceFragmentCompat;
-import androidx.preference.PreferenceGroup;
-import androidx.preference.PreferenceScreen;
-
-import com.android.launcher3.LauncherPrefs;
-import com.android.launcher3.R;
-import com.android.launcher3.config.FeatureFlags;
-import com.android.launcher3.secondarydisplay.SecondaryDisplayLauncher;
-import com.android.systemui.shared.plugins.PluginPrefs;
-
-/**
- * Dev-build only UI allowing developers to toggle flag settings and plugins.
- * See {@link FeatureFlags}.
- */
-public class DeveloperOptionsUI {
-
-    private final PreferenceFragmentCompat mFragment;
-    private final PreferenceScreen mPreferenceScreen;
-
-    public DeveloperOptionsUI(PreferenceFragmentCompat fragment, PreferenceCategory flags) {
-        mFragment = fragment;
-        mPreferenceScreen = fragment.getPreferenceScreen();
-        flags.getParent().removePreference(flags);
-
-        // Add search bar
-        View listView = mFragment.getListView();
-        ViewGroup parent = (ViewGroup) listView.getParent();
-        View topBar = LayoutInflater.from(parent.getContext())
-                .inflate(R.layout.developer_options_top_bar, parent, false);
-        parent.addView(topBar, parent.indexOfChild(listView));
-        initSearch(topBar.findViewById(R.id.filter_box));
-
-        DevOptionsUiHelper uiHelper = new DevOptionsUiHelper();
-        uiHelper.inflateServerFlags(newCategory("Server flags"));
-        if (PluginPrefs.hasPlugins(getContext())) {
-            uiHelper.inflatePluginPrefs(newCategory("Plugins"));
-        }
-
-        maybeAddSandboxCategory();
-        addOnboardingPrefsCatergory();
-    }
-
-    private void filterPreferences(String query, PreferenceGroup pg) {
-        int count = pg.getPreferenceCount();
-        int hidden = 0;
-        for (int i = 0; i < count; i++) {
-            Preference preference = pg.getPreference(i);
-            if (preference instanceof PreferenceGroup) {
-                filterPreferences(query, (PreferenceGroup) preference);
-            } else {
-                String title = preference.getTitle().toString().toLowerCase().replace("_", " ");
-                if (query.isEmpty() || title.contains(query)) {
-                    preference.setVisible(true);
-                } else {
-                    preference.setVisible(false);
-                    hidden++;
-                }
-            }
-        }
-        pg.setVisible(hidden != count);
-    }
-
-    private void initSearch(EditText filterBox) {
-        filterBox.addTextChangedListener(new TextWatcher() {
-            @Override
-            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { }
-
-            @Override
-            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { }
-
-            @Override
-            public void afterTextChanged(Editable editable) {
-                String query = editable.toString().toLowerCase().replace("_", " ");
-                filterPreferences(query, mPreferenceScreen);
-            }
-        });
-
-        if (mFragment.getArguments() != null) {
-            String filter = mFragment.getArguments().getString(EXTRA_FRAGMENT_HIGHLIGHT_KEY);
-            // Normally EXTRA_FRAGMENT_ARG_KEY is used to highlight the preference with the given
-            // key. This is a slight variation where we instead filter by the human-readable titles.
-            if (filter != null) {
-                filterBox.setText(filter);
-            }
-        }
-    }
-
-    private PreferenceCategory newCategory(String title) {
-        PreferenceCategory category = new PreferenceCategory(getContext());
-        category.setOrder(Preference.DEFAULT_ORDER);
-        category.setTitle(title);
-        mPreferenceScreen.addPreference(category);
-        return category;
-    }
-
-    private Context getContext() {
-        return mFragment.requireContext();
-    }
-
-    private void maybeAddSandboxCategory() {
-        Context context = getContext();
-        if (context == null) {
-            return;
-        }
-        Intent launchSandboxIntent =
-                new Intent("com.android.quickstep.action.GESTURE_SANDBOX")
-                        .setPackage(context.getPackageName())
-                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        if (launchSandboxIntent.resolveActivity(context.getPackageManager()) == null) {
-            return;
-        }
-        PreferenceCategory sandboxCategory = newCategory("Gesture Navigation Sandbox");
-        sandboxCategory.setSummary("Learn and practice navigation gestures");
-        Preference launchTutorialStepMenuPreference = new Preference(context);
-        launchTutorialStepMenuPreference.setKey("launchTutorialStepMenu");
-        launchTutorialStepMenuPreference.setTitle("Launch Gesture Tutorial Steps menu");
-        launchTutorialStepMenuPreference.setSummary("Select a gesture tutorial step.");
-        launchTutorialStepMenuPreference.setIntent(
-                new Intent(launchSandboxIntent).putExtra("use_tutorial_menu", true));
-
-        sandboxCategory.addPreference(launchTutorialStepMenuPreference);
-        Preference launchOnboardingTutorialPreference = new Preference(context);
-        launchOnboardingTutorialPreference.setKey("launchOnboardingTutorial");
-        launchOnboardingTutorialPreference.setTitle("Launch Onboarding Tutorial");
-        launchOnboardingTutorialPreference.setSummary("Learn the basic navigation gestures.");
-        launchTutorialStepMenuPreference.setIntent(new Intent(launchSandboxIntent)
-                .putExtra("use_tutorial_menu", false)
-                .putExtra("tutorial_steps",
-                        new String[] {
-                                "HOME_NAVIGATION",
-                                "BACK_NAVIGATION",
-                                "OVERVIEW_NAVIGATION"}));
-
-        sandboxCategory.addPreference(launchOnboardingTutorialPreference);
-        Preference launchBackTutorialPreference = new Preference(context);
-        launchBackTutorialPreference.setKey("launchBackTutorial");
-        launchBackTutorialPreference.setTitle("Launch Back Tutorial");
-        launchBackTutorialPreference.setSummary("Learn how to use the Back gesture");
-        launchBackTutorialPreference.setIntent(new Intent(launchSandboxIntent)
-                    .putExtra("use_tutorial_menu", false)
-                    .putExtra("tutorial_steps", new String[] {"BACK_NAVIGATION"}));
-
-        sandboxCategory.addPreference(launchBackTutorialPreference);
-        Preference launchHomeTutorialPreference = new Preference(context);
-        launchHomeTutorialPreference.setKey("launchHomeTutorial");
-        launchHomeTutorialPreference.setTitle("Launch Home Tutorial");
-        launchHomeTutorialPreference.setSummary("Learn how to use the Home gesture");
-        launchHomeTutorialPreference.setIntent(new Intent(launchSandboxIntent)
-                    .putExtra("use_tutorial_menu", false)
-                    .putExtra("tutorial_steps", new String[] {"HOME_NAVIGATION"}));
-
-        sandboxCategory.addPreference(launchHomeTutorialPreference);
-        Preference launchOverviewTutorialPreference = new Preference(context);
-        launchOverviewTutorialPreference.setKey("launchOverviewTutorial");
-        launchOverviewTutorialPreference.setTitle("Launch Overview Tutorial");
-        launchOverviewTutorialPreference.setSummary("Learn how to use the Overview gesture");
-        launchOverviewTutorialPreference.setIntent(new Intent(launchSandboxIntent)
-                    .putExtra("use_tutorial_menu", false)
-                    .putExtra("tutorial_steps", new String[] {"OVERVIEW_NAVIGATION"}));
-
-        sandboxCategory.addPreference(launchOverviewTutorialPreference);
-        Preference launchSecondaryDisplayPreference = new Preference(context);
-        launchSecondaryDisplayPreference.setKey("launchSecondaryDisplay");
-        launchSecondaryDisplayPreference.setTitle("Launch Secondary Display");
-        launchSecondaryDisplayPreference.setSummary("Launch secondary display activity");
-        launchSecondaryDisplayPreference.setIntent(
-                new Intent(context, SecondaryDisplayLauncher.class));
-
-    }
-
-    private void addOnboardingPrefsCatergory() {
-        PreferenceCategory onboardingCategory = newCategory("Onboarding Flows");
-        onboardingCategory.setSummary("Reset these if you want to see the education again.");
-
-        onboardingCategory.addPreference(createOnboardPref("All Apps Bounce",
-                HOME_BOUNCE_SEEN.getSharedPrefKey(), HOME_BOUNCE_COUNT.getSharedPrefKey()));
-        onboardingCategory.addPreference(createOnboardPref("Hybrid Hotseat Education",
-                HOTSEAT_DISCOVERY_TIP_COUNT.getSharedPrefKey(),
-                HOTSEAT_LONGPRESS_TIP_SEEN.getSharedPrefKey()));
-        onboardingCategory.addPreference(createOnboardPref("Taskbar Education",
-                TASKBAR_EDU_TOOLTIP_STEP.getSharedPrefKey()));
-        onboardingCategory.addPreference(createOnboardPref("All Apps Visited Count",
-                ALL_APPS_VISITED_COUNT.getSharedPrefKey()));
-    }
-
-    private Preference createOnboardPref(String title, String... keys) {
-        Preference onboardingPref = new Preference(getContext());
-        onboardingPref.setTitle(title);
-        onboardingPref.setSummary("Tap to reset");
-        onboardingPref.setOnPreferenceClickListener(preference -> {
-            SharedPreferences.Editor sharedPrefsEdit = LauncherPrefs.getPrefs(getContext())
-                    .edit();
-            for (String key : keys) {
-                sharedPrefsEdit.remove(key);
-            }
-            sharedPrefsEdit.apply();
-            Toast.makeText(getContext(), "Reset " + title, Toast.LENGTH_SHORT).show();
-            return true;
-        });
-        return onboardingPref;
-    }
-}
diff --git a/src/com/android/launcher3/settings/SettingsActivity.java b/src/com/android/launcher3/settings/SettingsActivity.java
index c10d85e..52ce4e8 100644
--- a/src/com/android/launcher3/settings/SettingsActivity.java
+++ b/src/com/android/launcher3/settings/SettingsActivity.java
@@ -41,7 +41,6 @@
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceFragmentCompat;
 import androidx.preference.PreferenceFragmentCompat.OnPreferenceStartFragmentCallback;
 import androidx.preference.PreferenceFragmentCompat.OnPreferenceStartScreenCallback;
@@ -53,9 +52,7 @@
 import com.android.launcher3.LauncherFiles;
 import com.android.launcher3.R;
 import com.android.launcher3.states.RotationHelper;
-import com.android.launcher3.uioverrides.flags.DeveloperOptionsUI;
 import com.android.launcher3.util.DisplayController;
-import com.android.launcher3.util.Executors;
 import com.android.launcher3.util.SettingsCache;
 
 /**
@@ -255,12 +252,6 @@
                         preference.setOrder(0);
                     }
                     return mDeveloperOptionsEnabled;
-                case "pref_developer_flags":
-                    if (mDeveloperOptionsEnabled && preference instanceof PreferenceCategory pc) {
-                        Executors.MAIN_EXECUTOR.post(() -> new DeveloperOptionsUI(this, pc));
-                        return true;
-                    }
-                    return false;
             }
 
             return true;
diff --git a/src_no_quickstep/com/android/launcher3/uioverrides/PredictedAppIconInflater.java b/src_no_quickstep/com/android/launcher3/uioverrides/PredictedAppIconInflater.java
deleted file mode 100644
index 4893c17..0000000
--- a/src_no_quickstep/com/android/launcher3/uioverrides/PredictedAppIconInflater.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2020 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.launcher3.uioverrides;
-
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.launcher3.model.data.WorkspaceItemInfo;
-
-/** A util class that inflates a predicted app icon */
-public class PredictedAppIconInflater {
-    public static View inflate(LayoutInflater inflater, ViewGroup parent, WorkspaceItemInfo info) {
-        return null;
-    }
-}
diff --git a/src_no_quickstep/com/android/launcher3/uioverrides/flags/DeveloperOptionsUI.java b/src_no_quickstep/com/android/launcher3/uioverrides/flags/DeveloperOptionsUI.java
deleted file mode 100644
index 6afa446..0000000
--- a/src_no_quickstep/com/android/launcher3/uioverrides/flags/DeveloperOptionsUI.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2023 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.launcher3.uioverrides.flags;
-
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceFragmentCompat;
-
-/**
- * Place holder class for developer options.
- */
-public class DeveloperOptionsUI {
-
-    public DeveloperOptionsUI(PreferenceFragmentCompat fragment, PreferenceCategory flags) { }
-}