Skip to content

Commit 545a392

Browse files
committed
refactor(ui): apply MainViewModel to PerfMainActivity and its fragments
1 parent 305bf2b commit 545a392

File tree

8 files changed

+59
-40
lines changed

8 files changed

+59
-40
lines changed

app/src/main/java/com/osfans/trime/ui/fragments/ConfFragment.kt

+4-7
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ import android.content.Context
44
import android.os.Bundle
55
import android.view.Menu
66
import androidx.core.view.forEach
7+
import androidx.fragment.app.activityViewModels
78
import androidx.preference.Preference
89
import androidx.preference.PreferenceFragmentCompat
910
import androidx.preference.SwitchPreferenceCompat
1011
import com.osfans.trime.R
1112
import com.osfans.trime.data.AppPrefs
1213
import com.osfans.trime.ui.components.ResetAssetsDialog
14+
import com.osfans.trime.ui.main.MainViewModel
1315
import com.osfans.trime.util.RimeUtils
1416
import com.osfans.trime.util.createLoadingDialog
1517
import com.osfans.trime.util.formatDateTime
@@ -20,17 +22,11 @@ import timber.log.Timber
2022

2123
class ConfFragment : PreferenceFragmentCompat(), CoroutineScope by MainScope() {
2224

25+
private val viewModel : MainViewModel by activityViewModels()
2326
private val prefs get() = AppPrefs.defaultInstance()
2427

2528
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
2629
addPreferencesFromResource(R.xml.conf_preference)
27-
28-
setHasOptionsMenu(true)
29-
}
30-
31-
override fun onPrepareOptionsMenu(menu: Menu) {
32-
menu.forEach { item -> item.isVisible = false }
33-
super.onPrepareOptionsMenu(menu)
3430
}
3531

