diff --git a/app/src/main/java/com/vanced/manager/core/ext/FragmentExt.kt b/app/src/main/java/com/vanced/manager/core/ext/FragmentExt.kt new file mode 100644 index 00000000..d10352ca --- /dev/null +++ b/app/src/main/java/com/vanced/manager/core/ext/FragmentExt.kt @@ -0,0 +1,15 @@ +package com.vanced.manager.core.ext + +import androidx.fragment.app.DialogFragment +import androidx.fragment.app.Fragment +import kotlin.reflect.full.createInstance + +fun Fragment.requireSupportFM() = requireActivity().supportFragmentManager + +inline fun Fragment.showDialogRefl() { + D::class.createInstance().show(requireSupportFM(), D::class.simpleName) +} + +fun Fragment.showDialog(dialog: D) { + dialog.show(requireSupportFM(), dialog::class.simpleName) +} \ No newline at end of file diff --git a/app/src/main/java/com/vanced/manager/ui/fragments/SettingsFragment.kt b/app/src/main/java/com/vanced/manager/ui/fragments/SettingsFragment.kt index 10ae8897..cf25667c 100644 --- a/app/src/main/java/com/vanced/manager/ui/fragments/SettingsFragment.kt +++ b/app/src/main/java/com/vanced/manager/ui/fragments/SettingsFragment.kt @@ -1,59 +1,86 @@ package com.vanced.manager.ui.fragments import android.os.Bundle -import android.view.* +import android.view.LayoutInflater +import android.view.Menu +import android.view.MenuInflater +import android.view.ViewGroup import android.widget.Toast -import androidx.databinding.DataBindingUtil -import androidx.fragment.app.Fragment -import androidx.preference.PreferenceManager.getDefaultSharedPreferences +import androidx.preference.PreferenceManager.* import androidx.recyclerview.widget.LinearLayoutManager import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.crashlytics.FirebaseCrashlytics import com.google.firebase.perf.FirebasePerformance import com.vanced.manager.R import com.vanced.manager.adapter.GetNotifAdapter +import com.vanced.manager.core.ext.showDialogRefl import com.vanced.manager.databinding.FragmentSettingsBinding +import com.vanced.manager.ui.core.BindingFragment import com.vanced.manager.ui.dialogs.* import com.vanced.manager.utils.LanguageHelper.getLanguageFormat import java.io.File -class SettingsFragment : Fragment() { +class SettingsFragment : BindingFragment() { + + private companion object { + + const val LIGHT = "Light" + const val DARK = "Dark" + const val BLUE = "Blue" + const val RED = "Red" + const val GREEN = "Green" + const val YELLOW = "Yellow" + } - private lateinit var binding: FragmentSettingsBinding private val prefs by lazy { getDefaultSharedPreferences(requireActivity()) } - override fun onCreateView( + override fun binding( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ) = FragmentSettingsBinding.inflate(inflater, container, false) + + override fun otherSetups() { setHasOptionsMenu(true) - binding = DataBindingUtil.inflate(inflater, R.layout.fragment_settings, container, false) - return binding.root + bindData() } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) + private fun bindData() { + with(binding) { + bindRecycler() + bindFirebase() + bindManagerVariant() + bindClearFiles() + bindManagerTheme() + bindManagerAccentColor() + bindManagerLanguage() + selectApps.setOnClickListener { showDialogRefl() } + } + } - binding.notificationsRecycler.apply { + private fun FragmentSettingsBinding.bindRecycler() { + notificationsRecycler.apply { layoutManager = LinearLayoutManager(requireActivity()) adapter = GetNotifAdapter(requireActivity()) } + } - binding.firebase.setOnCheckedListener { _, isChecked -> + private fun FragmentSettingsBinding.bindFirebase() { + firebase.setOnCheckedListener { _, isChecked -> FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(isChecked) FirebasePerformance.getInstance().isPerformanceCollectionEnabled = isChecked FirebaseAnalytics.getInstance(requireActivity()).setAnalyticsCollectionEnabled(isChecked) } + } - binding.managerVariant.apply { + private fun FragmentSettingsBinding.bindManagerVariant() { + managerVariant.apply { prefs.getString("vanced_variant", "nonroot")?.let { setSummary(it) } - setOnClickListener { - ManagerVariantDialog().show(requireActivity().supportFragmentManager, "") - } + setOnClickListener { showDialogRefl() } } - - binding.clearFiles.setOnClickListener { + } + private fun FragmentSettingsBinding.bindClearFiles() { + clearFiles.setOnClickListener { with(requireActivity()) { listOf("vanced/nonroot", "vanced/root", "music/nonroot", "music/root", "microg").forEach { dir -> File(getExternalFilesDir(dir)?.path.toString()).deleteRecursively() @@ -61,47 +88,43 @@ class SettingsFragment : Fragment() { Toast.makeText(this, getString(R.string.cleared_files), Toast.LENGTH_SHORT).show() } } + } + private fun FragmentSettingsBinding.bindManagerTheme() { val themePref = prefs.getString("manager_theme", "System Default") - binding.managerTheme.apply { + managerTheme.apply { setSummary( - when (themePref) { - "Light" -> getString(R.string.theme_light) - "Dark" -> getString(R.string.theme_dark) - else -> getString(R.string.system_default) - } + when (themePref) { + LIGHT -> getString(R.string.theme_light) + DARK -> getString(R.string.theme_dark) + else -> getString(R.string.system_default) + } ) - setOnClickListener { - ManagerThemeDialog().show(requireActivity().supportFragmentManager, "") - } + setOnClickListener { showDialogRefl() } } + } + private fun FragmentSettingsBinding.bindManagerAccentColor() { val accentPref = prefs.getString("manager_accent", "Blue") - binding.managerAccentColor.apply { + managerAccentColor.apply { setSummary( - when (accentPref) { - "Blue" -> getString(R.string.accent_blue) - "Red" -> getString(R.string.accent_red) - "Green" -> getString(R.string.accent_green) - "Yellow" -> getString(R.string.accent_yellow) - else -> getString(R.string.accent_purple) - } + when (accentPref) { + BLUE -> getString(R.string.accent_blue) + RED -> getString(R.string.accent_red) + GREEN -> getString(R.string.accent_green) + YELLOW -> getString(R.string.accent_yellow) + else -> getString(R.string.accent_purple) + } ) - setOnClickListener { - ManagerAccentColorDialog().show(requireActivity().supportFragmentManager, "") - } + setOnClickListener { showDialogRefl() } } + } + private fun FragmentSettingsBinding.bindManagerLanguage() { val langPref = prefs.getString("manager_lang", "System Default") - binding.managerLanguage.apply { - setSummary(getLanguageFormat(requireActivity(), langPref!!)) - setOnClickListener { - ManagerLanguageDialog().show(requireActivity().supportFragmentManager, "") - } - } - - binding.selectApps.setOnClickListener { - SelectAppsDialog().show(requireActivity().supportFragmentManager, "") + managerLanguage.apply { + setSummary(getLanguageFormat(requireActivity(), requireNotNull(langPref))) + setOnClickListener { showDialogRefl() } } } @@ -113,5 +136,4 @@ class SettingsFragment : Fragment() { } super.onCreateOptionsMenu(menu, inflater) } - } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index c7712e1b..61dbd66e 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -1,64 +1,63 @@ - + - + android:layout_height="match_parent" + android:orientation="vertical" + android:paddingHorizontal="8dp" + android:paddingTop="16dp"> - + android:layout_height="wrap_content" + android:background="@drawable/category_background" + app:category_title="@string/category_behaviour"> - + app:switch_def_value="true" + app:switch_key="@{@string/use_custom_tabs}" + app:switch_summary="@string/link_custom_tabs" + app:switch_title="@string/link_title"/> - + - + - + - + - - - + + app:preference_title="@string/language_title"/> - + app:preference_title="@string/select_apps"/> - - - - - - - + +