diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt index 917493f0..10f50699 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt @@ -33,6 +33,8 @@ class Downloader( private val localMediaPlayer: LocalMediaPlayer ) : KoinComponent { val playlist: MutableList = ArrayList() + var started: Boolean = false + private val downloadQueue: PriorityQueue = PriorityQueue() private val activelyDownloading: MutableList = ArrayList() @@ -63,6 +65,7 @@ class Downloader( } fun start() { + started = true if (executorService == null) { executorService = Executors.newSingleThreadScheduledExecutor() executorService!!.scheduleWithFixedDelay( @@ -78,10 +81,12 @@ class Downloader( } fun stop() { + started = false executorService?.shutdown() executorService = null wifiLock?.release() wifiLock = null + MediaPlayerService.runningInstance?.notifyDownloaderStopped() Timber.i("Downloader stopped") } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt index 5d1f5709..57874587 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt @@ -157,6 +157,10 @@ class MediaPlayerService : Service() { } } + fun notifyDownloaderStopped() { + stopIfIdle() + } + @Synchronized fun seekTo(position: Int) { if (jukeboxMediaPlayer.isEnabled) { @@ -582,15 +586,14 @@ class MediaPlayerService : Service() { // Clear old actions notificationBuilder!!.clearActions() - // Add actions - val compactActions = addActions(context, notificationBuilder!!, playerState, song) - - // Configure shortcut actions - style.setShowActionsInCompactView(*compactActions) - notificationBuilder!!.setStyle(style) - - // Set song title, artist and cover if possible if (song != null) { + // Add actions + val compactActions = addActions(context, notificationBuilder!!, playerState, song) + // Configure shortcut actions + style.setShowActionsInCompactView(*compactActions) + notificationBuilder!!.setStyle(style) + + // Set song title, artist and cover val iconSize = (256 * context.resources.displayMetrics.density).toInt() val bitmap = BitmapUtils.getAlbumArtBitmapFromDisk(song, iconSize) notificationBuilder!!.setContentTitle(song.title) @@ -598,6 +601,14 @@ class MediaPlayerService : Service() { notificationBuilder!!.setLargeIcon(bitmap) notificationBuilder!!.setSubText(song.album) } + else if (downloader.started) + { + // No song is playing, but Ultrasonic is downloading files + notificationBuilder!!.setContentTitle( + getString(R.string.notification_downloading_title) + ) + } + return notificationBuilder!!.build() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt index 573a785f..043a2400 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt @@ -199,7 +199,7 @@ object FileUtil { Locale.ROOT, "%s/%s", musicDirectory.path, - if (entry.isDirectory) f.path else f.parent!! + if (entry.isDirectory) f.path else f.parent ?: "" ) ) } else { diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml index 9d8d2630..040a8c9d 100644 --- a/ultrasonic/src/main/res/values/strings.xml +++ b/ultrasonic/src/main/res/values/strings.xml @@ -400,6 +400,7 @@ Keep files Delete files Deleted log files. + Downloading media in the background… Ultrasonic can\'t access the music file cache. Cache location was reset to the default path. Warning