diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsFragment.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsFragment.kt index 80f1ae9..71b7529 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsFragment.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsFragment.kt @@ -17,13 +17,15 @@ class SettingsFragment : PreferenceFragmentCompat(), TitleProvider { sharedPreferenceManager = SharedPreferenceManager(requireContext()) - val homePref = findPreference("defaultHome") + val homePref = findPreference("defaultHome") + val uiSettings = findPreference("uiSettings") val homeSettings = findPreference("homeSettings") val appMenuSettings = findPreference("appMenuSettings") - val hiddenPref = findPreference("hiddenApps") - val aboutPref = findPreference("aboutPage") + val hiddenPref = findPreference("hiddenApps") + val aboutPref = findPreference("aboutPage") + val resetPref = findPreference("resetAll") homePref?.onPreferenceClickListener = Preference.OnPreferenceClickListener { @@ -35,6 +37,15 @@ class SettingsFragment : PreferenceFragmentCompat(), TitleProvider { } true } + uiSettings?.onPreferenceClickListener = + Preference.OnPreferenceClickListener { + requireActivity().supportFragmentManager + .beginTransaction() + .replace(R.id.settingsLayout, UISettingsFragment()) + .addToBackStack(null) + .commit() + true } + homeSettings?.onPreferenceClickListener = Preference.OnPreferenceClickListener { requireActivity().supportFragmentManager @@ -71,10 +82,14 @@ class SettingsFragment : PreferenceFragmentCompat(), TitleProvider { .commit() true } - + resetPref?.onPreferenceClickListener = + Preference.OnPreferenceClickListener { + sharedPreferenceManager.resetAllPreferences(requireActivity()) + true } } override fun getTitle(): String { return "Launcher Settings" } + } \ No newline at end of file diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt index 45b5da7..97e9ffc 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt @@ -1,10 +1,13 @@ package eu.ottop.yamlauncher.settings +import android.app.AlertDialog import android.content.Context import android.graphics.Color import android.util.TypedValue import android.widget.TextView +import androidx.fragment.app.FragmentActivity import androidx.preference.PreferenceManager +import eu.ottop.yamlauncher.R class SharedPreferenceManager (private val context: Context) { @@ -221,4 +224,39 @@ class SharedPreferenceManager (private val context: Context) { editor.remove("name$packageName-$profile") editor.apply() } + + fun resetAllPreferences(activity: FragmentActivity) { + AlertDialog.Builder(context).apply { + setTitle("Confirmation") + setMessage("You will lose ALL changes that you have made to the launcher settings. Are you sure?") + setPositiveButton("Yes") { _, _ -> + performReset(activity) + } + + setNegativeButton("Cancel") { _, _ -> + } + }.create().show() + } + + private fun performReset(activity: FragmentActivity) { + val editor = preferences.edit() + editor.clear() + editor.apply() + activity.supportFragmentManager + .beginTransaction() + .replace(R.id.settingsLayout, UISettingsFragment()) + .commit() + activity.supportFragmentManager + .beginTransaction() + .replace(R.id.settingsLayout, HomeSettingsFragment()) + .commit() + activity.supportFragmentManager + .beginTransaction() + .replace(R.id.settingsLayout, AppMenuSettingsFragment()) + .commit() + activity.supportFragmentManager + .beginTransaction() + .replace(R.id.settingsLayout, SettingsFragment()) + .commit() + } } \ No newline at end of file diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/SpinnerPreference.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/SpinnerPreference.kt new file mode 100644 index 0000000..34fd6a2 --- /dev/null +++ b/app/src/main/java/eu/ottop/yamlauncher/settings/SpinnerPreference.kt @@ -0,0 +1,88 @@ +package eu.ottop.yamlauncher.settings + +import android.content.Context +import android.os.Handler +import android.os.Looper +import android.util.AttributeSet +import android.view.View +import android.widget.AdapterView +import android.widget.ArrayAdapter +import android.widget.Spinner +import androidx.preference.Preference +import androidx.preference.PreferenceViewHolder +import eu.ottop.yamlauncher.R + +class SpinnerPreference (context: Context, attrs: AttributeSet? = null): Preference(context, attrs) { + + private var entries: Array? = null + private var entryValues: Array? = null + private var currentValue: String? = null + private var defaultNo: String? = null + private var spinner: Spinner? = null + + init { + widgetLayoutResource = R.layout.preference_spinner + context.theme.obtainStyledAttributes( + attrs, + R.styleable.SpinnerPreference, + 0, 0).apply { + + try { + entries = getTextArray(R.styleable.SpinnerPreference_android_entries) + entryValues = getTextArray(R.styleable.SpinnerPreference_android_entryValues) + defaultNo = getString(R.styleable.SpinnerPreference_android_defaultValue) + } finally { + recycle() + } + }} + + override fun onBindViewHolder(holder: PreferenceViewHolder) { + super.onBindViewHolder(holder) + spinner = holder.findViewById(R.id.preferenceOptions) as Spinner + + if (entries != null) { + val adapter = ArrayAdapter(context, android.R.layout.simple_spinner_item, entries!!) + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + spinner?.adapter = adapter + } + + val selectedIndex = entryValues?.indexOf(currentValue as? CharSequence) ?: 0 + spinner?.setSelection(selectedIndex) + + // Somehow prevents an error :D + val handler = Handler(Looper.getMainLooper()) + handler.postDelayed({ + if (selectedIndex >= 0) { + summary = entries?.get(selectedIndex) + } + }, 0) + + spinner?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) { + val newValue = entryValues?.get(position).toString() + if (callChangeListener(newValue)) { + currentValue = newValue + persistString(newValue) + summary = entries?.get(position) + } + } + + override fun onNothingSelected(parent: AdapterView<*>) {} + } + } + + override fun onClick() { + // Open the spinner dropdown when the preference is clicked + spinner?.performClick() + } + + override fun onSetInitialValue(defaultValue: Any?) { + currentValue = getPersistedString(defaultValue as? String) + } + + // This is required to ensure that default values are stored (needed for full settings reset) + override fun onAttached() { + super.onAttached() + persistString(getPersistedString(defaultNo)) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/UISettingsFragment.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/UISettingsFragment.kt new file mode 100644 index 0000000..c6743c2 --- /dev/null +++ b/app/src/main/java/eu/ottop/yamlauncher/settings/UISettingsFragment.kt @@ -0,0 +1,16 @@ +package eu.ottop.yamlauncher.settings + +import android.os.Bundle +import androidx.preference.PreferenceFragmentCompat +import eu.ottop.yamlauncher.R + +class UISettingsFragment : PreferenceFragmentCompat(), TitleProvider { + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.ui_preferences, rootKey) + } + + override fun getTitle(): String { + return "General UI Settings" + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/app_item_layout.xml b/app/src/main/res/layout/app_item_layout.xml index 821e38f..6fb6d70 100644 --- a/app/src/main/res/layout/app_item_layout.xml +++ b/app/src/main/res/layout/app_item_layout.xml @@ -88,6 +88,7 @@ android:background="#A7000000" android:foreground="@drawable/app_action_foreground" android:paddingVertical="3dp" + android:singleLine="true" android:text="@string/info" android:textAlignment="center" android:textAppearance="@android:style/TextAppearance.DeviceDefault" @@ -102,6 +103,7 @@ android:background="#A7000000" android:foreground="@drawable/app_action_foreground" android:paddingVertical="3dp" + android:singleLine="true" android:text="@string/uninstall" android:textAlignment="center" android:textAppearance="@android:style/TextAppearance.DeviceDefault" @@ -116,6 +118,7 @@ android:background="#A7000000" android:foreground="@drawable/app_action_foreground" android:paddingVertical="3dp" + android:singleLine="true" android:text="@string/rename" android:textAlignment="center" android:textAppearance="@android:style/TextAppearance.DeviceDefault" @@ -130,6 +133,7 @@ android:background="#A7000000" android:foreground="@drawable/app_action_foreground" android:paddingVertical="3dp" + android:singleLine="true" android:text="@string/hide" android:textAlignment="center" android:textAppearance="@android:style/TextAppearance.DeviceDefault" @@ -144,6 +148,7 @@ android:background="#A7000000" android:foreground="@drawable/app_action_foreground" android:paddingVertical="3dp" + android:singleLine="true" android:text="@string/close" android:textAlignment="center" android:textAppearance="@android:style/TextAppearance.DeviceDefault" diff --git a/app/src/main/res/layout/preference_spinner.xml b/app/src/main/res/layout/preference_spinner.xml new file mode 100644 index 0000000..88786c4 --- /dev/null +++ b/app/src/main/res/layout/preference_spinner.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 0000000..8856fd6 --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/app_menu_preferences.xml b/app/src/main/res/xml/app_menu_preferences.xml index f4ea0b9..a8ea5e9 100644 --- a/app/src/main/res/xml/app_menu_preferences.xml +++ b/app/src/main/res/xml/app_menu_preferences.xml @@ -1,34 +1,34 @@ - - - - @@ -44,23 +44,23 @@ android:defaultValue="true" android:title="Enable Search" app:key="searchEnabled" /> - - @@ -74,4 +74,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/xml/home_preferences.xml b/app/src/main/res/xml/home_preferences.xml index 52b2990..e87faf2 100644 --- a/app/src/main/res/xml/home_preferences.xml +++ b/app/src/main/res/xml/home_preferences.xml @@ -13,21 +13,21 @@ android:defaultValue="true" android:title="Show Clock" app:key="clockEnabled" /> - - @@ -50,13 +50,13 @@ android:defaultValue="true" android:title="Show Date" app:key="dateEnabled" /> - @@ -102,13 +102,13 @@ app:key="manualLocation" app:selectable="true" app:title="Set Manual Location" /> - @@ -119,39 +119,39 @@ app:allowDividerAbove="false" app:allowDividerBelow="false" app:title="Shortcuts"> - - - - diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 6fbd59f..29b6be8 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -1,3 +1,4 @@ + @@ -7,44 +8,19 @@ app:key="defaultHome" app:selectable="true" app:title="Set Default Home" /> + - + - - - + app:key="uiSettings" + app:selectable="true" + app:summary="Configure the overall look" + app:title="General UI" /> + + + \ No newline at end of file diff --git a/app/src/main/res/xml/ui_preferences.xml b/app/src/main/res/xml/ui_preferences.xml new file mode 100644 index 0000000..f289fe4 --- /dev/null +++ b/app/src/main/res/xml/ui_preferences.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + \ No newline at end of file