Code: Select all
@RequiresApi(Build.VERSION_CODES.Q)
class AudioObserver @Inject constructor(
private val directoryChangeUseCase: DirectoryChangeUseCase
) : ContentObserver(Handler(Looper.getMainLooper())) {
@RequiresApi(Build.VERSION_CODES.R)
override fun onChange(selfChange: Boolean, uris: Collection, flags: Int) {
super.onChange(selfChange, uris, flags)
directoryChangeUseCase.directoryUpdated()
}
}
Code: Select all
class MusicViewModel @Inject constructor(
private val fileRepository: FileRepository,
private val audioManager: AudioManager
) : ViewModel(), DirectoryChangeUseCase{
private val _fetchedAudioList = MutableStateFlow(emptyList())
val fetchedAudioList = _fetchedAudioList.asStateFlow()
override fun directoryUpdated() {
fetchAudioFromDevice(true)
}
fun fetchAudioFromDevice(isUpdated: Boolean){
_fetchedAudioList.update{
fileRepository.fetchAudioFiles(isUpdated).map {it.toMusicUi()}
}
Log.d("called", "${_fetchedAudioList.value.size}")
}
}
Code: Select all
val musicUIList = musicViewModel.fetchedAudioList.collectAsStateWithLifecycle()
Code: Select all
modifier = Modifier.clickable(onClick = {musicViewModel.fetchAudioFromDevice(true)})
Mobile version