3632
override fun onPreferenceTreeClick(preference: Preference?): Boolean {
@@ -62,6 +58,7 @@ class ConfFragment : PreferenceFragmentCompat(), CoroutineScope by MainScope() {
6258

6359
override fun onResume() {
6460
super.onResume()
61+
viewModel.disableTopOptionsMenu()
6562
setBackgroundSyncSummary(context)
6663
}
6764

app/src/main/java/com/osfans/trime/ui/fragments/KeyboardFragment.kt

+4-7
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,22 @@ import android.content.SharedPreferences
44
import android.os.Bundle
55
import android.view.Menu
66
import androidx.core.view.forEach
7+
import androidx.fragment.app.activityViewModels
78
import androidx.preference.Preference
89
import androidx.preference.PreferenceFragmentCompat
910
import com.osfans.trime.R
1011
import com.osfans.trime.core.Rime
1112
import com.osfans.trime.data.AppPrefs
1213
import com.osfans.trime.ime.core.Trime
1314
import com.osfans.trime.ui.components.SoundPickerDialog
15+
import com.osfans.trime.ui.main.MainViewModel
1416

1517
class KeyboardFragment :
1618
PreferenceFragmentCompat(),
1719
SharedPreferences.OnSharedPreferenceChangeListener {
20+
private val viewModel : MainViewModel by activityViewModels()
1821
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
1922
addPreferencesFromResource(R.xml.keyboard_preference)
20-
21-
setHasOptionsMenu(true)
22-
}
23-
24-
override fun onPrepareOptionsMenu(menu: Menu) {
25-
menu.forEach { item -> item.isVisible = false }
26-
super.onPrepareOptionsMenu(menu)
2723
}
2824

2925
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
@@ -61,6 +57,7 @@ class KeyboardFragment :
6157
}
6258
override fun onResume() {
6359
super.onResume()
60+
viewModel.disableTopOptionsMenu()
6461
preferenceScreen.sharedPreferences.registerOnSharedPreferenceChangeListener(this)
6562
}
6663

app/src/main/java/com/osfans/trime/ui/fragments/LooksFragment.kt

+7-5
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,24 @@ package com.osfans.trime.ui.fragments
33
import android.os.Bundle
44
import android.view.Menu
55
import androidx.core.view.forEach
6+
import androidx.fragment.app.activityViewModels
67
import androidx.preference.Preference
78
import androidx.preference.PreferenceFragmentCompat
89
import com.osfans.trime.R
910
import com.osfans.trime.ui.components.ColorPickerDialog
1011
import com.osfans.trime.ui.components.ThemePickerDialog
12+
import com.osfans.trime.ui.main.MainViewModel
1113

1214
class LooksFragment : PreferenceFragmentCompat() {
15+
private val viewModel : MainViewModel by activityViewModels()
16+
1317
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
1418
addPreferencesFromResource(R.xml.looks_preference)
15-
16-
setHasOptionsMenu(true)
1719
}
1820

19-
override fun onPrepareOptionsMenu(menu: Menu) {
20-
menu.forEach { item -> item.isVisible = false }
21-
super.onPrepareOptionsMenu(menu)
21+
override fun onResume() {
22+
super.onResume()
23+
viewModel.disableTopOptionsMenu()
2224
}
2325

2426
override fun onPreferenceTreeClick(preference: Preference?): Boolean {

app/src/main/java/com/osfans/trime/ui/fragments/OtherFragment.kt

+5-8
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,19 @@ import android.os.Bundle
88
import android.view.Menu
99
import androidx.appcompat.app.AppCompatDelegate
1010
import androidx.core.view.forEach
11+
import androidx.fragment.app.activityViewModels
1112
import androidx.preference.ListPreference
1213
import androidx.preference.PreferenceFragmentCompat
1314
import com.osfans.trime.R
1415
import com.osfans.trime.data.AppPrefs
1516
import com.osfans.trime.data.Config
1617
import com.osfans.trime.ime.core.Trime
18+
import com.osfans.trime.ui.main.MainViewModel
1719

1820
class OtherFragment :
1921
PreferenceFragmentCompat(),
2022
SharedPreferences.OnSharedPreferenceChangeListener {
23+
private val viewModel : MainViewModel by activityViewModels()
2124
private val prefs get() = AppPrefs.defaultInstance()
2225
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
2326
addPreferencesFromResource(R.xml.other_preference)
@@ -31,13 +34,6 @@ class OtherFragment :
3134
AppCompatDelegate.setDefaultNightMode(uiMode)
3235
true
3336
}
34-
35-
setHasOptionsMenu(true)
36-
}
37-
38-
override fun onPrepareOptionsMenu(menu: Menu) {
39-
menu.forEach { item -> item.isVisible = false }
40-
super.onPrepareOptionsMenu(menu)
4137
}
4238

4339
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
@@ -71,13 +67,14 @@ class OtherFragment :
7167

7268
override fun onResume() {
7369
super.onResume()
70+
viewModel.disableTopOptionsMenu()
7471
preferenceScreen.sharedPreferences.registerOnSharedPreferenceChangeListener(this)
7572
}
7673

7774
override fun onPause() {
78-
super.onPause()
7975
updateLauncherIconStatus()
8076
preferenceScreen.sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
77+
super.onPause()
8178
}
8279

8380
private fun updateLauncherIconStatus() {

app/src/main/java/com/osfans/trime/ui/fragments/PrefFragment.kt

+15
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,28 @@
11
package com.osfans.trime.ui.fragments
22

33
import android.os.Bundle
4+
import androidx.fragment.app.activityViewModels
45
import androidx.preference.Preference
56
import androidx.preference.PreferenceCategory
67
import androidx.preference.PreferenceFragmentCompat
78
import com.osfans.trime.R
89
import com.osfans.trime.ui.components.SchemaPickerDialog
10+
import com.osfans.trime.ui.main.MainViewModel
911

1012
class PrefFragment : PreferenceFragmentCompat() {
13+
14+
private val viewModel : MainViewModel by activityViewModels()
15+
16+
override fun onResume() {
17+
super.onResume()
18+
viewModel.enableTopOptionsMenu()
19+
}
20+
21+
override fun onPause() {
22+
viewModel.disableTopOptionsMenu()
23+
super.onPause()
24+
}
25+
1126
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
1227
val context = preferenceManager.context
1328
setPreferencesFromResource(R.xml.prefs, rootKey)

app/src/main/java/com/osfans/trime/ui/fragments/ToolkitFragment.kt

+8-5
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,18 @@ package com.osfans.trime.ui.fragments
33
import android.os.Bundle
44
import android.view.Menu
55
import androidx.core.view.forEach
6+
import androidx.fragment.app.activityViewModels
67
import androidx.preference.Preference
78
import androidx.preference.PreferenceFragmentCompat
89
import com.osfans.trime.R
10+
import com.osfans.trime.ui.main.MainViewModel
911
import com.osfans.trime.util.ShortcutUtils
1012

1113
@Suppress("unused")
1214
class ToolkitFragment : PreferenceFragmentCompat() {
15+
16+
private val viewModel : MainViewModel by activityViewModels()
17+
1318
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
1419
val context = preferenceManager.context
1520
val screen = preferenceManager.createPreferenceScreen(context)
@@ -24,12 +29,10 @@ class ToolkitFragment : PreferenceFragmentCompat() {
2429
}
2530
)
2631
preferenceScreen = screen
27-
28-
setHasOptionsMenu(true)
2932
}
3033

31-
override fun onPrepareOptionsMenu(menu: Menu) {
32-
menu.forEach { item -> item.isVisible = false }
33-
super.onPrepareOptionsMenu(menu)
34+
override fun onResume() {
35+
super.onResume()
36+
viewModel.disableTopOptionsMenu()
3437
}
3538
}

app/src/main/java/com/osfans/trime/ui/main/PrefMainActivity.kt

+15-7
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ import android.os.Bundle
1010
import android.provider.Settings
1111
import android.view.Menu
1212
import android.view.MenuItem
13-
import android.view.inputmethod.InputMethodManager
13+
import androidx.activity.viewModels
1414
import androidx.appcompat.app.AlertDialog
1515
import androidx.appcompat.app.AppCompatActivity
1616
import androidx.appcompat.app.AppCompatDelegate
17-
import androidx.appcompat.widget.Toolbar
1817
import androidx.core.app.ActivityCompat
18+
import androidx.core.view.forEach
1919
import androidx.fragment.app.Fragment
2020
import androidx.preference.Preference
2121
import androidx.preference.PreferenceFragmentCompat
@@ -43,10 +43,10 @@ class PrefMainActivity :
4343
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback,
4444
ActivityCompat.OnRequestPermissionsResultCallback,
4545
CoroutineScope by MainScope() {
46+
private val viewModel : MainViewModel by viewModels()
4647
private val prefs get() = AppPrefs.defaultInstance()
4748

4849
lateinit var binding: PrefActivityBinding
49-
lateinit var imeManager: InputMethodManager
5050

5151
override fun onCreate(savedInstanceState: Bundle?) {
5252
prefs.sync()
@@ -72,11 +72,16 @@ class PrefMainActivity :
7272
resources.getColor(R.color.windowBackground)
7373
)
7474
setContentView(binding.root)
75+
setSupportActionBar(binding.toolbar.toolbar)
7576

76-
val toolbar = findViewById<Toolbar>(R.id.toolbar)
77-
setSupportActionBar(toolbar)
78-
79-
imeManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
77+
viewModel.toolbarTitle.observe(this) {
78+
binding.toolbar.toolbar.title = it
79+
}
80+
viewModel.topOptionsMenu.observe(this) {
81+
binding.toolbar.toolbar.menu.forEach { m ->
82+
m.isVisible = it
83+
}
84+
}
8085

8186
if (savedInstanceState == null) {
8287
loadFragment(PrefFragment())
@@ -162,6 +167,9 @@ class PrefMainActivity :
162167

163168
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
164169
menuInflater.inflate(R.menu.preference_main_menu, menu)
170+
menu?.forEach {
171+
it.isVisible = viewModel.topOptionsMenu.value ?: true
172+
}
165173
return true
166174
}
167175

app/src/main/res/layout/pref_activity.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
android:layout_width="match_parent"
55
android:layout_height="match_parent">
66

7-
<include layout="@layout/toolbar" />
7+
<include android:id="@+id/toolbar" layout="@layout/toolbar" />
88

99
<FrameLayout
1010
android:id="@+id/preference"

0 commit comments

Comments
 (0)