Skip to content

Commit d074a14

Browse files
authored
fix: Fix lateinit property eventHandler has not been initialized (#25)
1 parent 119f803 commit d074a14

4 files changed

Lines changed: 30 additions & 43 deletions

File tree

app/src/main/java/app/revanced/manager/MainActivity.kt

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -117,31 +117,11 @@ class MainActivity : ComponentActivity() {
117117
}
118118
}
119119

120-
// Work around to solve issue of the settings menu needing to trigger an event
121-
// in the main screen. But since the setting menu is not a child of the main screen,
122-
// it's tricky passing the event from one UI sibling to another.
123-
// Use this event work around to propagate the change to the main screen.
124-
class PreReleaseChangedModel : ViewModel() {
125-
private lateinit var eventHandler: (suspend (Boolean) -> Unit)
126-
127-
fun setEventHandler(handler: suspend (Boolean) -> Unit) {
128-
eventHandler = handler
129-
}
130-
131-
fun preReleaseChanged(preReleaseValue: Boolean) {
132-
viewModelScope.launch {
133-
eventHandler.invoke(preReleaseValue)
134-
}
135-
}
136-
}
137-
138120
@Composable
139121
private fun ReVancedManager(vm: MainViewModel) {
140122
val navController = rememberNavController()
141123
val prefs: PreferencesManager = koinInject()
142124
val useMorpheHomeScreen by prefs.useMorpheHomeScreen.getAsState()
143-
val preReleaseChangedModel = PreReleaseChangedModel()
144-
145125
val startDest = if (useMorpheHomeScreen) MorpheHomeScreen else Dashboard
146126

147127
EventEffect(vm.appSelectFlow) { params ->
@@ -183,8 +163,7 @@ private fun ReVancedManager(vm: MainViewModel) {
183163
},
184164
dashboardViewModel = dashboardViewModel,
185165
usingMountInstallState = usingMountInstallState,
186-
bundleUpdateProgress = bundleUpdateProgress,
187-
preReleaseChangedModel = preReleaseChangedModel
166+
bundleUpdateProgress = bundleUpdateProgress
188167
)
189168
}
190169

@@ -473,8 +452,7 @@ private fun ReVancedManager(vm: MainViewModel) {
473452
// Morphe Simplified Settings Screen
474453
composable<MorpheSettings> {
475454
MorpheSettingsScreen(
476-
onBackClick = navController::popBackStack,
477-
preReleaseChangedModel = preReleaseChangedModel
455+
onBackClick = navController::popBackStack
478456
)
479457
}
480458
}

