From 55ab0ce71c4b99160dc70da709bd77b3d6316bfc Mon Sep 17 00:00:00 2001 From: Antoine POPINEAU Date: Fri, 29 May 2020 10:32:09 +0200 Subject: [PATCH] Cache playback position on pause. Should fix #19. --- .../apognu/otter/activities/MainActivity.kt | 2 -- .../apognu/otter/activities/SearchActivity.kt | 2 ++ .../apognu/otter/playback/PlayerService.kt | 23 ++++++++++++++++--- app/src/main/res/layout/activity_main.xml | 2 +- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt b/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt index 84d4ab6..dceafcf 100644 --- a/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt +++ b/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt @@ -261,12 +261,10 @@ class MainActivity : AppCompatActivity() { now_playing_title.text = track.title now_playing_album.text = track.artist.name now_playing_toggle.icon = getDrawable(R.drawable.pause) - now_playing_progress.progress = 0 now_playing_details_title.text = track.title now_playing_details_artist.text = track.artist.name now_playing_details_toggle.icon = getDrawable(R.drawable.pause) - now_playing_details_progress.progress = 0 Picasso.get() .maybeLoad(maybeNormalizeUrl(track.album.cover.original)) diff --git a/app/src/main/java/com/github/apognu/otter/activities/SearchActivity.kt b/app/src/main/java/com/github/apognu/otter/activities/SearchActivity.kt index cd6e776..b7e7065 100644 --- a/app/src/main/java/com/github/apognu/otter/activities/SearchActivity.kt +++ b/app/src/main/java/com/github/apognu/otter/activities/SearchActivity.kt @@ -38,6 +38,8 @@ class SearchActivity : AppCompatActivity() { search.setOnQueryTextListener(object : androidx.appcompat.widget.SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String?): Boolean { + search.clearFocus() + query?.let { val query = URLEncoder.encode(it, "UTF-8") diff --git a/app/src/main/java/com/github/apognu/otter/playback/PlayerService.kt b/app/src/main/java/com/github/apognu/otter/playback/PlayerService.kt index 971266f..fd6f8c9 100644 --- a/app/src/main/java/com/github/apognu/otter/playback/PlayerService.kt +++ b/app/src/main/java/com/github/apognu/otter/playback/PlayerService.kt @@ -106,7 +106,14 @@ class PlayerService : Service() { if (queue.current > -1) { player.prepare(queue.datasources, true, true) - player.seekTo(queue.current, 0) + + Cache.get(this, "progress")?.let { progress -> + player.seekTo(queue.current, progress.readLine().toLong()) + + val (current, duration, percent) = progress(true) + + ProgressBus.send(current, duration, percent) + } } registerReceiver(headphonesUnpluggedReceiver, IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY)) @@ -257,6 +264,16 @@ class PlayerService : Service() { @SuppressLint("NewApi") private fun state(state: Boolean) { + if (!state) { + val (progress, _, _) = progress() + + Cache.set( + this@PlayerService, + "progress", + progress.toString().toByteArray() + ) + } + if (state && player.playbackState == Player.STATE_IDLE) { player.prepare(queue.datasources) } @@ -305,8 +322,8 @@ class PlayerService : Service() { player.previous() } - private fun progress(): Triple { - if (!player.playWhenReady) return progressCache + private fun progress(force: Boolean = false): Triple { + if (!player.playWhenReady && !force) return progressCache return queue.current()?.bestUpload()?.let { upload -> val current = player.currentPosition diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 10d4afa..7f2c409 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -20,7 +20,7 @@ android:layout_margin="8dp" android:alpha="0" android:visibility="gone" - app:cardCornerRadius="8dp" + app:cardCornerRadius="3dp" app:cardElevation="12dp" app:layout_dodgeInsetEdges="bottom" tools:alpha="1"