diff --git a/README.md b/README.md
index e9e8c0ff..5f42a5e7 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ An open source podcast instrument, attuned to Puccini ![Puccini](./images/Puccin
[](https://f-droid.org/packages/ac.mdiq.podcini/)
+ height="80">](https://f-droid.org/packages/ac.mdiq.podcini.R/)
Or download the latest APK from the [Releases Section](https://github.com/XilinJia/Podcini/releases/latest).
## Announcement
diff --git a/app/build.gradle b/app/build.gradle
index 5df794c8..3bbb89c3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -31,8 +31,8 @@ android {
testApplicationId "ac.mdiq.podcini.tests"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- versionCode 3020226
- versionName "6.3.2"
+ versionCode 3020227
+ versionName "6.3.3"
applicationId "ac.mdiq.podcini.R"
def commit = ""
diff --git a/app/src/androidTest/kotlin/ac/test/podcini/ui/NavigationDrawerTest.kt b/app/src/androidTest/kotlin/ac/test/podcini/ui/NavigationDrawerTest.kt
index e8c62d80..61004098 100644
--- a/app/src/androidTest/kotlin/ac/test/podcini/ui/NavigationDrawerTest.kt
+++ b/app/src/androidTest/kotlin/ac/test/podcini/ui/NavigationDrawerTest.kt
@@ -165,7 +165,7 @@ class NavigationDrawerTest {
hidden = hiddenDrawerItems?.filterNotNull()?: listOf()
Assert.assertEquals(2, hidden.size.toLong())
- Assert.assertTrue(hidden.contains(QueueFragment.TAG))
+ Assert.assertTrue(hidden.contains(QueuesFragment.TAG))
Assert.assertTrue(hidden.contains(HistoryFragment.TAG))
}
diff --git a/app/src/androidTest/kotlin/ac/test/podcini/ui/PlayQueueFragmentTest.kt b/app/src/androidTest/kotlin/ac/test/podcini/ui/PlayQueuesFragmentTest.kt
similarity index 94%
rename from app/src/androidTest/kotlin/ac/test/podcini/ui/PlayQueueFragmentTest.kt
rename to app/src/androidTest/kotlin/ac/test/podcini/ui/PlayQueuesFragmentTest.kt
index 24edb145..e693abd0 100644
--- a/app/src/androidTest/kotlin/ac/test/podcini/ui/PlayQueueFragmentTest.kt
+++ b/app/src/androidTest/kotlin/ac/test/podcini/ui/PlayQueuesFragmentTest.kt
@@ -8,7 +8,7 @@ import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.ext.junit.runners.AndroidJUnit4
import ac.mdiq.podcini.R
import ac.mdiq.podcini.ui.activity.MainActivity
-import ac.mdiq.podcini.ui.fragment.QueueFragment
+import ac.mdiq.podcini.ui.fragment.QueuesFragment
import de.test.podcini.EspressoTestUtils
import de.test.podcini.NthMatcher
import org.hamcrest.CoreMatchers
@@ -22,7 +22,7 @@ import org.junit.runner.RunWith
* User interface tests for queue fragment.
*/
@RunWith(AndroidJUnit4::class)
-class PlayQueueFragmentTest {
+class PlayQueuesFragmentTest {
@Rule
var activityRule: IntentsTestRule = IntentsTestRule(MainActivity::class.java, false, false)
@@ -30,7 +30,7 @@ class PlayQueueFragmentTest {
fun setUp() {
EspressoTestUtils.clearPreferences()
EspressoTestUtils.clearDatabase()
- EspressoTestUtils.setLaunchScreen(QueueFragment.TAG)
+ EspressoTestUtils.setLaunchScreen(QueuesFragment.TAG)
activityRule.launchActivity(Intent())
}
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/net/download/service/DownloadServiceInterfaceImpl.kt b/app/src/main/kotlin/ac/mdiq/podcini/net/download/service/DownloadServiceInterfaceImpl.kt
index 453489d1..07efe123 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/net/download/service/DownloadServiceInterfaceImpl.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/net/download/service/DownloadServiceInterfaceImpl.kt
@@ -14,6 +14,8 @@ import ac.mdiq.podcini.preferences.UserPreferences.appPrefs
import ac.mdiq.podcini.storage.database.Episodes
import ac.mdiq.podcini.storage.database.LogsAndStats
import ac.mdiq.podcini.storage.database.Queues
+import ac.mdiq.podcini.storage.database.RealmDB.upsert
+import ac.mdiq.podcini.storage.database.RealmDB.upsertBlk
import ac.mdiq.podcini.storage.model.DownloadResult
import ac.mdiq.podcini.storage.model.Episode
import ac.mdiq.podcini.storage.model.EpisodeMedia
@@ -377,12 +379,15 @@ class DownloadServiceInterfaceImpl : DownloadServiceInterface() {
try {
// we've received the media, we don't want to autodownload it again
if (item != null) {
- item.disableAutoDownload()
+ item = upsertBlk(item) {
+ it.disableAutoDownload()
+ }
+ EventFlow.postEvent(FlowEvent.EpisodeEvent.updated(item))
Logd(TAG, "persisting episode downloaded ${item.title} ${item.media?.fileUrl} ${item.media?.downloaded} ${item.isNew}")
// setFeedItem() signals that the item has been updated,
// so we do it after the enclosing media has been updated above,
// to ensure subscribers will get the updated EpisodeMedia as well
- Episodes.persistEpisode(item)
+// Episodes.persistEpisode(item)
// TODO: should use different event?
if (broadcastUnreadStateUpdate) EventFlow.postEvent(FlowEvent.EpisodePlayedEvent(item))
}
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/playback/PlaybackController.kt b/app/src/main/kotlin/ac/mdiq/podcini/playback/PlaybackController.kt
index d394036e..7e0ad7ec 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/playback/PlaybackController.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/playback/PlaybackController.kt
@@ -65,7 +65,7 @@ abstract class PlaybackController(private val activity: FragmentActivity) {
private var prevStatus = PlayerStatus.STOPPED
private val statusUpdate: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
- Logd(TAG, "BroadcastReceiver onReceive")
+ Log.d(TAG, "statusUpdate onReceive called with action: ${intent.action}")
if (playbackService != null && mPlayerInfo != null) {
val info = mPlayerInfo!!
Logd(TAG, "statusUpdate onReceive $prevStatus ${MediaPlayerBase.status} ${info.playerStatus} ${curMedia?.getIdentifier()} ${info.playable?.getIdentifier()}.")
@@ -88,6 +88,7 @@ abstract class PlaybackController(private val activity: FragmentActivity) {
private val notificationReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
+ Log.d(TAG, "notificationReceiver onReceive called with action: ${intent.action}")
val type = intent.getIntExtra(PlaybackService.EXTRA_NOTIFICATION_TYPE, -1)
val code = intent.getIntExtra(PlaybackService.EXTRA_NOTIFICATION_CODE, -1)
if (code == -1 || type == -1) {
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/playback/service/PlaybackService.kt b/app/src/main/kotlin/ac/mdiq/podcini/playback/service/PlaybackService.kt
index 70fd69dd..3bd862eb 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/playback/service/PlaybackService.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/playback/service/PlaybackService.kt
@@ -132,6 +132,7 @@ class PlaybackService : MediaSessionService() {
private val autoStateUpdated: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
+ Log.d(TAG, "autoStateUpdated onReceive called with action: ${intent.action}")
val status = intent.getStringExtra("media_connection_status")
val isConnectedToCar = "media_connected" == status
Logd(TAG, "Received Auto Connection update: $status")
@@ -164,6 +165,7 @@ class PlaybackService : MediaSessionService() {
// Don't pause playback after we just started, just because the receiver
// delivers the current headset state (instead of a change)
if (isInitialStickyBroadcast) return
+ Log.d(TAG, "headsetDisconnected onReceive called with action: ${intent.action}")
if (intent.action == Intent.ACTION_HEADSET_PLUG) {
val state = intent.getIntExtra("state", -1)
@@ -183,6 +185,7 @@ class PlaybackService : MediaSessionService() {
private val bluetoothStateUpdated: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
+ Log.d(TAG, "bluetoothStateUpdated onReceive called with action: ${intent.action}")
if (intent.action == BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED) {
val state = intent.getIntExtra(BluetoothA2dp.EXTRA_STATE, -1)
if (state == BluetoothA2dp.STATE_CONNECTED) {
@@ -196,6 +199,7 @@ class PlaybackService : MediaSessionService() {
private val audioBecomingNoisy: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
// sound is about to change, eg. bluetooth -> speaker
+ Log.d(TAG, "audioBecomingNoisy onReceive called with action: ${intent.action}")
Logd(TAG, "Pausing playback because audio is becoming noisy")
pauseIfPauseOnDisconnect()
}
@@ -468,6 +472,7 @@ class PlaybackService : MediaSessionService() {
private val shutdownReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
+ Log.d(TAG, "shutdownReceiver onReceive called with action: ${intent.action}")
if (intent.action == ACTION_SHUTDOWN_PLAYBACK_SERVICE)
EventFlow.postEvent(FlowEvent.PlaybackServiceEvent(FlowEvent.PlaybackServiceEvent.Action.SERVICE_SHUT_DOWN))
}
@@ -524,7 +529,7 @@ class PlaybackService : MediaSessionService() {
val pendingIntent = PendingIntent.getActivity(this, 0, intent, FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT)
mediaSession = MediaSession.Builder(applicationContext, LocalMediaPlayer.exoPlayer!!)
.setSessionActivity(pendingIntent)
- .setCallback(MyCallback())
+ .setCallback(MyMediaSessionCallback())
.setCustomLayout(notificationCustomButtons)
.build()
}
@@ -589,18 +594,18 @@ class PlaybackService : MediaSessionService() {
return mediaSession?.player?.playbackState != STATE_IDLE && mediaSession?.player?.playbackState != STATE_ENDED
}
- private inner class MyCallback : MediaSession.Callback {
+ private inner class MyMediaSessionCallback : MediaSession.Callback {
override fun onConnect(session: MediaSession, controller: MediaSession.ControllerInfo): MediaSession.ConnectionResult {
- Logd(TAG, "in MyCallback onConnect")
+ Logd(TAG, "in MyMediaSessionCallback onConnect")
val sessionCommands = MediaSession.ConnectionResult.DEFAULT_SESSION_COMMANDS.buildUpon()
// .add(NotificationCustomButton.REWIND)
// .add(NotificationCustomButton.FORWARD)
when {
session.isMediaNotificationController(controller) -> {
- Logd(TAG, "MyCallback onConnect isMediaNotificationController")
+ Logd(TAG, "MyMediaSessionCallback onConnect isMediaNotificationController")
val playerCommands = MediaSession.ConnectionResult.DEFAULT_PLAYER_COMMANDS.buildUpon()
notificationCustomButtons.forEach { commandButton ->
- Logd(TAG, "MyCallback onConnect commandButton ${commandButton.displayName}")
+ Logd(TAG, "MyMediaSessionCallback onConnect commandButton ${commandButton.displayName}")
commandButton.sessionCommand?.let(sessionCommands::add)
}
return MediaSession.ConnectionResult.accept(
@@ -609,29 +614,27 @@ class PlaybackService : MediaSessionService() {
)
}
session.isAutoCompanionController(controller) -> {
- Logd(TAG, "MyCallback onConnect isAutoCompanionController")
+ Logd(TAG, "MyMediaSessionCallback onConnect isAutoCompanionController")
return MediaSession.ConnectionResult.AcceptedResultBuilder(session)
.setAvailableSessionCommands(sessionCommands.build())
.build()
}
else -> {
- Logd(TAG, "MyCallback onConnect other controller")
+ Logd(TAG, "MyMediaSessionCallback onConnect other controller")
return MediaSession.ConnectionResult.AcceptedResultBuilder(session).build()
}
}
}
-
override fun onPostConnect(session: MediaSession, controller: MediaSession.ControllerInfo) {
super.onPostConnect(session, controller)
- Logd(TAG, "MyCallback onPostConnect")
+ Logd(TAG, "MyMediaSessionCallback onPostConnect")
if (notificationCustomButtons.isNotEmpty()) {
mediaSession?.setCustomLayout(notificationCustomButtons)
// mediaSession?.setCustomLayout(customMediaNotificationProvider.notificationMediaButtons)
}
}
-
override fun onCustomCommand(session: MediaSession, controller: MediaSession.ControllerInfo, customCommand: SessionCommand, args: Bundle): ListenableFuture {
- Logd(TAG, "MyCallback onCustomCommand ${customCommand.customAction}")
+ Log.d(TAG, "onCustomCommand ${customCommand.customAction}")
/* Handling custom command buttons from player notification. */
when (customCommand.customAction) {
NotificationCustomButton.REWIND.customAction -> mPlayer?.seekDelta(-rewindSecs * 1000)
@@ -640,9 +643,8 @@ class PlaybackService : MediaSessionService() {
}
return Futures.immediateFuture(SessionResult(SessionResult.RESULT_SUCCESS))
}
-
override fun onPlaybackResumption(mediaSession: MediaSession, controller: MediaSession.ControllerInfo): ListenableFuture {
- Logd(TAG, "MyCallback onPlaybackResumption ")
+ Logd(TAG, "MyMediaSessionCallback onPlaybackResumption ")
val settable = SettableFuture.create()
// scope.launch {
// // Your app is responsible for storing the playlist and the start position
@@ -652,11 +654,10 @@ class PlaybackService : MediaSessionService() {
// }
return settable
}
-
override fun onMediaButtonEvent(mediaSession: MediaSession, controller: MediaSession.ControllerInfo, intent: Intent): Boolean {
val keyEvent = if (Build.VERSION.SDK_INT >= VERSION_CODES.TIRAMISU) intent.extras!!.getParcelable(EXTRA_KEY_EVENT, KeyEvent::class.java)
else intent.extras!!.getParcelable(EXTRA_KEY_EVENT) as? KeyEvent
- Logd(TAG, "MyCallback onMediaButtonEvent ${keyEvent?.keyCode}")
+ Log.d(TAG, "onMediaButtonEvent ${keyEvent?.keyCode}")
if (keyEvent != null && keyEvent.action == KeyEvent.ACTION_DOWN && keyEvent.repeatCount == 0) {
val keyCode = keyEvent.keyCode
@@ -693,7 +694,7 @@ class PlaybackService : MediaSessionService() {
val hardwareButton = intent?.getBooleanExtra(MediaButtonReceiver.EXTRA_HARDWAREBUTTON, false) ?: false
val playable = curMedia
- Logd(TAG, "onStartCommand flags=$flags startId=$startId keycode=$keycode customAction=$customAction hardwareButton=$hardwareButton action=${intent?.action.toString()} ${playable?.getEpisodeTitle()}")
+ Log.d(TAG, "onStartCommand flags=$flags startId=$startId keycode=$keycode customAction=$customAction hardwareButton=$hardwareButton action=${intent?.action.toString()} ${playable?.getEpisodeTitle()}")
if (keycode == -1 && playable == null && customAction == null) {
Log.e(TAG, "onStartCommand PlaybackService was started with no arguments, return")
return START_NOT_STICKY
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/preferences/fragments/SwipePreferencesFragment.kt b/app/src/main/kotlin/ac/mdiq/podcini/preferences/fragments/SwipePreferencesFragment.kt
index f419bce9..8379f0c5 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/preferences/fragments/SwipePreferencesFragment.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/preferences/fragments/SwipePreferencesFragment.kt
@@ -15,7 +15,7 @@ class SwipePreferencesFragment : PreferenceFragmentCompat() {
addPreferencesFromResource(R.xml.preferences_swipe)
findPreference(Prefs.prefSwipeQueue.name)?.onPreferenceClickListener = Preference.OnPreferenceClickListener {
- SwipeActionsDialog(requireContext(), QueueFragment.TAG).show(object : SwipeActionsDialog.Callback {
+ SwipeActionsDialog(requireContext(), QueuesFragment.TAG).show(object : SwipeActionsDialog.Callback {
override fun onCall() {}
})
true
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/receiver/ConnectivityActionReceiver.kt b/app/src/main/kotlin/ac/mdiq/podcini/receiver/ConnectivityActionReceiver.kt
index 3fd9315f..a2fc607c 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/receiver/ConnectivityActionReceiver.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/receiver/ConnectivityActionReceiver.kt
@@ -1,16 +1,20 @@
package ac.mdiq.podcini.receiver
import ac.mdiq.podcini.net.download.NetworkConnectionChangeHandler.networkChangedDetected
+import ac.mdiq.podcini.playback.service.PlaybackService
+import ac.mdiq.podcini.playback.service.PlaybackService.Companion
import ac.mdiq.podcini.util.Logd
import ac.mdiq.podcini.util.config.ClientConfigurator
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.net.ConnectivityManager
+import android.util.Log
import androidx.media3.common.util.UnstableApi
class ConnectivityActionReceiver : BroadcastReceiver() {
@UnstableApi override fun onReceive(context: Context, intent: Intent) {
+ Log.d(TAG, "onReceive called with action: ${intent.action}")
if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION) {
Logd(TAG, "Received intent")
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/receiver/MediaButtonReceiver.kt b/app/src/main/kotlin/ac/mdiq/podcini/receiver/MediaButtonReceiver.kt
index 25b8b302..48b8736b 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/receiver/MediaButtonReceiver.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/receiver/MediaButtonReceiver.kt
@@ -1,5 +1,7 @@
package ac.mdiq.podcini.receiver
+import ac.mdiq.podcini.playback.service.PlaybackService
+import ac.mdiq.podcini.playback.service.PlaybackService.Companion
import ac.mdiq.podcini.util.Logd
import android.app.PendingIntent
import android.content.BroadcastReceiver
@@ -18,7 +20,7 @@ import ac.mdiq.podcini.util.config.ClientConfigurator
class MediaButtonReceiver : BroadcastReceiver() {
@UnstableApi
override fun onReceive(context: Context, intent: Intent) {
- Logd(TAG, "Received intent")
+ Log.d(TAG, "onReceive called with action: ${intent.action}")
if (intent.extras == null) return
val event = intent.extras!![Intent.EXTRA_KEY_EVENT] as? KeyEvent
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/receiver/PowerConnectionReceiver.kt b/app/src/main/kotlin/ac/mdiq/podcini/receiver/PowerConnectionReceiver.kt
index 84372c21..12364f46 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/receiver/PowerConnectionReceiver.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/receiver/PowerConnectionReceiver.kt
@@ -9,6 +9,7 @@ import ac.mdiq.podcini.net.download.serviceinterface.DownloadServiceInterface
import ac.mdiq.podcini.preferences.UserPreferences.isEnableAutodownloadOnBattery
import ac.mdiq.podcini.storage.algorithms.AutoDownloads.autodownloadEpisodeMedia
import ac.mdiq.podcini.util.Logd
+import android.util.Log
// modified from http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
// and ConnectivityActionReceiver.java
@@ -19,7 +20,7 @@ class PowerConnectionReceiver : BroadcastReceiver() {
@UnstableApi override fun onReceive(context: Context, intent: Intent) {
val action = intent.action
- Logd(TAG, "charging intent: $action")
+ Log.d(TAG, "onReceive charging intent: $action")
ClientConfigurator.initialize(context)
if (Intent.ACTION_POWER_CONNECTED == action) {
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/receiver/SPAReceiver.kt b/app/src/main/kotlin/ac/mdiq/podcini/receiver/SPAReceiver.kt
index d90ea898..0729afd0 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/receiver/SPAReceiver.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/receiver/SPAReceiver.kt
@@ -2,6 +2,7 @@ package ac.mdiq.podcini.receiver
import ac.mdiq.podcini.R
import ac.mdiq.podcini.net.feed.FeedUpdateManager.runOnce
+import ac.mdiq.podcini.receiver.MediaButtonReceiver.Companion
import ac.mdiq.podcini.storage.database.Feeds.updateFeed
import ac.mdiq.podcini.storage.model.Feed
import ac.mdiq.podcini.util.Logd
@@ -19,6 +20,7 @@ import androidx.media3.common.util.UnstableApi
class SPAReceiver : BroadcastReceiver() {
@UnstableApi override fun onReceive(context: Context, intent: Intent) {
if (intent.action != ACTION_SP_APPS_QUERY_FEEDS_REPSONSE) return
+ Log.d(TAG, "onReceive called with action: ${intent.action}")
Logd(TAG, "Received SP_APPS_QUERY_RESPONSE")
if (!intent.hasExtra(ACTION_SP_APPS_QUERY_FEEDS_REPSONSE_FEEDS_EXTRA)) {
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/actionbutton/CancelDownloadActionButton.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/actionbutton/CancelDownloadActionButton.kt
index 4c5c0ea2..04dd2675 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/actionbutton/CancelDownloadActionButton.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/actionbutton/CancelDownloadActionButton.kt
@@ -1,18 +1,16 @@
package ac.mdiq.podcini.ui.actions.actionbutton
+import ac.mdiq.podcini.R
+import ac.mdiq.podcini.net.download.serviceinterface.DownloadServiceInterface
+import ac.mdiq.podcini.preferences.UserPreferences.isEnableAutodownload
+import ac.mdiq.podcini.storage.database.RealmDB.upsertBlk
+import ac.mdiq.podcini.storage.model.Episode
+import ac.mdiq.podcini.util.event.EventFlow
+import ac.mdiq.podcini.util.event.FlowEvent
import android.content.Context
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.media3.common.util.UnstableApi
-import ac.mdiq.podcini.R
-import ac.mdiq.podcini.storage.model.Episode
-import ac.mdiq.podcini.net.download.serviceinterface.DownloadServiceInterface
-import ac.mdiq.podcini.preferences.UserPreferences.isEnableAutodownload
-import ac.mdiq.podcini.storage.database.Episodes.persistEpisode
-import ac.mdiq.podcini.storage.database.RealmDB.upsert
-import ac.mdiq.podcini.storage.database.RealmDB.upsertBlk
-import ac.mdiq.podcini.util.event.EventFlow
-import ac.mdiq.podcini.util.event.FlowEvent
class CancelDownloadActionButton(item: Episode) : EpisodeActionButton(item) {
@StringRes
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/actionbutton/TTSActionButton.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/actionbutton/TTSActionButton.kt
index 5e5fd3c7..1f9c4326 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/actionbutton/TTSActionButton.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/actionbutton/TTSActionButton.kt
@@ -2,16 +2,16 @@ package ac.mdiq.podcini.ui.actions.actionbutton
import ac.mdiq.podcini.R
import ac.mdiq.podcini.net.utils.NetworkUtils.fetchHtmlSource
-import ac.mdiq.podcini.storage.database.Episodes.persistEpisode
import ac.mdiq.podcini.storage.database.RealmDB.runOnIOScope
+import ac.mdiq.podcini.storage.database.RealmDB.upsertBlk
import ac.mdiq.podcini.storage.model.Episode
import ac.mdiq.podcini.storage.model.EpisodeMedia
+import ac.mdiq.podcini.storage.utils.AudioMediaTools.mergeAudios
import ac.mdiq.podcini.storage.utils.FilesUtils.getMediafilePath
import ac.mdiq.podcini.storage.utils.FilesUtils.getMediafilename
import ac.mdiq.podcini.ui.fragment.FeedEpisodesFragment.Companion.tts
import ac.mdiq.podcini.ui.fragment.FeedEpisodesFragment.Companion.ttsReady
import ac.mdiq.podcini.ui.fragment.FeedEpisodesFragment.Companion.ttsWorking
-import ac.mdiq.podcini.storage.utils.AudioMediaTools.mergeAudios
import ac.mdiq.podcini.util.Logd
import ac.mdiq.podcini.util.event.EventFlow
import ac.mdiq.podcini.util.event.FlowEvent
@@ -64,8 +64,10 @@ class TTSActionButton(item: Episode) : EpisodeActionButton(item) {
val htmlSource = fetchHtmlSource(url)
val article = Readability4J(item.link!!, htmlSource).parse()
readerText = article.textContent
- item.setTranscriptIfLonger(article.contentWithDocumentsCharsetOrUtf8)
- persistEpisode(item)
+ item = upsertBlk(item) {
+ it.setTranscriptIfLonger(article.contentWithDocumentsCharsetOrUtf8)
+ }
+// persistEpisode(item)
Logd(TAG, "readability4J: ${readerText?.substring(max(0, readerText!!.length-100), readerText!!.length)}")
} else readerText = HtmlCompat.fromHtml(item.transcript!!, HtmlCompat.FROM_HTML_MODE_COMPACT).toString()
processing = 0.1f
@@ -139,10 +141,11 @@ class TTSActionButton(item: Episode) : EpisodeActionButton(item) {
media.fileUrl = mFilename
// media.downloaded = true
media.setIsDownloaded()
- item.media = media
-// DBWriter.persistFeedMedia(media)
- item.setTranscriptIfLonger(readerText)
- persistEpisode(item)
+ item = upsertBlk(item) {
+ it.media = media
+ it.setTranscriptIfLonger(readerText)
+ }
+// persistEpisode(item)
}
for (p in parts) {
val f = File(p)
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/menuhandler/EpisodeMenuHandler.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/menuhandler/EpisodeMenuHandler.kt
index ca404dda..d23ed23b 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/menuhandler/EpisodeMenuHandler.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/menuhandler/EpisodeMenuHandler.kt
@@ -140,7 +140,7 @@ object EpisodeMenuHandler {
LocalDeleteModal.deleteEpisodesWarnLocal(context, listOf(selectedItem))
}
R.id.mark_read_item -> {
- selectedItem.setPlayed(true)
+// selectedItem.setPlayed(true)
setPlayState(Episode.PLAYED, true, selectedItem)
if (selectedItem.feed?.isLocalFeed != true && (isProviderConnected || wifiSyncEnabledKey)) {
val media: EpisodeMedia? = selectedItem.media
@@ -157,7 +157,7 @@ object EpisodeMenuHandler {
}
}
R.id.mark_unread_item -> {
- selectedItem.setPlayed(false)
+// selectedItem.setPlayed(false)
setPlayState(Episode.UNPLAYED, false, selectedItem)
if (needSynch() && selectedItem.feed?.isLocalFeed != true && selectedItem.media != null) {
val actionNew: EpisodeAction = EpisodeAction.Builder(selectedItem, EpisodeAction.NEW)
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/swipeactions/SwipeActions.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/swipeactions/SwipeActions.kt
index 0f11435e..9e5dc88d 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/swipeactions/SwipeActions.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/actions/swipeactions/SwipeActions.kt
@@ -7,7 +7,7 @@ import ac.mdiq.podcini.ui.dialog.SwipeActionsDialog
import ac.mdiq.podcini.ui.fragment.AllEpisodesFragment
import ac.mdiq.podcini.ui.fragment.DownloadsFragment
import ac.mdiq.podcini.ui.fragment.HistoryFragment
-import ac.mdiq.podcini.ui.fragment.QueueFragment
+import ac.mdiq.podcini.ui.fragment.QueuesFragment
import ac.mdiq.podcini.ui.utils.ThemeUtils.getColorFromAttr
import ac.mdiq.podcini.ui.view.EpisodeViewHolder
import ac.mdiq.podcini.util.event.EventFlow
@@ -233,7 +233,7 @@ open class SwipeActions(dragDirs: Int, private val fragment: Fragment, private v
@OptIn(UnstableApi::class) @JvmStatic
fun getPrefsWithDefaults(tag: String): Actions {
val defaultActions = when (tag) {
- QueueFragment.TAG -> NO_ACTION + "," + NO_ACTION
+ QueuesFragment.TAG -> NO_ACTION + "," + NO_ACTION
DownloadsFragment.TAG -> NO_ACTION + "," + NO_ACTION
HistoryFragment.TAG -> NO_ACTION + "," + NO_ACTION
AllEpisodesFragment.TAG -> NO_ACTION + "," + NO_ACTION
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/activity/MainActivity.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/activity/MainActivity.kt
index a867bc17..9ee1afd0 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/activity/MainActivity.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/activity/MainActivity.kt
@@ -128,7 +128,7 @@ class MainActivity : CastEnabledActivity() {
EpisodesRecyclerView.getSharedPrefs(this@MainActivity)
NavDrawerFragment.getSharedPrefs(this@MainActivity)
SwipeActions.getSharedPrefs(this@MainActivity)
- QueueFragment.getSharedPrefs(this@MainActivity)
+ QueuesFragment.getSharedPrefs(this@MainActivity)
// updateFeedMap()
buildTags()
monitorFeeds()
@@ -419,7 +419,7 @@ class MainActivity : CastEnabledActivity() {
Logd(TAG, "loadFragment(tag: $tag, args: $args)")
val fragment: Fragment
when (tag) {
- QueueFragment.TAG -> fragment = QueueFragment()
+ QueuesFragment.TAG -> fragment = QueuesFragment()
AllEpisodesFragment.TAG -> fragment = AllEpisodesFragment()
DownloadsFragment.TAG -> fragment = DownloadsFragment()
HistoryFragment.TAG -> fragment = HistoryFragment()
@@ -719,7 +719,7 @@ class MainActivity : CastEnabledActivity() {
"DOWNLOADS" -> loadFragment(DownloadsFragment.TAG, null)
"HISTORY" -> loadFragment(HistoryFragment.TAG, null)
"EPISODES" -> loadFragment(AllEpisodesFragment.TAG, null)
- "QUEUE" -> loadFragment(QueueFragment.TAG, null)
+ "QUEUE" -> loadFragment(QueuesFragment.TAG, null)
"SUBSCRIPTIONS" -> loadFragment(SubscriptionsFragment.TAG, null)
"STATISTCS" -> loadFragment(StatisticsFragment.TAG, null)
else -> {
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/dialog/SwipeActionsDialog.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/dialog/SwipeActionsDialog.kt
index ba72bb1c..44ca5911 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/dialog/SwipeActionsDialog.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/dialog/SwipeActionsDialog.kt
@@ -53,7 +53,7 @@ import androidx.media3.common.util.UnstableApi
forFragment = context.getString(R.string.individual_subscription)
keys = Stream.of(keys).filter { a: SwipeAction -> !a.getId().equals(SwipeAction.REMOVE_FROM_HISTORY) }.toList()
}
- QueueFragment.TAG -> {
+ QueuesFragment.TAG -> {
forFragment = context.getString(R.string.queue_label)
keys = Stream.of(keys).filter { a: SwipeAction ->
(!a.getId().equals(SwipeAction.ADD_TO_QUEUE) && !a.getId().equals(SwipeAction.REMOVE_FROM_HISTORY)) }.toList()
@@ -64,7 +64,7 @@ import androidx.media3.common.util.UnstableApi
}
else -> {}
}
- if (tag != QueueFragment.TAG) keys = Stream.of(keys).filter { a: SwipeAction -> !a.getId().equals(SwipeAction.REMOVE_FROM_QUEUE) }.toList()
+ if (tag != QueuesFragment.TAG) keys = Stream.of(keys).filter { a: SwipeAction -> !a.getId().equals(SwipeAction.REMOVE_FROM_QUEUE) }.toList()
builder.setTitle(context.getString(R.string.swipeactions_label) + " - " + forFragment)
val binding = SwipeactionsDialogBinding.inflate(LayoutInflater.from(context))
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/DownloadsFragment.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/DownloadsFragment.kt
index 80867b57..54e53934 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/DownloadsFragment.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/DownloadsFragment.kt
@@ -24,7 +24,6 @@ import ac.mdiq.podcini.ui.adapter.EpisodesAdapter
import ac.mdiq.podcini.ui.adapter.SelectableAdapter
import ac.mdiq.podcini.ui.dialog.EpisodeSortDialog
import ac.mdiq.podcini.ui.dialog.SwitchQueueDialog
-import ac.mdiq.podcini.ui.fragment.QueueFragment.Companion
import ac.mdiq.podcini.ui.utils.EmptyViewHandler
import ac.mdiq.podcini.ui.utils.LiftOnScrollListener
import ac.mdiq.podcini.ui.view.EpisodeViewHolder
@@ -76,7 +75,6 @@ import java.util.*
private lateinit var emptyView: EmptyViewHandler
private var displayUpArrow = false
-// private var curIndex = -1
@UnstableApi override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = SimpleListFragmentBinding.inflate(inflater)
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/EpisodeHomeFragment.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/EpisodeHomeFragment.kt
index 855003ad..00aecc72 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/EpisodeHomeFragment.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/EpisodeHomeFragment.kt
@@ -2,15 +2,12 @@ package ac.mdiq.podcini.ui.fragment
import ac.mdiq.podcini.R
import ac.mdiq.podcini.databinding.EpisodeHomeFragmentBinding
+import ac.mdiq.podcini.net.utils.NetworkUtils.fetchHtmlSource
+import ac.mdiq.podcini.storage.database.RealmDB.runOnIOScope
+import ac.mdiq.podcini.storage.database.RealmDB.upsertBlk
import ac.mdiq.podcini.storage.model.Episode
import ac.mdiq.podcini.ui.utils.ShownotesCleaner
import ac.mdiq.podcini.util.Logd
-import ac.mdiq.podcini.net.utils.NetworkUtils.fetchHtmlSource
-import ac.mdiq.podcini.storage.database.Episodes.persistEpisode
-import ac.mdiq.podcini.storage.database.RealmDB.runOnIOScope
-import ac.mdiq.podcini.storage.database.RealmDB.upsert
-import ac.mdiq.podcini.storage.database.RealmDB.upsertBlk
-import ac.mdiq.podcini.ui.fragment.SubscriptionsFragment.Companion
import android.content.Context
import android.os.Bundle
import android.speech.tts.TextToSpeech
@@ -27,7 +24,8 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.media3.common.util.UnstableApi
import com.google.android.material.appbar.MaterialToolbar
-import kotlinx.coroutines.*
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
import net.dankito.readability4j.extended.Readability4JExtended
import java.util.*
@@ -113,11 +111,8 @@ class EpisodeHomeFragment : Fragment() {
if (!cleanedNotes.isNullOrEmpty()) {
if (!ttsReady) initializeTTS(requireContext())
withContext(Dispatchers.Main) {
- binding.readerView.loadDataWithBaseURL("https://127.0.0.1",
- cleanedNotes ?: "No notes",
- "text/html",
- "UTF-8",
- null)
+ binding.readerView.loadDataWithBaseURL("https://127.0.0.1", cleanedNotes ?: "No notes",
+ "text/html", "UTF-8", null)
binding.readerView.visibility = View.VISIBLE
binding.webView.visibility = View.GONE
}
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/EpisodeInfoFragment.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/EpisodeInfoFragment.kt
index 0146528a..09e5458c 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/EpisodeInfoFragment.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/EpisodeInfoFragment.kt
@@ -74,7 +74,7 @@ import kotlin.math.max
private var homeFragment: EpisodeHomeFragment? = null
private var itemLoaded = false
- private var episode: Episode? = null // unmanaged
+ private var episode: Episode? = null // managed
private var webviewData: String? = null
private lateinit var shownotesCleaner: ShownotesCleaner
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/FeedEpisodesFragment.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/FeedEpisodesFragment.kt
index 8bfab4d7..6c15f0e9 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/FeedEpisodesFragment.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/FeedEpisodesFragment.kt
@@ -309,7 +309,7 @@ import java.util.concurrent.Semaphore
R.id.action_search -> (activity as MainActivity).loadChildFragment(SearchFragment.newInstance(feed!!.id, feed!!.title))
R.id.switch_queue -> SwitchQueueDialog(activity as MainActivity).show()
R.id.open_queue -> {
- val qFrag = QueueFragment()
+ val qFrag = QueuesFragment()
(activity as MainActivity).loadChildFragment(qFrag)
(activity as MainActivity).bottomSheet.state = BottomSheetBehavior.STATE_COLLAPSED
}
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/NavDrawerFragment.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/NavDrawerFragment.kt
index 2f914a9a..f11074d8 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/NavDrawerFragment.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/NavDrawerFragment.kt
@@ -186,7 +186,7 @@ class NavDrawerFragment : Fragment(), OnSharedPreferenceChangeListener {
@UnstableApi @DrawableRes
private fun getDrawable(tag: String?): Int {
return when (tag) {
- QueueFragment.TAG -> R.drawable.ic_playlist_play
+ QueuesFragment.TAG -> R.drawable.ic_playlist_play
AllEpisodesFragment.TAG -> R.drawable.ic_feed
DownloadsFragment.TAG -> R.drawable.ic_download
HistoryFragment.TAG -> R.drawable.ic_history
@@ -293,7 +293,7 @@ class NavDrawerFragment : Fragment(), OnSharedPreferenceChangeListener {
holder.count.visibility = View.VISIBLE
}
}
- QueueFragment.TAG -> {
+ QueuesFragment.TAG -> {
val queueSize = datasetStats?.queueSize ?: 0
if (queueSize > 0) {
holder.count.text = NumberFormat.getInstance().format(queueSize.toLong())
@@ -378,7 +378,7 @@ class NavDrawerFragment : Fragment(), OnSharedPreferenceChangeListener {
@UnstableApi
val NAV_DRAWER_TAGS: Array = arrayOf(
SubscriptionsFragment.TAG,
- QueueFragment.TAG,
+ QueuesFragment.TAG,
AllEpisodesFragment.TAG,
DownloadsFragment.TAG,
HistoryFragment.TAG,
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/PlayerDetailsFragment.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/PlayerDetailsFragment.kt
index 78043fda..a589c05a 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/PlayerDetailsFragment.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/PlayerDetailsFragment.kt
@@ -7,13 +7,12 @@ import ac.mdiq.podcini.playback.PlaybackController.Companion.curPosition
import ac.mdiq.podcini.playback.PlaybackController.Companion.curSpeedMultiplier
import ac.mdiq.podcini.playback.PlaybackController.Companion.seekTo
import ac.mdiq.podcini.playback.base.InTheatre.curMedia
-import ac.mdiq.podcini.storage.database.Episodes.persistEpisode
import ac.mdiq.podcini.storage.database.RealmDB.runOnIOScope
+import ac.mdiq.podcini.storage.database.RealmDB.upsertBlk
import ac.mdiq.podcini.storage.model.*
import ac.mdiq.podcini.storage.utils.ChapterUtils
import ac.mdiq.podcini.storage.utils.ImageResourceUtils
import ac.mdiq.podcini.ui.activity.MainActivity
-import ac.mdiq.podcini.ui.fragment.SubscriptionsFragment.Companion
import ac.mdiq.podcini.ui.utils.ShownotesCleaner
import ac.mdiq.podcini.ui.view.ShownotesWebView
import ac.mdiq.podcini.util.DateFormatter
@@ -187,9 +186,11 @@ class PlayerDetailsFragment : Fragment() {
val article = readability4J.parse()
readerhtml = article.contentWithDocumentsCharsetOrUtf8
if (!readerhtml.isNullOrEmpty()) {
- currentItem!!.setTranscriptIfLonger(readerhtml)
+ currentItem = upsertBlk(currentItem!!) {
+ it.setTranscriptIfLonger(readerhtml)
+ }
homeText = currentItem!!.transcript
- persistEpisode(currentItem)
+// persistEpisode(currentItem)
}
}
if (!homeText.isNullOrEmpty()) {
diff --git a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/QueueFragment.kt b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/QueuesFragment.kt
similarity index 98%
rename from app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/QueueFragment.kt
rename to app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/QueuesFragment.kt
index 3f18d43b..043d3518 100644
--- a/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/QueueFragment.kt
+++ b/app/src/main/kotlin/ac/mdiq/podcini/ui/fragment/QueuesFragment.kt
@@ -14,7 +14,6 @@ import ac.mdiq.podcini.storage.database.Queues.moveInQueue
import ac.mdiq.podcini.storage.database.Queues.queueKeepSortedOrder
import ac.mdiq.podcini.storage.database.RealmDB.realm
import ac.mdiq.podcini.storage.database.RealmDB.runOnIOScope
-import ac.mdiq.podcini.storage.database.RealmDB.unmanaged
import ac.mdiq.podcini.storage.database.RealmDB.upsert
import ac.mdiq.podcini.storage.database.RealmDB.upsertBlk
import ac.mdiq.podcini.storage.model.Episode
@@ -80,7 +79,7 @@ import java.util.*
/**
* Shows all items in the queue.
*/
-@UnstableApi class QueueFragment : Fragment(), Toolbar.OnMenuItemClickListener, SelectableAdapter.OnSelectModeListener {
+@UnstableApi class QueuesFragment : Fragment(), Toolbar.OnMenuItemClickListener, SelectableAdapter.OnSelectModeListener {
private var _binding: QueueFragmentBinding? = null
private val binding get() = _binding!!
@@ -91,6 +90,7 @@ import java.util.*
private lateinit var swipeActions: SwipeActions
private lateinit var speedDialView: SpeedDialView
+ private lateinit var spinnerLayout: View
private lateinit var queueNames: Array
private lateinit var spinnerTexts: MutableList
private lateinit var queueSpinner: Spinner
@@ -127,7 +127,7 @@ import java.util.*
val queues = realm.query(PlayQueue::class).find()
queueNames = queues.map { it.name }.toTypedArray()
spinnerTexts = queues.map { "${it.name} : ${it.episodeIds.size}" }.toMutableList()
- val spinnerLayout = inflater.inflate(R.layout.queue_title_spinner, toolbar, false)
+ spinnerLayout = inflater.inflate(R.layout.queue_title_spinner, toolbar, false)
queueSpinner = spinnerLayout.findViewById(R.id.queue_spinner)
val params = Toolbar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
params.gravity = Gravity.CENTER_VERTICAL
@@ -415,6 +415,13 @@ import java.util.*
when (itemId) {
R.id.show_bin -> {
showBin = !showBin
+ if (showBin) {
+ toolbar.removeView(spinnerLayout)
+ toolbar.title = curQueue.name + " Bin"
+ } else {
+ toolbar.title = ""
+ toolbar.addView(spinnerLayout)
+ }
refreshMenuItems()
if (showBin) {
item.setIcon(R.drawable.playlist_play)
@@ -635,7 +642,6 @@ import java.util.*
while (curQueue.name.isEmpty()) runBlocking { delay(100) }
if (queueItems.isEmpty()) emptyView.hide()
queueItems.clear()
- Logd(TAG, "loadCurQueue() showBin: $showBin")
if (showBin) {
queueItems.addAll(realm.query(Episode::class, "id IN $0", curQueue.idsBinList)
.find().sortedByDescending { curQueue.idsBinList.indexOf(it.id) })
@@ -718,7 +724,7 @@ import java.util.*
}
}
- private inner class QueueSwipeActions : SwipeActions(ItemTouchHelper.UP or ItemTouchHelper.DOWN, this@QueueFragment, TAG) {
+ private inner class QueueSwipeActions : SwipeActions(ItemTouchHelper.UP or ItemTouchHelper.DOWN, this@QueuesFragment, TAG) {
// Position tracking whilst dragging
var dragFrom: Int = -1
var dragTo: Int = -1
@@ -801,7 +807,7 @@ import java.util.*
}
companion object {
- val TAG = QueueFragment::class.simpleName ?: "Anonymous"
+ val TAG = QueuesFragment::class.simpleName ?: "Anonymous"
private const val KEY_UP_ARROW = "up_arrow"
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index d5e6cec2..30735926 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -228,7 +228,7 @@
- SubscriptionsFragment
- - QueueFragment
+ - QueuesFragment
- AllEpisodesFragment
- DownloadsFragment
- PlaybackHistoryFragment
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 58a5f8a6..120b4c91 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -11,7 +11,7 @@
Add podcast
Episodes
Home
- Queue
+ Queues
Favorites
Settings
diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml
index 483102c8..914368c4 100644
--- a/app/src/main/res/xml/shortcuts.xml
+++ b/app/src/main/res/xml/shortcuts.xml
@@ -11,7 +11,7 @@
android:targetPackage="ac.mdiq.podcini">
+ android:value="QueuesFragment" />
diff --git a/changelog.md b/changelog.md
index a67c2b15..6e04757a 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,11 @@
+# 6.3.3
+
+* fixed crash when setting as Played/Unplayed in EpisodeInfo view
+* various changes in writing to DB in write block
+* Queue view is renamed to Queues view
+* in Queues view, when opening/closing Bin, the queues spinner on ToolBar is toggled with a title
+* added various Log.d statements in seeking to trace down the occasional random playing behavior
+
# 6.3.2
* fixed crash of opening FeedEpisode view when "Use episode cover" is set
diff --git a/fastlane/metadata/android/en-US/changelogs/3020227.txt b/fastlane/metadata/android/en-US/changelogs/3020227.txt
new file mode 100644
index 00000000..212593fd
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/3020227.txt
@@ -0,0 +1,8 @@
+
+Version 6.3.3 brings several changes:
+
+* fixed crash when setting as Played/Unplayed in EpisodeInfo view
+* various changes in writing to DB in write block
+* Queue view is renamed to Queues view
+* in Queues view, when opening/closing Bin, the queues spinner on ToolBar is toggled with a title
+* added various Log.d statements in seeking to trace down the occasional random playing behavior