MainActivity.kt 4.4 KB

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