package sushi.hardcore.droidfs import android.os.Build import android.os.Bundle import android.view.MenuItem import androidx.preference.ListPreference import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference import sushi.hardcore.droidfs.databinding.ActivitySettingsBinding import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder class SettingsActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = ActivitySettingsBinding.inflate(layoutInflater) setContentView(binding.root) supportActionBar?.setDisplayHomeAsUpEnabled(true) val screen = intent.extras?.getString("screen") ?: "main" val fragment = if (screen == "UnsafeFeaturesSettingsFragment") { UnsafeFeaturesSettingsFragment() } else { MainSettingsFragment() } supportFragmentManager .beginTransaction() .replace(R.id.settings, fragment) .commit() } override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId){ android.R.id.home -> { onBackPressed() //return to the previous fragment rather than the activity true } else -> super.onOptionsItemSelected(item) } } class MainSettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.root_preferences, rootKey) findPreference("theme")?.setOnPreferenceChangeListener { _, newValue -> (activity as BaseActivity).onThemeChanged(newValue as String) true } } } class UnsafeFeaturesSettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.unsafe_features_preferences, rootKey) findPreference("usf_fingerprint")?.setOnPreferenceChangeListener { _, checked -> if (checked as Boolean) { var errorMsg: String? = null if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { val reason = when (FingerprintProtector.canAuthenticate(requireContext())) { 0 -> null 1 -> R.string.keyguard_not_secure 2 -> R.string.no_hardware 3 -> R.string.hardware_unavailable 4 -> R.string.no_fingerprint else -> R.string.unknown_error } reason?.let { errorMsg = getString(R.string.fingerprint_error_msg, getString(it)) } } else { errorMsg = getString(R.string.error_marshmallow_required) } if (errorMsg == null) { true } else { CustomAlertDialogBuilder(requireContext(), (requireActivity() as BaseActivity).themeValue) .setTitle(R.string.error) .setMessage(errorMsg) .setPositiveButton(R.string.ok, null) .show() false } } else { true } } } } }