add preference to clear preferences for each screen

This commit is contained in:
deniscerri 2025-03-01 15:32:36 +01:00
parent cefa55f37f
commit 7d0d3af036
No known key found for this signature in database
GPG key ID: 95C43D517D830350
17 changed files with 137 additions and 28 deletions

View file

@ -1,12 +1,17 @@
package com.deniscerri.ytdl.ui.more.settings package com.deniscerri.ytdl.ui.more.settings
import android.content.SharedPreferences
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.preference.EditTextPreference import androidx.preference.EditTextPreference
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.MultiSelectListPreference import androidx.preference.MultiSelectListPreference
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceGroup
import androidx.preference.PreferenceManager
import androidx.preference.PreferenceScreen
import com.deniscerri.ytdl.R import com.deniscerri.ytdl.R
import com.deniscerri.ytdl.databinding.TextinputBinding import com.deniscerri.ytdl.databinding.TextinputBinding
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -21,6 +26,27 @@ abstract class BaseSettingsFragment : PreferenceFragmentCompat() {
(activity as? SettingsActivity)?.changeTopAppbarTitle(getString(title)) (activity as? SettingsActivity)?.changeTopAppbarTitle(getString(title))
} }
fun getPreferences(p: Preference, list: MutableList<Preference>) : List<Preference> {
if (p is PreferenceCategory || p is PreferenceScreen) {
val pGroup: PreferenceGroup = p as PreferenceGroup
val pCount: Int = pGroup.preferenceCount
for (i in 0 until pCount) {
getPreferences(pGroup.getPreference(i), list) // recursive call
}
} else {
list.add(p)
}
return list
}
fun resetPreferences(editor: SharedPreferences.Editor, key: Int) {
getPreferences(preferenceScreen, mutableListOf()).forEach {
editor.remove(it.key)
}
editor.apply()
PreferenceManager.setDefaultValues(requireActivity().applicationContext, key, true)
}
//Thanks libretube //Thanks libretube
override fun onDisplayPreferenceDialog(preference: Preference) { override fun onDisplayPreferenceDialog(preference: Preference) {
when (preference) { when (preference) {

View file

@ -263,6 +263,14 @@ class DownloadSettingsFragment : BaseSettingsFragment() {
true true
} }
} }
findPreference<Preference>("reset_preferences")?.setOnPreferenceClickListener {
UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) {
resetPreferences(preferences.edit(), R.xml.downloading_preferences)
requireActivity().recreate()
}
true
}
} }
private var archivePathResultLauncher = registerForActivityResult( private var archivePathResultLauncher = registerForActivityResult(

View file

@ -1,20 +1,22 @@
package com.deniscerri.ytdl.ui.more.settings package com.deniscerri.ytdl.ui.more.settings
import android.app.Activity import android.app.Activity
import android.content.Context.MODE_PRIVATE
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.net.Uri import android.net.Uri
import android.os.Build
import android.os.Build.VERSION import android.os.Build.VERSION
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.provider.Settings import android.provider.Settings
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceGroup
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.preference.PreferenceScreen
import androidx.preference.SwitchPreferenceCompat import androidx.preference.SwitchPreferenceCompat
import androidx.work.ExistingWorkPolicy import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequestBuilder import androidx.work.OneTimeWorkRequestBuilder
@ -74,16 +76,16 @@ class FolderSettingsFragment : BaseSettingsFragment() {
moveCache = findPreference("move_cache") moveCache = findPreference("move_cache")
if (preferences.getString("music_path", "")!!.isEmpty()) { if (preferences.getString("music_path", "")!!.isEmpty()) {
editor.putString("music_path", FileUtil.getDefaultAudioPath()) editor.putString("music_path", FileUtil.getDefaultAudioPath()).apply()
} }
if (preferences.getString("video_path", "")!!.isEmpty()) { if (preferences.getString("video_path", "")!!.isEmpty()) {
editor.putString("video_path", FileUtil.getDefaultVideoPath()) editor.putString("video_path", FileUtil.getDefaultVideoPath()).apply()
} }
if (preferences.getString("command_path", "")!!.isEmpty()) { if (preferences.getString("command_path", "")!!.isEmpty()) {
editor.putString("command_path", FileUtil.getDefaultCommandPath()) editor.putString("command_path", FileUtil.getDefaultCommandPath()).apply()
} }
if (preferences.getString("cache_path", "")!!.isEmpty()) { if (preferences.getString("cache_path", "")!!.isEmpty()) {
editor.putString("cache_path", FileUtil.getCachePath(requireContext())) editor.putString("cache_path", FileUtil.getCachePath(requireContext())).apply()
} }
if (FileUtil.hasAllFilesAccess()) { if (FileUtil.hasAllFilesAccess()) {
@ -125,7 +127,7 @@ class FolderSettingsFragment : BaseSettingsFragment() {
true true
} }
cachePath!!.summary = FileUtil.formatPath(preferences.getString("cache_path", "")!!) cachePath!!.summary = FileUtil.formatPath(preferences.getString("cache_path", FileUtil.getCachePath(requireContext()))!!)
cachePath!!.onPreferenceClickListener = cachePath!!.onPreferenceClickListener =
Preference.OnPreferenceClickListener { Preference.OnPreferenceClickListener {
UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.cache_directory), getString(R.string.cache_directory_warning)) { UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.cache_directory), getString(R.string.cache_directory_warning)) {
@ -234,6 +236,14 @@ class FolderSettingsFragment : BaseSettingsFragment() {
} }
findPreference<Preference>("reset_preferences")?.setOnPreferenceClickListener {
UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) {
resetPreferences(editor, R.xml.folders_preference)
requireActivity().recreate()
}
true
}
} }
override fun onResume() { override fun onResume() {

View file

@ -6,6 +6,7 @@ import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.Resources.Theme
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.PowerManager import android.os.PowerManager
@ -68,12 +69,13 @@ class GeneralSettingsFragment : BaseSettingsFragment() {
} }
findPreference<ListPreference>("app_language")?.apply { findPreference<ListPreference>("app_language")?.apply {
if (value == null) { if (value.isNullOrBlank()) {
value = Locale.getDefault().language value = Locale.getDefault().language
summary = Locale.getDefault().displayLanguage
} }
summary = Locale.getDefault().displayLanguage
setOnPreferenceChangeListener { _, newValue -> setOnPreferenceChangeListener { _, newValue ->
AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(newValue.toString())) AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(newValue.toString()))
summary = Locale.getDefault().displayLanguage
true true
} }
} }
@ -366,6 +368,14 @@ class GeneralSettingsFragment : BaseSettingsFragment() {
true true
} }
} }
findPreference<Preference>("reset_preferences")?.setOnPreferenceClickListener {
UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) {
resetPreferences(editor, R.xml.general_preferences)
ThemeUtil.updateThemes()
}
true
}
} }
override fun onResume() { override fun onResume() {

View file

@ -1,22 +1,12 @@
package com.deniscerri.ytdl.ui.more.settings package com.deniscerri.ytdl.ui.more.settings
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.DialogInterface
import android.graphics.Typeface
import android.os.Bundle import android.os.Bundle
import android.widget.LinearLayout
import android.widget.TextView
import androidx.preference.EditTextPreference import androidx.preference.EditTextPreference
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.afollestad.materialdialogs.utils.MDUtil.getStringArray
import com.deniscerri.ytdl.R import com.deniscerri.ytdl.R
import com.deniscerri.ytdl.ui.adapter.SortableTextItemAdapter
import com.deniscerri.ytdl.util.UiUtil import com.deniscerri.ytdl.util.UiUtil
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class ProcessingSettingsFragment : BaseSettingsFragment() { class ProcessingSettingsFragment : BaseSettingsFragment() {
@ -82,5 +72,13 @@ class ProcessingSettingsFragment : BaseSettingsFragment() {
true true
} }
} }
findPreference<Preference>("reset_preferences")?.setOnPreferenceClickListener {
UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) {
resetPreferences(editor, R.xml.processing_preferences)
requireActivity().recreate()
}
true
}
} }
} }