app/src/main/java/app/revanced/manager/ui/screen/MorpheHomeScreen.kt

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import androidx.compose.ui.res.stringResource
1717
import androidx.compose.ui.unit.dp
1818
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1919
import app.morphe.manager.R
20-
import app.revanced.manager.PreReleaseChangedModel
2120
import app.revanced.manager.domain.bundles.RemotePatchBundle
2221
import app.revanced.manager.domain.manager.InstallerPreferenceTokens
2322
import app.revanced.manager.domain.manager.PreferencesManager
@@ -62,7 +61,6 @@ fun MorpheHomeScreen(
6261
prefs: PreferencesManager = koinInject(),
6362
usingMountInstallState: MutableState<Boolean>,
6463
bundleUpdateProgress: PatchBundleRepository.BundleUpdateProgress?,
65-
preReleaseChangedModel: PreReleaseChangedModel,
6664
generalViewModel: GeneralSettingsViewModel = koinViewModel()
6765
) {
6866
val context = LocalContext.current
@@ -99,13 +97,7 @@ fun MorpheHomeScreen(
9997
bundleUpdateInProgress = true
10098
homeState.isRefreshingBundle = true
10199
try {
102-
dashboardViewModel.patchBundleRepository.updateOnlyMorpheBundleWithResult(
103-
showProgress = true,
104-
showToast = false
105-
)
106-
107-
// Also clear changelog cache after bundle update
108-
(homeState.apiBundle as? RemotePatchBundle)?.clearChangelogCache()
100+
dashboardViewModel.updateMorpheBundleWithChangelogClear()
109101
} finally {
110102
delay(500)
111103
bundleUpdateInProgress = false
@@ -114,11 +106,6 @@ fun MorpheHomeScreen(
114106
}
115107
}
116108

117-
preReleaseChangedModel.setEventHandler { usePreRelease ->
118-
prefs.usePatchesPrereleases.update(usePreRelease)
119-
updateMorpheBundleAndUI()
120-
}
121-
122109
// Show manager update available dialog
123110
if (homeState.shouldShowUpdateDialog) {
124111
ManagerUpdateAvailableDialog(

app/src/main/java/app/revanced/manager/ui/screen/MorpheSettingsScreen.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,21 @@ import androidx.compose.ui.unit.dp
3030
import androidx.lifecycle.compose.collectAsStateWithLifecycle
3131
import app.morphe.manager.BuildConfig
3232
import app.morphe.manager.R
33-
import app.revanced.manager.PreReleaseChangedModel
33+
import app.revanced.manager.domain.manager.PreferencesManager
3434
import app.revanced.manager.network.downloader.DownloaderPluginState
3535
import app.revanced.manager.ui.component.ExceptionViewerDialog
3636
import app.revanced.manager.ui.component.morphe.settings.*
3737
import app.revanced.manager.ui.component.morphe.shared.AnimatedBackground
3838
import app.revanced.manager.ui.component.morphe.shared.BackgroundType
39+
import app.revanced.manager.ui.viewmodel.DashboardViewModel
3940
import app.revanced.manager.ui.viewmodel.DownloadsViewModel
4041
import app.revanced.manager.ui.viewmodel.GeneralSettingsViewModel
4142
import app.revanced.manager.ui.viewmodel.ImportExportViewModel
4243
import app.revanced.manager.util.toast
4344
import com.google.accompanist.drawablepainter.rememberDrawablePainter
4445
import kotlinx.coroutines.launch
4546
import org.koin.androidx.compose.koinViewModel
47+
import org.koin.compose.koinInject
4648

4749
/**
4850
* MorpheSettingsScreen - Simplified settings interface
@@ -54,16 +56,17 @@ import org.koin.androidx.compose.koinViewModel
5456
@Composable
5557
fun MorpheSettingsScreen(
5658
onBackClick: () -> Unit,
57-
preReleaseChangedModel: PreReleaseChangedModel,
5859
generalViewModel: GeneralSettingsViewModel = koinViewModel(),
5960
downloadsViewModel: DownloadsViewModel = koinViewModel(),
60-
importExportViewModel: ImportExportViewModel = koinViewModel()
61+
importExportViewModel: ImportExportViewModel = koinViewModel(),
62+
dashboardViewModel: DashboardViewModel = koinViewModel()
6163
) {
6264
val context = LocalContext.current
6365
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
6466
val scrollState = rememberScrollState()
6567
val coroutineScope = rememberCoroutineScope()
6668
val isLandscape = LocalConfiguration.current.orientation == Configuration.ORIENTATION_LANDSCAPE
69+
val prefs: PreferencesManager = koinInject()
6770
val usePrereleases = generalViewModel.prefs.usePatchesPrereleases.getAsState()
6871

6972
// Appearance settings
@@ -217,7 +220,10 @@ fun MorpheSettingsScreen(
217220
UpdatesSection(
218221
usePrereleases = usePrereleases,
219222
onPreReleaseChanged = { newValue ->
220-
preReleaseChangedModel.preReleaseChanged(newValue)
223+
coroutineScope.launch {
224+
prefs.usePatchesPrereleases.update(newValue)
225+
dashboardViewModel.updateMorpheBundleWithChangelogClear()
226+
}
221227
}
222228
)
223229
}
@@ -279,7 +285,10 @@ fun MorpheSettingsScreen(
279285
UpdatesSection(
280286
usePrereleases = usePrereleases,
281287
onPreReleaseChanged = { newValue ->
282-
preReleaseChangedModel.preReleaseChanged(newValue)
288+
coroutineScope.launch {
289+
prefs.usePatchesPrereleases.update(newValue)
290+
dashboardViewModel.updateMorpheBundleWithChangelogClear()
291+
}
283292
}
284293
)
285294

app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import app.revanced.manager.network.api.ReVancedAPI
2323
import app.revanced.manager.util.PM
2424
import app.revanced.manager.util.uiSafe
2525
import app.morphe.manager.R
26+
import app.revanced.manager.domain.bundles.RemotePatchBundle
2627
import app.revanced.manager.domain.installer.RootInstaller
2728
import app.revanced.manager.domain.repository.PatchBundleRepository.Companion.DEFAULT_SOURCE_UID
2829
import kotlinx.coroutines.NonCancellable
@@ -162,4 +163,16 @@ class DashboardViewModel(
162163
patchBundleRepository.createRemote(apiUrl, autoUpdate)
163164
}
164165
}
166+
167+
suspend fun updateMorpheBundleWithChangelogClear() {
168+
patchBundleRepository.updateOnlyMorpheBundleWithResult(
169+
showProgress = true,
170+
showToast = false
171+
)
172+
173+
// Clear changelog cache
174+
val sources = patchBundleRepository.sources.first()
175+
val apiBundle = sources.firstOrNull() as? RemotePatchBundle
176+
apiBundle?.clearChangelogCache()
177+
}
165178
}

0 commit comments

Comments
 (0)