Skip to content

Commit

Permalink
4.7.0 commit
Browse files Browse the repository at this point in the history
  • Loading branch information
XilinJia committed Apr 11, 2024
1 parent 91e6a70 commit 26b506e
Show file tree
Hide file tree
Showing 186 changed files with 759 additions and 722 deletions.
7 changes: 4 additions & 3 deletions Licenses_and_permissions.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

[Androidx](https://github.com/androidx/androidx/blob/androidx-main/LICENSE.txt) Apache License 2.0

[](https://github.com/material-components/material-components-android/blob/master/LICENSE)
[com.google.android.material](https://github.com/material-components/material-components-android/blob/master/LICENSE)
Apache License 2.0

[JetBrains Kotlin](https://github.com/JetBrains/kotlin/blob/master/license/LICENSE.txt) Apache License Version 2.0
Expand All @@ -20,8 +20,9 @@ Apache License 2.0

[com.squareup.okhttp3](https://github.com/square/okhttp/blob/master/LICENSE.txt) Apache License 2.0

[com.squareup.okio](https://github.com/square/okio/blob/master/LICENSE.txt) Apache License 2.0

<!-- [com.squareup.okio](https://github.com/square/okio/blob/master/LICENSE.txt) Apache License 2.0
-->

[org.greenrobot:eventbus](https://github.com/greenrobot/EventBus/blob/master/LICENSE) Apache License 2.0

[io.reactivex.rxjava2](https://github.com/ReactiveX/RxJava/blob/3.x/LICENSE) Apache License 2.0
Expand Down
49 changes: 34 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,13 @@ Some drastic changes are made in the project since version 4.0. There is now a w

Even so, the database remains backward compatible, and AntennaPod's db can be easily imported.

Other notable features and changes include:
## Notable new features/enhancements

### Player

* A more convenient player control displayed on all pages
* A revamped and more efficient expanded player view showing episode description on the front
* External player class is merged into the player
* New and efficient ways of click and long-click operations on lists:
* click on title area opens the podcast/episode
* long-press on title area automatically enters in selection mode
* options to select all above or below are shown action bar together with Select All
* operations are only on the selected (single or multiple)
* A new share notes menu option on various episode views
* List info is shown in Queue and Downloads views
* Left and right swipe actions on lists now have telltales and can be configured on the spot
* Played episodes have clearer markings
* Sort dialog no longer dims the main view
* Play speed setting has been straightened up, three speed can be set separately or combined: current audio, podcast, and global. The order of precedence is in that same order.
* 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)
* The "Skip to next episode" button on the player
Expand All @@ -48,19 +40,46 @@ Other notable features and changes include:
* the Play button on the player
* by default, it behaves the same as usual
* 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
* Various efficiency improvements, including removal of
* redundant media loadings and ui updates
* frequent list search during audio play
* streamed media somewhat equivalent to downloaded media
* enabled episode description on player detailed view
* enabled intro- and end- skipping
* mark as played when finished
* streamed media is added to queue and is resumed after restart

### Podcast/Episode list

* New and efficient ways of click and long-click operations on lists:
* click on title area opens the podcast/episode
* long-press on title area automatically enters in selection mode
* options to select all above or below are shown action bar together with Select All
* operations are only on the selected (single or multiple)
* List info is shown in Queue and Downloads views
* Left and right swipe actions on lists now have telltales and can be configured on the spot
* Played episodes have clearer markings
* Sort dialog no longer dims the main view
* Subscriptions view has sorting by "Unread publication date"

### Podcast/Episode

* A new share notes menu option on various episode views
* Feed info view offers a link for direct search of feeds related to author

### Online feed

* More info about feeds are shown in the online search view
* Ability to open podcast from webpage address
* Online feed info display is handled in similar ways as any local feed, and offers options to subscribe or view episodes
* Online feed episodes can be freely played (streamed) without a subscription
* usesCleartextTraffic (for non-secure content transmission) is now disabled in the project
* Various efficiency improvements, including removal of
* redundant media loadings and ui updates
* frequent list search during audio play
* externally shared feed opens in the new online feed view fragment
* Youtube channels are accepted from external share or paste of address in podcast search view, and can be subscribed as a normal podcast, though video play is handled externally

### Security

* usesCleartextTraffic (for non-secure content transmission) is now disabled in the project

For more details of the changes, see the [Changelog](changelog.md)

## Screenshots
Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -149,8 +149,8 @@ android {
// Version code schema (not used):
// "1.2.3-beta4" -> 1020304
// "1.2.3" -> 1020395
versionCode 3020127
versionName "4.6.2"
versionCode 3020128
versionName "4.7.0"

def commit = ""
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import androidx.test.espresso.util.TreeIterables
import androidx.test.platform.app.InstrumentationRegistry
import ac.mdiq.podcini.R
import ac.mdiq.podcini.ui.activity.MainActivity
import ac.mdiq.podcini.service.playback.PlaybackService
import ac.mdiq.podcini.playback.service.PlaybackService
import ac.mdiq.podcini.ui.dialog.RatingDialog
import ac.mdiq.podcini.ui.dialog.RatingDialog.saveRated
import ac.mdiq.podcini.ui.fragment.NavDrawerFragment
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package de.test.podcini.service.download
import android.util.Log
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import ac.mdiq.podcini.service.download.Downloader
import ac.mdiq.podcini.service.download.HttpDownloader
import ac.mdiq.podcini.net.download.service.Downloader
import ac.mdiq.podcini.net.download.service.HttpDownloader
import ac.mdiq.podcini.storage.model.download.DownloadError
import ac.mdiq.podcini.storage.model.feed.FeedFile
import ac.mdiq.podcini.net.download.serviceinterface.DownloadRequest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package de.test.podcini.service.playback
import androidx.test.annotation.UiThreadTest
import androidx.test.filters.MediumTest
import androidx.test.platform.app.InstrumentationRegistry
import ac.mdiq.podcini.service.playback.LocalPSMP
import ac.mdiq.podcini.playback.service.LocalPSMP
import ac.mdiq.podcini.storage.model.feed.*
import ac.mdiq.podcini.storage.model.playback.Playable
import ac.mdiq.podcini.playback.base.PlaybackServiceMediaPlayer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import ac.mdiq.podcini.preferences.SleepTimerPreferences.setShakeToReset
import ac.mdiq.podcini.preferences.SleepTimerPreferences.setVibrate
import ac.mdiq.podcini.service.playback.PlaybackServiceTaskManager
import ac.mdiq.podcini.service.playback.PlaybackServiceTaskManager.PSTMCallback
import ac.mdiq.podcini.playback.service.PlaybackServiceTaskManager
import ac.mdiq.podcini.playback.service.PlaybackServiceTaskManager.PSTMCallback
import ac.mdiq.podcini.ui.widget.WidgetUpdater.WidgetState
import ac.mdiq.podcini.playback.event.SleepTimerUpdatedEvent
import ac.mdiq.podcini.util.event.playback.SleepTimerUpdatedEvent
import ac.mdiq.podcini.storage.model.feed.Feed
import ac.mdiq.podcini.storage.model.feed.FeedItem
import ac.mdiq.podcini.storage.model.playback.Playable
Expand Down
176 changes: 84 additions & 92 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
android:allowAudioPlaybackCapture="true"
android:networkSecurityConfig="@xml/network_security_config">

<service android:name=".service.playback.PlaybackService"
<service android:name=".playback.service.PlaybackService"
android:foregroundServiceType="mediaPlayback"
android:label="@string/app_name"
android:enabled="true"
Expand Down Expand Up @@ -79,7 +79,7 @@
tools:ignore="ExportedReceiver" /> <!-- allow feeds update to be triggered by external apps -->

<service
android:name=".service.QuickSettingsTileService"
android:name=".playback.service.QuickSettingsTileService"
android:enabled="true"
android:exported="true"
android:label="@string/app_name"
Expand Down Expand Up @@ -148,28 +148,28 @@
android:windowSoftInputMode="stateAlwaysHidden"
android:launchMode="singleTask"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data
android:host="podcini.org"
android:pathPrefix="/deeplink/main"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data
android:host="podcini.org"
android:pathPrefix="/deeplink/search"
android:scheme="https" />
</intent-filter>
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW" />-->

<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <category android:name="android.intent.category.BROWSABLE" />-->

<!-- <data-->
<!-- android:host="podcini.org"-->
<!-- android:pathPrefix="/deeplink/main"-->
<!-- android:scheme="https" />-->
<!-- </intent-filter>-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW" />-->

<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <category android:name="android.intent.category.BROWSABLE" />-->

<!-- <data-->
<!-- android:host="podcini.org"-->
<!-- android:pathPrefix="/deeplink/search"-->
<!-- android:scheme="https" />-->
<!-- </intent-filter>-->
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="ac.mdiq.podcini.intents.MAIN_ACTIVITY" />
Expand Down Expand Up @@ -272,39 +272,36 @@
android:value="ac.mdiq.podcini.ui.activity.MainActivity"/>

<!-- URLs ending with '.xml' or '.rss' -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>

<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>

<data android:scheme="http"/>
<data android:scheme="https"/>
<data android:host="*"/>
<data android:pathPattern=".*\\.xml"/>
<data android:pathPattern=".*\\.rss"/>
<data android:pathPattern=".*\\.atom"/>
</intent-filter>
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW"/>-->
<!-- <category android:name="android.intent.category.DEFAULT"/>-->
<!-- <category android:name="android.intent.category.BROWSABLE"/>-->

<!-- <data android:scheme="http"/>-->
<!-- <data android:scheme="https"/>-->
<!-- <data android:host="*"/>-->
<!-- <data android:pathPattern=".*\\.xml"/>-->
<!-- <data android:pathPattern=".*\\.rss"/>-->
<!-- <data android:pathPattern=".*\\.atom"/>-->
<!-- </intent-filter>-->

<!-- Feedburner URLs -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>

<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>

<data android:scheme="http"/>
<data android:scheme="https"/>
<data android:host="feeds.feedburner.com"/>
<data android:host="feedproxy.google.com"/>
<data android:host="feeds2.feedburner.com"/>
<data android:host="feedsproxy.google.com"/>
</intent-filter>
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW"/>-->
<!-- <category android:name="android.intent.category.DEFAULT"/>-->
<!-- <category android:name="android.intent.category.BROWSABLE"/>-->

<!-- <data android:scheme="http"/>-->
<!-- <data android:scheme="https"/>-->
<!-- <data android:host="feeds.feedburner.com"/>-->
<!-- <data android:host="feedproxy.google.com"/>-->
<!-- <data android:host="feeds2.feedburner.com"/>-->
<!-- <data android:host="feedsproxy.google.com"/>-->
<!-- </intent-filter>-->

<!-- Files with mimeType rss/xml/atom -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>

<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>

Expand All @@ -319,7 +316,6 @@
<!-- Podcast protocols -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>

<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>

Expand All @@ -330,50 +326,46 @@
</intent-filter>

<!-- Support for subscribeonandroid.com URLS -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:pathPattern=".*\\..*/.*" />
<data android:host="subscribeonandroid.com" />
<data android:host="www.subscribeonandroid.com" />
<data android:host="*subscribeonandroid.com" />
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>

<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:host="podcini.org" />
<data android:host="www.podcini.org" />
<data android:pathPrefix="/deeplink/subscribe" />
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>

<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:pathPattern="/.*/podcast/.*" />
<data android:host="podcasts.apple.com" />
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <category android:name="android.intent.category.BROWSABLE" />-->

<!-- <data android:pathPattern=".*\\..*/.*" />-->
<!-- <data android:host="subscribeonandroid.com" />-->
<!-- <data android:host="www.subscribeonandroid.com" />-->
<!-- <data android:host="*subscribeonandroid.com" />-->
<!-- <data android:scheme="http" />-->
<!-- <data android:scheme="https" />-->
<!-- </intent-filter>-->

<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW" />-->

<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <category android:name="android.intent.category.BROWSABLE" />-->

<!-- <data android:host="podcini.org" />-->
<!-- <data android:host="www.podcini.org" />-->
<!-- <data android:pathPrefix="/deeplink/subscribe" />-->
<!-- <data android:scheme="http" />-->
<!-- <data android:scheme="https" />-->
<!-- </intent-filter>-->

<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <category android:name="android.intent.category.BROWSABLE" />-->

<!-- <data android:pathPattern="/.*/podcast/.*" />-->
<!-- <data android:host="podcasts.apple.com" />-->
<!-- <data android:scheme="http" />-->
<!-- <data android:scheme="https" />-->
<!-- </intent-filter>-->

<intent-filter>
<action android:name="android.intent.action.SEND"/>

<category android:name="android.intent.category.DEFAULT"/>

<data android:mimeType="text/plain"/>
</intent-filter>

Expand Down
2 changes: 1 addition & 1 deletion app/src/main/assets/html-export-template.html
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@
</head>

<body>
<img src="https://podcini.org/assets/img/podcini-logo.png" />
<img src="https://github.com/XilinJia/Podcini/blob/main/images/icon%20256x256.png" />
<h1>Podcini {TITLE}</h1>
<ul>
{FEEDS}
Expand Down
4 changes: 1 addition & 3 deletions app/src/main/java/ac/mdiq/podcini/feed/parser/FeedHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@ class FeedHandler {
saxParser.parse(inputSource, handler)
inputStreamReader.close()
}
return FeedHandlerResult(handler.state.feed,
handler.state.alternateUrls,
handler.state.redirectUrl ?: "")
return FeedHandlerResult(handler.state.feed, handler.state.alternateUrls, handler.state.redirectUrl ?: "")
}
}
Loading

0 comments on commit 26b506e

Please sign in to comment.