Migrate music widget from livedata to flow
This commit is contained in:
parent
4a06158c6a
commit
5c690f7bc8
@ -102,6 +102,7 @@ dependencies {
|
|||||||
implementation(libs.androidx.browser)
|
implementation(libs.androidx.browser)
|
||||||
|
|
||||||
implementation(libs.androidx.lifecycle.viewmodelcompose)
|
implementation(libs.androidx.lifecycle.viewmodelcompose)
|
||||||
|
implementation(libs.androidx.lifecycle.runtimecompose)
|
||||||
|
|
||||||
implementation(libs.jsoup)
|
implementation(libs.jsoup)
|
||||||
|
|
||||||
|
|||||||
@ -36,11 +36,9 @@ import androidx.compose.material3.IconButton
|
|||||||
import androidx.compose.material3.LinearProgressIndicator
|
import androidx.compose.material3.LinearProgressIndicator
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Slider
|
import androidx.compose.material3.Slider
|
||||||
import androidx.compose.material3.SliderDefaults
|
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.livedata.observeAsState
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
@ -56,8 +54,8 @@ import androidx.compose.ui.layout.onGloballyPositioned
|
|||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.DpSize
|
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import de.mm20.launcher2.music.PlaybackState
|
import de.mm20.launcher2.music.PlaybackState
|
||||||
import de.mm20.launcher2.ui.R
|
import de.mm20.launcher2.ui.R
|
||||||
@ -72,20 +70,20 @@ fun MusicWidget() {
|
|||||||
|
|
||||||
val viewModel: MusicWidgetVM = viewModel()
|
val viewModel: MusicWidgetVM = viewModel()
|
||||||
|
|
||||||
val albumArt by viewModel.albumArt.observeAsState()
|
val albumArt by viewModel.albumArt.collectAsStateWithLifecycle(null)
|
||||||
val title by viewModel.title.observeAsState()
|
val title by viewModel.title.collectAsStateWithLifecycle(null)
|
||||||
val artist by viewModel.artist.observeAsState()
|
val artist by viewModel.artist.collectAsStateWithLifecycle(null)
|
||||||
val playbackState by viewModel.playbackState.observeAsState()
|
val playbackState by viewModel.playbackState.collectAsStateWithLifecycle(PlaybackState.Stopped)
|
||||||
val position by viewModel.position.observeAsState()
|
val position by viewModel.position.collectAsStateWithLifecycle(null)
|
||||||
val duration by viewModel.duration.observeAsState()
|
val duration by viewModel.duration.collectAsStateWithLifecycle(null)
|
||||||
|
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
) {
|
) {
|
||||||
val hasPermission by viewModel.hasPermission.observeAsState()
|
val hasPermission by viewModel.hasPermission.collectAsStateWithLifecycle(true)
|
||||||
AnimatedVisibility(hasPermission == false) {
|
AnimatedVisibility(!hasPermission) {
|
||||||
MissingPermissionBanner(
|
MissingPermissionBanner(
|
||||||
modifier = Modifier.padding(16.dp),
|
modifier = Modifier.padding(16.dp),
|
||||||
text = stringResource(R.string.missing_permission_music_widget),
|
text = stringResource(R.string.missing_permission_music_widget),
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import android.app.PendingIntent
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.asLiveData
|
import androidx.lifecycle.asLiveData
|
||||||
@ -12,6 +13,8 @@ import de.mm20.launcher2.music.MusicService
|
|||||||
import de.mm20.launcher2.music.PlaybackState
|
import de.mm20.launcher2.music.PlaybackState
|
||||||
import de.mm20.launcher2.permissions.PermissionGroup
|
import de.mm20.launcher2.permissions.PermissionGroup
|
||||||
import de.mm20.launcher2.permissions.PermissionsManager
|
import de.mm20.launcher2.permissions.PermissionsManager
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.map
|
||||||
import org.koin.core.component.KoinComponent
|
import org.koin.core.component.KoinComponent
|
||||||
import org.koin.core.component.inject
|
import org.koin.core.component.inject
|
||||||
|
|
||||||
@ -19,14 +22,14 @@ class MusicWidgetVM: ViewModel(), KoinComponent {
|
|||||||
private val musicService: MusicService by inject()
|
private val musicService: MusicService by inject()
|
||||||
private val permissionsManager: PermissionsManager by inject()
|
private val permissionsManager: PermissionsManager by inject()
|
||||||
|
|
||||||
val title: LiveData<String?> = musicService.title.asLiveData()
|
val title: Flow<String?> = musicService.title
|
||||||
val artist: LiveData<String?> = musicService.artist.asLiveData()
|
val artist: Flow<String?> = musicService.artist
|
||||||
val albumArt: LiveData<Bitmap?> = musicService.albumArt.asLiveData()
|
val albumArt: Flow<Bitmap?> = musicService.albumArt
|
||||||
val playbackState: LiveData<PlaybackState> = musicService.playbackState.asLiveData()
|
val playbackState: Flow<PlaybackState> = musicService.playbackState
|
||||||
val duration: LiveData<Long?> = musicService.duration.asLiveData()
|
val duration: Flow<Long?> = musicService.duration
|
||||||
val position: LiveData<Long?> = musicService.position.asLiveData()
|
val position: Flow<Long?> = musicService.position
|
||||||
|
|
||||||
val hasPermission = permissionsManager.hasPermission(PermissionGroup.Notifications).asLiveData()
|
val hasPermission = permissionsManager.hasPermission(PermissionGroup.Notifications)
|
||||||
|
|
||||||
val currentPlayerPackage
|
val currentPlayerPackage
|
||||||
get() = musicService.lastPlayerPackage
|
get() = musicService.lastPlayerPackage
|
||||||
|
|||||||
@ -55,7 +55,7 @@ dependencyResolutionManagement {
|
|||||||
library("androidx.compose.material3", "androidx.compose.material3", "material3")
|
library("androidx.compose.material3", "androidx.compose.material3", "material3")
|
||||||
.version("1.1.0-alpha06")
|
.version("1.1.0-alpha06")
|
||||||
|
|
||||||
version("androidx.lifecycle", "2.6.0-alpha04")
|
version("androidx.lifecycle", "2.6.0-beta01")
|
||||||
library("androidx.lifecycle.viewmodel", "androidx.lifecycle", "lifecycle-viewmodel-ktx")
|
library("androidx.lifecycle.viewmodel", "androidx.lifecycle", "lifecycle-viewmodel-ktx")
|
||||||
.versionRef("androidx.lifecycle")
|
.versionRef("androidx.lifecycle")
|
||||||
library("androidx.lifecycle.livedata", "androidx.lifecycle", "lifecycle-livedata-ktx")
|
library("androidx.lifecycle.livedata", "androidx.lifecycle", "lifecycle-livedata-ktx")
|
||||||
@ -66,6 +66,8 @@ dependencyResolutionManagement {
|
|||||||
.versionRef("androidx.lifecycle")
|
.versionRef("androidx.lifecycle")
|
||||||
library("androidx.lifecycle.viewmodelcompose", "androidx.lifecycle", "lifecycle-viewmodel-compose")
|
library("androidx.lifecycle.viewmodelcompose", "androidx.lifecycle", "lifecycle-viewmodel-compose")
|
||||||
.versionRef("androidx.lifecycle")
|
.versionRef("androidx.lifecycle")
|
||||||
|
library("androidx.lifecycle.runtimecompose", "androidx.lifecycle", "lifecycle-runtime-compose")
|
||||||
|
.versionRef("androidx.lifecycle")
|
||||||
bundle(
|
bundle(
|
||||||
"androidx.lifecycle",
|
"androidx.lifecycle",
|
||||||
listOf(
|
listOf(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user