MainActivity.kt 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package com.sduduzog.slimlauncher
  2. import android.content.SharedPreferences
  3. import android.content.pm.PackageManager
  4. import android.content.res.Resources
  5. import android.os.Bundle
  6. import androidx.appcompat.app.AppCompatActivity
  7. import androidx.lifecycle.ViewModelProviders
  8. import androidx.navigation.NavController
  9. import androidx.navigation.NavDestination
  10. import androidx.navigation.Navigation.findNavController
  11. import com.sduduzog.slimlauncher.ui.main.MainViewModel
  12. class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener, NavController.OnNavigatedListener {
  13. private lateinit var settings: SharedPreferences
  14. private val label = "main_fragment"
  15. private lateinit var currentLabel: String
  16. private lateinit var viewModel: MainViewModel
  17. private lateinit var navigator: NavController
  18. var onBackPressedListener: OnBackPressedListener? = null
  19. var dispatcher: Subject = object : Subject() {
  20. var observers: MutableSet<Observer> = mutableSetOf()
  21. override fun attachObserver(o: Observer) {
  22. observers.add(o)
  23. }
  24. override fun detachObserver(o: Observer) {
  25. observers.remove(o)
  26. }
  27. override fun notifyObservers() {
  28. for (o in observers) {
  29. o.update("onBackPressed")
  30. }
  31. }
  32. }
  33. override fun onCreate(savedInstanceState: Bundle?) {
  34. super.onCreate(savedInstanceState)
  35. setContentView(R.layout.main_activity)
  36. settings = getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
  37. settings.registerOnSharedPreferenceChangeListener(this)
  38. navigator = findNavController(this, R.id.nav_host_fragment)
  39. navigator.addOnNavigatedListener(this)
  40. viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
  41. }
  42. override fun onStart() {
  43. super.onStart()
  44. viewModel.refreshApps()
  45. }
  46. override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, s: String?) {
  47. if (s.equals(getString(R.string.prefs_settings_key_theme), true)) {
  48. recreate()
  49. }
  50. }
  51. override fun getTheme(): Resources.Theme {
  52. val theme = super.getTheme()
  53. settings = getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
  54. val active = settings.getInt(getString(R.string.prefs_settings_key_theme), 0)
  55. theme.applyStyle(resolveTheme(active), true)
  56. return theme
  57. }
  58. override fun onBackPressed() {
  59. dispatcher.notifyObservers()
  60. if (currentLabel != label)
  61. super.onBackPressed()
  62. else onBackPressedListener?.onBackPress()
  63. }
  64. override fun onNavigated(controller: NavController, destination: NavDestination) {
  65. currentLabel = destination.label.toString()
  66. }
  67. override fun onRequestPermissionsResult(requestCode: Int,
  68. permissions: Array<String>, grantResults: IntArray) {
  69. when (requestCode) {
  70. REQUEST_PHONE_CALL -> {
  71. // If request is cancelled, the result arrays are empty.
  72. if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  73. navigator.navigate(R.id.action_mainFragment_to_dialerFragment)
  74. } else {
  75. // Do nothing
  76. }
  77. return
  78. }
  79. }// other 'case' lines to check for other
  80. // permissions this app might request
  81. }
  82. companion object {
  83. fun resolveTheme(i: Int): Int {
  84. when (i) {
  85. 1 -> {
  86. return R.style.AppDarkTheme
  87. }
  88. 2 -> {
  89. return R.style.AppGreyTheme
  90. }
  91. 3 -> {
  92. return R.style.AppTealTheme
  93. }
  94. 4 -> {
  95. return R.style.AppCandyTheme
  96. }
  97. 5 -> {
  98. return R.style.AppPinkTheme
  99. }
  100. }
  101. return R.style.AppTheme
  102. }
  103. const val REQUEST_PHONE_CALL = 1
  104. }
  105. interface OnBackPressedListener {
  106. fun onBackPress()
  107. fun onBackPressed()
  108. }
  109. }