From 89645fab998f62b8d9d3a0e2adb5126adf4f87ff Mon Sep 17 00:00:00 2001 From: Siddhesh Naik Date: Tue, 27 Feb 2024 03:03:48 +0530 Subject: [PATCH] Initial setup for Settings page redesign with debug settings - Added a new settings option to enable the settings page redesign. - This option allows us to integrate and test the new settings page gradually, minimizing disruptions to the current behavior. - Reused the rest of the debug menu to reflect in the new settings page. - Verified the functionality of all debug settings. Next plan: - Create PRs to gradually add all the subsections as detailed in https://github.com/TeamNewPipe/NewPipe/issues/9587. Note: - This PR prepares for upcoming updates by setting up the necessary changes for follow-up PRs. --- .../settings/MainSettingsV2Fragment.kt | 49 +++++++++++++++++++ .../newpipe/settings/SettingsActivity.java | 9 +++- .../settings/SettingsResourceRegistry.java | 4 ++ app/src/main/res/values/settings_keys.xml | 1 + app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/debug_settings.xml | 7 +++ app/src/main/res/xml/main_settings_v2.xml | 12 +++++ 7 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/schabi/newpipe/settings/MainSettingsV2Fragment.kt create mode 100644 app/src/main/res/xml/main_settings_v2.xml diff --git a/app/src/main/java/org/schabi/newpipe/settings/MainSettingsV2Fragment.kt b/app/src/main/java/org/schabi/newpipe/settings/MainSettingsV2Fragment.kt new file mode 100644 index 000000000..1da3d565a --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/MainSettingsV2Fragment.kt @@ -0,0 +1,49 @@ +package org.schabi.newpipe.settings + +import android.os.Bundle +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import androidx.activity.ComponentActivity +import androidx.core.view.MenuProvider +import androidx.preference.Preference +import org.schabi.newpipe.R + +/** + * Provides main settings page, entry point to the NewPipe app settings. + */ +class MainSettingsV2Fragment : BasePreferenceFragment(), MenuProvider { + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + addPreferencesFromResourceRegistry() + + (activity as? ComponentActivity)?.addMenuProvider(this, this) + + // Hide debug preferences in RELEASE build variant + if (!DEBUG) { + findPreference(getString(R.string.debug_pref_screen_key))?.let( + preferenceScreen::removePreference, + ) + } + } + + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { + // -- Link settings activity and register menu -- + menuInflater.inflate(R.menu.menu_settings_main_fragment, menu) + val menuSearchItem = menu.getItem(0) + (activity as? SettingsActivity)?.setMenuSearchItem(menuSearchItem) + } + + override fun onMenuItemSelected(menuItem: MenuItem): Boolean { + if (menuItem.itemId == R.id.action_search) { + (activity as? SettingsActivity)?.setSearchActive(true) + return true + } + return false + } + + override fun onDestroy() { + // Unlink activity so that we don't get memory problems + (activity as? SettingsActivity)?.setMenuSearchItem(null) + super.onDestroy() + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java index 3ee6668bf..c04e52984 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java @@ -20,6 +20,7 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceManager; import com.jakewharton.rxbinding4.widget.RxTextView; @@ -112,8 +113,14 @@ public class SettingsActivity extends AppCompatActivity implements } } } else { + final boolean shouldDisplaySettingsRedesign = PreferenceManager + .getDefaultSharedPreferences(this) + .getBoolean(getString(R.string.settings_layout_redesign_key), false); + final BasePreferenceFragment mainSettingsFragment = + shouldDisplaySettingsRedesign + ? new MainSettingsV2Fragment() : new MainSettingsFragment(); getSupportFragmentManager().beginTransaction() - .replace(R.id.settings_fragment_holder, new MainSettingsFragment()) + .replace(R.id.settings_fragment_holder, mainSettingsFragment) .commit(); } diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsResourceRegistry.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsResourceRegistry.java index b3d0741bb..328512d3e 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SettingsResourceRegistry.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsResourceRegistry.java @@ -29,6 +29,10 @@ public final class SettingsResourceRegistry { private final Set registeredEntries = new HashSet<>(); private SettingsResourceRegistry() { + add(MainSettingsV2Fragment.class, R.xml.main_settings_v2).setSearchable(false); + + // Before redesign settings arrangement. These should be cleared once the + // settings_layout_redesign_key is approved and enabled by default. add(MainSettingsFragment.class, R.xml.main_settings).setSearchable(false); add(AppearanceSettingsFragment.class, R.xml.appearance_settings); diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index 880fa92da..3c89757d1 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -245,6 +245,7 @@ crash_the_app_key show_error_snackbar_key create_error_notification_key + settings_layout_redesign_key theme diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 281df95a4..6fdba4045 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -491,6 +491,7 @@ Crash the app Show an error snackbar Create an error notification + Enable the Redesigned Settings page Import Import from diff --git a/app/src/main/res/xml/debug_settings.xml b/app/src/main/res/xml/debug_settings.xml index 84bb281f3..87a33adf2 100644 --- a/app/src/main/res/xml/debug_settings.xml +++ b/app/src/main/res/xml/debug_settings.xml @@ -71,4 +71,11 @@ android:title="@string/create_error_notification" app:singleLineTitle="false" app:iconSpaceReserved="false" /> + + diff --git a/app/src/main/res/xml/main_settings_v2.xml b/app/src/main/res/xml/main_settings_v2.xml new file mode 100644 index 000000000..3fd7a5a3a --- /dev/null +++ b/app/src/main/res/xml/main_settings_v2.xml @@ -0,0 +1,12 @@ + + + + +