Browse Source
Merge pull request #13054 from t895/lifecycle-utils
Merge pull request #13054 from t895/lifecycle-utils
android: Create lifecycle utility to simplify common StateFlow operationsnce_cpp
committed by
GitHub
20 changed files with 331 additions and 630 deletions
-
11src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GamePropertiesAdapter.kt
-
11src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/HomeSettingAdapter.kt
-
39src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/InputProfileDialogFragment.kt
-
55src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt
-
21src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt
-
99src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragment.kt
-
17src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsSearchFragment.kt
-
91src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AddonsFragment.kt
-
18src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverManagerFragment.kt
-
13src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriversLoadingDialogFragment.kt
-
193src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
-
12src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/GameFoldersFragment.kt
-
36src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/GamePropertiesFragment.kt
-
16src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/InstallableFragment.kt
-
99src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/ProgressDialogFragment.kt
-
41src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SearchFragment.kt
-
37src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SetupFragment.kt
-
69src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/GamesFragment.kt
-
45src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
-
38src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/LifecycleUtils.kt
@ -0,0 +1,38 @@ |
|||||
|
// SPDX-FileCopyrightText: 2024 yuzu Emulator Project |
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later |
||||
|
|
||||
|
package org.yuzu.yuzu_emu.utils |
||||
|
|
||||
|
import androidx.lifecycle.Lifecycle |
||||
|
import androidx.lifecycle.LifecycleOwner |
||||
|
import androidx.lifecycle.lifecycleScope |
||||
|
import androidx.lifecycle.repeatOnLifecycle |
||||
|
import kotlinx.coroutines.flow.Flow |
||||
|
import kotlinx.coroutines.flow.MutableStateFlow |
||||
|
import kotlinx.coroutines.launch |
||||
|
|
||||
|
/** |
||||
|
* Collects this [Flow] with a given [LifecycleOwner]. |
||||
|
* @param scope [LifecycleOwner] that this [Flow] will be collected with. |
||||
|
* @param repeatState When to repeat collection on this [Flow]. |
||||
|
* @param resetState Optional lambda to reset state of an underlying [MutableStateFlow] after |
||||
|
* [stateCollector] has been run. |
||||
|
* @param stateCollector Lambda that receives new state. |
||||
|
*/ |
||||
|
inline fun <reified T> Flow<T>.collect( |
||||
|
scope: LifecycleOwner, |
||||
|
repeatState: Lifecycle.State = Lifecycle.State.CREATED, |
||||
|
crossinline resetState: () -> Unit = {}, |
||||
|
crossinline stateCollector: (state: T) -> Unit |
||||
|
) { |
||||
|
scope.apply { |
||||
|
lifecycleScope.launch { |
||||
|
repeatOnLifecycle(repeatState) { |
||||
|
this@collect.collect { |
||||
|
stateCollector(it) |
||||
|
resetState() |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue