* opening OnlineFeed of Youtube channel is made more responsive with more background processing on constructing episodes
* you can subscribe at any time
* if you open Episodes, you will see the episodes constructed at the moment
* episodes limit for Youtube channel, playlist and YTMusicplaylist is now at 1000
* in OnlineFeed view, after subscribe, the FeedEpisode view does not open automatically, presenting options to open it or return to the SearchResults view
* in online SearchResults, if an item is already subscribed, a check mark appears on the cover image, and when clicked, FeedEpisodes view is opened.
* added FlowEvent posting when adding shared youtube media or reserved online episodes
* receiving shared contents from Youtube now should support hostnames youtube.com, www.youtube.com, m.youtube.com, music.youtube.com, and youtu.be
* when reserving episodes from a Youtube channel list, like receiving shared media from Youtube, you can choose for "audio only"
* the reserved episodes will be added into synthetic podcast of either "Youtube Syndicate" or "Youtube Syndicate Audio" rather than "Misc Syndicate" for other types of episodes
* fixed independence of swipe actions in Queues Bin
* OnlineFeed is in Jetpack Compose
* in SharedReceiver activity, added error notice for shared Youtube media
* fixed difference between the count of episodes and the actual number of episodes (seen when the number is small) in History, AllEpisodes, and OnlineFeed views
* fixed an error (introduced in 6.6.3) in setting feed preferences when subscribing one
* upon start, if no previously played media, the player is set invisible
* fixed an issue of fully played episode not correctly recorded as such when Podcini is in the background
* volume adaptation numbers were changed from 0.2, 0.5, 1, 1.5, 2, 2.5 to 0.2, 0.5, 1, 2, 4, 7 (the max boost being 6dB)
* added ability to receive music or playlist shared from YT Music
* single music received from YT Music is added to "YTMusic Syndicate"
* in newly subscribed Youtube channel or playlist, prefStreamOverDownload is set to true
* ensured virtual queue (continuous streaming) for previously subscribed "Youtube" type feed when the associated queue is set to None
* the max number of media is dropped to 60 on subscribing a Youtube type feed (higher number may cause delay or even failure due to network issues, will investigate other ways to handle)
* fixed a bug in Reconcile that can cause downloaded files to be mistakenly deleted
* action button on each episode now reacts to LongClick to provide more options
* in Subscriptions and FeedEpisodes views, swipe down to refresh no longer has the progress circle blocking UI, only shows "Refreshing" status on the info bar
* the media is then added as an episode to one of the two synthetic podcasts: "Youtube Syndicate" or "Youtube Syndicate Audio" (for audio-only media)
* the two synthetic podcasts behave as normal Youtube-channel podcasts except that they can not be updated, and video mode and authentication can not be changed,
* the episodes can be handled in the same fashion as normal podcast episodes, except that those in "Youtube Syndicate Audio" can not be played with video
* fixed info display on notification panel for Youtube episodes
* added a setting to disable "swipe to refresh all subscriptions" under Settings -> Interface -> Subscriptions
* even when disabled, subscriptions can be refreshed from the menu in Subscriptions view
* this doesn't affect "swipe to refresh" in FeedEpisodes view for single podcast
* partially fixed an issue seen on Samsung Android 14 device where after playing the user-started episode, subsequent episode in the queue is not played in foreground service and there is not notification panel and can get stopped by the system.
* the current fix is though the subsequent episodes are still played without notification, the play is not stopped by the system.
* if videoMode of a feed is set to "audio only",
* press on icon in the player UI will expand the player detailed view (rather than video view)
* "show video" on the menu of AudioPlayer view is hidden
* in feed preferences, the setting "play audio only" for video feed is replaced with the setting of a video mode. If you set the previous setting, you need to redo with the new setting.
* added some extra permission requests when exporting/importing various files, maybe needed in some system
* re-enabed use of http traffic to work with relevant podcasts
* first foot into Jetpack Compose, various views are in Compose
* in Queue view, added menu option to change the name of the active queue, with a Compose dialog
* Default queue can not be changed, only unique names are allowed
* in Queue view, added menu option to add a new queue, maximum number of queues allowed is 10
* in Downloads view, revealed the message toaster for Reconsile operation
* added associated queue setting for feed, with three choices: Default, Active and Custom
* the default queue for every feed is Default
* episodes added to queue upon downloading are added to the respective queues associated with the feed
* fixed crash issue when multi-select actions in Subscriptions
* added associated queue setting in multi-select actions in Subscriptions
* playing an episode from an episodes list other than the queue is now a one-off play: no "next episode" to play, unless the episode is on the active queue, in which case, the next episode in the queue will be played
* corrected the wrong displays in DownloadLog view
* likely fixed crash issue when Podcini comes back from background during download
* likely fixed a crash issue when deleting the last playing media in queue
* updated various dependencies, media3 is up at 1.4.0
* added feed setting in the header of FeedInfo view
* in all episodes list views, click on an episode image brings up the FeedInfo view
* added countingPlayed for auto download in feed setting, when set to false, downloaded episodes that have been played are not counted as downloaded to the limit of auto-download
* fixed possible mal-function of feed sorting
* improved feed sorting efficiency
* improved feed update efficiency
* in Subscriptions view added sorting info on every feed (List Layout only)
* "Put to queue" text changed to "Put in queue"
* in dialogs "Put in queue" and "Switch queue" the spinner is changed to lisst of radio buttons
* likely fixed hang when switching queue sometimes
* in FeedEpisode view fixed filtering after an episode's play state is changed
* fixed refreshing a feed causes duplicate episodes in FeedEpisodes view
* fixed the non-functioning of "Set navigation drawer items"
* fixed crash when changing filter during media playing
* item selection in list views only updates the selected item (rather than the whole list)
* fixed episode action button not updated when deleting the media in episode list views
* skipped concurrent calls for loading data in multiple views
* toggle "Auto backup of OPML" in Settings will restart Podcini
* automatically restoring backup of OPML upon new install is disabled. Instead, in AddFeed view, when subscription is empty and OPML backup is available, a dialog is shown to ask about restoring.
* auto download algorithm is changed to individual feed based.
* When auto download is enabled in the Settings, feeds to be auto-downloaded need to be separately enabled in the feed settings.
* Each feed also has its own download policy (only new episodes, newest episodes, and oldest episodes. newest episodes meaning most recent episodes new or old)
* Each feed has its own limit (Episode cache) for number of episodes downloaded, this limit rules in combination of the overall limit for the app.
* After auto download run, episodes with New status is changed to Unplayed.
* auto download feed setting dialog is also changed:
* there are now separate dialogs for inclusive and exclusive filters where filter tokens can be specified independently
* on exclusive dialog, there are optional check boxes "Exclude episodes shorter than" and "Mark excluded episodes played"
* set default value of "Include in auto downloads" in feed setting to false
* remove an episode from queue no longer triggers auto download
* got rid of many string delegates, in favor of enums
* re-enabled import of downloaded media files, which can be used to migrate from 5.5.4. Media files imported are restricted to existing feeds and episodes.
* importing media files is only allowed from a directory with name containing "Podcini-MediaFiles"
* if you have imported some media files exported from 5.5.4 using version 6.0.10, these files are junk. You can opt for clearing storage or re-installing version 6, or you can ignore them for now as I plan to provide media file management functionality in the near future.
* This is a minor release of subtraction: import of downloaded media files is temporarily disabled as it's more complicated than I thought. Imported file names from earlier versions aren't easily recognizable.
This is the first release of Podcini.R version 6. If you have an older version installed, this release installs afresh in parallel with and is not compatible with older versions. Main changes are:
* complete overhaul of database and routines, ditched the iron-age celebrity SQLite and entrusted the modern object-based Realm
* export/import DB is supported for the Realm DB with file extension .realm
* DB from Podcini version 5 and below can not be imported, if you need migration, see migrationTo6.md file on github for instructions
* components rely more on objects for communication, unnecessary DB access is reduced
* remove feeds is performed promptly in blocking way
* feeds sorting is more explicit and bi-directional and in the same style as episodes sorting
* feed order names changed in English (other languages need update)
* grid view is enabled for Subscriptions and can be switched on in Settings->User interface
* in Subscriptions view, click on cover image of a feed opens the FeedInfo view (not FeedEpisodes view)
* in Subscriptions and episodes list views, corrected the issue of wrong images of episodes being shown when scrolling
* receiving flow events are strictly tied to life cycles of the components
* re-worked some events related to feed changes
* queue is circular: if the final item in queue finished, the first item in queue (if exists) will get played
* NavDrawer no longer gets updated in the background but only upon open
* player control UI is more efficient
* PlaybackController is further enhanced for multiple access
* non-essential instantiations of PlaybackController are stripped
* AudioPlayer view is hidden when there is no media set to play
* playback routines are extensively tuned and cleaned, less layered
* in any episode list views, swipe with NO_ACTION defined pops up the swipe config dialog
* date of new episode is highlighted in episodes list views
* in episodes sort dialog, "Date" is changed to "Publish date"
* added more garbage collections
* in preference "Delete Removes From Queue" is set to true by default
* added in preference "Remove from queue when marked as played" and set it to true by default
* added episode counts in Episodes and History views
* enhanced play position updates in all episodes list views
* added "Remove from favorites" in speed-dial menu
* on PlayerDetailed and EpisodeHome views the home button on action bar has a toggle
* FeedInfo view has button showing number of episodes to open the FeedEpisodes view
* on action bar of FeedEpisodes view there is a direct access to Queue
* tidied up the header of FeedEpisodes view
* media size is shown on episode info view
* net-fetching of media size for not-downloaded media is removed for episode list views
* there is a setting to disable/enable auto backup OPML files to Google
* InTheatre object is now the center reference for all currently playing stuff including the current play queue
* 5 queues are provided by default: Default queue, and Queues 1-4
* all queue operations are on the curQueue, which can be set in all episodes list views
* on app startup, the most recently updated queue is set to curQueue
* progressive loading in some episodes list views are more efficient
* on importing preferences, PlayerWidgetPrefs is ignored
* position updates to widget is also set for every 5 seconds
* in FeedEpisodes view, refresh only performs on the single feed (rather than all feeds)
* VariableSpeed dialog is no longer depends on the controller
* Tapping the media playback notification opens Podcini
* Long-press filter button in FeedEpisode view enables/disables filters without changing filter settings
* in wifi sync and episode progress export/import, changed start position and added played duration for episodes (compatible with 5.5.3), this helps for the statistics view at the importer to correctly show imported progress without having to do "include marked played"
* the Counter and its seetings are removed
* all RxJava code was replaced with coroutines, RxJava dependency is kept only for using fyyd search
* PlaybackPreferences using SharePreferences was removed and related info is handled by the DB as CurrentState
* decade-old joanzapata iconify is replaced with mikepenz iconics
* removed the need for support libraries and the need for the jetifier
* in wifi sync and episode progress export/import, changed start position and added played duration for episodes (available from 5.5.3), this helps for the statistics view at the importer to correctly show imported progress without having to do "include marked played"
* fixed text not accepted issue in "add podcast using rss feed"
* removed kotlin-stdlib dependency to improve build speed
* cleaned out the commented-out RxJava code
* added export/import of episode progress for migration to future versions. the exported content is the same as with instant sync: all the play progress of episodes (completed or not)
* this is likely the last release of Podcini 5, sauf perhaps any minor bugfixes.
* the next Podcini overhauls the entire DB routines, SQLite is replaced with the object-based Realm, and is not compatible with version 5 and below.
* likely fixed crash issue when the app is restarted after long idle
* fixed null pointer crash issue in when trying to report player error
* fixed null pointer crash issue when open player detailed view with online episode
* likely fixed the audio break issue when streaming some podcasts, particularly those related to "iHeart" (actually the server has some invalid settings, someone should notify them).
this should take effect with episodes in both subscribed or online feeds
* experimental (back up before use) release of instant sync between devices on the same wifi network without a server
* have media3 exoplayer taking over all audio focus controls to better cooperate with other media players. be mindful of any possible issues
* fixed some icon handling issues noticed on Android 14
* overhauled image handling routines, replaced Glide with Coil: efficiency improved, app lighter, and lots of exception issues eliminated, though appearance not fully replicated
* suppressed log.d messages in release app
* fixed search failure bug introduced with adding of transcript column
* fixed a null pointer exception when opening online feed providing null connection type
* fixed bug of episodes being mostly duplicated in online feed episodes view
* fixed play/pause button not correctly set sometimes
* fixed position not correctly shown sometimes
* fixed position not correctly set on starting streaming
* fixed issue with long-press on the Skip button
* player status has now a single point of reference
* player detailed view is only initialized at first open
* instant (or wifi) sync can be accessed from Settings->Synchronization, where an instruction is shown
* it syncs the play states (position and played) of episodes that exist in both devices (ensure to refresh first) and that have been played (completed or not) on at least one device
* so far, every sync is a full sync, no subscription feeds sync, and no media files sync
* migrated to media3's MediaSession and MediaLibraryService though no new features added with this. some behavior might change or issues might arise, need to be mindful
* when video mode is temporarily audio only, click on image on audio player on a video episode also brings up the normal player detailed view
* added a menu action item in player detailed view to turn to fullscreen video for video episode
* added episode home view accessible right from episode info view. episode home view has two display modes: webpage or reader.
* added text-to-speech function in the reader mode. there is a play/pause button on the top action bar, when play is pressed, text-to-speech will be used to play the text. play features now are controlled by system setting of the TTS engine. Advanced operations in Podcini are expected to come later.
* RSS feeds with no playable media can be subscribed and read/listened via the above two ways
* added ability to open podcast from webpage address, reduced the error of "The podcast host\'s server sent a website, not a podcast"
* allows importing podcast from a web address, either through copy/paste or share.
* Youtube channels are accepted from external share or paste of address in podcast search view, and can be subscribed as a normal podcast. A channel is handled as a podcast feed, and videos in the channel are as episodes. Drawbacks now are playing of the video is not handled inside Podcini, but in Youtube app or the browser, and the play speed is not controlled by Podcini.
* fixed bug of sort order not stable in feed item list
* in Subscriptions view added sorting of "Unread publication date"
* added preference "Fast Forward Speed" under "Playback" in settings with default value of 0.0, dialog allows setting a float number (capped between 0.0 and 10.0)
* added preference "Fallback Speed" under "Playback" in settings with default value of 0.0, dialog allows setting a float number (capped between 0.0 and 1.5)
* added new ways to manipulate play speed
* the "Skip to next episode" button
* long-press moves to the next episode
* by default, single tap does nothing
* if the user customize "Fast Forward Speed" to a value greater than 0.1, it behaves in the following way:
* single tap during play, the set speed is used to play the current audio
* single tap again, the original play speed resumes
* if the user customize "Fallback speed" to a value greater than 0.1, long-press the button during play enters the fallback mode and plays at the set fallback speed, single tap exits the fallback mode