MainActivity.kt 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package com.sduduzog.slimlauncher
  2. import android.content.SharedPreferences
  3. import android.content.res.Resources
  4. import android.os.Bundle
  5. import android.view.View
  6. import androidx.appcompat.app.AppCompatActivity
  7. import androidx.navigation.NavController
  8. import androidx.navigation.Navigation.findNavController
  9. import com.sduduzog.slimlauncher.utils.BaseFragment
  10. import com.sduduzog.slimlauncher.utils.HomeWatcher
  11. class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener, HomeWatcher.OnHomePressedListener {
  12. private lateinit var settings: SharedPreferences
  13. private lateinit var navigator: NavController
  14. private lateinit var homeWatcher: HomeWatcher
  15. private val subscribers: MutableSet<BaseFragment> = mutableSetOf()
  16. fun attachSubscriber(s: BaseFragment) {
  17. subscribers.add(s)
  18. }
  19. fun detachSubscriber(s: BaseFragment) {
  20. subscribers.remove(s)
  21. }
  22. private fun dispatchBack() {
  23. for (s in subscribers) if (s.onBack()) return
  24. completeBackAction()
  25. }
  26. private fun dispatchHome() {
  27. for (s in subscribers) s.onHome()
  28. }
  29. override fun onCreate(savedInstanceState: Bundle?) {
  30. super.onCreate(savedInstanceState)
  31. setContentView(R.layout.main_activity)
  32. settings = getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
  33. settings.registerOnSharedPreferenceChangeListener(this)
  34. navigator = findNavController(this, R.id.nav_host_fragment)
  35. homeWatcher = HomeWatcher(this)
  36. homeWatcher.setOnHomePressedListener(this)
  37. }
  38. override fun onResume() {
  39. super.onResume()
  40. overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
  41. toggleStatusBar()
  42. }
  43. override fun onStart() {
  44. super.onStart()
  45. homeWatcher.startWatch()
  46. }
  47. override fun onStop() {
  48. super.onStop()
  49. homeWatcher.stopWatch()
  50. }
  51. override fun onWindowFocusChanged(hasFocus: Boolean) {
  52. super.onWindowFocusChanged(hasFocus)
  53. if (hasFocus) toggleStatusBar()
  54. }
  55. override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, s: String?) {
  56. if (s.equals(getString(R.string.prefs_settings_key_theme), true)) {
  57. recreate()
  58. }
  59. if (s.equals(getString(R.string.prefs_settings_key_toggle_status_bar), true)) {
  60. toggleStatusBar()
  61. }
  62. }
  63. override fun getTheme(): Resources.Theme {
  64. val theme = super.getTheme()
  65. settings = getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
  66. val active = settings.getInt(getString(R.string.prefs_settings_key_theme), 0)
  67. theme.applyStyle(resolveTheme(active), true)
  68. return theme
  69. }
  70. override fun onBackPressed() {
  71. dispatchBack()
  72. }
  73. override fun onHomePressed() {
  74. dispatchHome()
  75. navigator.popBackStack(R.id.homeFragment, false)
  76. }
  77. private fun showSystemUI() {
  78. window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE)
  79. }
  80. private fun hideSystemUI() {
  81. window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
  82. or View.SYSTEM_UI_FLAG_FULLSCREEN)
  83. }
  84. private fun toggleStatusBar() {
  85. val isHidden = settings.getBoolean(getString(R.string.prefs_settings_key_toggle_status_bar), false)
  86. if (isHidden) {
  87. hideSystemUI()
  88. } else {
  89. showSystemUI()
  90. }
  91. }
  92. companion object {
  93. fun resolveTheme(i: Int): Int {
  94. return when (i) {
  95. 1 -> R.style.AppDarkTheme
  96. 2 -> R.style.AppGreyTheme
  97. 3 -> R.style.AppTealTheme
  98. 4 -> R.style.AppCandyTheme
  99. 5 -> R.style.AppPinkTheme
  100. else -> R.style.AppTheme
  101. }
  102. }
  103. }
  104. private fun completeBackAction() {
  105. super.onBackPressed()
  106. }
  107. }