Rename MusicRepository -> MusicService
This commit is contained in:
parent
fc2e239dfa
commit
dbdce7bcab
@ -27,7 +27,7 @@ import androidx.compose.ui.platform.LocalContext
|
|||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import de.mm20.launcher2.music.MusicRepository
|
import de.mm20.launcher2.music.MusicService
|
||||||
import de.mm20.launcher2.music.PlaybackState
|
import de.mm20.launcher2.music.PlaybackState
|
||||||
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockWidgetLayout
|
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockWidgetLayout
|
||||||
import de.mm20.launcher2.ui.R
|
import de.mm20.launcher2.ui.R
|
||||||
@ -39,10 +39,10 @@ import org.koin.core.component.inject
|
|||||||
|
|
||||||
class MusicPartProvider : PartProvider, KoinComponent {
|
class MusicPartProvider : PartProvider, KoinComponent {
|
||||||
|
|
||||||
private val musicRepository: MusicRepository by inject()
|
private val musicService: MusicService by inject()
|
||||||
|
|
||||||
override fun getRanking(context: Context): Flow<Int> = channelFlow {
|
override fun getRanking(context: Context): Flow<Int> = channelFlow {
|
||||||
musicRepository.playbackState.collectLatest {
|
musicService.playbackState.collectLatest {
|
||||||
if (it == PlaybackState.Stopped) send(0)
|
if (it == PlaybackState.Stopped) send(0)
|
||||||
else send(50)
|
else send(50)
|
||||||
}
|
}
|
||||||
@ -52,9 +52,9 @@ class MusicPartProvider : PartProvider, KoinComponent {
|
|||||||
override fun Component(layout: ClockWidgetLayout) {
|
override fun Component(layout: ClockWidgetLayout) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
||||||
val title by musicRepository.title.collectAsState(null)
|
val title by musicService.title.collectAsState(null)
|
||||||
val artist by musicRepository.artist.collectAsState(null)
|
val artist by musicService.artist.collectAsState(null)
|
||||||
val state by musicRepository.playbackState.collectAsState(PlaybackState.Stopped)
|
val state by musicService.playbackState.collectAsState(PlaybackState.Stopped)
|
||||||
|
|
||||||
val playIcon = AnimatedImageVector.animatedVectorResource(R.drawable.anim_ic_play_pause)
|
val playIcon = AnimatedImageVector.animatedVectorResource(R.drawable.anim_ic_play_pause)
|
||||||
|
|
||||||
@ -69,12 +69,12 @@ class MusicPartProvider : PartProvider, KoinComponent {
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onClick = {
|
onClick = {
|
||||||
try {
|
try {
|
||||||
musicRepository.openPlayer()?.send()
|
musicService.openPlayer()?.send()
|
||||||
} catch (e: PendingIntent.CanceledException) {
|
} catch (e: PendingIntent.CanceledException) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
musicRepository.openPlayerChooser(context)
|
musicService.openPlayerChooser(context)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
@ -95,7 +95,7 @@ class MusicPartProvider : PartProvider, KoinComponent {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
IconButton(onClick = { musicRepository.togglePause() }) {
|
IconButton(onClick = { musicService.togglePause() }) {
|
||||||
Icon(
|
Icon(
|
||||||
painter = rememberAnimatedVectorPainter(
|
painter = rememberAnimatedVectorPainter(
|
||||||
animatedImageVector = playIcon,
|
animatedImageVector = playIcon,
|
||||||
@ -103,7 +103,7 @@ class MusicPartProvider : PartProvider, KoinComponent {
|
|||||||
), contentDescription = null
|
), contentDescription = null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
IconButton(onClick = { musicRepository.next() }) {
|
IconButton(onClick = { musicService.next() }) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Rounded.SkipNext,
|
imageVector = Icons.Rounded.SkipNext,
|
||||||
contentDescription = null
|
contentDescription = null
|
||||||
@ -121,12 +121,12 @@ class MusicPartProvider : PartProvider, KoinComponent {
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onClick = {
|
onClick = {
|
||||||
try {
|
try {
|
||||||
musicRepository.openPlayer()?.send()
|
musicService.openPlayer()?.send()
|
||||||
} catch (e: PendingIntent.CanceledException) {
|
} catch (e: PendingIntent.CanceledException) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
musicRepository.openPlayerChooser(context)
|
musicService.openPlayerChooser(context)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
horizontalAlignment = Alignment.CenterHorizontally
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
@ -151,13 +151,13 @@ class MusicPartProvider : PartProvider, KoinComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Row {
|
Row {
|
||||||
IconButton(onClick = { musicRepository.previous() }) {
|
IconButton(onClick = { musicService.previous() }) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Rounded.SkipPrevious,
|
imageVector = Icons.Rounded.SkipPrevious,
|
||||||
contentDescription = null
|
contentDescription = null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
IconButton(onClick = { musicRepository.togglePause() }) {
|
IconButton(onClick = { musicService.togglePause() }) {
|
||||||
Icon(
|
Icon(
|
||||||
painter = rememberAnimatedVectorPainter(
|
painter = rememberAnimatedVectorPainter(
|
||||||
animatedImageVector = playIcon,
|
animatedImageVector = playIcon,
|
||||||
@ -165,7 +165,7 @@ class MusicPartProvider : PartProvider, KoinComponent {
|
|||||||
), contentDescription = null
|
), contentDescription = null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
IconButton(onClick = { musicRepository.next() }) {
|
IconButton(onClick = { musicService.next() }) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Rounded.SkipNext,
|
imageVector = Icons.Rounded.SkipNext,
|
||||||
contentDescription = null
|
contentDescription = null
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import androidx.lifecycle.LiveData
|
|||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.asLiveData
|
import androidx.lifecycle.asLiveData
|
||||||
import de.mm20.launcher2.crashreporter.CrashReporter
|
import de.mm20.launcher2.crashreporter.CrashReporter
|
||||||
import de.mm20.launcher2.music.MusicRepository
|
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
|
||||||
@ -16,42 +16,42 @@ import org.koin.core.component.KoinComponent
|
|||||||
import org.koin.core.component.inject
|
import org.koin.core.component.inject
|
||||||
|
|
||||||
class MusicWidgetVM: ViewModel(), KoinComponent {
|
class MusicWidgetVM: ViewModel(), KoinComponent {
|
||||||
private val musicRepository: MusicRepository by inject()
|
private val musicService: MusicService by inject()
|
||||||
private val permissionsManager: PermissionsManager by inject()
|
private val permissionsManager: PermissionsManager by inject()
|
||||||
|
|
||||||
val title: LiveData<String?> = musicRepository.title.asLiveData()
|
val title: LiveData<String?> = musicService.title.asLiveData()
|
||||||
val artist: LiveData<String?> = musicRepository.artist.asLiveData()
|
val artist: LiveData<String?> = musicService.artist.asLiveData()
|
||||||
val album: LiveData<String?> = musicRepository.album.asLiveData()
|
val album: LiveData<String?> = musicService.album.asLiveData()
|
||||||
val albumArt: LiveData<Bitmap?> = musicRepository.albumArt.asLiveData()
|
val albumArt: LiveData<Bitmap?> = musicService.albumArt.asLiveData()
|
||||||
val playbackState: LiveData<PlaybackState> = musicRepository.playbackState.asLiveData()
|
val playbackState: LiveData<PlaybackState> = musicService.playbackState.asLiveData()
|
||||||
|
|
||||||
val hasPermission = permissionsManager.hasPermission(PermissionGroup.Notifications).asLiveData()
|
val hasPermission = permissionsManager.hasPermission(PermissionGroup.Notifications).asLiveData()
|
||||||
|
|
||||||
val currentPlayerPackage
|
val currentPlayerPackage
|
||||||
get() = musicRepository.lastPlayerPackage
|
get() = musicService.lastPlayerPackage
|
||||||
|
|
||||||
fun skipPrevious() {
|
fun skipPrevious() {
|
||||||
musicRepository.previous()
|
musicService.previous()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun skipNext() {
|
fun skipNext() {
|
||||||
musicRepository.next()
|
musicService.next()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun togglePause() {
|
fun togglePause() {
|
||||||
musicRepository.togglePause()
|
musicService.togglePause()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun openPlayer() {
|
fun openPlayer() {
|
||||||
try {
|
try {
|
||||||
musicRepository.openPlayer()?.send()
|
musicService.openPlayer()?.send()
|
||||||
} catch (e: PendingIntent.CanceledException) {
|
} catch (e: PendingIntent.CanceledException) {
|
||||||
CrashReporter.logException(e)
|
CrashReporter.logException(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun openPlayerSelector(context: Context) {
|
fun openPlayerSelector(context: Context) {
|
||||||
musicRepository.openPlayerChooser(context)
|
musicService.openPlayerChooser(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun requestPermission(context: AppCompatActivity) {
|
fun requestPermission(context: AppCompatActivity) {
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import androidx.appcompat.app.AppCompatActivity
|
|||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.asLiveData
|
import androidx.lifecycle.asLiveData
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import de.mm20.launcher2.music.MusicRepository
|
import de.mm20.launcher2.music.MusicService
|
||||||
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 de.mm20.launcher2.preferences.LauncherDataStore
|
import de.mm20.launcher2.preferences.LauncherDataStore
|
||||||
@ -15,7 +15,7 @@ import org.koin.core.component.inject
|
|||||||
|
|
||||||
class MusicWidgetSettingsScreenVM : ViewModel(), KoinComponent {
|
class MusicWidgetSettingsScreenVM : ViewModel(), KoinComponent {
|
||||||
private val permissionsManager: PermissionsManager by inject()
|
private val permissionsManager: PermissionsManager by inject()
|
||||||
private val musicRepository: MusicRepository by inject()
|
private val musicService: MusicService by inject()
|
||||||
private val dataStore: LauncherDataStore by inject()
|
private val dataStore: LauncherDataStore by inject()
|
||||||
val hasPermission =
|
val hasPermission =
|
||||||
permissionsManager.hasPermission(PermissionGroup.Notifications).asLiveData()
|
permissionsManager.hasPermission(PermissionGroup.Notifications).asLiveData()
|
||||||
@ -40,7 +40,7 @@ class MusicWidgetSettingsScreenVM : ViewModel(), KoinComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun resetWidget() {
|
fun resetWidget() {
|
||||||
musicRepository.resetPlayer()
|
musicService.resetPlayer()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -4,5 +4,5 @@ import org.koin.android.ext.koin.androidContext
|
|||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
val musicModule = module {
|
val musicModule = module {
|
||||||
single<MusicRepository> { MusicRepositoryImpl(androidContext(), get()) }
|
single<MusicService> { MusicServiceImpl(androidContext(), get()) }
|
||||||
}
|
}
|
||||||
@ -44,7 +44,7 @@ import org.koin.core.component.KoinComponent
|
|||||||
import org.koin.core.component.inject
|
import org.koin.core.component.inject
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
interface MusicRepository {
|
interface MusicService {
|
||||||
val playbackState: Flow<PlaybackState>
|
val playbackState: Flow<PlaybackState>
|
||||||
val title: Flow<String?>
|
val title: Flow<String?>
|
||||||
val artist: Flow<String?>
|
val artist: Flow<String?>
|
||||||
@ -65,10 +65,10 @@ interface MusicRepository {
|
|||||||
fun resetPlayer()
|
fun resetPlayer()
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class MusicRepositoryImpl(
|
internal class MusicServiceImpl(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
notificationRepository: NotificationRepository
|
notificationRepository: NotificationRepository
|
||||||
) : MusicRepository, KoinComponent {
|
) : MusicService, KoinComponent {
|
||||||
|
|
||||||
private val scope = CoroutineScope(Job() + Dispatchers.Default)
|
private val scope = CoroutineScope(Job() + Dispatchers.Default)
|
||||||
private val dataStore: LauncherDataStore by inject()
|
private val dataStore: LauncherDataStore by inject()
|
||||||
Loading…
x
Reference in New Issue
Block a user