Skip to content

Instantly share code, notes, and snippets.

View wojtek-kalicinski's full-sized avatar

Wojtek Kaliciński wojtek-kalicinski

View GitHub Profile
@wojtek-kalicinski
wojtek-kalicinski / ProfileViewModel.kt
Last active March 11, 2021 13:15
LiveData->StateFlow conversion
class ProfileViewModel : ViewModel() {
private val _name = MutableStateFlow("Ada")
private val _lastName = MutableStateFlow("Lovelace")
private val _likes = MutableStateFlow(0)
val name: StateFlow<String> = _name
val lastName: StateFlow<String> = _lastName
val likes: StateFlow<Int> = _likes
// popularity is exposed as StateFlow using a transformation and the stateIn operator.
-keep class com.example.myapplication.Person {
public java.lang.String name;
}
// app/build.gradle
android {
...
dynamicFeatures = [":camera", ":video", ":payment"]
}
// payment/build.gradle
dependencies {
implementation project(':app')
}
// camera/build.gradle
dependencies {
implementation project(':app')
}
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/nav_graph"
… />
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.dynamicfeatures.
fragment.DynamicNavHostFragment"
app:navGraph="@navigation/nav_graph"
… />
<navigation>
<fragment
app:moduleName="featureA"
android:name="full.path.to.MyFragment"/>
<activity
app:moduleName="featureB"
android:name="full.path.to.MyActivity"/>
</navigation>
dependencies {
def nav_version = "2.3.0-alpha04"
api "androidx.navigation:navigation-fragment-ktx:$nav_version"
api "androidx.navigation:navigation-ui-ktx:$nav_version"
api "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"
}
private val listener = SplitInstallStateUpdatedListener(
onRequiresConfirmation = { state -> // ← REQUIRED ARGUMENTS
// HANDLE CONFIRMATION DIALOG
},
onInstalled = {
// HANDLE INSTALLED STATE
},
onDownloading = { state -> // ← OPTIONAL ARGUMENTS
// SHOW PROGRESS
},
viewModelScope.launch {
manager.requestProgressFlow()
.filter { "myModule" in it.moduleNames }
.collect { state -> … }
}