View file

@ -81,7 +81,7 @@ class UpdateSettingsFragment : BaseSettingsFragment() {
ytdlpViewModel = ViewModelProvider(this)[YTDLPViewModel::class.java] ytdlpViewModel = ViewModelProvider(this)[YTDLPViewModel::class.java]
ytdlSource?.apply { ytdlSource?.apply {
summary = preferences.getString("ytdlp_source_label", "") summary = preferences.getString("ytdlp_source_label", "")!!.ifEmpty { getString(R.string.update_ytdl_stable) }
setOnPreferenceClickListener { setOnPreferenceClickListener {
UiUtil.showYTDLSourceBottomSheet(requireActivity(), preferences) { t, r -> UiUtil.showYTDLSourceBottomSheet(requireActivity(), preferences) { t, r ->
summary = t summary = t
@ -95,15 +95,14 @@ class UpdateSettingsFragment : BaseSettingsFragment() {
ytdlVersion?.apply { ytdlVersion?.apply {
summary = preferences.getString("ytdl-version", "") summary = preferences.getString("ytdl-version", "")
if (summary?.isBlank() == true) {
setYTDLPVersion()
}
setOnPreferenceClickListener { setOnPreferenceClickListener {
initYTDLUpdate() initYTDLUpdate()
true true
} }
} }
ytdlVersion!!.setOnPreferenceClickListener {
initYTDLUpdate()
true
}
updateYTDL!!.onPreferenceClickListener = updateYTDL!!.onPreferenceClickListener =
Preference.OnPreferenceClickListener { Preference.OnPreferenceClickListener {
@ -122,7 +121,7 @@ class UpdateSettingsFragment : BaseSettingsFragment() {
version = findPreference("version") version = findPreference("version")
val nativeLibraryDir = context?.applicationInfo?.nativeLibraryDir val nativeLibraryDir = context?.applicationInfo?.nativeLibraryDir
version!!.summary = "${BuildConfig.VERSION_NAME} [${nativeLibraryDir?.split("/lib/")?.get(1)}]" version!!.summary = "${BuildConfig.VERSION_NAME} (${nativeLibraryDir?.split("/lib/")?.get(1)})"
version!!.onPreferenceClickListener = version!!.onPreferenceClickListener =
Preference.OnPreferenceClickListener { Preference.OnPreferenceClickListener {
lifecycleScope.launch{ lifecycleScope.launch{
@ -140,6 +139,14 @@ class UpdateSettingsFragment : BaseSettingsFragment() {
true true
} }
findPreference<Preference>("reset_preferences")?.setOnPreferenceClickListener {
UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) {
resetPreferences(preferences.edit(), R.xml.updating_preferences)
requireActivity().recreate()
}
true
}
} }
private fun setYTDLPVersion() { private fun setYTDLPVersion() {

View file

@ -80,6 +80,14 @@ class AdvancedSettingsFragment : BaseSettingsFragment() {
} }
} }
findPreference<Preference>("reset_preferences")?.setOnPreferenceClickListener {
UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) {
resetPreferences(editor, R.xml.downloading_preferences)
requireActivity().recreate()
}
true
}
} }

View file

@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="?android:colorAccent" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M21,10h-8.01V7L9,11l3.99,4v-3H21v5H3V5h18v3h2V5c0,-1.1 -0.9,-2 -2,-2H3c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h5v2h8v-2h5c1.1,0 1.99,-0.9 1.99,-2v-5H23c0,-1.1 -0.9,-2 -2,-2z"/>
</vector>

View file

@ -2,7 +2,6 @@
<com.google.android.material.card.MaterialCardView android:id="@+id/sampleCustomSource" <com.google.android.material.card.MaterialCardView android:id="@+id/sampleCustomSource"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:checkable="true" android:checkable="true"
android:clickable="true" android:clickable="true"
android:focusable="true" android:focusable="true"
@ -17,6 +16,7 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:paddingBottom="5dp"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<RadioButton <RadioButton

View file

@ -59,7 +59,7 @@
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:padding="15dp" android:padding="10dp"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<LinearLayout <LinearLayout

View file

@ -466,4 +466,5 @@
<string name="app_icon_change">Icon could change and Application will close</string> <string name="app_icon_change">Icon could change and Application will close</string>
<string name="use_format_sorting">Use Format Importance Ordering</string> <string name="use_format_sorting">Use Format Importance Ordering</string>
<string name="use_code_highlighter">Use Code Color Highlighter</string> <string name="use_code_highlighter">Use Code Color Highlighter</string>
<string name="reset_preferences_in_screen">Reset all preferences in this screen</string>
</resources> </resources>

View file

@ -65,4 +65,10 @@
android:title="@string/disable_write_info_json" /> android:title="@string/disable_write_info_json" />
</PreferenceCategory> </PreferenceCategory>
<Preference
app:icon="@drawable/baseline_reset_tv_24"
app:key="reset_preferences"
android:summary="@string/reset_preferences_in_screen"
app:title="@string/reset" />
</PreferenceScreen> </PreferenceScreen>

View file

@ -228,5 +228,11 @@
android:key="useragent_header" android:key="useragent_header"
app:isPreferenceVisible="false" /> app:isPreferenceVisible="false" />
<Preference
app:icon="@drawable/baseline_reset_tv_24"
app:key="reset_preferences"
android:summary="@string/reset_preferences_in_screen"
app:title="@string/reset" />
</PreferenceScreen> </PreferenceScreen>

View file

@ -95,4 +95,10 @@
android:summary="@string/clear_temporary_files_summary" android:summary="@string/clear_temporary_files_summary"
app:title="@string/clear_temporary_files" /> app:title="@string/clear_temporary_files" />
<Preference
app:icon="@drawable/baseline_reset_tv_24"
app:key="reset_preferences"
android:summary="@string/reset_preferences_in_screen"
app:title="@string/reset" />
</PreferenceScreen> </PreferenceScreen>

View file

@ -9,7 +9,6 @@
android:defaultValue="" android:defaultValue=""
android:icon="@drawable/baseline_translate_24" android:icon="@drawable/baseline_translate_24"
app:key="app_language" app:key="app_language"
app:useSimpleSummaryProvider="true"
app:summary="" app:summary=""
app:title="@string/language" /> app:title="@string/language" />
@ -216,6 +215,13 @@
app:icon="@drawable/ic_battery" app:icon="@drawable/ic_battery"
app:key="ignore_battery" app:key="ignore_battery"
app:title="@string/ignore_battery_optimization" /> app:title="@string/ignore_battery_optimization" />
<Preference
app:icon="@drawable/baseline_reset_tv_24"
app:key="reset_preferences"
android:summary="@string/reset_preferences_in_screen"
app:title="@string/reset" />
</PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>

View file

@ -288,4 +288,10 @@
</PreferenceCategory> </PreferenceCategory>
<Preference
app:icon="@drawable/baseline_reset_tv_24"
app:key="reset_preferences"
android:summary="@string/reset_preferences_in_screen"
app:title="@string/reset" />
</PreferenceScreen> </PreferenceScreen>

View file

@ -94,4 +94,10 @@
app:title="@string/update_formats" /> app:title="@string/update_formats" />
</PreferenceCategory> </PreferenceCategory>
<Preference
app:icon="@drawable/baseline_reset_tv_24"
app:key="reset_preferences"
android:summary="@string/reset_preferences_in_screen"
app:title="@string/reset" />
</PreferenceScreen> </PreferenceScreen>