diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/BaseSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/BaseSettingsFragment.kt index 3b2b3823..e27624ac 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/BaseSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/BaseSettingsFragment.kt @@ -1,12 +1,17 @@ package com.deniscerri.ytdl.ui.more.settings +import android.content.SharedPreferences import android.view.inputmethod.InputMethodManager import androidx.appcompat.app.AppCompatActivity import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.MultiSelectListPreference import androidx.preference.Preference +import androidx.preference.PreferenceCategory 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.databinding.TextinputBinding import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -21,6 +26,27 @@ abstract class BaseSettingsFragment : PreferenceFragmentCompat() { (activity as? SettingsActivity)?.changeTopAppbarTitle(getString(title)) } + fun getPreferences(p: Preference, list: MutableList) : List { + 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 override fun onDisplayPreferenceDialog(preference: Preference) { when (preference) { diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt index 425b9930..e413619a 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt @@ -263,6 +263,14 @@ class DownloadSettingsFragment : BaseSettingsFragment() { true } } + + findPreference("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( diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/FolderSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/FolderSettingsFragment.kt index b22c6415..dd1b8046 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/FolderSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/FolderSettingsFragment.kt @@ -1,20 +1,22 @@ package com.deniscerri.ytdl.ui.more.settings import android.app.Activity +import android.content.Context.MODE_PRIVATE import android.content.Intent import android.content.SharedPreferences import android.net.Uri -import android.os.Build import android.os.Build.VERSION import android.os.Bundle import android.os.Environment import android.provider.Settings import androidx.activity.result.contract.ActivityResultContracts -import androidx.annotation.RequiresApi import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.preference.Preference +import androidx.preference.PreferenceCategory +import androidx.preference.PreferenceGroup import androidx.preference.PreferenceManager +import androidx.preference.PreferenceScreen import androidx.preference.SwitchPreferenceCompat import androidx.work.ExistingWorkPolicy import androidx.work.OneTimeWorkRequestBuilder @@ -74,16 +76,16 @@ class FolderSettingsFragment : BaseSettingsFragment() { moveCache = findPreference("move_cache") 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()) { - editor.putString("video_path", FileUtil.getDefaultVideoPath()) + editor.putString("video_path", FileUtil.getDefaultVideoPath()).apply() } 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()) { - editor.putString("cache_path", FileUtil.getCachePath(requireContext())) + editor.putString("cache_path", FileUtil.getCachePath(requireContext())).apply() } if (FileUtil.hasAllFilesAccess()) { @@ -125,7 +127,7 @@ class FolderSettingsFragment : BaseSettingsFragment() { true } - cachePath!!.summary = FileUtil.formatPath(preferences.getString("cache_path", "")!!) + cachePath!!.summary = FileUtil.formatPath(preferences.getString("cache_path", FileUtil.getCachePath(requireContext()))!!) cachePath!!.onPreferenceClickListener = Preference.OnPreferenceClickListener { UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.cache_directory), getString(R.string.cache_directory_warning)) { @@ -234,6 +236,14 @@ class FolderSettingsFragment : BaseSettingsFragment() { } + findPreference("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() { diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt index ba29e064..880c3041 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt @@ -6,6 +6,7 @@ import android.content.DialogInterface import android.content.Intent import android.content.SharedPreferences import android.content.pm.PackageManager +import android.content.res.Resources.Theme import android.net.Uri import android.os.Bundle import android.os.PowerManager @@ -68,12 +69,13 @@ class GeneralSettingsFragment : BaseSettingsFragment() { } findPreference("app_language")?.apply { - if (value == null) { + if (value.isNullOrBlank()) { value = Locale.getDefault().language - summary = Locale.getDefault().displayLanguage } + summary = Locale.getDefault().displayLanguage setOnPreferenceChangeListener { _, newValue -> AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(newValue.toString())) + summary = Locale.getDefault().displayLanguage true } } @@ -366,6 +368,14 @@ class GeneralSettingsFragment : BaseSettingsFragment() { true } } + + findPreference("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() { diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt index 7de3f414..1dca14ef 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt @@ -1,22 +1,12 @@ package com.deniscerri.ytdl.ui.more.settings import android.annotation.SuppressLint -import android.content.DialogInterface -import android.graphics.Typeface import android.os.Bundle -import android.widget.LinearLayout -import android.widget.TextView import androidx.preference.EditTextPreference import androidx.preference.Preference 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.ui.adapter.SortableTextItemAdapter import com.deniscerri.ytdl.util.UiUtil -import com.google.android.material.dialog.MaterialAlertDialogBuilder class ProcessingSettingsFragment : BaseSettingsFragment() { @@ -82,5 +72,13 @@ class ProcessingSettingsFragment : BaseSettingsFragment() { true } } + + findPreference("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 + } } } \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/UpdateSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/UpdateSettingsFragment.kt index 1be1d6e9..03bf6992 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/UpdateSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/UpdateSettingsFragment.kt @@ -81,7 +81,7 @@ class UpdateSettingsFragment : BaseSettingsFragment() { ytdlpViewModel = ViewModelProvider(this)[YTDLPViewModel::class.java] ytdlSource?.apply { - summary = preferences.getString("ytdlp_source_label", "") + summary = preferences.getString("ytdlp_source_label", "")!!.ifEmpty { getString(R.string.update_ytdl_stable) } setOnPreferenceClickListener { UiUtil.showYTDLSourceBottomSheet(requireActivity(), preferences) { t, r -> summary = t @@ -95,15 +95,14 @@ class UpdateSettingsFragment : BaseSettingsFragment() { ytdlVersion?.apply { summary = preferences.getString("ytdl-version", "") + if (summary?.isBlank() == true) { + setYTDLPVersion() + } setOnPreferenceClickListener { initYTDLUpdate() true } } - ytdlVersion!!.setOnPreferenceClickListener { - initYTDLUpdate() - true - } updateYTDL!!.onPreferenceClickListener = Preference.OnPreferenceClickListener { @@ -122,7 +121,7 @@ class UpdateSettingsFragment : BaseSettingsFragment() { version = findPreference("version") 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 = Preference.OnPreferenceClickListener { lifecycleScope.launch{ @@ -140,6 +139,14 @@ class UpdateSettingsFragment : BaseSettingsFragment() { true } + + findPreference("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() { diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/AdvancedSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/AdvancedSettingsFragment.kt index 363f747d..951c014c 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/AdvancedSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/AdvancedSettingsFragment.kt @@ -80,6 +80,14 @@ class AdvancedSettingsFragment : BaseSettingsFragment() { } } + findPreference("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 + } + } diff --git a/app/src/main/res/drawable/baseline_reset_tv_24.xml b/app/src/main/res/drawable/baseline_reset_tv_24.xml new file mode 100644 index 00000000..524c531c --- /dev/null +++ b/app/src/main/res/drawable/baseline_reset_tv_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/custom_ytdlp_source.xml b/app/src/main/res/layout/custom_ytdlp_source.xml index e1955001..48226e47 100644 --- a/app/src/main/res/layout/custom_ytdlp_source.xml +++ b/app/src/main/res/layout/custom_ytdlp_source.xml @@ -2,7 +2,6 @@ Icon could change and Application will close Use Format Importance Ordering Use Code Color Highlighter + Reset all preferences in this screen \ No newline at end of file diff --git a/app/src/main/res/xml/advanced_preferences.xml b/app/src/main/res/xml/advanced_preferences.xml index c07ae774..b37825a5 100644 --- a/app/src/main/res/xml/advanced_preferences.xml +++ b/app/src/main/res/xml/advanced_preferences.xml @@ -65,4 +65,10 @@ android:title="@string/disable_write_info_json" /> + + \ No newline at end of file diff --git a/app/src/main/res/xml/downloading_preferences.xml b/app/src/main/res/xml/downloading_preferences.xml index 234a32b6..b2d89c46 100644 --- a/app/src/main/res/xml/downloading_preferences.xml +++ b/app/src/main/res/xml/downloading_preferences.xml @@ -228,5 +228,11 @@ android:key="useragent_header" app:isPreferenceVisible="false" /> + + \ No newline at end of file diff --git a/app/src/main/res/xml/folders_preference.xml b/app/src/main/res/xml/folders_preference.xml index 32f23fb7..e38c0753 100644 --- a/app/src/main/res/xml/folders_preference.xml +++ b/app/src/main/res/xml/folders_preference.xml @@ -95,4 +95,10 @@ android:summary="@string/clear_temporary_files_summary" app:title="@string/clear_temporary_files" /> + + \ No newline at end of file diff --git a/app/src/main/res/xml/general_preferences.xml b/app/src/main/res/xml/general_preferences.xml index 6ccfc144..0750c001 100644 --- a/app/src/main/res/xml/general_preferences.xml +++ b/app/src/main/res/xml/general_preferences.xml @@ -9,7 +9,6 @@ android:defaultValue="" android:icon="@drawable/baseline_translate_24" app:key="app_language" - app:useSimpleSummaryProvider="true" app:summary="" app:title="@string/language" /> @@ -216,6 +215,13 @@ app:icon="@drawable/ic_battery" app:key="ignore_battery" app:title="@string/ignore_battery_optimization" /> + + + \ No newline at end of file diff --git a/app/src/main/res/xml/processing_preferences.xml b/app/src/main/res/xml/processing_preferences.xml index f0c1fc9b..2e095c1d 100644 --- a/app/src/main/res/xml/processing_preferences.xml +++ b/app/src/main/res/xml/processing_preferences.xml @@ -288,4 +288,10 @@ + + \ No newline at end of file diff --git a/app/src/main/res/xml/updating_preferences.xml b/app/src/main/res/xml/updating_preferences.xml index f874db80..1b1dd8f1 100644 --- a/app/src/main/res/xml/updating_preferences.xml +++ b/app/src/main/res/xml/updating_preferences.xml @@ -94,4 +94,10 @@ app:title="@string/update_formats" /> + + \ No newline at end of file