2020-03-27 20:36:02 +01:00
/ *
2020-04-19 23:04:05 +02:00
* SPDX - License - Identifier : MPL - 2.0
2020-03-27 20:36:02 +01:00
* Copyright © 2020 Skyline Team and Contributors ( https : //github.com/skyline-emu/)
* /
2019-12-02 14:39:08 +01:00
package emu.skyline
import android.os.Bundle
2020-05-28 07:39:36 +02:00
import android.view.KeyEvent
2021-04-17 12:41:38 +02:00
import android.view.View
2019-12-02 14:39:08 +01:00
import androidx.appcompat.app.AppCompatActivity
2021-08-27 18:47:47 +02:00
import androidx.preference.Preference
2019-12-02 14:39:08 +01:00
import androidx.preference.PreferenceFragmentCompat
2021-01-31 22:11:26 +01:00
import emu.skyline.databinding.SettingsActivityBinding
2021-08-27 18:47:47 +02:00
import emu.skyline.preference.IntegerListPreference
2019-12-02 14:39:08 +01:00
class SettingsActivity : AppCompatActivity ( ) {
2021-01-31 22:11:26 +01:00
val binding by lazy { SettingsActivityBinding . inflate ( layoutInflater ) }
2020-04-12 22:29:19 +02:00
/ * *
* This is the instance of [ PreferenceFragment ] that is shown inside [ R . id . settings ]
* /
2020-08-16 17:45:46 +02:00
private val preferenceFragment = PreferenceFragment ( )
2019-12-02 14:39:08 +01:00
2020-05-28 21:27:25 +02:00
/ * *
* This initializes all of the elements in the activity and displays the settings fragment
2020-04-12 22:29:19 +02:00
* /
2020-04-24 13:39:13 +02:00
override fun onCreate ( savedInstanceState : Bundle ? ) {
2019-12-02 14:39:08 +01:00
super . onCreate ( savedInstanceState )
2020-04-12 22:29:19 +02:00
2021-01-31 22:11:26 +01:00
setContentView ( binding . root )
2020-04-12 22:29:19 +02:00
2021-01-31 22:11:26 +01:00
setSupportActionBar ( binding . titlebar . toolbar )
2020-04-12 22:29:19 +02:00
supportActionBar ?. setDisplayHomeAsUpEnabled ( true )
2021-04-17 12:41:38 +02:00
window . decorView . findViewById < View > ( android . R . id . content ) . viewTreeObserver . addOnTouchModeChangeListener { isInTouchMode ->
if ( !is InTouchMode ) binding . titlebar . appBarLayout . setExpanded ( false )
}
2019-12-02 14:39:08 +01:00
supportFragmentManager
2021-02-26 12:41:57 +01:00
. beginTransaction ( )
. replace ( R . id . settings , preferenceFragment )
. commit ( )
2019-12-02 14:39:08 +01:00
}
2020-04-12 22:29:19 +02:00
/ * *
2020-09-14 15:53:40 +02:00
* This fragment is used to display all of the preferences
2020-04-12 22:29:19 +02:00
* /
2019-12-02 14:39:08 +01:00
class PreferenceFragment : PreferenceFragmentCompat ( ) {
2021-08-27 18:47:47 +02:00
companion object {
private const val DIALOG _FRAGMENT _TAG = " androidx.preference.PreferenceFragment.DIALOG "
}
2019-12-02 14:39:08 +01:00
2020-04-12 22:29:19 +02:00
/ * *
* This constructs the preferences from [ R . xml . preferences ]
* /
2020-04-24 13:39:13 +02:00
override fun onCreatePreferences ( savedInstanceState : Bundle ? , rootKey : String ? ) {
2019-12-02 14:39:08 +01:00
setPreferencesFromResource ( R . xml . preferences , rootKey )
}
2021-08-27 18:47:47 +02:00
2022-03-06 17:02:52 +01:00
override fun onDisplayPreferenceDialog ( preference : Preference ) {
2021-08-27 18:47:47 +02:00
if ( preference is IntegerListPreference ) {
2021-08-29 15:27:31 +02:00
// Check if dialog is already showing
if ( parentFragmentManager . findFragmentByTag ( DIALOG _FRAGMENT _TAG ) != null )
2021-08-27 18:47:47 +02:00
return
2021-10-26 07:15:49 +02:00
val dialogFragment = IntegerListPreference . IntegerListPreferenceDialogFragmentCompat . newInstance ( preference . getKey ( ) )
@Suppress ( " DEPRECATION " )
dialogFragment . setTargetFragment ( this , 0 ) // androidx.preference.PreferenceDialogFragmentCompat depends on the target fragment being set correctly even though it's deprecated
dialogFragment . show ( parentFragmentManager , DIALOG _FRAGMENT _TAG )
2021-08-27 18:47:47 +02:00
} else {
super . onDisplayPreferenceDialog ( preference )
}
}
2019-12-02 14:39:08 +01:00
}
2020-05-28 07:39:36 +02:00
/ * *
* This handles on calling [ onBackPressed ] when [ KeyEvent . KEYCODE _BUTTON _B ] is lifted
* /
override fun onKeyUp ( keyCode : Int , event : KeyEvent ? ) : Boolean {
if ( keyCode == KeyEvent . KEYCODE _BUTTON _B ) {
onBackPressed ( )
return true
}
return super . onKeyUp ( keyCode , event )
}
2021-01-30 14:59:11 +01:00
override fun finish ( ) {
setResult ( RESULT _OK )
super . finish ( )
}
2019-12-02 14:39:08 +01:00
}