From a40da1310f8ba267582b99ce44228e6cc8d84907 Mon Sep 17 00:00:00 2001 From: Xilin Jia <6257601+XilinJia@users.noreply.github.com> Date: Thu, 18 Apr 2024 22:56:00 +0100 Subject: [PATCH] 4.9.0 commit --- README.md | 3 + app/build.gradle | 16 +- .../ac/mdiq/podcini/playback/cast/CastPsmp.kt | 4 +- .../service/playback/WearMediaSession.kt | 4 +- app/src/main/AndroidManifest.xml | 1 + .../base/PlaybackServiceMediaPlayer.kt | 21 +- .../playback/service/ExoPlayerWrapper.kt | 133 ++-- .../podcini/playback/service/LocalPSMP.kt | 44 +- .../playback/service/PlaybackService.kt | 646 ++++++------------ .../PlaybackServiceNotificationBuilder.kt | 58 +- .../playback/service/PlaybackVolumeUpdater.kt | 6 +- .../podcini/storage/database/PodDBAdapter.kt | 57 +- .../actions/actionbutton/PlayActionButton.kt | 4 +- .../actionbutton/PlayLocalActionButton.kt | 2 +- .../actionbutton/StreamActionButton.kt | 2 +- .../menuhandler/FeedItemMenuHandler.kt | 10 +- .../mdiq/podcini/ui/activity/MainActivity.kt | 5 +- .../ui/activity/VideoplayerActivity.kt | 39 +- .../VideoPlayerActivityStarter.kt | 8 +- .../ui/fragment/AudioPlayerFragment.kt | 45 +- .../ui/fragment/EpisodeHomeFragment.kt | 234 +++++++ .../ui/fragment/EpisodeInfoFragment.kt | 37 +- .../ui/fragment/PlayerDetailsFragment.kt | 46 +- .../ui/fragment/VideoEpisodeFragment.kt | 9 +- .../mdiq/podcini/ui/utils/ShownotesCleaner.kt | 9 +- .../mdiq/podcini/ui/widget/WidgetUpdater.kt | 47 +- .../main/res/drawable/baseline_home_24.xml | 5 + .../res/drawable/baseline_home_work_24.xml | 6 + .../main/res/layout/episode_home_fragment.xml | 26 + .../main/res/layout/episode_info_fragment.xml | 112 ++- app/src/main/res/menu/episode_home.xml | 21 + app/src/main/res/menu/mediaplayer.xml | 8 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- .../mipmap-hdpi/ic_launcher_background.png | Bin 11755 -> 0 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 5317 -> 0 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 15173 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 26720 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 41612 -> 0 bytes app/src/main/res/values/colors.xml | 2 + app/src/main/res/values/strings.xml | 1 + .../service/playback/WearMediaSession.kt | 6 +- changelog.md | 11 +- .../android/en-US/changelogs/3020131.txt | 9 + images/black 108.png | Bin 5317 -> 0 bytes images/black 192.png | Bin 11755 -> 0 bytes images/black 216.png | Bin 15173 -> 0 bytes images/black 324.png | Bin 26720 -> 0 bytes images/black 432.png | Bin 41612 -> 0 bytes images/black.png | Bin 71331 -> 0 bytes 49 files changed, 841 insertions(+), 858 deletions(-) create mode 100644 app/src/main/java/ac/mdiq/podcini/ui/fragment/EpisodeHomeFragment.kt create mode 100644 app/src/main/res/drawable/baseline_home_24.xml create mode 100644 app/src/main/res/drawable/baseline_home_work_24.xml create mode 100644 app/src/main/res/layout/episode_home_fragment.xml create mode 100644 app/src/main/res/menu/episode_home.xml delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_background.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_background.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_background.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png create mode 100644 fastlane/metadata/android/en-US/changelogs/3020131.txt delete mode 100644 images/black 108.png delete mode 100644 images/black 192.png delete mode 100644 images/black 216.png delete mode 100644 images/black 324.png delete mode 100644 images/black 432.png delete mode 100644 images/black.png diff --git a/README.md b/README.md index 04461830..34af3ee2 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,9 @@ Even so, the database remains backward compatible, and AntennaPod's db can be ea * New share notes menu option on various episode views * Feed info view offers a link for direct search of feeds related to author +* New episode home view with two display modes: webpage or reader +* Text-to-Speech is enabled in reader's mode +* RSS feeds with no playable media can be subscribed and read/listened ### Online feed diff --git a/app/build.gradle b/app/build.gradle index 37b7b5c8..4e10a202 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -149,8 +149,8 @@ android { // Version code schema (not used): // "1.2.3-beta4" -> 1020304 // "1.2.3" -> 1020395 - versionCode 3020130 - versionName "4.8.0" + versionCode 3020131 + versionName "4.9.0" def commit = "" try { @@ -227,10 +227,11 @@ dependencies { implementation "androidx.fragment:fragment-ktx:1.6.2" implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation "androidx.media:media:1.7.0" - implementation "androidx.media3:media3-exoplayer:1.2.1" - implementation "androidx.media3:media3-ui:1.2.1" - implementation "androidx.media3:media3-datasource-okhttp:1.2.1" - implementation "androidx.media3:media3-common:1.2.1" + implementation "androidx.media3:media3-exoplayer:1.3.1" + implementation "androidx.media3:media3-ui:1.3.1" + implementation "androidx.media3:media3-datasource-okhttp:1.3.1" + implementation "androidx.media3:media3-common:1.3.1" + implementation "androidx.media3:media3-session:1.3.1" implementation "androidx.palette:palette-ktx:1.0.0" implementation "androidx.preference:preference-ktx:1.2.1" implementation "androidx.recyclerview:recyclerview:1.3.2" @@ -269,12 +270,15 @@ dependencies { implementation 'com.github.xabaras:RecyclerViewSwipeDecorator:1.3' implementation "com.annimon:stream:1.2.2" + implementation "net.dankito.readability4j:readability4j:1.0.8" + // Non-free dependencies: playImplementation 'com.google.android.play:core-ktx:1.8.1' compileOnly "com.google.android.wearable:wearable:2.9.0" // this one can not be updated? androidTestImplementation 'com.nanohttpd:nanohttpd:2.1.1' + androidTestImplementation "androidx.test.espresso:espresso-core:3.5.1" androidTestImplementation "androidx.test.espresso:espresso-contrib:3.5.1" androidTestImplementation "androidx.test.espresso:espresso-intents:3.5.1" diff --git a/app/src/free/java/ac/mdiq/podcini/playback/cast/CastPsmp.kt b/app/src/free/java/ac/mdiq/podcini/playback/cast/CastPsmp.kt index bd6bc55b..9a151060 100644 --- a/app/src/free/java/ac/mdiq/podcini/playback/cast/CastPsmp.kt +++ b/app/src/free/java/ac/mdiq/podcini/playback/cast/CastPsmp.kt @@ -9,9 +9,7 @@ import ac.mdiq.podcini.playback.base.PlaybackServiceMediaPlayer.PSMPCallback */ object CastPsmp { @JvmStatic - fun getInstanceIfConnected(context: Context, - callback: PSMPCallback - ): PlaybackServiceMediaPlayer? { + fun getInstanceIfConnected(context: Context, callback: PSMPCallback): PlaybackServiceMediaPlayer? { return null } } diff --git a/app/src/free/java/ac/mdiq/podcini/service/playback/WearMediaSession.kt b/app/src/free/java/ac/mdiq/podcini/service/playback/WearMediaSession.kt index 4db068f7..aaab7897 100644 --- a/app/src/free/java/ac/mdiq/podcini/service/playback/WearMediaSession.kt +++ b/app/src/free/java/ac/mdiq/podcini/service/playback/WearMediaSession.kt @@ -1,7 +1,7 @@ package ac.mdiq.podcini.service.playback -import android.support.v4.media.session.MediaSessionCompat import android.support.v4.media.session.PlaybackStateCompat +import androidx.media3.session.MediaSession internal object WearMediaSession { /** @@ -11,7 +11,7 @@ internal object WearMediaSession { // no-op } - fun mediaSessionSetExtraForWear(mediaSession: MediaSessionCompat?) { + fun mediaSessionSetExtraForWear(mediaSession: MediaSession?) { // no-op } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 39b4ccdc..11da927d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,6 +57,7 @@ tools:ignore="ExportedService"> + diff --git a/app/src/main/java/ac/mdiq/podcini/playback/base/PlaybackServiceMediaPlayer.kt b/app/src/main/java/ac/mdiq/podcini/playback/base/PlaybackServiceMediaPlayer.kt index eb623982..2199a1d2 100644 --- a/app/src/main/java/ac/mdiq/podcini/playback/base/PlaybackServiceMediaPlayer.kt +++ b/app/src/main/java/ac/mdiq/podcini/playback/base/PlaybackServiceMediaPlayer.kt @@ -20,8 +20,8 @@ import kotlin.concurrent.Volatile * Abstract class that allows for different implementations of the PlaybackServiceMediaPlayer for local * and remote (cast devices) playback. */ -abstract class PlaybackServiceMediaPlayer protected constructor(protected val context: Context, - protected val callback: PSMPCallback) { +abstract class PlaybackServiceMediaPlayer protected constructor(protected val context: Context, protected val callback: PSMPCallback) { + @Volatile private var oldPlayerStatus: PlayerStatus? = null @@ -46,6 +46,7 @@ abstract class PlaybackServiceMediaPlayer protected constructor(protected val co } abstract fun isStartWhenPrepared(): Boolean + abstract fun setStartWhenPrepared(startWhenPrepared: Boolean) abstract fun getPlayable(): Playable? @@ -68,6 +69,8 @@ abstract class PlaybackServiceMediaPlayer protected constructor(protected val co abstract fun getSelectedAudioTrack(): Int + abstract fun createMediaPlayer() + /** * Starts or prepares playback of the specified Playable object. If another Playable object is already being played, the currently playing * episode will be stopped and replaced with the new Playable object. If the Playable object is already being played, the method will @@ -98,11 +101,7 @@ abstract class PlaybackServiceMediaPlayer protected constructor(protected val co * for playback immediately (see 'prepareImmediately' parameter for more details) * @param prepareImmediately Set to true if the method should also prepare the episode for playback. */ - abstract fun playMediaObject(playable: Playable, - stream: Boolean, - startWhenPrepared: Boolean, - prepareImmediately: Boolean - ) + abstract fun playMediaObject(playable: Playable, stream: Boolean, startWhenPrepared: Boolean, prepareImmediately: Boolean) /** * Resumes playback if the PSMP object is in PREPARED or PAUSED state. If the PSMP object is in an invalid state. @@ -279,9 +278,7 @@ abstract class PlaybackServiceMediaPlayer protected constructor(protected val co * * @return a Future, just for the purpose of tracking its execution. */ - protected abstract fun endPlayback(hasEnded: Boolean, wasSkipped: Boolean, - shouldContinue: Boolean, toStoppedState: Boolean - ) + protected abstract fun endPlayback(hasEnded: Boolean, wasSkipped: Boolean, shouldContinue: Boolean, toStoppedState: Boolean) /** * @return `true` if the WifiLock feature should be used, `false` otherwise. @@ -327,9 +324,7 @@ abstract class PlaybackServiceMediaPlayer protected constructor(protected val co * Will be ignored if given the value of [Playable.INVALID_TIME]. */ @Synchronized - protected fun setPlayerStatus(newStatus: PlayerStatus, - newMedia: Playable?, position: Int - ) { + protected fun setPlayerStatus(newStatus: PlayerStatus, newMedia: Playable?, position: Int) { Log.d(TAG, this.javaClass.simpleName + ": Setting player status to " + newStatus) this.oldPlayerStatus = playerStatus diff --git a/app/src/main/java/ac/mdiq/podcini/playback/service/ExoPlayerWrapper.kt b/app/src/main/java/ac/mdiq/podcini/playback/service/ExoPlayerWrapper.kt index a40a81c5..d84be978 100644 --- a/app/src/main/java/ac/mdiq/podcini/playback/service/ExoPlayerWrapper.kt +++ b/app/src/main/java/ac/mdiq/podcini/playback/service/ExoPlayerWrapper.kt @@ -44,9 +44,6 @@ class ExoPlayerWrapper internal constructor(private val context: Context) { private val bufferUpdateInterval = 5L private val bufferingUpdateDisposable: Disposable - private lateinit var exoPlayer: ExoPlayer - private lateinit var trackSelector: DefaultTrackSelector - private var loudnessEnhancer: LoudnessEnhancer? = null private var mediaSource: MediaSource? = null private var audioSeekCompleteListener: Runnable? = null @@ -58,36 +55,18 @@ class ExoPlayerWrapper internal constructor(private val context: Context) { init { createPlayer() - playbackParameters = exoPlayer.playbackParameters + playbackParameters = exoPlayer!!.playbackParameters bufferingUpdateDisposable = Observable.interval(bufferUpdateInterval, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe { - bufferingUpdateListener?.accept(exoPlayer.bufferedPercentage) + bufferingUpdateListener?.accept(exoPlayer!!.bufferedPercentage) } } private fun createPlayer() { - val loadControl = DefaultLoadControl.Builder() - loadControl.setBufferDurationsMs(30000, 120000, - DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS, - DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS) - loadControl.setBackBuffer(UserPreferences.rewindSecs * 1000 + 500, true) - trackSelector = DefaultTrackSelector(context) - val audioOffloadPreferences = AudioOffloadPreferences.Builder() - .setAudioOffloadMode(AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_ENABLED) // Add additional options as needed - .setIsGaplessSupportRequired(true) - .setIsSpeedChangeSupportRequired(true) - .build() - exoPlayer = ExoPlayer.Builder(context, DefaultRenderersFactory(context)) - .setTrackSelector(trackSelector) - .setLoadControl(loadControl.build()) - .build() - exoPlayer.setSeekParameters(SeekParameters.EXACT) - exoPlayer.trackSelectionParameters = exoPlayer.trackSelectionParameters - .buildUpon() - .setAudioOffloadPreferences(audioOffloadPreferences) - .build() - exoPlayer.addListener(object : Player.Listener { + if (exoPlayer == null) createStaticPlayer(context) + + exoPlayer?.addListener(object : Player.Listener { override fun onPlaybackStateChanged(playbackState: @Player.State Int) { when { audioCompletionListener != null && playbackState == Player.STATE_ENDED -> { @@ -119,10 +98,7 @@ class ExoPlayerWrapper internal constructor(private val context: Context) { } } - override fun onPositionDiscontinuity(oldPosition: PositionInfo, - newPosition: PositionInfo, - reason: @DiscontinuityReason Int - ) { + override fun onPositionDiscontinuity(oldPosition: PositionInfo, newPosition: PositionInfo, reason: @DiscontinuityReason Int) { if (reason == Player.DISCONTINUITY_REASON_SEEK) { audioSeekCompleteListener?.run() } @@ -133,40 +109,37 @@ class ExoPlayerWrapper internal constructor(private val context: Context) { } }) - initLoudnessEnhancer(exoPlayer.audioSessionId) + initLoudnessEnhancer(exoPlayer!!.audioSessionId) } val currentPosition: Int - get() = exoPlayer.currentPosition.toInt() + get() = exoPlayer!!.currentPosition.toInt() val currentSpeedMultiplier: Float get() = playbackParameters.speed val duration: Int get() { - if (exoPlayer.duration == C.TIME_UNSET) { - return Playable.INVALID_TIME - } - return exoPlayer.duration.toInt() + if (exoPlayer?.duration == C.TIME_UNSET) return Playable.INVALID_TIME + return exoPlayer!!.duration.toInt() } val isPlaying: Boolean - get() = exoPlayer.playWhenReady + get() = exoPlayer!!.playWhenReady fun pause() { - exoPlayer.pause() + exoPlayer?.pause() } @Throws(IllegalStateException::class) fun prepare() { if (mediaSource == null) return - exoPlayer.setMediaSource(mediaSource!!, false) - exoPlayer.prepare() + exoPlayer?.setMediaSource(mediaSource!!, false) + exoPlayer?.prepare() } fun release() { bufferingUpdateDisposable.dispose() - exoPlayer.release() audioSeekCompleteListener = null audioCompletionListener = null @@ -175,23 +148,22 @@ class ExoPlayerWrapper internal constructor(private val context: Context) { } fun reset() { - exoPlayer.release() createPlayer() } @Throws(IllegalStateException::class) fun seekTo(i: Int) { - exoPlayer.seekTo(i.toLong()) + exoPlayer?.seekTo(i.toLong()) audioSeekCompleteListener?.run() } fun setAudioStreamType(i: Int) { - val a = exoPlayer.audioAttributes + val a = exoPlayer!!.audioAttributes val b = AudioAttributes.Builder() b.setContentType(i) b.setFlags(a.flags) b.setUsage(a.usage) - exoPlayer.setAudioAttributes(b.build(), false) + exoPlayer?.setAudioAttributes(b.build(), false) } @Throws(IllegalArgumentException::class, IllegalStateException::class) @@ -201,9 +173,8 @@ class ExoPlayerWrapper internal constructor(private val context: Context) { // Call.Factory callFactory = PodciniHttpClient.getHttpClient(); // Assuming it returns OkHttpClient // OkHttpDataSource.Factory httpDataSourceFactory = new OkHttpDataSource.Factory(callFactory) // .setUserAgent(ClientConfig.USER_AGENT); - val httpDataSourceFactory = - OkHttpDataSource.Factory(PodciniHttpClient.getHttpClient() as okhttp3.Call.Factory) - .setUserAgent(ClientConfig.USER_AGENT) + val httpDataSourceFactory = OkHttpDataSource.Factory(PodciniHttpClient.getHttpClient() as okhttp3.Call.Factory) + .setUserAgent(ClientConfig.USER_AGENT) if (!user.isNullOrEmpty() && !password.isNullOrEmpty()) { val requestProperties = HashMap() @@ -225,35 +196,35 @@ class ExoPlayerWrapper internal constructor(private val context: Context) { } fun setDisplay(sh: SurfaceHolder?) { - exoPlayer.setVideoSurfaceHolder(sh) + exoPlayer?.setVideoSurfaceHolder(sh) } fun setPlaybackParams(speed: Float, skipSilence: Boolean) { Log.d(TAG, "setPlaybackParams speed=$speed pitch=${playbackParameters.pitch} skipSilence=$skipSilence") playbackParameters = PlaybackParameters(speed, playbackParameters.pitch) - exoPlayer.skipSilenceEnabled = skipSilence - exoPlayer.playbackParameters = playbackParameters + exoPlayer!!.skipSilenceEnabled = skipSilence + exoPlayer!!.playbackParameters = playbackParameters } fun setVolume(v: Float, v1: Float) { if (v > 1) { - exoPlayer.volume = 1f + exoPlayer!!.volume = 1f loudnessEnhancer?.setEnabled(true) loudnessEnhancer?.setTargetGain((1000 * (v - 1)).toInt()) } else { - exoPlayer.volume = v + exoPlayer!!.volume = v loudnessEnhancer?.setEnabled(false) } } fun start() { - exoPlayer.play() + exoPlayer?.play() // Can't set params when paused - so always set it on start in case they changed - exoPlayer.playbackParameters = playbackParameters + exoPlayer!!.playbackParameters = playbackParameters } fun stop() { - exoPlayer.stop() + exoPlayer?.stop() } val audioTracks: List @@ -269,8 +240,7 @@ class ExoPlayerWrapper internal constructor(private val context: Context) { private val formats: List get() { val formats: MutableList = arrayListOf() - val trackInfo = trackSelector.currentMappedTrackInfo - ?: return emptyList() + val trackInfo = trackSelector!!.currentMappedTrackInfo ?: return emptyList() val trackGroups = trackInfo.getTrackGroups(audioRendererIndex) for (i in 0 until trackGroups.length) { formats.add(trackGroups[i].getFormat(0)) @@ -279,28 +249,25 @@ class ExoPlayerWrapper internal constructor(private val context: Context) { } fun setAudioTrack(track: Int) { - val trackInfo = trackSelector.currentMappedTrackInfo ?: return + val trackInfo = trackSelector!!.currentMappedTrackInfo ?: return val trackGroups = trackInfo.getTrackGroups(audioRendererIndex) val override = SelectionOverride(track, 0) val rendererIndex = audioRendererIndex - val params = trackSelector.buildUponParameters() - .setSelectionOverride(rendererIndex, trackGroups, override) - trackSelector.setParameters(params) + val params = trackSelector!!.buildUponParameters().setSelectionOverride(rendererIndex, trackGroups, override) + trackSelector!!.setParameters(params) } private val audioRendererIndex: Int get() { - for (i in 0 until exoPlayer.rendererCount) { - if (exoPlayer.getRendererType(i) == C.TRACK_TYPE_AUDIO) { - return i - } + for (i in 0 until exoPlayer!!.rendererCount) { + if (exoPlayer?.getRendererType(i) == C.TRACK_TYPE_AUDIO) return i } return -1 } val selectedAudioTrack: Int get() { - val trackSelections = exoPlayer.currentTrackSelections + val trackSelections = exoPlayer!!.currentTrackSelections val availableFormats = formats for (i in 0 until trackSelections.length) { val track = trackSelections[i] as ExoTrackSelection? ?: continue @@ -325,12 +292,12 @@ class ExoPlayerWrapper internal constructor(private val context: Context) { val videoWidth: Int get() { - return exoPlayer.videoFormat?.width ?: 0 + return exoPlayer?.videoFormat?.width ?: 0 } val videoHeight: Int get() { - return exoPlayer.videoFormat?.height ?: 0 + return exoPlayer?.videoFormat?.height ?: 0 } fun setOnBufferingUpdateListener(bufferingUpdateListener: Consumer?) { @@ -356,5 +323,33 @@ class ExoPlayerWrapper internal constructor(private val context: Context) { const val BUFFERING_ENDED: Int = -2 private const val TAG = "ExoPlayerWrapper" const val ERROR_CODE_OFFSET: Int = 1000 + + private var trackSelector: DefaultTrackSelector? = null + var exoPlayer: ExoPlayer? = null + + fun createStaticPlayer(context: Context) { + val loadControl = DefaultLoadControl.Builder() + loadControl.setBufferDurationsMs(30000, 120000, DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS, + DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS) + loadControl.setBackBuffer(UserPreferences.rewindSecs * 1000 + 500, true) + trackSelector = DefaultTrackSelector(context) + val audioOffloadPreferences = AudioOffloadPreferences.Builder() + .setAudioOffloadMode(AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_ENABLED) // Add additional options as needed + .setIsGaplessSupportRequired(true) + .setIsSpeedChangeSupportRequired(true) + .build() + Log.d(TAG, "createPlayer creating exoPlayer_") + + exoPlayer = ExoPlayer.Builder(context, DefaultRenderersFactory(context)) + .setTrackSelector(trackSelector!!) + .setLoadControl(loadControl.build()) + .build() + + exoPlayer?.setSeekParameters(SeekParameters.EXACT) + exoPlayer!!.trackSelectionParameters = exoPlayer!!.trackSelectionParameters + .buildUpon() + .setAudioOffloadPreferences(audioOffloadPreferences) + .build() + } } } diff --git a/app/src/main/java/ac/mdiq/podcini/playback/service/LocalPSMP.kt b/app/src/main/java/ac/mdiq/podcini/playback/service/LocalPSMP.kt index 0cc46044..6fd907ed 100644 --- a/app/src/main/java/ac/mdiq/podcini/playback/service/LocalPSMP.kt +++ b/app/src/main/java/ac/mdiq/podcini/playback/service/LocalPSMP.kt @@ -98,11 +98,7 @@ class LocalPSMP(context: Context, callback: PSMPCallback) : PlaybackServiceMedia * for playback immediately (see 'prepareImmediately' parameter for more details) * @param prepareImmediately Set to true if the method should also prepare the episode for playback. */ - override fun playMediaObject(playable: Playable, - stream: Boolean, - startWhenPrepared: Boolean, - prepareImmediately: Boolean - ) { + override fun playMediaObject(playable: Playable, stream: Boolean, startWhenPrepared: Boolean, prepareImmediately: Boolean) { Log.d(TAG, "playMediaObject(...)") try { playMediaObject(playable, false, stream, startWhenPrepared, prepareImmediately) @@ -121,12 +117,7 @@ class LocalPSMP(context: Context, callback: PSMPCallback) : PlaybackServiceMedia * * @see .playMediaObject */ - private fun playMediaObject(playable: Playable, - forceReset: Boolean, - stream: Boolean, - startWhenPrepared: Boolean, - prepareImmediately: Boolean - ) { + private fun playMediaObject(playable: Playable, forceReset: Boolean, stream: Boolean, startWhenPrepared: Boolean, prepareImmediately: Boolean) { if (media != null) { if (!forceReset && media!!.getIdentifier() == playable.getIdentifier() && playerStatus == PlayerStatus.PLAYING) { // episode is already playing -> ignore method call @@ -161,7 +152,6 @@ class LocalPSMP(context: Context, callback: PSMPCallback) : PlaybackServiceMedia try { callback.ensureMediaInfoLoaded(media!!) callback.onMediaChanged(false) -// TODO: speed setPlaybackParams(PlaybackSpeedUtils.getCurrentPlaybackSpeed(media), UserPreferences.isSkipSilence) when { stream -> { @@ -169,10 +159,7 @@ class LocalPSMP(context: Context, callback: PSMPCallback) : PlaybackServiceMedia if (streamurl != null) { if (playable is FeedMedia && playable.item?.feed?.preferences != null) { val preferences = playable.item!!.feed!!.preferences!! - mediaPlayer?.setDataSource( - streamurl, - preferences.username, - preferences.password) + mediaPlayer?.setDataSource(streamurl, preferences.username, preferences.password) } else { mediaPlayer?.setDataSource(streamurl) } @@ -221,14 +208,11 @@ class LocalPSMP(context: Context, callback: PSMPCallback) : PlaybackServiceMedia Log.d(TAG, "Audiofocus successfully requested") Log.d(TAG, "Resuming/Starting playback") acquireWifiLockIfNecessary() -// TODO: speed setPlaybackParams(PlaybackSpeedUtils.getCurrentPlaybackSpeed(media), UserPreferences.isSkipSilence) setVolume(1.0f, 1.0f) if (media != null && playerStatus == PlayerStatus.PREPARED && media!!.getPosition() > 0) { - val newPosition = RewindAfterPauseUtils.calculatePositionWithRewind( - media!!.getPosition(), - media!!.getLastPlayedTime()) + val newPosition = RewindAfterPauseUtils.calculatePositionWithRewind(media!!.getPosition(), media!!.getLastPlayedTime()) seekTo(newPosition) } mediaPlayer?.start() @@ -502,9 +486,7 @@ class LocalPSMP(context: Context, callback: PSMPCallback) : PlaybackServiceMedia if (mediaPlayer != null) { try { clearMediaPlayerListeners() - if (mediaPlayer!!.isPlaying) { - mediaPlayer!!.stop() - } + if (mediaPlayer!!.isPlaying) mediaPlayer!!.stop() } catch (e: Exception) { e.printStackTrace() } @@ -571,7 +553,7 @@ class LocalPSMP(context: Context, callback: PSMPCallback) : PlaybackServiceMedia return mediaPlayer?.selectedAudioTrack?:0 } - private fun createMediaPlayer() { + override fun createMediaPlayer() { mediaPlayer?.release() if (media == null) { @@ -650,9 +632,7 @@ class LocalPSMP(context: Context, callback: PSMPCallback) : PlaybackServiceMedia .build() } - override fun endPlayback(hasEnded: Boolean, wasSkipped: Boolean, - shouldContinue: Boolean, toStoppedState: Boolean - ) { + override fun endPlayback(hasEnded: Boolean, wasSkipped: Boolean, shouldContinue: Boolean, toStoppedState: Boolean) { releaseWifiLockIfNecessary() val isPlaying = playerStatus == PlayerStatus.PLAYING @@ -720,13 +700,9 @@ class LocalPSMP(context: Context, callback: PSMPCallback) : PlaybackServiceMedia } private fun setMediaPlayerListeners(mp: ExoPlayerWrapper?) { - if (mp == null || media == null) { - return - } - mp.setOnCompletionListener(Runnable { endPlayback(hasEnded = true, - wasSkipped = false, - shouldContinue = true, - toStoppedState = true) }) + if (mp == null || media == null) return + + mp.setOnCompletionListener(Runnable { endPlayback(hasEnded = true, wasSkipped = false, shouldContinue = true, toStoppedState = true) }) mp.setOnSeekCompleteListener(Runnable { this.genericSeekCompleteListener() }) mp.setOnBufferingUpdateListener(Consumer { percent: Int -> when (percent) { diff --git a/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackService.kt b/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackService.kt index e3b82c63..fe2de3fe 100644 --- a/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackService.kt +++ b/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackService.kt @@ -11,11 +11,9 @@ import ac.mdiq.podcini.playback.base.PlayerStatus import ac.mdiq.podcini.playback.cast.CastPsmp import ac.mdiq.podcini.playback.cast.CastStateListener import ac.mdiq.podcini.playback.service.PlaybackServiceTaskManager.PSTMCallback -import ac.mdiq.podcini.preferences.PlaybackPreferences import ac.mdiq.podcini.preferences.PlaybackPreferences.Companion.clearCurrentlyPlayingTemporaryPlaybackSpeed import ac.mdiq.podcini.preferences.PlaybackPreferences.Companion.createInstanceFromPreferences import ac.mdiq.podcini.preferences.PlaybackPreferences.Companion.currentEpisodeIsVideo -import ac.mdiq.podcini.preferences.PlaybackPreferences.Companion.currentPlayerStatus import ac.mdiq.podcini.preferences.PlaybackPreferences.Companion.currentlyPlayingFeedMediaId import ac.mdiq.podcini.preferences.PlaybackPreferences.Companion.currentlyPlayingTemporaryPlaybackSpeed import ac.mdiq.podcini.preferences.PlaybackPreferences.Companion.writeMediaPlaying @@ -26,8 +24,6 @@ import ac.mdiq.podcini.preferences.SleepTimerPreferences.autoEnableFrom import ac.mdiq.podcini.preferences.SleepTimerPreferences.autoEnableTo import ac.mdiq.podcini.preferences.SleepTimerPreferences.isInTimeRange import ac.mdiq.podcini.preferences.SleepTimerPreferences.timerMillis -import ac.mdiq.podcini.preferences.UserPreferences.allEpisodesSortOrder -import ac.mdiq.podcini.preferences.UserPreferences.downloadsSortedOrder import ac.mdiq.podcini.preferences.UserPreferences.fastForwardSecs import ac.mdiq.podcini.preferences.UserPreferences.getPlaybackSpeed import ac.mdiq.podcini.preferences.UserPreferences.hardwareForwardButton @@ -39,7 +35,6 @@ import ac.mdiq.podcini.preferences.UserPreferences.isPersistNotify import ac.mdiq.podcini.preferences.UserPreferences.isSkipSilence import ac.mdiq.podcini.preferences.UserPreferences.isUnpauseOnBluetoothReconnect import ac.mdiq.podcini.preferences.UserPreferences.isUnpauseOnHeadsetReconnect -import ac.mdiq.podcini.preferences.UserPreferences.playbackSpeedArray import ac.mdiq.podcini.preferences.UserPreferences.rewindSecs import ac.mdiq.podcini.preferences.UserPreferences.setPlaybackSpeed import ac.mdiq.podcini.preferences.UserPreferences.shouldFavoriteKeepEpisode @@ -52,8 +47,10 @@ import ac.mdiq.podcini.receiver.MediaButtonReceiver import ac.mdiq.podcini.service.playback.WearMediaSession import ac.mdiq.podcini.storage.DBReader import ac.mdiq.podcini.storage.DBWriter -import ac.mdiq.podcini.storage.FeedSearcher -import ac.mdiq.podcini.storage.model.feed.* +import ac.mdiq.podcini.storage.model.feed.Feed +import ac.mdiq.podcini.storage.model.feed.FeedItem +import ac.mdiq.podcini.storage.model.feed.FeedMedia +import ac.mdiq.podcini.storage.model.feed.FeedPreferences import ac.mdiq.podcini.storage.model.feed.FeedPreferences.AutoDeleteAction import ac.mdiq.podcini.storage.model.playback.MediaType import ac.mdiq.podcini.storage.model.playback.Playable @@ -61,7 +58,6 @@ import ac.mdiq.podcini.ui.activity.appstartintent.MainActivityStarter import ac.mdiq.podcini.ui.activity.appstartintent.VideoPlayerActivityStarter import ac.mdiq.podcini.ui.utils.NotificationUtils import ac.mdiq.podcini.ui.widget.WidgetUpdater.WidgetState -import ac.mdiq.podcini.util.ChapterUtils.getCurrentChapterIndex import ac.mdiq.podcini.util.FeedItemUtil.hasAlmostEnded import ac.mdiq.podcini.util.FeedUtil.shouldAutoDeleteItemsOnThatFeed import ac.mdiq.podcini.util.IntentUtils.sendLocalBroadcast @@ -76,15 +72,16 @@ import android.Manifest import android.annotation.SuppressLint import android.app.NotificationManager import android.app.PendingIntent -import android.app.UiModeManager import android.bluetooth.BluetoothA2dp import android.content.* import android.content.pm.PackageManager -import android.content.res.Configuration import android.media.AudioManager import android.net.Uri -import android.os.* +import android.os.Binder +import android.os.Build import android.os.Build.VERSION_CODES +import android.os.IBinder +import android.os.Vibrator import android.service.quicksettings.TileService import android.support.v4.media.MediaBrowserCompat import android.support.v4.media.MediaDescriptionCompat @@ -96,7 +93,6 @@ import android.util.Log import android.util.Pair import android.view.KeyEvent import android.view.SurfaceHolder -import android.view.ViewConfiguration import android.webkit.URLUtil import android.widget.Toast import androidx.annotation.DrawableRes @@ -104,10 +100,13 @@ import androidx.annotation.StringRes import androidx.core.app.ActivityCompat import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat -import androidx.media.MediaBrowserServiceCompat import androidx.media3.common.util.UnstableApi -import io.reactivex.* +import androidx.media3.exoplayer.ExoPlayer +import androidx.media3.session.MediaLibraryService +import androidx.media3.session.MediaSession import io.reactivex.Observable +import io.reactivex.Single +import io.reactivex.SingleEmitter import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers @@ -123,7 +122,7 @@ import kotlin.math.max * Controls the MediaPlayer that plays a FeedMedia-file */ @UnstableApi -class PlaybackService : MediaBrowserServiceCompat() { +class PlaybackService : MediaLibraryService() { private var mediaPlayer: PlaybackServiceMediaPlayer? = null private var positionEventTimer: Disposable? = null @@ -133,8 +132,8 @@ class PlaybackService : MediaBrowserServiceCompat() { private lateinit var castStateListener: CastStateListener private var autoSkippedFeedMediaId: String? = null - private var clickCount = 0 - private val clickHandler = Handler(Looper.getMainLooper()) +// private var clickCount = 0 +// private val clickHandler = Handler(Looper.getMainLooper()) private var isSpeedForward = false private var normalSpeed = 1.0f @@ -145,7 +144,7 @@ class PlaybackService : MediaBrowserServiceCompat() { /** * Used for Lollipop notifications, Android Wear, and Android Auto. */ - private var mediaSession: MediaSessionCompat? = null + private var mediaSession: MediaSession? = null private val mBinder: IBinder = LocalBinder() @@ -191,36 +190,14 @@ class PlaybackService : MediaBrowserServiceCompat() { } fun recreateMediaSessionIfNeeded() { - if (mediaSession != null) { - // Media session was not destroyed, so we can re-use it. - if (!mediaSession!!.isActive) { - mediaSession!!.isActive = true - } - return - } - val eventReceiver = ComponentName(applicationContext, MediaButtonReceiver::class.java) - val mediaButtonIntent = Intent(Intent.ACTION_MEDIA_BUTTON) - mediaButtonIntent.setComponent(eventReceiver) - val buttonReceiverIntent = PendingIntent.getBroadcast(this, 0, mediaButtonIntent, - PendingIntent.FLAG_UPDATE_CURRENT or (if (Build.VERSION.SDK_INT >= 31) PendingIntent.FLAG_MUTABLE else 0)) + if (mediaSession != null) return - mediaSession = MediaSessionCompat(applicationContext, TAG, eventReceiver, buttonReceiverIntent) - sessionToken = mediaSession!!.sessionToken - - try { - mediaSession!!.setCallback(sessionCallback) - mediaSession!!.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS) - } catch (npe: NullPointerException) { - // on some devices (Huawei) setting active can cause a NullPointerException - // even with correct use of the api. - // See http://stackoverflow.com/questions/31556679/android-huawei-mediassessioncompat - // and https://plus.google.com/+IanLake/posts/YgdTkKFxz7d - Log.e(TAG, "NullPointerException while setting up MediaSession") - npe.printStackTrace() - } + if (ExoPlayerWrapper.exoPlayer == null) ExoPlayerWrapper.createStaticPlayer(applicationContext) + mediaSession = MediaSession.Builder(applicationContext, ExoPlayerWrapper.exoPlayer!!) + .setCallback(sessionCallback) + .build() recreateMediaPlayer() - mediaSession!!.isActive = true } fun recreateMediaPlayer() { @@ -234,7 +211,7 @@ class PlaybackService : MediaBrowserServiceCompat() { } mediaPlayer = CastPsmp.getInstanceIfConnected(this, mediaPlayerCallback) if (mediaPlayer == null) { - mediaPlayer = LocalPSMP(this, mediaPlayerCallback) // Cast not supported or not connected + mediaPlayer = LocalPSMP(applicationContext, mediaPlayerCallback) // Cast not supported or not connected } if (media != null) { mediaPlayer!!.playMediaObject(media, !media.localFileAvailable(), wasPlaying, true) @@ -271,8 +248,13 @@ class PlaybackService : MediaBrowserServiceCompat() { castStateListener.destroy() cancelPositionObserver() - mediaSession?.release() - mediaSession = null + mediaSession?.run { + player.release() + release() + mediaSession = null + } + ExoPlayerWrapper.exoPlayer?.release() + ExoPlayerWrapper.exoPlayer = null mediaPlayer?.shutdown() unregisterReceiver(autoStateUpdated) @@ -284,18 +266,8 @@ class PlaybackService : MediaBrowserServiceCompat() { EventBus.getDefault().unregister(this) } - override fun onGetRoot(clientPackageName: String, clientUid: Int, rootHints: Bundle?): BrowserRoot { - Log.d(TAG, "OnGetRoot: clientPackageName=" + clientPackageName + - "; clientUid=" + clientUid + " ; rootHints=" + rootHints) - if (rootHints != null && rootHints.getBoolean(BrowserRoot.EXTRA_RECENT)) { - val extras = Bundle() - extras.putBoolean(BrowserRoot.EXTRA_RECENT, true) - Log.d(TAG, "OnGetRoot: Returning BrowserRoot " + R.string.current_playing_episode) - return BrowserRoot(resources.getString(R.string.current_playing_episode), extras) - } - - // Name visible in Android Auto - return BrowserRoot(resources.getString(R.string.app_name), null) + override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaLibrarySession? { + return null } private fun loadQueueForMediaSession() { @@ -311,139 +283,141 @@ class PlaybackService : MediaBrowserServiceCompat() { } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe({ queueItems: List? -> mediaSession?.setQueue(queueItems) }, + .subscribe({ queueItems: List? -> +// mediaSession?.setQueue(queueItems) + }, { obj: Throwable -> obj.printStackTrace() }) } - private fun createBrowsableMediaItem( - @StringRes title: Int, @DrawableRes icon: Int, numEpisodes: Int - ): MediaBrowserCompat.MediaItem { - val uri = Uri.Builder() - .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) - .authority(resources.getResourcePackageName(icon)) - .appendPath(resources.getResourceTypeName(icon)) - .appendPath(resources.getResourceEntryName(icon)) - .build() +// private fun createBrowsableMediaItem( +// @StringRes title: Int, @DrawableRes icon: Int, numEpisodes: Int +// ): MediaBrowserCompat.MediaItem { +// val uri = Uri.Builder() +// .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) +// .authority(resources.getResourcePackageName(icon)) +// .appendPath(resources.getResourceTypeName(icon)) +// .appendPath(resources.getResourceEntryName(icon)) +// .build() +// +// val description = MediaDescriptionCompat.Builder() +// .setIconUri(uri) +// .setMediaId(resources.getString(title)) +// .setTitle(resources.getString(title)) +// .setSubtitle(resources.getQuantityString(R.plurals.num_episodes, numEpisodes, numEpisodes)) +// .build() +// return MediaBrowserCompat.MediaItem(description, MediaBrowserCompat.MediaItem.FLAG_BROWSABLE) +// } - val description = MediaDescriptionCompat.Builder() - .setIconUri(uri) - .setMediaId(resources.getString(title)) - .setTitle(resources.getString(title)) - .setSubtitle(resources.getQuantityString(R.plurals.num_episodes, numEpisodes, numEpisodes)) - .build() - return MediaBrowserCompat.MediaItem(description, MediaBrowserCompat.MediaItem.FLAG_BROWSABLE) - } +// private fun createBrowsableMediaItemForFeed(feed: Feed): MediaBrowserCompat.MediaItem { +// val builder = MediaDescriptionCompat.Builder() +// .setMediaId("FeedId:" + feed.id) +// .setTitle(feed.title) +// .setDescription(feed.description) +// .setSubtitle(feed.getCustomTitle()) +// if (feed.imageUrl != null) { +// builder.setIconUri(Uri.parse(feed.imageUrl)) +// } +// if (feed.link != null) { +// builder.setMediaUri(Uri.parse(feed.link)) +// } +// val description = builder.build() +// return MediaBrowserCompat.MediaItem(description, +// MediaBrowserCompat.MediaItem.FLAG_BROWSABLE) +// } - private fun createBrowsableMediaItemForFeed(feed: Feed): MediaBrowserCompat.MediaItem { - val builder = MediaDescriptionCompat.Builder() - .setMediaId("FeedId:" + feed.id) - .setTitle(feed.title) - .setDescription(feed.description) - .setSubtitle(feed.getCustomTitle()) - if (feed.imageUrl != null) { - builder.setIconUri(Uri.parse(feed.imageUrl)) - } - if (feed.link != null) { - builder.setMediaUri(Uri.parse(feed.link)) - } - val description = builder.build() - return MediaBrowserCompat.MediaItem(description, - MediaBrowserCompat.MediaItem.FLAG_BROWSABLE) - } +// override fun onLoadChildren(parentId: String, +// result: Result> +// ) { +// Log.d(TAG, "OnLoadChildren: parentMediaId=$parentId") +// result.detach() +// +// Completable.create { emitter: CompletableEmitter -> +// result.sendResult(loadChildrenSynchronous(parentId)) +// emitter.onComplete() +// } +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe( +// {}, { e: Throwable -> +// e.printStackTrace() +// result.sendResult(null) +// }) +// } - override fun onLoadChildren(parentId: String, - result: Result> - ) { - Log.d(TAG, "OnLoadChildren: parentMediaId=$parentId") - result.detach() +// private fun loadChildrenSynchronous(parentId: String): List? { +// val mediaItems: MutableList = ArrayList() +// if (parentId == resources.getString(R.string.app_name)) { +// val currentlyPlaying = currentPlayerStatus.toLong() +// if (currentlyPlaying == PlaybackPreferences.PLAYER_STATUS_PLAYING.toLong() +// || currentlyPlaying == PlaybackPreferences.PLAYER_STATUS_PAUSED.toLong()) { +// mediaItems.add(createBrowsableMediaItem(R.string.current_playing_episode, R.drawable.ic_play_48dp, 1)) +// } +// mediaItems.add(createBrowsableMediaItem(R.string.queue_label, R.drawable.ic_playlist_play_black, +// DBReader.getTotalEpisodeCount(FeedItemFilter(FeedItemFilter.QUEUED)))) +// mediaItems.add(createBrowsableMediaItem(R.string.downloads_label, R.drawable.ic_download_black, +// DBReader.getTotalEpisodeCount(FeedItemFilter(FeedItemFilter.DOWNLOADED)))) +// mediaItems.add(createBrowsableMediaItem(R.string.episodes_label, R.drawable.ic_feed_black, +// DBReader.getTotalEpisodeCount(FeedItemFilter(FeedItemFilter.UNPLAYED)))) +// val feeds = DBReader.getFeedList() +// for (feed in feeds) { +// mediaItems.add(createBrowsableMediaItemForFeed(feed)) +// } +// return mediaItems +// } +// +// val feedItems: List +// when { +// parentId == resources.getString(R.string.queue_label) -> { +// feedItems = DBReader.getQueue() +// } +// parentId == resources.getString(R.string.downloads_label) -> { +// feedItems = DBReader.getEpisodes(0, MAX_ANDROID_AUTO_EPISODES_PER_FEED, +// FeedItemFilter(FeedItemFilter.DOWNLOADED), downloadsSortedOrder) +// } +// parentId == resources.getString(R.string.episodes_label) -> { +// feedItems = DBReader.getEpisodes(0, MAX_ANDROID_AUTO_EPISODES_PER_FEED, +// FeedItemFilter(FeedItemFilter.UNPLAYED), allEpisodesSortOrder) +// } +// parentId.startsWith("FeedId:") -> { +// val feedId = parentId.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[1].toLong() +// val feed = DBReader.getFeed(feedId) +// feedItems = if (feed != null) DBReader.getFeedItemList(feed, FeedItemFilter.unfiltered(), feed.sortOrder) else listOf() +// } +// parentId == getString(R.string.current_playing_episode) -> { +// val playable = createInstanceFromPreferences(this) +// if (playable is FeedMedia) { +// feedItems = listOf(playable.item) +// } else { +// return null +// } +// } +// else -> { +// Log.e(TAG, "Parent ID not found: $parentId") +// return null +// } +// } +// var count = 0 +// for (feedItem in feedItems) { +// if (feedItem?.media != null) { +// mediaItems.add(feedItem.media!!.mediaItem) +// if (++count >= MAX_ANDROID_AUTO_EPISODES_PER_FEED) { +// break +// } +// } +// } +// return mediaItems +// } - Completable.create { emitter: CompletableEmitter -> - result.sendResult(loadChildrenSynchronous(parentId)) - emitter.onComplete() - } - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe( - {}, { e: Throwable -> - e.printStackTrace() - result.sendResult(null) - }) - } - - private fun loadChildrenSynchronous(parentId: String): List? { - val mediaItems: MutableList = ArrayList() - if (parentId == resources.getString(R.string.app_name)) { - val currentlyPlaying = currentPlayerStatus.toLong() - if (currentlyPlaying == PlaybackPreferences.PLAYER_STATUS_PLAYING.toLong() - || currentlyPlaying == PlaybackPreferences.PLAYER_STATUS_PAUSED.toLong()) { - mediaItems.add(createBrowsableMediaItem(R.string.current_playing_episode, R.drawable.ic_play_48dp, 1)) - } - mediaItems.add(createBrowsableMediaItem(R.string.queue_label, R.drawable.ic_playlist_play_black, - DBReader.getTotalEpisodeCount(FeedItemFilter(FeedItemFilter.QUEUED)))) - mediaItems.add(createBrowsableMediaItem(R.string.downloads_label, R.drawable.ic_download_black, - DBReader.getTotalEpisodeCount(FeedItemFilter(FeedItemFilter.DOWNLOADED)))) - mediaItems.add(createBrowsableMediaItem(R.string.episodes_label, R.drawable.ic_feed_black, - DBReader.getTotalEpisodeCount(FeedItemFilter(FeedItemFilter.UNPLAYED)))) - val feeds = DBReader.getFeedList() - for (feed in feeds) { - mediaItems.add(createBrowsableMediaItemForFeed(feed)) - } - return mediaItems - } - - val feedItems: List - when { - parentId == resources.getString(R.string.queue_label) -> { - feedItems = DBReader.getQueue() - } - parentId == resources.getString(R.string.downloads_label) -> { - feedItems = DBReader.getEpisodes(0, MAX_ANDROID_AUTO_EPISODES_PER_FEED, - FeedItemFilter(FeedItemFilter.DOWNLOADED), downloadsSortedOrder) - } - parentId == resources.getString(R.string.episodes_label) -> { - feedItems = DBReader.getEpisodes(0, MAX_ANDROID_AUTO_EPISODES_PER_FEED, - FeedItemFilter(FeedItemFilter.UNPLAYED), allEpisodesSortOrder) - } - parentId.startsWith("FeedId:") -> { - val feedId = parentId.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[1].toLong() - val feed = DBReader.getFeed(feedId) - feedItems = if (feed != null) DBReader.getFeedItemList(feed, FeedItemFilter.unfiltered(), feed.sortOrder) else listOf() - } - parentId == getString(R.string.current_playing_episode) -> { - val playable = createInstanceFromPreferences(this) - if (playable is FeedMedia) { - feedItems = listOf(playable.item) - } else { - return null - } - } - else -> { - Log.e(TAG, "Parent ID not found: $parentId") - return null - } - } - var count = 0 - for (feedItem in feedItems) { - if (feedItem?.media != null) { - mediaItems.add(feedItem.media!!.mediaItem) - if (++count >= MAX_ANDROID_AUTO_EPISODES_PER_FEED) { - break - } - } - } - return mediaItems - } - - override fun onBind(intent: Intent): IBinder? { + override fun onBind(intent: Intent?): IBinder? { Log.d(TAG, "Received onBind event") - return if (intent.action != null && TextUtils.equals(intent.action, SERVICE_INTERFACE)) { + return if (intent?.action != null && TextUtils.equals(intent.action, SERVICE_INTERFACE)) { super.onBind(intent) } else { mBinder } } - override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) Log.d(TAG, "OnStartCommand called") @@ -451,10 +425,10 @@ class PlaybackService : MediaBrowserServiceCompat() { val notificationManager = NotificationManagerCompat.from(this) notificationManager.cancel(R.id.notification_streaming_confirmation) - val keycode = intent.getIntExtra(MediaButtonReceiver.EXTRA_KEYCODE, -1) - val customAction = intent.getStringExtra(MediaButtonReceiver.EXTRA_CUSTOM_ACTION) - val hardwareButton = intent.getBooleanExtra(MediaButtonReceiver.EXTRA_HARDWAREBUTTON, false) - val playable = intent.getParcelableExtra(PlaybackServiceInterface.EXTRA_PLAYABLE) + val keycode = intent?.getIntExtra(MediaButtonReceiver.EXTRA_KEYCODE, -1) ?: -1 + val customAction = intent?.getStringExtra(MediaButtonReceiver.EXTRA_CUSTOM_ACTION) + val hardwareButton = intent?.getBooleanExtra(MediaButtonReceiver.EXTRA_HARDWAREBUTTON, false) ?: false + val playable = intent?.getParcelableExtra(PlaybackServiceInterface.EXTRA_PLAYABLE) if (keycode == -1 && playable == null && customAction == null) { Log.e(TAG, "PlaybackService was started with no arguments") stateManager.stopService() @@ -483,10 +457,8 @@ class PlaybackService : MediaBrowserServiceCompat() { } playable != null -> { stateManager.validStartCommandWasReceived() - val allowStreamThisTime = intent.getBooleanExtra( - PlaybackServiceInterface.EXTRA_ALLOW_STREAM_THIS_TIME, false) - val allowStreamAlways = intent.getBooleanExtra( - PlaybackServiceInterface.EXTRA_ALLOW_STREAM_ALWAYS, false) + val allowStreamThisTime = intent.getBooleanExtra(PlaybackServiceInterface.EXTRA_ALLOW_STREAM_THIS_TIME, false) + val allowStreamAlways = intent.getBooleanExtra(PlaybackServiceInterface.EXTRA_ALLOW_STREAM_ALWAYS, false) sendNotificationBroadcast(PlaybackServiceInterface.NOTIFICATION_TYPE_RELOAD, 0) if (allowStreamAlways) { isAllowMobileStreaming = true @@ -510,7 +482,7 @@ class PlaybackService : MediaBrowserServiceCompat() { return START_NOT_STICKY } else -> { - mediaSession?.controller?.transportControls?.sendCustomAction(customAction, null) +// mediaSession?.controller?.transportControls?.sendCustomAction(customAction, null) } } } @@ -541,8 +513,7 @@ class PlaybackService : MediaBrowserServiceCompat() { @SuppressLint("LaunchActivityFromNotification") private fun displayStreamingNotAllowedNotification(originalIntent: Intent) { if (EventBus.getDefault().hasSubscriberForEvent(MessageEvent::class.java)) { - EventBus.getDefault().post(MessageEvent( - getString(R.string.confirm_mobile_streaming_notification_message))) + EventBus.getDefault().post(MessageEvent(getString(R.string.confirm_mobile_streaming_notification_message))) return } @@ -550,24 +521,22 @@ class PlaybackService : MediaBrowserServiceCompat() { intentAllowThisTime.setAction(PlaybackServiceInterface.EXTRA_ALLOW_STREAM_THIS_TIME) intentAllowThisTime.putExtra(PlaybackServiceInterface.EXTRA_ALLOW_STREAM_THIS_TIME, true) val pendingIntentAllowThisTime = if (Build.VERSION.SDK_INT >= VERSION_CODES.O) { - PendingIntent.getForegroundService(this, - R.id.pending_intent_allow_stream_this_time, intentAllowThisTime, + PendingIntent.getForegroundService(this, R.id.pending_intent_allow_stream_this_time, intentAllowThisTime, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) } else { - PendingIntent.getService(this, - R.id.pending_intent_allow_stream_this_time, intentAllowThisTime, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) + PendingIntent.getService(this, R.id.pending_intent_allow_stream_this_time, intentAllowThisTime, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) } val intentAlwaysAllow = Intent(intentAllowThisTime) intentAlwaysAllow.setAction(PlaybackServiceInterface.EXTRA_ALLOW_STREAM_ALWAYS) intentAlwaysAllow.putExtra(PlaybackServiceInterface.EXTRA_ALLOW_STREAM_ALWAYS, true) val pendingIntentAlwaysAllow = if (Build.VERSION.SDK_INT >= VERSION_CODES.O) { - PendingIntent.getForegroundService(this, - R.id.pending_intent_allow_stream_always, intentAlwaysAllow, + PendingIntent.getForegroundService(this, R.id.pending_intent_allow_stream_always, intentAlwaysAllow, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) } else { - PendingIntent.getService(this, - R.id.pending_intent_allow_stream_always, intentAlwaysAllow, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) + PendingIntent.getService(this, R.id.pending_intent_allow_stream_always, intentAlwaysAllow, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) } val builder = NotificationCompat.Builder(this, @@ -579,12 +548,8 @@ class PlaybackService : MediaBrowserServiceCompat() { .bigText(getString(R.string.confirm_mobile_streaming_notification_message))) .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setContentIntent(pendingIntentAllowThisTime) - .addAction(R.drawable.ic_notification_stream, - getString(R.string.confirm_mobile_streaming_button_once), - pendingIntentAllowThisTime) - .addAction(R.drawable.ic_notification_stream, - getString(R.string.confirm_mobile_streaming_button_always), - pendingIntentAlwaysAllow) + .addAction(R.drawable.ic_notification_stream, getString(R.string.confirm_mobile_streaming_button_once), pendingIntentAllowThisTime) + .addAction(R.drawable.ic_notification_stream, getString(R.string.confirm_mobile_streaming_button_always), pendingIntentAlwaysAllow) .setAutoCancel(true) val notificationManager = NotificationManagerCompat.from(this) if (Build.VERSION.SDK_INT >= 33 && ActivityCompat.checkSelfPermission(this, @@ -725,8 +690,7 @@ class PlaybackService : MediaBrowserServiceCompat() { private fun startPlayingFromPreferences() { Observable.fromCallable { - createInstanceFromPreferences( - applicationContext) + createInstanceFromPreferences(applicationContext) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -856,8 +820,7 @@ class PlaybackService : MediaBrowserServiceCompat() { } } if (Build.VERSION.SDK_INT >= VERSION_CODES.N) { - TileService.requestListeningState(applicationContext, - ComponentName(applicationContext, QuickSettingsTileService::class.java)) + TileService.requestListeningState(applicationContext, ComponentName(applicationContext, QuickSettingsTileService::class.java)) } sendLocalBroadcast(applicationContext, ACTION_PLAYER_STATUS_CHANGED) @@ -878,9 +841,7 @@ class PlaybackService : MediaBrowserServiceCompat() { updateNotificationAndMediaSession(this@PlaybackService.playable) } - override fun onPostPlayback(media: Playable, ended: Boolean, skipped: Boolean, - playingNext: Boolean - ) { + override fun onPostPlayback(media: Playable, ended: Boolean, skipped: Boolean, playingNext: Boolean) { this@PlaybackService.onPostPlayback(media, ended, skipped, playingNext) } @@ -1088,12 +1049,10 @@ class PlaybackService : MediaBrowserServiceCompat() { if (media is FeedMedia) { if (ended || smartMarkAsPlayed) { - SynchronizationQueueSink.enqueueEpisodePlayedIfSynchronizationIsActive( - applicationContext, media, true) + SynchronizationQueueSink.enqueueEpisodePlayedIfSynchronizationIsActive(applicationContext, media, true) media.onPlaybackCompleted(applicationContext) } else { - SynchronizationQueueSink.enqueueEpisodePlayedIfSynchronizationIsActive( - applicationContext, media, false) + SynchronizationQueueSink.enqueueEpisodePlayedIfSynchronizationIsActive(applicationContext, media, false) media.onPlaybackPause(applicationContext) } } @@ -1108,12 +1067,11 @@ class PlaybackService : MediaBrowserServiceCompat() { val action = item.feed?.preferences?.currentAutoDelete val shouldAutoDelete = (action == AutoDeleteAction.ALWAYS || (action == AutoDeleteAction.GLOBAL && item.feed != null && shouldAutoDeleteItemsOnThatFeed(item.feed!!))) - if (media is FeedMedia && shouldAutoDelete && - (!item.isTagged(FeedItem.TAG_FAVORITE) || !shouldFavoriteKeepEpisode())) { + if (media is FeedMedia && shouldAutoDelete && (!item.isTagged(FeedItem.TAG_FAVORITE) || !shouldFavoriteKeepEpisode())) { DBWriter.deleteFeedMediaOfItem(this@PlaybackService, media.id) Log.d(TAG, "Episode Deleted") } - notifyChildrenChanged(getString(R.string.queue_label)) +// notifyChildrenChanged(getString(R.string.queue_label)) } } @@ -1153,13 +1111,13 @@ class PlaybackService : MediaBrowserServiceCompat() { val skipEndMS = skipEnd * 1000 // Log.d(TAG, "skipEndingIfNecessary: checking " + remainingTime + " " + skipEndMS + " speed " + currentPlaybackSpeed) if (skipEnd > 0 && skipEndMS < this.duration && (remainingTime - skipEndMS < 0)) { - Log.d(TAG, "skipEndingIfNecessary: Skipping the remaining " + remainingTime + " " + skipEndMS + " speed " + currentPlaybackSpeed) + Log.d(TAG, "skipEndingIfNecessary: Skipping the remaining $remainingTime $skipEndMS speed $currentPlaybackSpeed") val context = applicationContext val skipMesg = context.getString(R.string.pref_feed_skip_ending_toast, skipEnd) val toast = Toast.makeText(context, skipMesg, Toast.LENGTH_LONG) toast.show() - this.autoSkippedFeedMediaId = item?.identifyingValue + this.autoSkippedFeedMediaId = item.identifyingValue mediaPlayer?.skip() } } @@ -1199,51 +1157,35 @@ class PlaybackService : MediaBrowserServiceCompat() { // On Android Auto, custom actions are added in the following order around the play button, if no default // actions are present: Near left, near right, far left, far right, additional actions panel - val rewindBuilder = PlaybackStateCompat.CustomAction.Builder( - CUSTOM_ACTION_REWIND, - getString(R.string.rewind_label), - R.drawable.ic_notification_fast_rewind - ) + val rewindBuilder = PlaybackStateCompat.CustomAction.Builder(CUSTOM_ACTION_REWIND, getString(R.string.rewind_label), R.drawable.ic_notification_fast_rewind) WearMediaSession.addWearExtrasToAction(rewindBuilder) sessionState.addCustomAction(rewindBuilder.build()) - val fastForwardBuilder = PlaybackStateCompat.CustomAction.Builder( - CUSTOM_ACTION_FAST_FORWARD, - getString(R.string.fast_forward_label), - R.drawable.ic_notification_fast_forward - ) + val fastForwardBuilder = PlaybackStateCompat.CustomAction.Builder(CUSTOM_ACTION_FAST_FORWARD, getString(R.string.fast_forward_label), R.drawable.ic_notification_fast_forward) WearMediaSession.addWearExtrasToAction(fastForwardBuilder) sessionState.addCustomAction(fastForwardBuilder.build()) if (showPlaybackSpeedOnFullNotification()) { - sessionState.addCustomAction( - PlaybackStateCompat.CustomAction.Builder( - CUSTOM_ACTION_CHANGE_PLAYBACK_SPEED, - getString(R.string.playback_speed), - R.drawable.ic_notification_playback_speed - ).build() - ) + sessionState.addCustomAction(PlaybackStateCompat.CustomAction.Builder(CUSTOM_ACTION_CHANGE_PLAYBACK_SPEED, + getString(R.string.playback_speed), R.drawable.ic_notification_playback_speed).build()) } if (showNextChapterOnFullNotification()) { if (!playable?.getChapters().isNullOrEmpty()) { - sessionState.addCustomAction( - PlaybackStateCompat.CustomAction.Builder( - CUSTOM_ACTION_NEXT_CHAPTER, - getString(R.string.next_chapter), R.drawable.ic_notification_next_chapter) - .build()) + sessionState.addCustomAction(PlaybackStateCompat.CustomAction.Builder(CUSTOM_ACTION_NEXT_CHAPTER, + getString(R.string.next_chapter), R.drawable.ic_notification_next_chapter).build()) } } if (showSkipOnFullNotification()) { - sessionState.addCustomAction( - PlaybackStateCompat.CustomAction.Builder(CUSTOM_ACTION_SKIP_TO_NEXT, getString(R.string.skip_episode_label), R.drawable.ic_notification_skip).build() + sessionState.addCustomAction(PlaybackStateCompat.CustomAction.Builder(CUSTOM_ACTION_SKIP_TO_NEXT, + getString(R.string.skip_episode_label), R.drawable.ic_notification_skip).build() ) } if (mediaSession != null) { WearMediaSession.mediaSessionSetExtraForWear(mediaSession!!) - mediaSession!!.setPlaybackState(sessionState.build()) +// mediaSession!!.setPlaybackState(sessionState.build()) } } @@ -1253,9 +1195,7 @@ class PlaybackService : MediaBrowserServiceCompat() { } private fun updateMediaSessionMetadata(p: Playable?) { - if (p == null || mediaSession == null) { - return - } + if (p == null || mediaSession == null) return val builder = MediaMetadataCompat.Builder() builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, p.getFeedTitle()) @@ -1294,13 +1234,13 @@ class PlaybackService : MediaBrowserServiceCompat() { mediaSession!!.setSessionActivity(PendingIntent.getActivity(this, R.id.pending_intent_player_activity, getPlayerActivityIntent(this), PendingIntent.FLAG_UPDATE_CURRENT or (if (Build.VERSION.SDK_INT >= 31) PendingIntent.FLAG_MUTABLE else 0))) - try { - mediaSession!!.setMetadata(builder.build()) - } catch (e: OutOfMemoryError) { - Log.e(TAG, "Setting media session metadata", e) - builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, null) - mediaSession!!.setMetadata(builder.build()) - } +// try { +// mediaSession!!.setMetadata(builder.build()) +// } catch (e: OutOfMemoryError) { +// Log.e(TAG, "Setting media session metadata", e) +// builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, null) +// mediaSession!!.setMetadata(builder.build()) +// } } } @@ -1327,7 +1267,7 @@ class PlaybackService : MediaBrowserServiceCompat() { val playerStatus = mediaPlayer!!.playerStatus notificationBuilder.setPlayable(playable) - if (mediaSession != null) notificationBuilder.setMediaSessionToken(mediaSession!!.sessionToken) + if (mediaSession != null) notificationBuilder.setMediaSessionToken(mediaSession!!.getSessionCompatToken()) notificationBuilder.playerStatus = playerStatus notificationBuilder.updatePosition(currentPosition, currentPlaybackSpeed) @@ -1646,8 +1586,7 @@ class PlaybackService : MediaBrowserServiceCompat() { feedPreferences.feedPlaybackSpeed = speed Log.d(TAG, "setSpeed ${feed.title} $speed") DBWriter.setFeedPreferences(feedPreferences) - EventBus.getDefault().post( - SpeedPresetChangedEvent(feedPreferences.feedPlaybackSpeed, feed.id)) + EventBus.getDefault().post(SpeedPresetChangedEvent(feedPreferences.feedPlaybackSpeed, feed.id)) } } } @@ -1776,188 +1715,13 @@ class PlaybackService : MediaBrowserServiceCompat() { if (playable is FeedMedia) { val itemId = playable.item?.id ?: return DBWriter.addQueueItem(this, false, true, itemId) - notifyChildrenChanged(getString(R.string.queue_label)) +// notifyChildrenChanged(getString(R.string.queue_label)) } } - private val sessionCallback: MediaSessionCompat.Callback = object : MediaSessionCompat.Callback() { + private val sessionCallback: MediaSession.Callback = object : MediaSession.Callback { private val TAG = "MediaSessionCompat" - - override fun onPlay() { - Log.d(TAG, "onPlay()") - val status: PlayerStatus = this@PlaybackService.status - when (status) { - PlayerStatus.PAUSED, PlayerStatus.PREPARED -> { - resume() - } - PlayerStatus.INITIALIZED -> { - this@PlaybackService.isStartWhenPrepared = true - prepare() - } - else -> {} - } - } - - override fun onPlayFromMediaId(mediaId: String, extras: Bundle) { - Log.d(TAG, "onPlayFromMediaId: mediaId: $mediaId extras: $extras") - val p = DBReader.getFeedMedia(mediaId.toLong()) - if (p != null) { - startPlaying(p, false) - } - } - - override fun onPlayFromSearch(query: String, extras: Bundle) { - Log.d(TAG, "onPlayFromSearch query=$query extras=$extras") - - if (query == "") { - Log.d(TAG, "onPlayFromSearch called with empty query, resuming from the last position") - startPlayingFromPreferences() - return - } - - val results = FeedSearcher.searchFeedItems(query, 0) - if (results.isNotEmpty() && results[0].media != null) { - val media = results[0].media - startPlaying(media, false) - return - } - onPlay() - } - - override fun onPause() { - Log.d(TAG, "onPause()") - if (this@PlaybackService.status == PlayerStatus.PLAYING) { - pause(!isPersistNotify, false) - } - } - - override fun onStop() { - Log.d(TAG, "onStop()") - mediaPlayer?.stopPlayback(true) - } - - override fun onSkipToPrevious() { - Log.d(TAG, "onSkipToPrevious()") - seekDelta(-rewindSecs * 1000) - } - - override fun onRewind() { - Log.d(TAG, "onRewind()") - seekDelta(-rewindSecs * 1000) - } - - fun onNextChapter() { - val chapters = mediaPlayer?.getPlayable()?.getChapters() ?: listOf() - if (chapters.isEmpty()) { - // No chapters, just fallback to next episode - mediaPlayer?.skip() - return - } - - val nextChapter = getCurrentChapterIndex(mediaPlayer?.getPlayable(), (mediaPlayer?.getPosition()?:0)) + 1 - - if (chapters.size < nextChapter + 1) { - // We are on the last chapter, just fallback to the next episode - mediaPlayer?.skip() - return - } - - mediaPlayer?.seekTo(chapters[nextChapter].start.toInt()) - } - - override fun onFastForward() { - Log.d(TAG, "onFastForward()") -// speedForward(2.5f) - seekDelta(fastForwardSecs * 1000) - } - - override fun onSkipToNext() { - Log.d(TAG, "onSkipToNext()") - val uiModeManager = applicationContext.getSystemService(UI_MODE_SERVICE) as UiModeManager - if (hardwareForwardButton == KeyEvent.KEYCODE_MEDIA_NEXT - || uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_CAR) { - mediaPlayer?.skip() - } else { - seekDelta(fastForwardSecs * 1000) - } - } - - - override fun onSeekTo(pos: Long) { - Log.d(TAG, "onSeekTo()") - seekTo(pos.toInt()) - } - - override fun onSetPlaybackSpeed(speed: Float) { - Log.d(TAG, "onSetPlaybackSpeed()") - setSpeed(speed) - } - - override fun onMediaButtonEvent(mediaButton: Intent): Boolean { - Log.d(TAG, "onMediaButtonEvent($mediaButton)") - val keyEvent = mediaButton.getParcelableExtra(Intent.EXTRA_KEY_EVENT) - if (keyEvent != null && keyEvent.action == KeyEvent.ACTION_DOWN && keyEvent.repeatCount == 0) { - val keyCode = keyEvent.keyCode - if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) { - clickCount++ - clickHandler.removeCallbacksAndMessages(null) - clickHandler.postDelayed({ - when (clickCount) { - 1 -> { - handleKeycode(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, false) - } - 2 -> { - onFastForward() - } - 3 -> { - onRewind() - } - } - clickCount = 0 - }, ViewConfiguration.getDoubleTapTimeout().toLong()) - return true - } else { - return handleKeycode(keyCode, false) - } - } - return false - } - - override fun onCustomAction(action: String, extra: Bundle) { - Log.d(TAG, "onCustomAction($action)") - when (action) { - CUSTOM_ACTION_FAST_FORWARD -> { - onFastForward() - } - CUSTOM_ACTION_REWIND -> { - onRewind() - } - CUSTOM_ACTION_SKIP_TO_NEXT -> { - mediaPlayer?.skip() - } - CUSTOM_ACTION_NEXT_CHAPTER -> { - onNextChapter() - } - CUSTOM_ACTION_CHANGE_PLAYBACK_SPEED -> { - val selectedSpeeds = playbackSpeedArray - - // If the list has zero or one element, there's nothing we can do to change the playback speed. - if (selectedSpeeds.size > 1) { - val speedPosition = selectedSpeeds.indexOf(mediaPlayer?.getPlaybackSpeed()?:0f) - - val newSpeed = if (speedPosition == selectedSpeeds.size - 1) { - // This is the last element. Wrap instead of going over the size of the list. - selectedSpeeds[0] - } else { - // If speedPosition is still -1 (the user isn't using a preset), use the first preset in the - // list. - selectedSpeeds[speedPosition + 1] - } - onSetPlaybackSpeed(newSpeed) - } - } - } - } +// TODO: not used now with media3 } companion object { @@ -1976,8 +1740,7 @@ class PlaybackService : MediaBrowserServiceCompat() { private const val CUSTOM_ACTION_SKIP_TO_NEXT = "action.ac.mdiq.podcini.service.skipToNext" private const val CUSTOM_ACTION_FAST_FORWARD = "action.ac.mdiq.podcini.service.fastForward" private const val CUSTOM_ACTION_REWIND = "action.ac.mdiq.podcini.service.rewind" - private const val CUSTOM_ACTION_CHANGE_PLAYBACK_SPEED = - "action.ac.mdiq.podcini.service.changePlaybackSpeed" + private const val CUSTOM_ACTION_CHANGE_PLAYBACK_SPEED = "action.ac.mdiq.podcini.service.changePlaybackSpeed" const val CUSTOM_ACTION_NEXT_CHAPTER: String = "action.ac.mdiq.podcini.service.next_chapter" /** @@ -2030,15 +1793,16 @@ class PlaybackService : MediaBrowserServiceCompat() { /** * Same as [.getPlayerActivityIntent], but here the type of activity - * depends on the FeedMedia that is provided as an argument. + * depends on the medaitype that is provided as an argument. */ @JvmStatic - fun getPlayerActivityIntent(context: Context, media: Playable): Intent { - return if (media.getMediaType() == MediaType.VIDEO && !isCasting) { + fun getPlayerActivityIntent(context: Context, mediaType: MediaType?): Intent { + return if (mediaType == MediaType.VIDEO && !isCasting) { VideoPlayerActivityStarter(context).intent } else { MainActivityStarter(context).withOpenPlayer().getIntent() } } + } } diff --git a/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackServiceNotificationBuilder.kt b/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackServiceNotificationBuilder.kt index 2d2b6e46..ffaab349 100644 --- a/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackServiceNotificationBuilder.kt +++ b/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackServiceNotificationBuilder.kt @@ -130,43 +130,33 @@ class PlaybackServiceNotificationBuilder(private val context: Context) { private val playerActivityPendingIntent: PendingIntent get() = PendingIntent.getActivity(context, R.id.pending_intent_player_activity, - PlaybackService.getPlayerActivityIntent(context), PendingIntent.FLAG_UPDATE_CURRENT - or PendingIntent.FLAG_IMMUTABLE) + PlaybackService.getPlayerActivityIntent(context), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) private fun addActions(notification: NotificationCompat.Builder, mediaSessionToken: MediaSessionCompat.Token?, - playerStatus: PlayerStatus? - ) { + playerStatus: PlayerStatus?) { val compactActionList = ArrayList() var numActions = 0 // we start and 0 and then increment by 1 for each call to addAction - val rewindButtonPendingIntent = getPendingIntentForMediaAction( - KeyEvent.KEYCODE_MEDIA_REWIND, numActions) - notification.addAction(R.drawable.ic_notification_fast_rewind, context.getString(R.string.rewind_label), - rewindButtonPendingIntent) + val rewindButtonPendingIntent = getPendingIntentForMediaAction(KeyEvent.KEYCODE_MEDIA_REWIND, numActions) + notification.addAction(R.drawable.ic_notification_fast_rewind, context.getString(R.string.rewind_label), rewindButtonPendingIntent) compactActionList.add(numActions) numActions++ if (playerStatus == PlayerStatus.PLAYING) { - val pauseButtonPendingIntent = getPendingIntentForMediaAction( - KeyEvent.KEYCODE_MEDIA_PAUSE, numActions) - notification.addAction(R.drawable.ic_notification_pause, //pause action - context.getString(R.string.pause_label), - pauseButtonPendingIntent) + val pauseButtonPendingIntent = getPendingIntentForMediaAction(KeyEvent.KEYCODE_MEDIA_PAUSE, numActions) + //pause action + notification.addAction(R.drawable.ic_notification_pause, context.getString(R.string.pause_label), pauseButtonPendingIntent) } else { - val playButtonPendingIntent = getPendingIntentForMediaAction( - KeyEvent.KEYCODE_MEDIA_PLAY, numActions) - notification.addAction(R.drawable.ic_notification_play, //play action - context.getString(R.string.play_label), - playButtonPendingIntent) + val playButtonPendingIntent = getPendingIntentForMediaAction(KeyEvent.KEYCODE_MEDIA_PLAY, numActions) + //play action + notification.addAction(R.drawable.ic_notification_play, context.getString(R.string.play_label), playButtonPendingIntent) } compactActionList.add(numActions++) // ff follows play, then we have skip (if it's present) - val ffButtonPendingIntent = getPendingIntentForMediaAction( - KeyEvent.KEYCODE_MEDIA_FAST_FORWARD, numActions) - notification.addAction(R.drawable.ic_notification_fast_forward, context.getString(R.string.fast_forward_label), - ffButtonPendingIntent) + val ffButtonPendingIntent = getPendingIntentForMediaAction(KeyEvent.KEYCODE_MEDIA_FAST_FORWARD, numActions) + notification.addAction(R.drawable.ic_notification_fast_forward, context.getString(R.string.fast_forward_label), ffButtonPendingIntent) compactActionList.add(numActions) numActions++ @@ -177,15 +167,12 @@ class PlaybackServiceNotificationBuilder(private val context: Context) { } if (UserPreferences.showSkipOnFullNotification()) { - val skipButtonPendingIntent = getPendingIntentForMediaAction( - KeyEvent.KEYCODE_MEDIA_NEXT, numActions) - notification.addAction(R.drawable.ic_notification_skip, context.getString(R.string.skip_episode_label), - skipButtonPendingIntent) + val skipButtonPendingIntent = getPendingIntentForMediaAction(KeyEvent.KEYCODE_MEDIA_NEXT, numActions) + notification.addAction(R.drawable.ic_notification_skip, context.getString(R.string.skip_episode_label), skipButtonPendingIntent) numActions++ } - val stopButtonPendingIntent = getPendingIntentForMediaAction( - KeyEvent.KEYCODE_MEDIA_STOP, numActions) + val stopButtonPendingIntent = getPendingIntentForMediaAction(KeyEvent.KEYCODE_MEDIA_STOP, numActions) notification.setStyle(androidx.media.app.NotificationCompat.MediaStyle() .setMediaSession(mediaSessionToken) .setShowActionsInCompactView(*ArrayUtils.toPrimitive(compactActionList.toTypedArray())) @@ -199,11 +186,9 @@ class PlaybackServiceNotificationBuilder(private val context: Context) { intent.putExtra(MediaButtonReceiver.EXTRA_KEYCODE, keycodeValue) return if (Build.VERSION.SDK_INT >= 26) { - PendingIntent.getForegroundService(context, requestCode, intent, - PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) + PendingIntent.getForegroundService(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) } else { - PendingIntent.getService(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT - or PendingIntent.FLAG_IMMUTABLE) + PendingIntent.getService(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) } } @@ -213,11 +198,9 @@ class PlaybackServiceNotificationBuilder(private val context: Context) { intent.putExtra(MediaButtonReceiver.EXTRA_CUSTOM_ACTION, action) return if (Build.VERSION.SDK_INT >= 26) { - PendingIntent.getForegroundService(context, requestCode, intent, - PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) + PendingIntent.getForegroundService(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) } else { - PendingIntent.getService(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT - or PendingIntent.FLAG_IMMUTABLE) + PendingIntent.getService(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) } } @@ -230,8 +213,7 @@ class PlaybackServiceNotificationBuilder(private val context: Context) { private var defaultIcon: Bitmap? = null private fun getBitmap(vectorDrawable: VectorDrawable): Bitmap { - val bitmap = Bitmap.createBitmap(vectorDrawable.intrinsicWidth, - vectorDrawable.intrinsicHeight, Bitmap.Config.ARGB_8888) + val bitmap = Bitmap.createBitmap(vectorDrawable.intrinsicWidth, vectorDrawable.intrinsicHeight, Bitmap.Config.ARGB_8888) val canvas = Canvas(bitmap) vectorDrawable.setBounds(0, 0, canvas.width, canvas.height) vectorDrawable.draw(canvas) diff --git a/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackVolumeUpdater.kt b/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackVolumeUpdater.kt index f4d0aac0..03c826d3 100644 --- a/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackVolumeUpdater.kt +++ b/app/src/main/java/ac/mdiq/podcini/playback/service/PlaybackVolumeUpdater.kt @@ -7,8 +7,7 @@ import ac.mdiq.podcini.playback.base.PlayerStatus internal class PlaybackVolumeUpdater { fun updateVolumeIfNecessary(mediaPlayer: PlaybackServiceMediaPlayer, feedId: Long, - volumeAdaptionSetting: VolumeAdaptionSetting - ) { + volumeAdaptionSetting: VolumeAdaptionSetting) { val playable = mediaPlayer.getPlayable() if (playable is FeedMedia) { @@ -17,8 +16,7 @@ internal class PlaybackVolumeUpdater { } private fun updateFeedMediaVolumeIfNecessary(mediaPlayer: PlaybackServiceMediaPlayer, feedId: Long, - volumeAdaptionSetting: VolumeAdaptionSetting, feedMedia: FeedMedia - ) { + volumeAdaptionSetting: VolumeAdaptionSetting, feedMedia: FeedMedia) { if (feedMedia.item?.feed?.id == feedId) { val preferences = feedMedia.item!!.feed!!.preferences if (preferences != null) preferences.volumeAdaptionSetting = volumeAdaptionSetting diff --git a/app/src/main/java/ac/mdiq/podcini/storage/database/PodDBAdapter.kt b/app/src/main/java/ac/mdiq/podcini/storage/database/PodDBAdapter.kt index f598a910..dc1081cf 100644 --- a/app/src/main/java/ac/mdiq/podcini/storage/database/PodDBAdapter.kt +++ b/app/src/main/java/ac/mdiq/podcini/storage/database/PodDBAdapter.kt @@ -91,8 +91,7 @@ class PodDBAdapter private constructor() { feed.id = db.insert(TABLE_NAME_FEEDS, null, values) } else { Log.d(this.toString(), "Updating existing Feed in db") - db.update(TABLE_NAME_FEEDS, values, "$KEY_ID=?", - arrayOf(feed.id.toString())) + db.update(TABLE_NAME_FEEDS, values, "$KEY_ID=?", arrayOf(feed.id.toString())) } return feed.id } @@ -116,14 +115,12 @@ class PodDBAdapter private constructor() { values.put(KEY_FEED_SKIP_ENDING, prefs.feedSkipEnding) values.put(KEY_EPISODE_NOTIFICATION, prefs.showEpisodeNotification) values.put(KEY_NEW_EPISODES_ACTION, prefs.newEpisodesAction!!.code) - db.update(TABLE_NAME_FEEDS, values, "$KEY_ID=?", arrayOf( - prefs.feedID.toString())) + db.update(TABLE_NAME_FEEDS, values, "$KEY_ID=?", arrayOf(prefs.feedID.toString())) } fun setFeedItemFilter(feedId: Long, filterValues: Set?) { val valuesList = TextUtils.join(",", filterValues!!) - Log.d(TAG, String.format(Locale.US, - "setFeedItemFilter() called with: feedId = [%d], filterValues = [%s]", feedId, valuesList)) + Log.d(TAG, String.format(Locale.US, "setFeedItemFilter() called with: feedId = [%d], filterValues = [%s]", feedId, valuesList)) val values = ContentValues() values.put(KEY_HIDE, valuesList) db.update(TABLE_NAME_FEEDS, values, "$KEY_ID=?", arrayOf(feedId.toString())) @@ -163,8 +160,7 @@ class PodDBAdapter private constructor() { if (media.id == 0L) { media.id = db.insert(TABLE_NAME_FEED_MEDIA, null, values) } else { - db.update(TABLE_NAME_FEED_MEDIA, values, "$KEY_ID=?", - arrayOf(media.id.toString())) + db.update(TABLE_NAME_FEED_MEDIA, values, "$KEY_ID=?", arrayOf(media.id.toString())) } return media.id } @@ -176,8 +172,7 @@ class PodDBAdapter private constructor() { values.put(KEY_DURATION, media.getDuration()) values.put(KEY_PLAYED_DURATION, media.playedDuration) values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime()) - db.update(TABLE_NAME_FEED_MEDIA, values, "$KEY_ID=?", - arrayOf(media.id.toString())) + db.update(TABLE_NAME_FEED_MEDIA, values, "$KEY_ID=?", arrayOf(media.id.toString())) } else { Log.e(TAG, "setFeedMediaPlaybackInformation: ID of media was 0") } @@ -317,8 +312,7 @@ class PodDBAdapter private constructor() { if (item.id == 0L) { item.id = db.insert(TABLE_NAME_FEED_ITEMS, null, values) } else { - db.update(TABLE_NAME_FEED_ITEMS, values, "$KEY_ID=?", - arrayOf(item.id.toString())) + db.update(TABLE_NAME_FEED_ITEMS, values, "$KEY_ID=?", arrayOf(item.id.toString())) } if (item.media != null) { setMedia(item.media) @@ -329,9 +323,7 @@ class PodDBAdapter private constructor() { return item.id } - fun setFeedItemRead(played: Int, itemId: Long, mediaId: Long, - resetMediaPosition: Boolean - ) { + fun setFeedItemRead(played: Int, itemId: Long, mediaId: Long, resetMediaPosition: Boolean) { try { db.beginTransactionNonExclusive() val values = ContentValues() @@ -387,8 +379,7 @@ class PodDBAdapter private constructor() { if (chapter.id == 0L) { chapter.id = db.insert(TABLE_NAME_SIMPLECHAPTERS, null, values) } else { - db.update(TABLE_NAME_SIMPLECHAPTERS, values, "$KEY_ID=?", - arrayOf(chapter.id.toString())) + db.update(TABLE_NAME_SIMPLECHAPTERS, values, "$KEY_ID=?", arrayOf(chapter.id.toString())) } } } @@ -428,8 +419,7 @@ class PodDBAdapter private constructor() { if (status.id == 0L) { status.id = db.insert(TABLE_NAME_DOWNLOAD_LOG, null, values) } else { - db.update(TABLE_NAME_DOWNLOAD_LOG, values, "$KEY_ID=?", - arrayOf(status.id.toString())) + db.update(TABLE_NAME_DOWNLOAD_LOG, values, "$KEY_ID=?", arrayOf(status.id.toString())) } return status.id } @@ -470,16 +460,12 @@ class PodDBAdapter private constructor() { } fun removeFavoriteItem(item: FeedItem) { - val deleteClause = String.format("DELETE FROM %s WHERE %s=%s AND %s=%s", - TABLE_NAME_FAVORITES, - KEY_FEEDITEM, item.id, - KEY_FEED, item.feedId) + val deleteClause = String.format("DELETE FROM %s WHERE %s=%s AND %s=%s", TABLE_NAME_FAVORITES, KEY_FEEDITEM, item.id, KEY_FEED, item.feedId) db.execSQL(deleteClause) } private fun isItemInFavorites(item: FeedItem): Boolean { - val query = String.format(Locale.US, "SELECT %s from %s WHERE %s=%d", - KEY_ID, TABLE_NAME_FAVORITES, KEY_FEEDITEM, item.id) + val query = String.format(Locale.US, "SELECT %s from %s WHERE %s=%d", KEY_ID, TABLE_NAME_FAVORITES, KEY_FEEDITEM, item.id) val c = db.rawQuery(query, null) val count = c.count c.close() @@ -557,8 +543,7 @@ class PodDBAdapter private constructor() { db.delete(TABLE_NAME_DOWNLOAD_LOG, "$KEY_FEEDFILE=? AND $KEY_FEEDFILETYPE=?", arrayOf(feed.id.toString(), Feed.FEEDFILETYPE_FEED.toString())) - db.delete(TABLE_NAME_FEEDS, "$KEY_ID=?", - arrayOf(feed.id.toString())) + db.delete(TABLE_NAME_FEEDS, "$KEY_ID=?", arrayOf(feed.id.toString())) db.setTransactionSuccessful() } catch (e: SQLException) { Log.e(TAG, Log.getStackTraceString(e)) @@ -717,8 +702,7 @@ class PodDBAdapter private constructor() { val orderByQuery = generateFrom(sortOrder) val filterQuery = generateFrom(filter!!) val whereClause = if ("" == filterQuery) "" else " WHERE $filterQuery" - val query = (SELECT_FEED_ITEMS_AND_MEDIA + whereClause - + "ORDER BY " + orderByQuery + " LIMIT " + offset + ", " + limit) + val query = (SELECT_FEED_ITEMS_AND_MEDIA + whereClause + "ORDER BY " + orderByQuery + " LIMIT " + offset + ", " + limit) return db.rawQuery(query, null) } @@ -771,8 +755,7 @@ class PodDBAdapter private constructor() { get() = DatabaseUtils.queryNumEntries(db, TABLE_NAME_FEED_MEDIA, "$KEY_PLAYBACK_COMPLETION_DATE> 0") fun getSingleFeedMediaCursor(id: Long): Cursor { - val query = ("SELECT " + KEYS_FEED_MEDIA + " FROM " + TABLE_NAME_FEED_MEDIA - + " WHERE " + KEY_ID + "=" + id) + val query = ("SELECT " + KEYS_FEED_MEDIA + " FROM " + TABLE_NAME_FEED_MEDIA + " WHERE " + KEY_ID + "=" + id) return db.rawQuery(query, null) } @@ -918,8 +901,7 @@ class PodDBAdapter private constructor() { fun getFeedCounters(setting: FeedCounter?, vararg feedIds: Long): Map { val whereRead = when (setting) { // FeedCounter.SHOW_NEW -> KEY_READ + "=" + FeedItem.NEW - FeedCounter.SHOW_UNPLAYED -> ("(" + KEY_READ + "=" + FeedItem.NEW - + " OR " + KEY_READ + "=" + FeedItem.UNPLAYED + ")") + FeedCounter.SHOW_UNPLAYED -> ("(" + KEY_READ + "=" + FeedItem.NEW + " OR " + KEY_READ + "=" + FeedItem.UNPLAYED + ")") FeedCounter.SHOW_DOWNLOADED -> "$KEY_DOWNLOADED=1" FeedCounter.SHOW_DOWNLOADED_UNPLAYED -> ("(" + KEY_READ + "=" + FeedItem.NEW + " OR " + KEY_READ + "=" + FeedItem.UNPLAYED + ")" @@ -1044,13 +1026,11 @@ class PodDBAdapter private constructor() { "1 = 1" } - val queryStart = (SELECT_FEED_ITEMS_AND_MEDIA_WITH_DESCRIPTION - + " WHERE " + queryFeedId + " AND (") + val queryStart = (SELECT_FEED_ITEMS_AND_MEDIA_WITH_DESCRIPTION + " WHERE " + queryFeedId + " AND (") val sb = StringBuilder(queryStart) for (i in queryWords.indices) { - sb - .append("(") + sb.append("(") .append("$KEY_DESCRIPTION LIKE '%").append(queryWords[i]) .append("%' OR ") .append(KEY_TITLE).append(" LIKE '%").append(queryWords[i]) @@ -1078,8 +1058,7 @@ class PodDBAdapter private constructor() { val sb = StringBuilder(queryStart) for (i in queryWords.indices) { - sb - .append("(") + sb.append("(") .append(KEY_TITLE).append(" LIKE '%").append(queryWords[i]) .append("%' OR ") .append(KEY_CUSTOM_TITLE).append(" LIKE '%").append(queryWords[i]) diff --git a/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/PlayActionButton.kt b/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/PlayActionButton.kt index c4d34318..8940dacb 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/PlayActionButton.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/PlayActionButton.kt @@ -3,9 +3,9 @@ package ac.mdiq.podcini.ui.actions.actionbutton import android.content.Context import androidx.media3.common.util.UnstableApi import ac.mdiq.podcini.R -import ac.mdiq.podcini.playback.service.PlaybackService.Companion.getPlayerActivityIntent import ac.mdiq.podcini.storage.DBTasks import ac.mdiq.podcini.playback.PlaybackServiceStarter +import ac.mdiq.podcini.playback.service.PlaybackService.Companion.getPlayerActivityIntent import ac.mdiq.podcini.storage.model.feed.FeedItem import ac.mdiq.podcini.storage.model.playback.MediaType import ac.mdiq.podcini.util.event.playback.StartPlayEvent @@ -33,7 +33,7 @@ class PlayActionButton(item: FeedItem) : ItemActionButton(item) { .start() if (media.getMediaType() == MediaType.VIDEO) { - context.startActivity(getPlayerActivityIntent(context, media)) + context.startActivity(getPlayerActivityIntent(context, MediaType.VIDEO)) } } } diff --git a/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/PlayLocalActionButton.kt b/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/PlayLocalActionButton.kt index 696ffad5..f0b7ecbe 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/PlayLocalActionButton.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/PlayLocalActionButton.kt @@ -23,7 +23,7 @@ class PlayLocalActionButton(item: FeedItem?) : ItemActionButton(item!!) { .start() if (media.getMediaType() == MediaType.VIDEO) { - context.startActivity(getPlayerActivityIntent(context, media)) + context.startActivity(getPlayerActivityIntent(context, MediaType.VIDEO)) } } } diff --git a/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/StreamActionButton.kt b/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/StreamActionButton.kt index ddab6132..a7959876 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/StreamActionButton.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/actions/actionbutton/StreamActionButton.kt @@ -43,7 +43,7 @@ class StreamActionButton(item: FeedItem) : ItemActionButton(item) { .start() if (media.getMediaType() == MediaType.VIDEO) { - context.startActivity(getPlayerActivityIntent(context, media)) + context.startActivity(getPlayerActivityIntent(context, MediaType.VIDEO)) } } } diff --git a/app/src/main/java/ac/mdiq/podcini/ui/actions/menuhandler/FeedItemMenuHandler.kt b/app/src/main/java/ac/mdiq/podcini/ui/actions/menuhandler/FeedItemMenuHandler.kt index 0a874ecc..c246fdc0 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/actions/menuhandler/FeedItemMenuHandler.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/actions/menuhandler/FeedItemMenuHandler.kt @@ -85,9 +85,8 @@ object FeedItemMenuHandler { * @param visibility The new visibility status of given menu item */ private fun setItemVisibility(menu: Menu?, menuId: Int, visibility: Boolean) { - if (menu == null) { - return - } + if (menu == null) return + val item = menu.findItem(menuId) item?.setVisible(visibility) } @@ -112,9 +111,8 @@ object FeedItemMenuHandler { */ @UnstableApi fun onPrepareMenu(menu: Menu?, selectedItem: FeedItem?, vararg excludeIds: Int): Boolean { - if (menu == null || selectedItem == null) { - return false - } + if (menu == null || selectedItem == null) return false + val rc = onPrepareMenu(menu, selectedItem) if (rc && excludeIds.isNotEmpty()) { for (id in excludeIds) { diff --git a/app/src/main/java/ac/mdiq/podcini/ui/activity/MainActivity.kt b/app/src/main/java/ac/mdiq/podcini/ui/activity/MainActivity.kt index b62ad692..bfac9e85 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/activity/MainActivity.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/activity/MainActivity.kt @@ -274,6 +274,7 @@ class MainActivity : CastEnabledActivity() { private val bottomSheetCallback: BottomSheetCallback = @UnstableApi object : BottomSheetCallback() { override fun onStateChanged(view: View, state: Int) { + Log.d(TAG, "bottomSheet onStateChanged $state") when (state) { BottomSheetBehavior.STATE_COLLAPSED -> { onSlide(view,0.0f) @@ -610,8 +611,8 @@ class MainActivity : CastEnabledActivity() { bottomSheet.setState(BottomSheetBehavior.STATE_COLLAPSED) } intent.getBooleanExtra(MainActivityStarter.EXTRA_OPEN_PLAYER, false) -> { - bottomSheet.state = BottomSheetBehavior.STATE_EXPANDED - bottomSheetCallback.onSlide(dummyView, 1.0f) +// bottomSheet.state = BottomSheetBehavior.STATE_EXPANDED +// bottomSheetCallback.onSlide(dummyView, 1.0f) } else -> { handleDeeplink(intent.data) diff --git a/app/src/main/java/ac/mdiq/podcini/ui/activity/VideoplayerActivity.kt b/app/src/main/java/ac/mdiq/podcini/ui/activity/VideoplayerActivity.kt index 46358742..473072df 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/activity/VideoplayerActivity.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/activity/VideoplayerActivity.kt @@ -40,39 +40,45 @@ import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode - /** * Activity for playing video files. */ @UnstableApi class VideoplayerActivity : CastEnabledActivity() { + enum class VideoMode(val mode: Int) { + None(0,), + WINDOW_VIEW(1), + FULL_SCREEN_VIEW(2), + AUDIO_ONLY(3) + } + private var _binding: VideoplayerActivityBinding? = null private val binding get() = _binding!! lateinit var videoEpisodeFragment: VideoEpisodeFragment - var videoMode = 0 var switchToAudioOnly = false + override fun onCreate(savedInstanceState: Bundle?) { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) - videoMode = intent.getIntExtra("fullScreenMode",0) - if (videoMode == 0) { - videoMode = videoPlayMode - if (videoMode == AUDIO_ONLY) { + videoMode = (intent.getSerializableExtra(VIDEO_MODE) as? VideoMode) ?: VideoMode.None + if (videoMode == VideoMode.None) { + videoMode = VideoMode.entries.toTypedArray().getOrElse(videoPlayMode) { VideoMode.WINDOW_VIEW } + if (videoMode == VideoMode.AUDIO_ONLY) { switchToAudioOnly = true finish() } - if (videoMode != FULL_SCREEN_VIEW && videoMode != WINDOW_VIEW) { + if (videoMode != VideoMode.FULL_SCREEN_VIEW && videoMode != VideoMode.WINDOW_VIEW) { Log.i(TAG, "videoMode not selected, use window mode") - videoMode = WINDOW_VIEW + videoMode = VideoMode.WINDOW_VIEW } } when (videoMode) { - FULL_SCREEN_VIEW -> { + VideoMode.FULL_SCREEN_VIEW -> { window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN) // has to be called before setting layout content supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY) @@ -81,13 +87,14 @@ class VideoplayerActivity : CastEnabledActivity() { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) window.setFormat(PixelFormat.TRANSPARENT) } - WINDOW_VIEW -> { + VideoMode.WINDOW_VIEW -> { supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY) setTheme(R.style.Theme_Podcini_VideoEpisode) requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED window.setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN) window.setFormat(PixelFormat.TRANSPARENT) } + else -> {} } super.onCreate(savedInstanceState) @@ -156,7 +163,7 @@ class VideoplayerActivity : CastEnabledActivity() { fun toggleViews() { val newIntent = Intent(this, VideoplayerActivity::class.java) - newIntent.putExtra("fullScreenMode", if (videoMode == FULL_SCREEN_VIEW) WINDOW_VIEW else FULL_SCREEN_VIEW) + newIntent.putExtra(VIDEO_MODE, if (videoMode == VideoMode.FULL_SCREEN_VIEW) VideoMode.WINDOW_VIEW else VideoMode.FULL_SCREEN_VIEW) finish() startActivity(newIntent) } @@ -233,7 +240,7 @@ class VideoplayerActivity : CastEnabledActivity() { menu.findItem(R.id.playback_speed).setVisible(true) menu.findItem(R.id.player_show_chapters).setVisible(true) - if (videoMode == WINDOW_VIEW) { + if (videoMode == VideoMode.WINDOW_VIEW) { menu.findItem(R.id.add_to_favorites_item).setShowAsAction(SHOW_AS_ACTION_NEVER) menu.findItem(R.id.remove_from_favorites_item).setShowAsAction(SHOW_AS_ACTION_NEVER) menu.findItem(R.id.set_sleeptimer_item).setShowAsAction(SHOW_AS_ACTION_NEVER) @@ -316,7 +323,7 @@ class VideoplayerActivity : CastEnabledActivity() { private fun compatEnterPictureInPicture() { if (PictureInPictureUtil.supportsPictureInPicture(this) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - if (videoMode == FULL_SCREEN_VIEW) supportActionBar?.hide() + if (videoMode == VideoMode.FULL_SCREEN_VIEW) supportActionBar?.hide() videoEpisodeFragment.hideVideoControls(false) enterPictureInPictureMode() } @@ -381,9 +388,9 @@ class VideoplayerActivity : CastEnabledActivity() { companion object { private const val TAG = "VideoplayerActivity" - const val WINDOW_VIEW = 1 - const val FULL_SCREEN_VIEW = 2 - const val AUDIO_ONLY = 3 + const val VIDEO_MODE = "Video_Mode" + + var videoMode = VideoMode.None private fun getWebsiteLinkWithFallback(media: Playable?): String? { return when { diff --git a/app/src/main/java/ac/mdiq/podcini/ui/activity/appstartintent/VideoPlayerActivityStarter.kt b/app/src/main/java/ac/mdiq/podcini/ui/activity/appstartintent/VideoPlayerActivityStarter.kt index 5008c6a7..4399f523 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/activity/appstartintent/VideoPlayerActivityStarter.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/activity/appstartintent/VideoPlayerActivityStarter.kt @@ -2,21 +2,25 @@ package ac.mdiq.podcini.ui.activity.appstartintent import ac.mdiq.podcini.R +import ac.mdiq.podcini.ui.activity.VideoplayerActivity.Companion.VIDEO_MODE +import ac.mdiq.podcini.ui.activity.VideoplayerActivity.VideoMode import android.app.PendingIntent import android.content.Context import android.content.Intent -import android.os.Build +import androidx.annotation.OptIn +import androidx.media3.common.util.UnstableApi /** * Launches the video player activity of the app with specific arguments. * Does not require a dependency on the actual implementation of the activity. */ -class VideoPlayerActivityStarter(private val context: Context) { +@OptIn(UnstableApi::class) class VideoPlayerActivityStarter(private val context: Context, mode: VideoMode = VideoMode.None) { val intent: Intent = Intent(INTENT) init { intent.setPackage(context.packageName) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT) + if (mode != VideoMode.None) intent.putExtra(VIDEO_MODE, mode) } val pendingIntent: PendingIntent diff --git a/app/src/main/java/ac/mdiq/podcini/ui/fragment/AudioPlayerFragment.kt b/app/src/main/java/ac/mdiq/podcini/ui/fragment/AudioPlayerFragment.kt index 4da2f77d..63d55e78 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/fragment/AudioPlayerFragment.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/fragment/AudioPlayerFragment.kt @@ -6,36 +6,35 @@ import ac.mdiq.podcini.databinding.InternalPlayerFragmentBinding import ac.mdiq.podcini.feed.util.ImageResourceUtils import ac.mdiq.podcini.feed.util.PlaybackSpeedUtils import ac.mdiq.podcini.playback.PlaybackController -import ac.mdiq.podcini.playback.PlaybackController.Companion -import ac.mdiq.podcini.playback.PlaybackServiceStarter import ac.mdiq.podcini.playback.base.PlayerStatus import ac.mdiq.podcini.playback.cast.CastEnabledActivity -import ac.mdiq.podcini.preferences.UserPreferences -import ac.mdiq.podcini.receiver.MediaButtonReceiver import ac.mdiq.podcini.playback.service.PlaybackService +import ac.mdiq.podcini.preferences.UserPreferences import ac.mdiq.podcini.preferences.UserPreferences.videoPlayMode +import ac.mdiq.podcini.receiver.MediaButtonReceiver import ac.mdiq.podcini.storage.model.feed.Chapter import ac.mdiq.podcini.storage.model.feed.FeedItem import ac.mdiq.podcini.storage.model.feed.FeedMedia import ac.mdiq.podcini.storage.model.playback.MediaType import ac.mdiq.podcini.storage.model.playback.Playable +import ac.mdiq.podcini.ui.actions.menuhandler.FeedItemMenuHandler import ac.mdiq.podcini.ui.activity.MainActivity -import ac.mdiq.podcini.ui.view.PlaybackSpeedIndicatorView +import ac.mdiq.podcini.ui.activity.VideoplayerActivity.Companion.videoMode +import ac.mdiq.podcini.ui.activity.VideoplayerActivity.VideoMode +import ac.mdiq.podcini.ui.activity.appstartintent.VideoPlayerActivityStarter import ac.mdiq.podcini.ui.dialog.MediaPlayerErrorDialog import ac.mdiq.podcini.ui.dialog.SkipPreferenceDialog import ac.mdiq.podcini.ui.dialog.SleepTimerDialog import ac.mdiq.podcini.ui.dialog.VariableSpeedDialog -import ac.mdiq.podcini.ui.actions.menuhandler.FeedItemMenuHandler -import ac.mdiq.podcini.ui.activity.VideoplayerActivity.Companion.AUDIO_ONLY import ac.mdiq.podcini.ui.view.ChapterSeekBar import ac.mdiq.podcini.ui.view.PlayButton +import ac.mdiq.podcini.ui.view.PlaybackSpeedIndicatorView import ac.mdiq.podcini.util.ChapterUtils import ac.mdiq.podcini.util.Converter import ac.mdiq.podcini.util.TimeSpeedConverter import ac.mdiq.podcini.util.event.FavoritesEvent import ac.mdiq.podcini.util.event.PlayerErrorEvent import ac.mdiq.podcini.util.event.playback.* -import android.annotation.SuppressLint import android.app.Activity import android.content.Intent import android.os.Build @@ -114,10 +113,13 @@ class AudioPlayerFragment : Fragment(), SeekBar.OnSeekBarChangeListener, Toolbar toolbar = binding.toolbar toolbar.title = "" toolbar.setNavigationOnClickListener { - val bottomSheet = (activity as MainActivity).bottomSheet - if (bottomSheet.state == BottomSheetBehavior.STATE_EXPANDED) - bottomSheet.state = BottomSheetBehavior.STATE_COLLAPSED - else bottomSheet.state = BottomSheetBehavior.STATE_EXPANDED +// val mtype = controller?.getMedia()?.getMediaType() +// if (mtype == MediaType.AUDIO || (mtype == MediaType.VIDEO && videoPlayMode == VideoMode.AUDIO_ONLY)) { + val bottomSheet = (activity as MainActivity).bottomSheet +// if (bottomSheet.state == BottomSheetBehavior.STATE_EXPANDED) + bottomSheet.state = BottomSheetBehavior.STATE_COLLAPSED +// else bottomSheet.state = BottomSheetBehavior.STATE_EXPANDED +// } } toolbar.setOnMenuItemClickListener(this) @@ -400,6 +402,9 @@ class AudioPlayerFragment : Fragment(), SeekBar.OnSeekBarChangeListener, Toolbar if (item == null && isFeedMedia) item = (media as FeedMedia).item FeedItemMenuHandler.onPrepareMenu(toolbar.menu, item) + val mediaType = controller?.getMedia()?.getMediaType() + toolbar.menu?.findItem(R.id.show_video)?.setVisible(mediaType == MediaType.VIDEO) + if (controller != null) { toolbar.menu.findItem(R.id.set_sleeptimer_item).setVisible(!controller!!.sleepTimerActive()) toolbar.menu.findItem(R.id.disable_sleeptimer_item).setVisible(controller!!.sleepTimerActive()) @@ -419,6 +424,11 @@ class AudioPlayerFragment : Fragment(), SeekBar.OnSeekBarChangeListener, Toolbar val itemId = menuItem.itemId when (itemId) { + R.id.show_video -> { + controller!!.playPause() + VideoPlayerActivityStarter(requireContext(), VideoMode.FULL_SCREEN_VIEW).start() + return true + } R.id.disable_sleeptimer_item, R.id.set_sleeptimer_item -> { SleepTimerDialog().show(childFragmentManager, "SleepTimerDialog") return true @@ -523,13 +533,15 @@ class AudioPlayerFragment : Fragment(), SeekBar.OnSeekBarChangeListener, Toolbar Log.d(TAG, "internalPlayerFragment was clicked") val media = controller?.getMedia() if (media != null) { - if (media.getMediaType() == MediaType.AUDIO || videoPlayMode == AUDIO_ONLY) { + val mediaType = media.getMediaType() + if (mediaType == MediaType.AUDIO || + (mediaType == MediaType.VIDEO && (videoPlayMode == VideoMode.AUDIO_ONLY.mode || videoMode == VideoMode.AUDIO_ONLY))) { controller!!.ensureService() (activity as MainActivity).bottomSheet.setState(BottomSheetBehavior.STATE_EXPANDED) } else { controller?.playPause() // controller!!.ensureService() - val intent = PlaybackService.getPlayerActivityIntent(requireContext(), media) + val intent = PlaybackService.getPlayerActivityIntent(requireContext(), mediaType) startActivity(intent) } } @@ -554,7 +566,7 @@ class AudioPlayerFragment : Fragment(), SeekBar.OnSeekBarChangeListener, Toolbar val media = controller!!.getMedia() if (media?.getMediaType() == MediaType.VIDEO && controller!!.status != PlayerStatus.PLAYING) { controller!!.playPause() - requireContext().startActivity(PlaybackService.getPlayerActivityIntent(requireContext(), media)) + requireContext().startActivity(PlaybackService.getPlayerActivityIntent(requireContext(), media?.getMediaType())) } else { controller!!.playPause() } @@ -569,8 +581,7 @@ class AudioPlayerFragment : Fragment(), SeekBar.OnSeekBarChangeListener, Toolbar } } butRev.setOnLongClickListener { - SkipPreferenceDialog.showSkipPreference(requireContext(), - SkipPreferenceDialog.SkipDirection.SKIP_REWIND, txtvRev) + SkipPreferenceDialog.showSkipPreference(requireContext(), SkipPreferenceDialog.SkipDirection.SKIP_REWIND, txtvRev) true } butPlay.setOnClickListener { diff --git a/app/src/main/java/ac/mdiq/podcini/ui/fragment/EpisodeHomeFragment.kt b/app/src/main/java/ac/mdiq/podcini/ui/fragment/EpisodeHomeFragment.kt new file mode 100644 index 00000000..02789ee1 --- /dev/null +++ b/app/src/main/java/ac/mdiq/podcini/ui/fragment/EpisodeHomeFragment.kt @@ -0,0 +1,234 @@ +package ac.mdiq.podcini.ui.fragment + +import ac.mdiq.podcini.R +import ac.mdiq.podcini.databinding.EpisodeHomeFragmentBinding +import ac.mdiq.podcini.storage.model.feed.FeedItem +import android.speech.tts.TextToSpeech +import android.os.Build +import android.os.Bundle +import android.text.Html +import android.util.Log +import android.view.* +import androidx.annotation.OptIn +import androidx.appcompat.widget.Toolbar +import androidx.core.app.ShareCompat +import androidx.fragment.app.Fragment +import androidx.media3.common.util.UnstableApi +import com.google.android.material.appbar.MaterialToolbar +import io.reactivex.disposables.Disposable +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext +import net.dankito.readability4j.Readability4J +import java.io.BufferedReader +import java.io.InputStreamReader +import java.net.URL +import java.util.* + + +/** + * Displays information about an Episode (FeedItem) and actions. + */ +class EpisodeHomeFragment : Fragment(), Toolbar.OnMenuItemClickListener, TextToSpeech.OnInitListener { + private var _binding: EpisodeHomeFragmentBinding? = null + private val binding get() = _binding!! + + private var item: FeedItem? = null + + private lateinit var tts: TextToSpeech + private lateinit var toolbar: MaterialToolbar + + private var disposable: Disposable? = null + + private var readerhtml: String? = null + private var textContent: String? = null + private var readMode = false + private var ttsPlaying = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + item = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) requireArguments().getSerializable(ARG_FEEDITEM, FeedItem::class.java) + else requireArguments().getSerializable(ARG_FEEDITEM) as? FeedItem + tts = TextToSpeech(requireContext(), this) + } + + @UnstableApi override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + super.onCreateView(inflater, container, savedInstanceState) + + _binding = EpisodeHomeFragmentBinding.inflate(inflater, container, false) + Log.d(TAG, "fragment onCreateView") + + toolbar = binding.toolbar + toolbar.title = "" + toolbar.inflateMenu(R.menu.episode_home) + toolbar.setNavigationOnClickListener { parentFragmentManager.popBackStack() } + toolbar.setOnMenuItemClickListener(this) + + if (item?.link != null) { + showContent() + } + updateAppearance() + return binding.root + } + + @OptIn(UnstableApi::class) private fun switchMode() { + readMode = !readMode + showContent() + updateAppearance() + } + + override fun onInit(status: Int) { + if (status == TextToSpeech.SUCCESS) { + // TTS initialization successful + Log.i(TAG, "TTS init success with Locale: ${item?.feed?.language}") + if (item?.feed?.language != null) { + val result = tts.setLanguage(Locale(item!!.feed!!.language)) +// val result = tts.setLanguage(Locale.UK) + if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { + Log.w(TAG, "TTS language not supported") + // Language not supported + // Handle the error or fallback to default behavior + } + } + } else { + // TTS initialization failed + // Handle the error or fallback to default behavior + Log.w(TAG, "TTS init failed") + } + } + + private fun showContent() { + if (readMode) { + if (readerhtml == null) { + runBlocking { + val url = item!!.link!! + val htmlSource = fetchHtmlSource(url) + val readability4J = Readability4J(item?.link!!, htmlSource) + val article = readability4J.parse() + textContent = article.textContent +// Log.d(TAG, "readability4J: ${article.textContent}") + readerhtml = article.contentWithDocumentsCharsetOrUtf8 + } + } + if (readerhtml != null) binding.webView.loadDataWithBaseURL(item!!.link!!, readerhtml!!, "text/html", "UTF-8", null) + } else { + if (item?.link != null) binding.webView.loadUrl(item!!.link!!) + } + } + + private suspend fun fetchHtmlSource(urlString: String): String = withContext(Dispatchers.IO) { + val url = URL(urlString) + val connection = url.openConnection() + val inputStream = connection.getInputStream() + val bufferedReader = BufferedReader(InputStreamReader(inputStream)) + + val stringBuilder = StringBuilder() + var line: String? + while (bufferedReader.readLine().also { line = it } != null) { + stringBuilder.append(line) + } + + bufferedReader.close() + inputStream.close() + + stringBuilder.toString() + } + + override fun onPrepareOptionsMenu(menu: Menu) { + val textSpeech = menu.findItem(R.id.text_speech) + textSpeech.isVisible = readMode + if (readMode) { + if (ttsPlaying) textSpeech.setIcon(R.drawable.ic_pause) + else textSpeech.setIcon(R.drawable.ic_play_24dp) + } + } + + @UnstableApi override fun onMenuItemClick(menuItem: MenuItem): Boolean { + when (menuItem.itemId) { + R.id.switch_home -> { + Log.d(TAG, "switch_home selected") + switchMode() + return true + } + R.id.text_speech -> { + Log.d(TAG, "text_speech selected: $textContent") + if (tts.isSpeaking) tts.stop() + if (!ttsPlaying) { + ttsPlaying = true + if (textContent != null) { + val maxTextLength = 4000 + var startIndex = 0 + var endIndex = minOf(maxTextLength, textContent!!.length) + while (startIndex < textContent!!.length) { + val chunk = textContent!!.substring(startIndex, endIndex) + tts.speak(chunk, TextToSpeech.QUEUE_ADD, null, null) + + startIndex += maxTextLength + endIndex = minOf(endIndex + maxTextLength, textContent!!.length) + } + } + } else ttsPlaying = false + + updateAppearance() + return true + } + R.id.share_notes -> { + if (item == null) return false + val notes = item!!.description + if (!notes.isNullOrEmpty()) { + val shareText = if (Build.VERSION.SDK_INT >= 24) Html.fromHtml(notes, Html.FROM_HTML_MODE_LEGACY).toString() + else Html.fromHtml(notes).toString() + val context = requireContext() + val intent = ShareCompat.IntentBuilder(context) + .setType("text/plain") + .setText(shareText) + .setChooserTitle(R.string.share_notes_label) + .createChooserIntent() + context.startActivity(intent) + } + return true + } + else -> { + if (item == null) return false + return true + } + } + } + + @UnstableApi override fun onResume() { + super.onResume() + updateAppearance() + } + + @OptIn(UnstableApi::class) override fun onDestroyView() { + super.onDestroyView() + Log.d(TAG, "onDestroyView") + _binding = null + disposable?.dispose() + tts.shutdown() + } + + @UnstableApi private fun updateAppearance() { + if (item == null) { + Log.d(TAG, "updateAppearance item is null") + return + } + onPrepareOptionsMenu(toolbar.menu) +// FeedItemMenuHandler.onPrepareMenu(toolbar.menu, item, R.id.switch_home) + } + + companion object { + private const val TAG = "EpisodeWebviewFragment" + private const val ARG_FEEDITEM = "feeditem" + + @JvmStatic + fun newInstance(item: FeedItem): EpisodeHomeFragment { + val fragment = EpisodeHomeFragment() + val args = Bundle() + args.putSerializable(ARG_FEEDITEM, item) + fragment.arguments = args + return fragment + } + } +} diff --git a/app/src/main/java/ac/mdiq/podcini/ui/fragment/EpisodeInfoFragment.kt b/app/src/main/java/ac/mdiq/podcini/ui/fragment/EpisodeInfoFragment.kt index a769332b..d76b22f0 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/fragment/EpisodeInfoFragment.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/fragment/EpisodeInfoFragment.kt @@ -85,12 +85,9 @@ class EpisodeInfoFragment : Fragment(), Toolbar.OnMenuItemClickListener { private lateinit var imgvCover: ImageView private lateinit var progbarDownload: CircularProgressBar private lateinit var progbarLoading: ProgressBar - private lateinit var butAction1Text: TextView - private lateinit var butAction2Text: TextView - private lateinit var butAction1Icon: ImageView - private lateinit var butAction2Icon: ImageView - private lateinit var butAction1: View - private lateinit var butAction2: View + private lateinit var butAction0: View + private lateinit var butAction1: ImageView + private lateinit var butAction2: ImageView private lateinit var noMediaLabel: View private var actionButton1: ItemActionButton? = null @@ -142,14 +139,15 @@ class EpisodeInfoFragment : Fragment(), Toolbar.OnMenuItemClickListener { imgvCover.setOnClickListener { openPodcast() } progbarDownload = binding.circularProgressBar progbarLoading = binding.progbarLoading + butAction0 = binding.butAction0 butAction1 = binding.butAction1 butAction2 = binding.butAction2 - butAction1Icon = binding.butAction1Icon - butAction2Icon = binding.butAction2Icon - butAction1Text = binding.butAction1Text - butAction2Text = binding.butAction2Text noMediaLabel = binding.noMediaLabel + butAction0.setOnClickListener(View.OnClickListener { + if (item?.link != null) (activity as MainActivity).loadChildFragment(EpisodeHomeFragment.newInstance(item!!)) + }) + butAction1.setOnClickListener(View.OnClickListener { when { actionButton1 is StreamActionButton && !UserPreferences.isStreamOverDownload @@ -272,6 +270,7 @@ class EpisodeInfoFragment : Fragment(), Toolbar.OnMenuItemClickListener { if (webviewData != null && !itemsLoaded) { webvDescription.loadDataWithBaseURL("https://127.0.0.1", webviewData!!, "text/html", "utf-8", "about:blank") } +// if (item?.link != null) binding.webView.loadUrl(item!!.link!!) updateAppearance() } @@ -298,8 +297,7 @@ class EpisodeInfoFragment : Fragment(), Toolbar.OnMenuItemClickListener { val options: RequestOptions = RequestOptions() .error(R.color.light_gray) - .transform(FitCenter(), - RoundedCorners((8 * resources.displayMetrics.density).toInt())) + .transform(FitCenter(), RoundedCorners((8 * resources.displayMetrics.density).toInt())) .dontAnimate() val imgLocFB = ImageResourceUtils.getFallbackImageLocation(item!!) @@ -337,8 +335,7 @@ class EpisodeInfoFragment : Fragment(), Toolbar.OnMenuItemClickListener { noMediaLabel.visibility = View.GONE if (media.getDuration() > 0) { txtvDuration.text = Converter.getDurationStringLong(media.getDuration()) - txtvDuration.setContentDescription( - Converter.getDurationStringLocalized(requireContext(), media.getDuration().toLong())) + txtvDuration.setContentDescription(Converter.getDurationStringLocalized(requireContext(), media.getDuration().toLong())) } if (item != null) { actionButton1 = when { @@ -377,17 +374,17 @@ class EpisodeInfoFragment : Fragment(), Toolbar.OnMenuItemClickListener { } if (actionButton1 != null) { - butAction1Text.setText(actionButton1!!.getLabel()) - butAction1Icon.setImageResource(actionButton1!!.getDrawable()) +// butAction1Text.setText(actionButton1!!.getLabel()) + butAction1.setImageResource(actionButton1!!.getDrawable()) } - butAction1Text.transformationMethod = null +// butAction1Text.transformationMethod = null if (actionButton1 != null) butAction1.visibility = actionButton1!!.visibility if (actionButton2 != null) { - butAction2Text.setText(actionButton2!!.getLabel()) - butAction2Icon.setImageResource(actionButton2!!.getDrawable()) +// butAction2Text.setText(actionButton2!!.getLabel()) + butAction2.setImageResource(actionButton2!!.getDrawable()) } - butAction2Text.transformationMethod = null +// butAction2Text.transformationMethod = null if (actionButton2 != null) butAction2.visibility = actionButton2!!.visibility } diff --git a/app/src/main/java/ac/mdiq/podcini/ui/fragment/PlayerDetailsFragment.kt b/app/src/main/java/ac/mdiq/podcini/ui/fragment/PlayerDetailsFragment.kt index b2120f94..a4cc3e01 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/fragment/PlayerDetailsFragment.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/fragment/PlayerDetailsFragment.kt @@ -4,7 +4,6 @@ import ac.mdiq.podcini.R import ac.mdiq.podcini.databinding.PlayerDetailsFragmentBinding import ac.mdiq.podcini.feed.util.ImageResourceUtils import ac.mdiq.podcini.playback.PlaybackController -import ac.mdiq.podcini.util.event.playback.PlaybackPositionEvent import ac.mdiq.podcini.storage.DBReader import ac.mdiq.podcini.storage.model.feed.Chapter import ac.mdiq.podcini.storage.model.feed.EmbeddedChapterImage @@ -16,6 +15,7 @@ import ac.mdiq.podcini.ui.utils.ShownotesCleaner import ac.mdiq.podcini.ui.view.ShownotesWebView import ac.mdiq.podcini.util.ChapterUtils import ac.mdiq.podcini.util.DateFormatter +import ac.mdiq.podcini.util.event.playback.PlaybackPositionEvent import android.animation.Animator import android.animation.AnimatorListenerAdapter import android.animation.AnimatorSet @@ -44,6 +44,7 @@ import com.bumptech.glide.RequestBuilder import com.bumptech.glide.load.resource.bitmap.FitCenter import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.request.RequestOptions +import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.snackbar.Snackbar import io.reactivex.Maybe import io.reactivex.MaybeEmitter @@ -212,13 +213,9 @@ class PlayerDetailsFragment : Fragment() { val lines = binding.txtvEpisodeTitle.lineCount val animUnit = 1500 if (lines > binding.txtvEpisodeTitle.maxLines) { - val titleHeight = (binding.txtvEpisodeTitle.height - - binding.txtvEpisodeTitle.paddingTop - - binding.txtvEpisodeTitle.paddingBottom) - val verticalMarquee: ObjectAnimator = ObjectAnimator.ofInt( - binding.txtvEpisodeTitle, "scrollY", 0, - (lines - binding.txtvEpisodeTitle.maxLines) * (titleHeight / binding.txtvEpisodeTitle.maxLines)) - .setDuration((lines * animUnit).toLong()) + val titleHeight = (binding.txtvEpisodeTitle.height - binding.txtvEpisodeTitle.paddingTop - binding.txtvEpisodeTitle.paddingBottom) + val verticalMarquee: ObjectAnimator = ObjectAnimator.ofInt(binding.txtvEpisodeTitle, "scrollY", 0, + (lines - binding.txtvEpisodeTitle.maxLines) * (titleHeight / binding.txtvEpisodeTitle.maxLines)).setDuration((lines * animUnit).toLong()) val fadeOut: ObjectAnimator = ObjectAnimator.ofFloat(binding.txtvEpisodeTitle, "alpha", 0f) fadeOut.setStartDelay(animUnit.toLong()) fadeOut.addListener(object : AnimatorListenerAdapter() { @@ -254,11 +251,8 @@ class PlayerDetailsFragment : Fragment() { val newVisibility = if (chapterControlVisible) View.VISIBLE else View.GONE if (binding.chapterButton.visibility != newVisibility) { binding.chapterButton.visibility = newVisibility - ObjectAnimator.ofFloat(binding.chapterButton, - "alpha", - (if (chapterControlVisible) 0 else 1).toFloat(), - (if (chapterControlVisible) 1 else 0).toFloat()) - .start() + ObjectAnimator.ofFloat(binding.chapterButton, "alpha", + (if (chapterControlVisible) 0 else 1).toFloat(), (if (chapterControlVisible) 1 else 0).toFloat()).start() } } @@ -279,8 +273,7 @@ class PlayerDetailsFragment : Fragment() { if (media == null) return val options: RequestOptions = RequestOptions() .dontAnimate() - .transform(FitCenter(), - RoundedCorners((16 * resources.displayMetrics.density).toInt())) + .transform(FitCenter(), RoundedCorners((16 * resources.displayMetrics.density).toInt())) val cover: RequestBuilder = Glide.with(this) .load(media!!.getImageLocation()) @@ -308,9 +301,7 @@ class PlayerDetailsFragment : Fragment() { private val currentChapter: Chapter? get() { - if (media == null || media!!.getChapters().isEmpty() || displayedChapterIndex == -1) { - return null - } + if (media == null || media!!.getChapters().isEmpty() || displayedChapterIndex == -1) return null return media!!.getChapters()[displayedChapterIndex] } @@ -364,6 +355,8 @@ class PlayerDetailsFragment : Fragment() { } @UnstableApi private fun restoreFromPreference(): Boolean { + if ((activity as MainActivity).bottomSheet.state != BottomSheetBehavior.STATE_EXPANDED) return false + Log.d(TAG, "Restoring from preferences") val activity: Activity? = activity if (activity != null) { @@ -411,18 +404,14 @@ class PlayerDetailsFragment : Fragment() { // private fun configureForOrientation(newConfig: Configuration) { // val isPortrait = newConfig.orientation == Configuration.ORIENTATION_PORTRAIT // -// binding.coverFragment.orientation = if (isPortrait) LinearLayout.VERTICAL else LinearLayout.HORIZONTAL +//// binding.coverFragment.orientation = if (isPortrait) LinearLayout.VERTICAL else LinearLayout.HORIZONTAL // // if (isPortrait) { -// binding.coverHolder.layoutParams = -// LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f) -// binding.coverFragmentTextContainer.layoutParams = -// LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) +// binding.coverHolder.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f) +//// binding.coverFragmentTextContainer.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) // } else { -// binding.coverHolder.layoutParams = -// LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1f) -// binding.coverFragmentTextContainer.layoutParams = -// LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1f) +// binding.coverHolder.layoutParams = LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1f) +//// binding.coverFragmentTextContainer.layoutParams = LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1f) // } // // (binding.episodeDetails.parent as ViewGroup).removeView(binding.episodeDetails) @@ -442,8 +431,7 @@ class PlayerDetailsFragment : Fragment() { val clipboardManager: ClipboardManager? = ContextCompat.getSystemService(requireContext(), ClipboardManager::class.java) clipboardManager?.setPrimaryClip(ClipData.newPlainText("Podcini", text)) if (Build.VERSION.SDK_INT <= 32) { - (requireActivity() as MainActivity).showSnackbarAbovePlayer( - resources.getString(R.string.copied_to_clipboard), Snackbar.LENGTH_SHORT) + (requireActivity() as MainActivity).showSnackbarAbovePlayer(resources.getString(R.string.copied_to_clipboard), Snackbar.LENGTH_SHORT) } return true } diff --git a/app/src/main/java/ac/mdiq/podcini/ui/fragment/VideoEpisodeFragment.kt b/app/src/main/java/ac/mdiq/podcini/ui/fragment/VideoEpisodeFragment.kt index 43dfb88b..36c62475 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/fragment/VideoEpisodeFragment.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/fragment/VideoEpisodeFragment.kt @@ -12,6 +12,7 @@ import ac.mdiq.podcini.storage.DBReader import ac.mdiq.podcini.storage.model.feed.FeedItem import ac.mdiq.podcini.storage.model.playback.Playable import ac.mdiq.podcini.ui.activity.VideoplayerActivity +import ac.mdiq.podcini.ui.activity.VideoplayerActivity.Companion.videoMode import ac.mdiq.podcini.ui.activity.appstartintent.MainActivityStarter import ac.mdiq.podcini.ui.dialog.SkipPreferenceDialog import ac.mdiq.podcini.ui.utils.PictureInPictureUtil @@ -343,7 +344,7 @@ class VideoEpisodeFragment : Fragment(), OnSeekBarChangeListener { } if (videoControlsShowing) { hideVideoControls(false) - if ((activity as VideoplayerActivity).videoMode == VideoplayerActivity.FULL_SCREEN_VIEW) + if (videoMode == VideoplayerActivity.VideoMode.FULL_SCREEN_VIEW) (activity as AppCompatActivity).supportActionBar?.hide() videoControlsShowing = false } @@ -360,7 +361,7 @@ class VideoEpisodeFragment : Fragment(), OnSeekBarChangeListener { fun toggleVideoControlsVisibility() { if (videoControlsShowing) { hideVideoControls(true) - if ((activity as VideoplayerActivity).videoMode == VideoplayerActivity.FULL_SCREEN_VIEW) + if (videoMode == VideoplayerActivity.VideoMode.FULL_SCREEN_VIEW) (activity as AppCompatActivity).supportActionBar?.hide() } else { showVideoControls() @@ -461,8 +462,8 @@ class VideoEpisodeFragment : Fragment(), OnSeekBarChangeListener { if (videoControlsShowing) { Log.d(TAG, "Hiding video controls") hideVideoControls(true) - if ((activity as VideoplayerActivity).videoMode == VideoplayerActivity.FULL_SCREEN_VIEW) - (activity as? AppCompatActivity)?.supportActionBar?.hide() + if (videoMode == VideoplayerActivity.VideoMode.FULL_SCREEN_VIEW) + (activity as? AppCompatActivity)?.supportActionBar?.hide() videoControlsShowing = false } } diff --git a/app/src/main/java/ac/mdiq/podcini/ui/utils/ShownotesCleaner.kt b/app/src/main/java/ac/mdiq/podcini/ui/utils/ShownotesCleaner.kt index 723146cf..ccc5c907 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/utils/ShownotesCleaner.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/utils/ShownotesCleaner.kt @@ -27,8 +27,7 @@ class ShownotesCleaner(context: Context, private val rawShownotes: String, priva init { val colorPrimary = colorToHtml(context, android.R.attr.textColorPrimary) val colorAccent = colorToHtml(context, R.attr.colorAccent) - val margin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8f, - context.resources.displayMetrics).toInt() + val margin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8f, context.resources.displayMetrics).toInt() var styleString: String? = "" try { val templateStream = context.assets.open("shownotes-style.css") @@ -36,15 +35,13 @@ class ShownotesCleaner(context: Context, private val rawShownotes: String, priva } catch (e: IOException) { e.printStackTrace() } - webviewStyle = String.format(Locale.US, styleString!!, colorPrimary, colorAccent, - margin, margin, margin, margin) + webviewStyle = String.format(Locale.US, styleString!!, colorPrimary, colorAccent, margin, margin, margin, margin) } private fun colorToHtml(context: Context, colorAttr: Int): String { val res = context.theme.obtainStyledAttributes(intArrayOf(colorAttr)) @ColorInt val col = res.getColor(0, 0) - val color = ("rgba(" + Color.red(col) + "," + Color.green(col) + "," - + Color.blue(col) + "," + (Color.alpha(col) / 255.0) + ")") + val color = ("rgba(" + Color.red(col) + "," + Color.green(col) + "," + Color.blue(col) + "," + (Color.alpha(col) / 255.0) + ")") res.recycle() return color } diff --git a/app/src/main/java/ac/mdiq/podcini/ui/widget/WidgetUpdater.kt b/app/src/main/java/ac/mdiq/podcini/ui/widget/WidgetUpdater.kt index 1e5a61a3..be13e7e6 100644 --- a/app/src/main/java/ac/mdiq/podcini/ui/widget/WidgetUpdater.kt +++ b/app/src/main/java/ac/mdiq/podcini/ui/widget/WidgetUpdater.kt @@ -40,9 +40,8 @@ object WidgetUpdater { * Update the widgets with the given parameters. Must be called in a background thread. */ fun updateWidget(context: Context, widgetState: WidgetState?) { - if (!isEnabled(context) || widgetState == null) { - return - } + if (!isEnabled(context) || widgetState == null) return + val startMediaPlayer = if (widgetState.media != null && widgetState.media.getMediaType() === MediaType.VIDEO) { VideoPlayerActivityStarter(context).pendingIntent } else { @@ -88,8 +87,7 @@ object WidgetUpdater { views.setViewVisibility(R.id.txtvTitle, View.VISIBLE) views.setViewVisibility(R.id.txtNoPlaying, View.GONE) - val progressString = getProgressString(widgetState.position, - widgetState.duration, widgetState.playbackSpeed) + val progressString = getProgressString(widgetState.position, widgetState.duration, widgetState.playbackSpeed) if (progressString != null) { views.setViewVisibility(R.id.txtvProgress, View.VISIBLE) views.setTextViewText(R.id.txtvProgress, progressString) @@ -106,22 +104,16 @@ object WidgetUpdater { views.setImageViewResource(R.id.butPlayExtended, R.drawable.ic_widget_play) views.setContentDescription(R.id.butPlayExtended, context.getString(R.string.play_label)) } - views.setOnClickPendingIntent(R.id.butPlay, - createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)) - views.setOnClickPendingIntent(R.id.butPlayExtended, - createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)) - views.setOnClickPendingIntent(R.id.butRew, - createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_REWIND)) - views.setOnClickPendingIntent(R.id.butFastForward, - createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_FAST_FORWARD)) - views.setOnClickPendingIntent(R.id.butSkip, - createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_NEXT)) + views.setOnClickPendingIntent(R.id.butPlay, createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)) + views.setOnClickPendingIntent(R.id.butPlayExtended, createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)) + views.setOnClickPendingIntent(R.id.butRew, createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_REWIND)) + views.setOnClickPendingIntent(R.id.butFastForward, createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_FAST_FORWARD)) + views.setOnClickPendingIntent(R.id.butSkip, createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_NEXT)) } else { // start the app if they click anything views.setOnClickPendingIntent(R.id.layout_left, startMediaPlayer) views.setOnClickPendingIntent(R.id.butPlay, startMediaPlayer) - views.setOnClickPendingIntent(R.id.butPlayExtended, - createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)) + views.setOnClickPendingIntent(R.id.butPlayExtended, createPendingIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)) views.setViewVisibility(R.id.txtvProgress, View.GONE) views.setViewVisibility(R.id.txtvTitle, View.GONE) views.setViewVisibility(R.id.txtNoPlaying, View.VISIBLE) @@ -183,27 +175,18 @@ object WidgetUpdater { } private fun getProgressString(position: Int, duration: Int, speed: Float): String? { - if (position < 0 || duration <= 0) { - return null - } + if (position < 0 || duration <= 0) return null + val converter = TimeSpeedConverter(speed) return if (shouldShowRemainingTime()) { - (getDurationStringLong(converter.convert(position)) + " / -" - + getDurationStringLong(converter.convert(max(0.0, - (duration - position).toDouble()) - .toInt()))) + ("${getDurationStringLong(converter.convert(position))} / -${getDurationStringLong(converter.convert(max(0.0, (duration - position).toDouble()).toInt())) + }") } else { - (getDurationStringLong(converter.convert(position)) + " / " - + getDurationStringLong(converter.convert(duration))) + (getDurationStringLong(converter.convert(position)) + " / " + getDurationStringLong(converter.convert(duration))) } } - class WidgetState(val media: Playable?, - val status: PlayerStatus, - val position: Int, - val duration: Int, - val playbackSpeed: Float - ) { + class WidgetState(val media: Playable?, val status: PlayerStatus, val position: Int, val duration: Int, val playbackSpeed: Float) { constructor(status: PlayerStatus) : this(null, status, Playable.INVALID_TIME, Playable.INVALID_TIME, 1.0f) } } diff --git a/app/src/main/res/drawable/baseline_home_24.xml b/app/src/main/res/drawable/baseline_home_24.xml new file mode 100644 index 00000000..57d515fa --- /dev/null +++ b/app/src/main/res/drawable/baseline_home_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/baseline_home_work_24.xml b/app/src/main/res/drawable/baseline_home_work_24.xml new file mode 100644 index 00000000..b9092237 --- /dev/null +++ b/app/src/main/res/drawable/baseline_home_work_24.xml @@ -0,0 +1,6 @@ + + + + diff --git a/app/src/main/res/layout/episode_home_fragment.xml b/app/src/main/res/layout/episode_home_fragment.xml new file mode 100644 index 00000000..8400d222 --- /dev/null +++ b/app/src/main/res/layout/episode_home_fragment.xml @@ -0,0 +1,26 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/episode_info_fragment.xml b/app/src/main/res/layout/episode_info_fragment.xml index e200193a..823b9f36 100644 --- a/app/src/main/res/layout/episode_info_fragment.xml +++ b/app/src/main/res/layout/episode_info_fragment.xml @@ -114,80 +114,53 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:gravity="center_vertical" + android:gravity="center" android:baselineAligned="false"> - + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_marginTop="12dp" + android:layout_marginBottom="12dp" + tools:src="@drawable/ic_settings" /> + + + + + + - - - - - - - - - - - - - - - - - + @@ -210,10 +183,17 @@ + + + + + + + diff --git a/app/src/main/res/menu/episode_home.xml b/app/src/main/res/menu/episode_home.xml new file mode 100644 index 00000000..9ba29f01 --- /dev/null +++ b/app/src/main/res/menu/episode_home.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/mediaplayer.xml b/app/src/main/res/menu/mediaplayer.xml index 4534dd98..594888c8 100644 --- a/app/src/main/res/menu/mediaplayer.xml +++ b/app/src/main/res/menu/mediaplayer.xml @@ -2,6 +2,14 @@ + + + - + diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/app/src/main/res/mipmap-hdpi/ic_launcher_background.png deleted file mode 100644 index b54722270f1bebc0f346c3026830dbf146ea93f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11755 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 Xq5-<3YNfAe00000NkvXXu0mjf+`~zB diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png deleted file mode 100644 index 7e2f933b1e08917523312be31cff09cd750572ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15173 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png deleted file mode 100644 index 60a71c940aca166833ddb6db3e60e0fcb403317e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26720 zcmV(`K-0g8P)kNh7j0RrkNB_i1;1T-k=AXfwc zWRP8yC?Q~Oc4_%?;h&UpB_jH_nQgB&Y7B`|(Cly^wOIrN%zwJ6=+}fq1OOY4w9F)7 zogCNz2#`|x$-TU$nzqPI4Pb)Q|KJw`5#ffE=-4(uL;}K)*RQuH^iPx!5CMrf%qmmZ zwk@T!OZ>HKAXMWxOdTmD0sxAHC;|`=EfVuC67z$63*-g7ipjLBjZztZe)eBxXNX9N z0KHg-yzz)eVhyYI*Vf(bS_Giu1w^#rmVZbyOFNc`#*`e&-jFNx2H0)6G>f*QB)uW5 z6SG!TkCltuROeMTGY}EfTy3}|qO5T<4d%B+lZQ!ScDlhSqV1?o55r9~ zkS7@??V=M<6vYpQ)lHwFt)idoZk?(tW#5hxfVCYg-kW|agEvIUyf)|!9Rc}ARt;K^ zxs z`9ETQQzG1U9Jf9DXuv%~mEQ5P)&eQminm24*F*);fA~F_hcLbK9Ab zJ;%Ud&q0gNwN$N*pKW`P$Rf@-qdKX#MFiZ$<`7ZqwDtL%6FB>TQ%Z>y9z-N0p>RjK zGOpI$ozd8~E&Ib;ca*eac!%0@XbH&q?fvLBOetZH=K8EHrKDeNn-Sv#1VD&L09eKd zin8X2IkTC`aMb?J&;wc8MKp4alp=F#&$aNDPTQ$l@~Pw?;*j{0+N0+nH67G(?ib(2CP>L7sw2yOVa!*s~n&u^O&FYUY!N)UB{fBm48QQ zWQM(t%uQY?Dxm@pb?jck=0t~+%W-K0vEn0X80sAj{v3nI&q77YNG|P&N7_wBO$Vv| zv)05#sAS(6m?7P)_X>ZBD`Ynt5`?qC8pJ@))h_pu=F+MD8oyqG))g@>u72cYD|_M$ zF5!;3TMf1m!S8@O)QWiWRh~l@Sz|+Y!%d6Ul3tP>X^?U^z?dJ~w}xh@pK7Lcc-H*G z9!2A*O%V{r9_$_5nmL?t4Q$(nh%dqBav!h$vuRxGKgOa*6xt42*d0|6RJe_lC5(|{ zgM~ca2g@UU99^*lt8{I=$3_#jgQ}LZ*l5j0N5q=uCH*#rYoWa?Zqc;ELEWt?0{p*R zB>S8*h3C~zMCjzdrAmH1qL z32dKgls4wmz1>|K#6F4bf@@cswPU}Ia(bEPO78V^*QPuh*B$>;mbBZ307dxgp=ob< zz#5u`5QAJa{1QXc-4PL|sv7|=LyIN^*nsCmVRp+YSG;twoX)umM5O&&pyFUlfQM3u z{$Llh{rPy`@nap-9o1$}uQ6G*(=5w*L9)Cg0Jg((3WJF85bf8@(k{8z8}pH7h*`C)oS8>qCX6|# z*vBn~wm?2{k@c`u9OirZoYq39+Xk?hyRHBj8Ww3Yk+umygj-7hyxFoRn44*}XrsNi z?lA^v7)=ceRf&N5y0~7=jSsVYuXpbcG zF&7lVMv;NE+|D6oH9HI6D-!z|K99mX9bF26T{vl&w24q~!r_v2^)WuEq*EY)J5{kG zV5F-c#wH$odaQi?06TAr?!IKX?mF-S+T zK671C)3(7XzYQS*^`t^qJ=@E*LX?kqgJFt z#A0Tkja^qtZn|j0)+Lr1Q%uY{w!RLi2uWI)A9>`tZ@9w*93ke9B8FcMHb~Pt zXq+1yt}_-|A64xF6*p11xfTw4BB&n9F=%KfzvQCVSXYBd&NkKAW5$~u%;v<-o)HU~ zH5~ViTQk1bNISoX;ltlUt`gVy!ZBgVv#|6G)?gkughx$xgs$l4LLO~{H4~K6r)hkV zsIQ;@sU2y(AZ#aeGiwJ{)m9LSz5vKNNye}Y_Z2n~ZLkNW4W$&(M@3+X=OX^lW)5#FC%-Uv-)&PlXK_}0PUuT zMLl(oZJY_n?P8!aI!E#CJrpDb)%nA_#yl@JY=wwxnkN9B&j2${b0ST&n({enbtMga;!z{?Lt4SwU#BUX}_j}}7 z@|1&xGIrc!xvYs8WzW94Lp_-E@j z7<21-l;x|0bBdxG2pGgs8>eJEA=-U;2zu#v#1}#%6HG+|V;(x-H70AaI1WZM0e16@ zxL8BUfyn^n;~08t)fBFw4Q#Ng6vR`U;_tk~+Ge^HR zl!K$64)M^b_+y1zFT?54r@f30$1VwI135*s(7if)G?ApK!_J@>L5N|a?6j>>bLIi8 zezDuKMqqU(7a0jikc2NDBxdc<>iHhQGNki_C*6fg!AS)^2kr^(`atC6+I!6Gf&l0?`o;$ zCrXK?z%3f<`N!OBmJ#Pzk>i!}bC-bIOwX|&J7mfwTqV&d4pA-;b7-$3B6Tk8&NFbi zM7l)C|5mtUX0BdgLexHFAEWzZ zj^NjZns&>8QV`l7-vx1m;vbk$)80xUBSrR^sED7-JmrG>#&u19d>c1{t<06>%m-0>zk zxyuDU9J-N){Fw3vU5k*lvW|_e40kCkg`l!PvRmk`Ahr&%T9x>$cE(g&Rg7{G-w2uA zC&0K4*FDf-Tj{9H3Q@s`jpkF5nGNrPs~bfz?;~k5AitS1yLDT*RS91;4Y->8S8vA> z9?ReQn`uUtKh#~N6+N4+c6}k?waRulKT`>e!!A&rL%Ih4Nd6B{HB~2KWAo}ynBp>O z84+}xd1e=mdDJedq^N(!WJE~$TlMTpnnwhp1pYH37lK~#T?Itw z*5zZK$E_PRP>*{A5W1rW;M58TcPa!X*pBC{ueB}Mr~`b0F0*DEG#1NA_FCt zj2@Q$%~m_!H9NzCEwt{^i`o~rb^hD$>=EJFcED;b2>h)u#wB3}BM# zdVM>g9m?>Ygx|3r)>ZKt4dO89Nz;1N+-|!GDG-#RPO(L8%Ek_Bl{W-h5NWMmar|T4 ze0S{z-l_I@6L45w4qdb@lnq0qz0h*+A0o7-M+QE~(6PQiVgS$}*xk-qXJ2!g(MD&c^I6bVIg5KJM zaJqJnDRnCLlDF$`9d)&gpiSp!A*JNq1WGcuQrdXP?Av*p_qAmG4jO_hg!z9KX51TB zK`)h(?NHuBwvN=@ZC|VD*A7O=U~0OG0e_G=NlsaSfYQ3d(~$u1lYU^Bh$`T|gCUsL zzdFuTmt253&MXS{t^xd*aC?tweHzXv^S2rTagX^wl~Aj@$I)}8nZ9#ayNZM_bh|#Z zxO!J0>&fT+AzfrLv21Exuu4nu#%b@AETY_=DQPVsn#3AFZo!|^L~+4&ZbuSjiU6_$ z%%vRMl(rGplD@>CI^5=mz?UL#9Y38SL$aA2_=)4kqC2k-Z0!P4=4BlI_IW%?p_;!}ZA8 zwNhPHHtXVaB7iw-x#NfsO`-Qi3sV0&xbd54|78-TmF;m|ry8;@C%;=bZhTg{u!jv+ zR~(}YL#~Axhpzr=6cIpkg2H&P3CedHJ6Pw)LOnszG-bGm^b19Y7kz%)wxVWh{q`+1 z^1@~%x zEhJ~FdcV#=w-F_<2__C&Q1zDeGY}q!)y%U$*o82YM85}stAkCS0y&ivB;TtUDS z4M~6->RM+=x|fcc4_oW!Yp14g`3%Nga4enZkNA(lATjtuAR@pCAoCO1#>B1h3RBgY zO}|%f^#R$NoDL3pk-7}5L(CNa84}N17WibROIp+OP+9N2-Atiz5{ffe{=AjZcU-^3 zX8{LQYmj^|UF>01)X{Jc4eVTkUlIqfX#eFA0U%cW_W2|SgW@?gn=Uf`?|@I@GTIpZ z2&{C{J6dO*j#ZhaGgyk>OV{eFEmSQQTW9cRDWk4Sb82kc&S^8CsHBKzKm2a}D37~lodk{+~YtX-X zb^aWvi!%-Oo6q--gp=OnnL8wVt+meOgsf)w2;;!ke=^?_A`EvCIFLR5@SrrjMSbWk zy4ol8vh+_;aIAu@6AFt5cj&uSnTYxMwW!suGc`)iw#15iH6@6x-Qzh$L~_6OY-VYV zXvX8U1e4PW!;P|#*0&D46^e)RNw}labyunj^$?S8QPJXF9-wO8+(i`YG~~d~<4w)M zxl|_@b)M#A+*GyI)uIi0?DqyGU|lVJJ3{^~ZEN~3O(AsCIcuYHr!P*cuVHolP^}#L z-&ZNmwViiRvLrj+VKzs5QL>K*WqdPG6rwj+(K=5~6nZv{BS5HGZF7JK7i}eJup&_8 zB9#jXiSux})XsBUm`nDwgBN2mC$9k+>=N+!$vO~~^f2iL5uS6?zzB$vI#9t%@@Szm8HhxV zoD#wpVl_K7#Lt6qvX4Tmy4(R7yw)&@%mDzjJ8KR3W!<%O$y-{< zXL+e^VCBMs>16xrcGL!8fGZ*(dCHcIM7C|PWVs__V?PD}0I#>ijfY-7wi}@;QqWoc z!xKEDWpF2!ByLFnG8sYeZ=ML0}L$5!_lBlhslE4l+<{z4TZYC8|^HxQ0N^)X*0 zpl`k1!EFH-0gmyZa;3i9=_9Efm89p`clc0;wSv(0&WNd8*VN=+x^a&F#4g~TOdQs(djIlT{}T&%4q_krV}5lxKmv3tmt`~ouMVO zvG!b}yD&Ljldc4A6c9JywJ(o^qN#o!(Hyo}fh$}gvXNqXrqhAywMjbxh;;-ajCZF9 z5wq7h^W1S>2HVftHupODKq^SZQ97qc=8sjmBlsdz4NSSgfVS#SHstD5s8alCu$%0L zZBvgxJ-8>U*}{uN6o2GEV*XW?v!IqX>X{n=Da>fgPh zj?aaa`bJSW4?S)@le31h`#x@(&6Xu$ITTsgOdztSiv;K9!%0zZHzbaYD*oxeq-RnSn*E7zAS5^ife;ucX zn`D!I9sw)KlmFvpB+w=}cSiDPvfr_3`8p)`99l>?icE#*JqbDP&VQZD75RT|xVr+q7hhJ+`~<>(_XXg2(V20WE}8Jg4F;-L95<6$pmn zX>;3GEP(5^>+{fI=$AF#`l5BG9Bh~kN7WYOe*i!9100KT#pKCL?12{4fIn+(uCd-v z1fPQFe=n`?kY{*Qz%K@kUS0;sEJJln@?>b}e+|P>OubH!MEi?7ue4K=+>jP46n!MY68JNdfk*0of@f1lP7|fwrElhv) zrh+{fld&^B4cPAVuH83E`@ArN-BUS)wjb(=u6mU+N9OYrZ*JYh4-QJq%ushXWOcUuI2 znkzDafH6cug9yIlW$I7Np-r&w))EqatSSHOi;kwc`yzijwDf@r+k| zP>V0+>gwCdO%-k_BYD`P6Av~LKJto_9BY|SQhgSMgQXut$fQ9;+f)Mf#Bik1xwWlM zHG8B)PEG6Uva9`EE+?qG)i~4TS39V7|FxRcQL?wyiq@>m1l8#yu(0_K$IQBlj|=a{ zb+7!o2n&HqoMEvxICsDx{6r{Bj}S^&cua!(LoP0;onmhJL;~03+$c@~yyZq0`qehO z82aq9ZTr{ckj+_}CLmXBgGeWQ%U+pO7nP5Y7CuTpO@!fW4CL*wt!N82nsXu7o%FS3 z0=_`izX}{P0?3oIAh* zp<0w@3A$#9ENvnHK-hAU2~kZD?6i=NOcT+IsOVH{h&O9-W_i$^ENQk8tJyd10Af=q zF&jOmyCVAIh;!ANq;i1WA#YoJ_0+hh$mgn!CXfs6hr78-?^XCfO4fIG+|oWSUZtEf zx{E+7TJ#2+yV+Ccdm`YgY(14VS`+m8y|fei@x2u#)?$xTgqU53- z-lMob#BgqHW&q>U?F6|FslTH}HCCRhRu2|74~r5pA&r}nEZbC^$k!x%vdsoMaNw&t z#zf5)H|8m|8Gu9E({&iTPl5xUp4C|kDds+y9!Owl*kpu*{j1-k9)8%uUj@_4>B!9y zPWQ-^`u%dbfSrO996~!$4s6JGoW=^awS5$B*_}|$X{=nwSE+)Rv_lk}v*-5rDZJI; zIbmb&V8-{rN#(y6QXW64A6u^to#v6dw+jEkH$d!O@2%^(aK?vUFZTq5hnbgP=VR-K zVd*~PYkCY)i*y@BIRU z^I(sq#UK&iD?7uf_~cZIHf^(0=3oR-x8L6+CgAQ+`s6gyV_Ely;YMOU2_LI^sW|N? zqSuG{&GcR4`e+#EEL;o6uiABRp?DzzIRMmix7>{bHyEC~%orX?^m33LK#$0kQ7(rD zK4{UMz+;J=HeI9*rGA`ny~vo#p1rB9A}U6jyKSNs`!Bef2Cgyy4uG8WIJ`Al>g{O7 zJ9$(yp!0;_n1z2kgzI=P!mQ6f)-1#Nl2a@`aw3jF;rM$4G6yZDX$KMWhL;)Ze$o}z zHGaN&tdpv<0w1emUkkz!K5VdqUpep30I6%Y{A z+-x05B6Tam7lra$9NnbMxIJewAK;7y<AC%d6jr#B4#W z&>=w2n{A@RZ%O}n-^$*$sSxdfPyA z07*naR1s$okb@Rb^e%d7?@N?zSAIdW7}v5=@#|va8|jtbN8`X!Uo zHxmHB&ZT8XEwp7Ix?bV@1kKF>VnEp63E2FYuM*aJ=VG1SDp_F(JZG0X_NdSba|o)= zupFA|A;^}qH$KaMdw$5(sX2UxTi;LefuuVL-;4Q@^j3*t-M2b?^)x6dTwjqa7`NO` z5Y4%Ch1=+FxoUTS_rMbn95*@&zdjTD6C(X2u=K7{!@)K^xd1`K_kQB74r)M!P~6SHMFiY}nH^&EmH7Et_!^ z?IxmqIG?%g^Z+0$u*Y=l$peqD=XzWt=0RJD=$NYfMX(zmzO190+FgTQ7~^0D*mS3F zgEuBG9)Om2jEK3%8%9-lI+nz2SaK#gcD4)M(whk-R%GB2DKy7@Fr_4pSOCml%*fWP z@=)X_TB$}UaBM6!dh#Zq=DQOm$O2{C^u|>k*HG`x*WMgSsSM>o)zXK2Qs-snP6&vS z~5nI0(9v(Q)Ed2(#{S#38fVcsq=XY)=>W4K}Nrb4=&$=$F9<$!Iym1fC zFd_h~*#Z|s;0ywQbJ-Tdb>;)~DDj-Fzvs=z+{?+(YCkWi*?ZsVuxJs$(JMahfbn65 z%I(H&Tts~zl7}2ZBKWs$hY?IEHD7pLfL>C~Uahn7l!3@Se9l0pbLD%2K#ex4}pcDZfZc~Z^v z0gU<6t!ld;&7s)Z2VX642kejYK%m&}fo?qir23{idHZ@T5YVCi0l>7>q2_m*3nVldApXLFjG4>k&O6co-y+r07L#$tQji&SkVfcrY za{f7mv-u|7I_q;CJrZ}#9i3|9?L7W7K=uzd4+AHKfIW6X(D|e|SIm1SYPV&5+S9)M{TT5=(L z8GBVDh6=X3&avt7_bk<53gvr-HJ(gH<>nS@6MWN%l2HUDF_RKe@YUb}W`62tbfono zR@H(!NzWH@_wN!E2S6=lk+-80$fKplCIh1iaIV;viO&pA!e?@Uy%em9ZAsfu32OPg zAlg&n&H=_Vg*>fg`uZs;6G@l975-C$1%SG#0N|*3GB^k+^Qp>w7Wq97lxdQ+>wpr~ zT)v24Lj)9Ym+Jt?`Ah&JN=35`6(?>M-SaC~;x{-#u7HWuohw;P)18*j;Z7jIVkR-G zllxiiz8r?(>fLtckpDy&yXX-y-`bZb)esl|$l{ie0B}QmZ7N|cPpq^lnP{A+83Wp! zvWnkra%=taPk{fn5^)aZNy2!%CS#|Am#~tmDe05@Xny?a3wkLLrNk2&luU^bA^Ut@ zc7q$)>n|7qkPIEG5e2lBzvg~!M5=2S{5W*++IJ<;E8W~p;FfAhXzIG}(yO>gYk z>OCPM#0~xB!J!sCf+pX#tXrFhn@wvMr(KfIpAVjbI4fJSIP=leOxmw(TN5?a06=Dt zz2n%dRR{!x+s9oA{edW54u`alHbi`6mN+>{|E5Juf;OR_lmh<^2CZ#att^*GRxa)r zd&x%4b!F5mtuejy+n5F#(05C)6Ouac?0y&-LBIfy7G+Q>(>2EN> z#KzVqC}R&9@9LE3)ixTQD}w3ioToGrZyXp+>82A@>_qV)H!H@ zPgPy<;^O@mH4S8nH-#d55&WBb1 zl(HUnoBH?fA0={gVh=M!lDVi!nV#97$d>`dnrBb@(zg4%G|4mlB7ax?LVOr**@r%F zM{)mivoA}JlkQ^gWvhQwCMjQYF|!Ag0uFiEdf3&2NvM9eS{|0%4)Ip^T9mlb03ylEG+2|taA%&me|&#^t=di z-);Vry?aoU5`;|4p@|F1^v$~Wcv{LOd``&QzhC-=FpqliucoxUTW<$sIlq4Eho}HF znp3ns z)v`>SvW8oU{YpqF-_&I)MNUDGU_fWz{_p31?xC=W#4DnRStVu)&rrih!oY#_IjJ@k z6JFf&gsi6T7Af8C*XNm!W+-;MkYXrrch`0Flp(#BH7oovXD@E!i)@$CYSWp;N^aT< z6dQzqpgFA=riC&n|XWaw& z*8E1?)lH|kVfEag^U)pMqrKd+&kQns9ANmfUwk?Vaj_O=l74>G#;FQgMir9Y%VnGg zskET*=2!%?(Gz{Qd%W^cna{%ltZ&XY`%CMc>YK zJM>)iZFX{B04~8fj0aVR{5^U~?KB^>@WE&m4^YeobV{fE8ZB+)33ml1)C>fly|P!q zn@s0H42v(M=S!8{-gGvin-d{Uv*10Ypc8*a&w1n;vin^u+pHVn+1Zk#@{V{dJxUe7}rqaXb0GH zvyXII-dZP=8duSHyf|IVd1I?68aIs^dD*t)33PzFp@?2Ft;6>7Nsa;W=i{;^{?ad? zOxR1|`zFXy^!N3D0ig*?2fb)BFJ}_jk9?N?|gg4j9GWBeKa+{lhv8%TJZjI?3}1~ z(Q;(+YN2Y}c>{ZL=vNuNm1Hv|e+qXXua%&otW3{i)m5ir^tNiIBNJzKCnfX~1Z2F# zi@VclJv6;3zowI*9Q zxiT&vq3N*eE$eMxbqsT-=N>+YXoQ~9!*5cr+<6|s1gzt*WOw+wL6VAgOLw(bju@At z&H%4OX~RvUvY!DHQ8UkA=;}JcCO=uN{T6sqJoOGX9mXPW{r)bX@b_(6{Q$JWuaTM3 z>Nf;Jlq);u`^?liSTxrtH{*Lxi`jt3lv?;nPt4EY)edEV^<1=dyZ2n2_MQA3B;>VBU;a;D>2U=qS8seq5Sc(lugDBGei zzYd{redQt7!~KdSAb-1ERV64%ATg)wWE42oQzy5R-y@f#o5rt_sC?SylE$8gb-f0o zKk0$J?Ugk(?Xl>o8HX!t?MytK!pN;Xkq)eJ78}6|xvCoqB7tf=;qxW=pBmH)&0H7y z(PutICKJ#G;+z|KFM7Fhz494&*c`U=T@X|y?P5i}IQPFn{T>8Se-kVbbLd#o?-3!o zmBjRQ1D&`0vL)#a5ebr&b&e?%$Vn-xfySGy(@T(V^p%5<=9W;2h$~`iSZQxs2{;!o zG^FiR1`Z6(dQZyLRvj3mwVZ6ch5Lj<;47x`RY28!4f#>?O#OL8`<^d-auTvA7Nt_G z;vqwhJ;|UU-$P5VWBR89Dkrc!SS*BlbtMR^vSh(MKd zkN!^c_8hrzig+*=5rY1()+G&oFiaSX-k!5HCSj)V)r`z>p`P`ZJ!)H2OH(*T1x^9= z-F=dC+1r99gNx}_3+MLKgSVNh__d#~7-F3Nn}iWqgb*N+mkw}Xz7~CKUD!7K`Cqna zmg_zq_BaKt3ushm>6M1-B-#9|%4X0u*Eo)?o>U>Jg3_khWz=Kql0e-94N%T06A?b%g&l_&94Yz#nE)oJj`NC8+op-aNoi|IfKp@KBTQ~DH5m6vD7owJ5 zwq;UE6M?orcpByy<&=PFpeOynN$G2MS`PuD%ty@gY%d@qVqWc~ew5IZ_OltCqkb&M zqvFs4cBzFv2EMlhSbLG~w0u??MYX64IvtO9t-K1y{AX=O_g4t#Z-FxkS0|mJzMaS7 zFb=!GF%%Sg({;;^sz70^5#qqgucgbWsSWeh1D0$`QSKr%M-VbUBchqFfi=}9t6V(G z_tD{F!H>K9dLtaLWm-qiJWLi}n*0v27<#VSe)agq)w99deuN??gGixr3I0zKRla=q z5VW3{C6uduNUg1wVDmbv%+5r`mk)j2E!_{~tU7cV~LM zBf}SUhd6B;cfOioHX~o?S4hW%>X7)KMoLqW!+3_$lvwV&3XGk@*Fv+hx>`To2wF89Q>O~ zfmiSei^iu7s2oIXTl*lSTRmjgn?rsLnwBMV)iaIHhxg<9n3>aViKAVcdXqbi6SH!a z7Pqz5ddNiYyML%FJ&DD13@@oG*YN)kArKO58|E*+s~)Na-9Y=OI_p$8x|T z&$({H0D#j!Nh?DAM7cqWEASV2{v>dLh}Km(CE+<}BzF6S2F^GTP)k{)?NvYko2`U7 z&5MZYdFJ9qLjd~sZ=3QHg<#71_okBrrWER|^a&kee|%FNt3Z@%iZpb@DNrvBHE zoc5ROa*BQejotIjSR!91p=(%M7wJH9P(@2xc6c zA8nOhUDfgR5tk2@eEB2e0PN&^koIpok<#64d-x=%yk5SH(e9{X70%@R_RmB`g+oJ> zG@*6}H9T8Y?+L69Fhl55=x`lMO@i?qWZd6^YY^$T zzQD{{q(rXZIb~--9U~gAK#PV5^DYs$i~6#!Rp&wO*P8s9^jC)pe5Y2cZyb@a*2y_p z=_^6SARnb?sFQqUuO~g~O!H+IMcFA!*e=|Vfk&^gA@U4J!n$_D698=5k9VXu)rGw*K7UZ)jr{6?b)2TCcK0uD)MKEv@zvCQM1OpE(7>x4$N&VsGf14{gMs!P zrw-$($+C=RBO<=p@T*kW&x2y!yu+m5l|{E1)jfQwq1SuzJj5|xeYm2eJPR)9c-WRN~$Sn8l2gIliTkgp3D$q zS25Ld(WU*D$YgD8cW`Wn?WD1L*uEXb1KNktX=k**|5WkMg>k-*%|2Ld`HWCyeMLP1 zfDW5j@^Vc%iDnuBo;@8ZB7Y4a5J5_5+X|VyiWo#dlB@Ti9YB;5VxB8)e&iS!dbU8h z+DG!)s__deiuGLh7sF?o9-$j^Q2YQTV!1Il(9fIZ+@CC^JQvW0bf{45MyE*qHdU%< zTyV{{R)CBe5lNg}V#OfewvWiCrfOc~S=EU2q@37xI+O+6W=p!ECf{Sa^5jpRUk|-G z?eBmCtI%7!aZ_#JiaO7AN4nYFZR|<<*v7YYQGVxalPrpIfK8@C%RIRQOx@pAhmeJP z4I6_0W)Ep@g!RrrQRwv`>*-}D9^LqDlF2|h??FiOkGfm_qY#ozuk89lSYz!BM=o8b z^uw5-6QrVPT6I^@s6U!w=Y0jak)-=2qWt;utW+yHs+hlu-z(}~+txD)F;Ks^?!GUB zO1ctJkO7LgS@ss5aBdN3pR^ka`)~i?VmNtXd=HA?Ihl@ve2U&Qz2;pf`FEU!vWS>& zyfkQKoBl0jO5N8H$>&91Zva~52Ie<|!m0xt#HE7q>|qFhWc&oUL#DU(G}T93hACM* zUV689LpR^8J%f{$STp6L7M!0*%QGYYG&{qsc(7lPslRnkM?E#&c)Z1Gcjfg5FLUB+ zqiK`YD4dnctQ1;a*uzsz%J*5wGFgrlhaLi8Ya|4=xq@i(wH62E&#rK%Q4Z$C2(<2^ zwg{JW1?q%_XzKkr_()YBu?sQ_n-QUs+lcymynN2;#aEE1Jp2jCrwC6qX$k;a@S53F zd&ITJD0b&SwL{I?{7xYCuRQtv!ybWAxX!qmhWn>%G~zEe&1^O%;JcDgT2Ut*N%TkE z0Vbr}q0im!RL3Oq&NIFdrTldZ0O5I60=bZ~{JA$bBTYgYcQ4Ml*&hV0FCEAOxswMNSKc1pljGHlz)@jJr7-WrM|*fn!J4(yRR{-yxPmAOPY8x{gonHu(K#Ug7~bNyhQpT8k+41&OW- zYHuIK(c@ObU7>Y~4D!TWwVN5~wr$i{{jJMt1ufKqJrto)rB(|7#eJssmtLM*rSxNP zUTwZfXPI{SUd%~dgNqTSQdY{#hLNK_v-R1PgGVlbFdU?hdB@AgR&;Z3wtV)niNe{i z`TkZ=`ZMQ=s=N{Xu=HFi4g3xMPJ+RLDTX@b!1!cfE6P6)jQ^(0w0eF#KHS|5QIu-J z1w9WJEbEAJI&Ye23lPD!$(LI_;p{f5JkMiZUEkW!T7j1-ng1)xYID9Ppmo$>ru-}n zRFfrlWlx9E#!P*fb%*Bp?}66#C^l$jfASE0fe(bM5o2q-F`>(AM77Iz*wcWsEHRqw z^opXyBLo^IXuMf1AbQEi4@-ec%yM%OQTxH03uW5^`)_Ro-~=)@#ouWFpD{glT6X^h z02uj_#wdhmV677#J><9WRo#nfvSNGDSNu zax<`tCE$QMZ&a(tnhmRPTK#I|(nn;umoHYj8|&vXc*_L_mq24{Ts#oFA%n(wd#6E} zsM%#atE}Z5DlGRFl;L}u+4h&4C|&`Z`{4;f8xl?V@>rU6;V3OQTFvLYmDRLx*?Ql> z7u>E0&0ZcX3j?Ep|w@4+2qN3qk08i>(2wEQ0tvuaj3w4{5wLApIot$~X!nqCyWZXsbv&%uR@6AS z8UxH-o36o86@%!3KBX7XmuWN&c5t}g;5}pP41H_|L1YZ?(%RJI@`(?10Aiqq64I%@ zp!CPK!^m5{yF0y^sh_J?1OTsp+rFBe5;f_ju}Tm*28rs&0Y(92by5ggQ4dgZP8tn| zR0~s(4^H2aKypcoLly213h>4l*qKvW%Pj*X{fXSsItuY zfRPBd4Yuvyn3zkgz8avxs|0M;BSp$^BT+F_D!8oU7Z94|w(*W!CW29tjTCbOc@|>T z?;4nqv2JzbGdCOFdiTI81U`lO&I}Wj%L;@(d7tPdMj_OuN#nJZ>Z+nM7*8!>cAo4u zL2N|+{QPg|&6c*Bn@DsYeL~&GM489bcMKl%7D~mt%|baw3ed$=jiGNxh-ssr*#>*G zG~jLHetluf0Ub$@azM<3X2AA$Z!BX}b*<1%(_`Z1Pmv<-%WSo283wJy1$($|*W-y!UZtZ8n0I(>H$*n|g z!Io+7Xg1wh6c4a2+8dJiWY*h0rJIDCx`*wAMnc0sCo5Jd;$&%PT9?;kHn#JA$(YU< zO4R)7IDJC3@KY|9DTKXz1ZK#<^ z9F)Ncx*Z`v02A8sFpzs3>K^KJepokM_s_*$jeT`|#huBF=rn$iZbFqYZs8$lL!}x&`H5TC8D85KSlt{86Vo=~08zLMfh1KKv{%_j5Ta&hN%yqP`H zq~&PovDqa{Q(*JYKp4+35Isiqd9T+K@cV{!G%zuCwVH?8`QjLThyx+L`Hbs@GD`al zR9p@06KMSqs6K?(K)3)gKbx!jiEtsJ<2mW&NPIG2{WSTYRP5h^zS%XVqCq=j*bVe1 zCgTBU4VOLh^s21-qVL>yKu-bgG0`3f+mlQEzlIvm!+&U~E1>1%`Nlf!tUf>9Jybyi zeTt4%1AjYb$%0fhE&)z(%khAvTEwQxjy!3f9l&!H9wo4cJV(FQU$6@$?doXVFtd1m zGHWTri{XMq3kM&Ur?U{Rp zLbCYNM$SEwR;H z+KMiwUk#1friBk3L9AkMxm)26G7N6GU7zicw8p%m7iy{zpfk=eBR__C?1DAX2{JLO z96LdFKY7z8IWI(a_xx)Myc5mo-)T=njfx#4#sEdbNUtaIi`}LSq0i>G0IGk_x08X? z!}?n$?*hr6om-@~X}?WL9m%e{7bqHD>$Nm=pehLY^-o+0>^iXtY6|C$(|f+Zd%x!WRB-CoKw(%{v3MJZ30C9mj*7_`-4Ff~ zvKSNZ&&-8>F`SXfV$GkAJmrzd>G}DJ-v?J5W%_-&oY#UoPvU%CvR$RviAW0M6~+3| ziSnNfoBIPw|6WIM{l1Rjae^LDsX*e69;nB}3ZZwii7QWCQTClw`XFdp{!*S6g4*BP zMY>DiQnBRJJC!llIB4nK9<>}S1aJtv8BZF93nj1uSN4u-ZXkZn4KWeH+`%cGiPFV8 zuZg++W5IDH9Z6Pd7)jSijk^em`NJ)0;{U_Mgnuu5gQAksdh`|y{*rCs5BMrR|*4f@G3!Si+2v+(nXA4NO2HD z7F$KT{-e=`r)@(WTij-~>zhb=CZyb|{kv-99d`0~0zTFA6T=DsLk>H%B0Vy%4L1T$C(Iibu<}T*ByyQ@ zwpZa&*=21^httZlR`R(`aNJ?wNE`QkYo;Wc|EyH(4DDD8hhe5`qf}17t(Md?W*VX= z?~ojNP;;}J{E|NQQIo^L?q^v_@EPqsMgC+|^NE~$h~%OswLKqcQy;3$ekgpZyTh4; z>&t5N(+R0wdk9OuoHSMyp_SOfe%d}HfK>ia)_m({PW;LQjkj(4`AIM*hr`(%MxlES z@C%@%*-q$POMA8YIzM%be-Ws_DnMtqvnMRv7%0kJtL3%5MP2KP*=B@6IwKB0u3XPE zJ8GFceKFjuMDgKIqqyeSH`qzETmV*fZgme>x51#iZvQ(-#76~wBcQsSPT<-bCQF-U zLw3bR$G$CFIwb-?(I49uI+6yO#YFA9wM|u~(_~>FxXTGb&vpP^`3kTBN-LfeL_rU{PCsTrKH63y~p>Ze!eo%H;xRp5_?dBxDB zE$mea+`jVsz-H^Zs~VM?A8uh`V1j?u{9YEz2G4cOI#9j4?ekTzuJ7YS6IQ=9r1S?j zL*2ovhMrBUY(uR89R_{LKG`-*sjwB%5oQ|pYIfGKb-)<_rZ3!`oU(jILbHm4foLdm zy5ystEvW+RbKLz36PDTgoG>}sXKy%zQFg4yfv@!%_Sbl%>|0y3?Y(slanj`u%p`BP zmV4z7uoC_PacR4if6ch^!x{m75fGpu-E2Jf+=i$;@k_YwuJrs?khO`b;Cxe3EPq~0 zZ3cwnHzH*ux^BcE?A&jq_s4$h$3@3fpbI z4UhH4rHyuh7dL|dHMHE75_yxZyT>G;cdP1pxOHZ7#t-o%{Y>frSALT7JHf4r{&P1D zdJK+cG>eM2P^sB+v&fgw6ew4AFEmA|G7JKuqTD-0cbEUsRTL8DBwolT#-aIItn>W7 z=+SKKa2*b7?+!ZA)awuqRWX89=`s&9-qu#}EC(EjaCZ2j?*@g*pRA7CtOqTK&q)=Q zCR(>$9yZO3HmgFl1E9ukIkj^X)73V{Sy&B^hh6U0zd&N#uxq^o<3tyFWW9FQCIS0@ ziu-oh(Gtw3uUqkJ&?;oPu*g1DbH>znqqCP2%ndvT<&?hxCcN`vIUJM$H#?a_hR>d< zKloJ8%l5A50}&x^A=z7>R$RAzCL2#{h&tQ92QL6cUj%@Z8nR(~7oh&|p8VaJJTupl zVKd-2XB51)7~&Nobgsu=bM9hwAWP1tVLJyZEkHjmCAu-SB8?+VB){c3H+xK~b;rw> z6BO0DlsEVyI=jK4B1ozc##kOB52a4;N`BwrQb+JU?*2x&cEnHfrIVQk`_0dMdOp

O&$pcKE%W%rPeRasrhp<`6TDWTP47XAX9C?cpT~2{XvECgT=P8x1&U*b0Mr!^4o`?0!X6*y)sHy#bz`u#f&iNwVzULe|L(k18f>3p`7z8l8tWr;yl`* z3q7G)2ovQ`h!LluhFVJ8;87aepMgOp&}1*#&v8bZJyn1hO~W2}az9C%6~{gV)|Jt2&U`pQq+>ps(U$f-Y#Wqwl3?y}+YkeBd^ z)1#}MUeL~k@M-uQgIgeK#-8VSY0CuWh2qm3U9&I_FTP1`=HMJ4Tj(Fp& zN7t)EvSBtv^+GSwhRO{2AtHe>{&`#0Pq zXtsH7B+51lJrfasTcA>Pl^UBqq;iO<85S<#b1^81eAG+N{cglxdb;e)X2xRoB;j>LLxx2KKI8ZfPvf^>L z+do(ar2q!=ZWmGS+p3qpZ@EzId2?%R@n%cv$Ob`TT9vNA#TkUT>N#OXvPpF(kedl4 z{#QyG39N!%EwSj2Giy1oF_GtiuCBEjs}XpZ3}5x@M$hM}|4Lulu1!1B1l&Vc#Q*pl z3;Ch&8;7G!byf|mm@N_xAm>wb8(~`8AmaY!2qe@$P$!Akw>Ff_GZ~CTxu!#j)P{m* zMWT<*V~I#lsG7RKDHU#h@h*qA>(T>wAozDTQ1hFBHuI-24?1*wjaVC#C#_Grr!(#V zUxIH-W{uVYN?{p%lk~9K6~>ZBM=o)iKEXtiT(<`DKQAylipxv_>DZ90!&jRXQS|H{9ruNfhSGt(<@030ay->R+ z2acN{ofCwN8UJYiar~uz?%4~U;qXlIhCI^F?aoT*Q5m|8den|OPzBu7=<+?Jop!yZ zY#ZkO9kls7!G{m0>Hw!pA#0r7UDD&!t7w-0SS4;?v1WKVv8=Jl$t2Vo`W9d0OY;E$ zQPYE?4Vg!8?6#0%d*#Lt#SuFY3c6 zz&H)_eynH*7AjD3xXL-53dS1}pJqsy3!_h=IMN zzqZkOiINrAOCeu&&V`IEEbK>Q=`k>(z!vRd@~2~83!}Mi9%!?^&zf6}F+&;~=o27L zSwMXoX3qm%@paB1Z7gV2`X#TWm1-muU(>$Yfl)%@wjrt{&|C~Tb4B;aCo6-2LBSv+ z>*&VGB&MV20Rf@%W_+X0yc@=Uk1wFt>%jW~Fi@3RtMu|=<=y1C zNyj|a*vgQwbukt-TmH_*Gorsz&^V=bIAPhb5~j-XQ;XA-0HA8iOz6~(N+VXD6FR5Y z`3)2V-D(a@`EOHcB-lH>6n02JkeFls!Q0>(X1czHLb2kU@_R{0ecLu7leHnB1a)%> zzWS`X^oj1zlC#auFr9Rzd(k+lj?42*!zl@hMdT6rFW;HoanrW9YySZdZ28YL{DAu& zWOc_XPJi$KIQ?0#MkK_|Lfi5OH=9-omEQKzP~(@S?=LPo$B3=IZQ zfWO05{6<+Pw~;DwUt>kKv%$4ady#y=fjei$b^rh+)VqGsUf)Z&z7aydW)H?Czi8Aw z7!ar}1uU_4Hip|yt_3TNGuaaj!y)yH7C~}I!HbA*BSByXci$f9EUMFHNhnHoOgMPk zY?10`6x{S~)5OUH%dpce!Qp0T6*3Zh(kPKLGN>Z7bt0R#_+98)bk`Ax{?R z0}h+YRCWmlyXRfdad&O6`T@xHw4cGiL&gW!{OW-yLxfP#6C zIuN2mC)1yHH($0P~n zQ=cRC1{C_g*Z=+Njgg!XF}HjRz7;)fY7?5fH=L))prqV#o|v`a)7}kM+apO~5sjY^ zHxb2-BldOR3wFTaZKULRR^VqVs;O0T+^H|72>xD5ZlPV2hjofuVaA|yIltCJj1uvY z_e{DvMpdnKE)zqp;)yv?66ujI^h5XF)F<|AqjP2DG;GB3(V0E_Ie5~n{jwH44@=n* zEeykS<=_7d6@LWmIJ*09$9rjar?JgN%4!=2SwbpB07yw9yFSXwk!V>}8up-ax?VPJoqAZR1PW_6#qq-AB7&rI<5KYuNj^VI4Y_9+OgI^3)P>tPn zVo|f#b`#Y&zkMaq+IjzEn>RbKqmHTht$l0S?^?gH=#Uc)K@0N+byS5@uh=D^d~Ayq z+edT0kKbfK_TU4@_%SFEJF8LsIVhdAYXI*LGdJPAN+O<)k$@2yR`Ev8#Pm1(2nH^4JPo9P8tjyGS}?*NDVjDHxZndO;s zahvM-&sWS6NFSxhj@afxU4ZPt=8FmjTe>%rZQHh=pP$+*xdMi#xV#aU*C|!*=Dw{X zo5I(F7F_W8!P5eNForwQPNA<6^!I8QsVyYf3!@sFxrpC@YS~Fw(?o&IadD})mv8J? zyhQ1L|4YjJuD$9E8Z-Otlx(y)zYl5$~g@1vd+j4gWGCaG=wA66l>=`X&%^Rs*wTuuxE)K3o$YTb#_ zA-IYCooV)R1vqSKDiC$Aq8B!9L{w2W5mQRYSP9}<746)1-+;>sbYWd2dCiD%z)S+GrjG%L7Q?Hht)@?ri4P|AQU$%%J5dc%8mg^ zqy3s(*f`hngS4iLXd~Dt^FqUG@x5oj;bGLN-*^t;5+FMEsniPqbu1>EZ0zxkz`LOP za;v9H$J&RMlv8N4tbOfS{6cJ1Ffv_%la`IWihWiD!&hNpY2PXT1LPlsPXEEWfy~v- zD19xkZiw{cH|Tm0VQ|vPIyOip$~#$J;FVLjdQM;)4c0QSQni)drgnRXBI;--$fn0* znc1Ik`{nQ$B^Px7LEmP1Rb)hGWuG1qd$fG;n26~0@83p1_3i>dz5)iJ-gNzw?c^p; z695RHTp_~eA`RxwrzJjTc7~^hl^}=3Ni`zow+=^54Ehs<_8%OA-lcSxweJFiV858c zf!vAAdw9|p+ivGf%-iLng=q$z zemDHFm;vy9xV+g3{$BU8wJeWz7xs0mNr}<6T@V3LdJVd?z4{+4s5j0{(Y-p7bFsD3 zJs;9&z0lNFaq%i0E$d)jF!@W#_+Dr?{i${2jnhj;5L-Q}HfS+=K?DGaU<+JdYn0ri z7*$%!_U*raTS`RwparL7QYl6H(yvNL5_?0;r?hh2@`N>QtE|-D2CZ$|R15PO%cP4h z=<#CE1MT$l^(w?WU_+$hRlTM`p@%Hk%9g7+0r4tTN#1?s>^@@yV$spP{b*aN5h66- zPDQJzl1M>q>TZaD@W224qHbO&ZvnnJj^V*v$dwvk@3bu5v zwQXBC8zQScF%u9aLc|RLfD&I1B#gnvnKnUG&Osz1mfyr2A@G4|NlrvWKTw4<>N#wy zr<8U{bcTedgZ{QfAZbdO?f~SPps;|pw4)3CGE;#hadRg$lnWXf`AH&Rnecng+s~Gkl8SjC*yyB8+SJvT9R>;MnsRjL_PEaLCnZs-^Vi{c%z)5d z9x^o-Dm3k%Gk)k8Ql}A#xg*yqCpR+1?P78OcEZ>9>*Z%0Gfo%7^^fTdhEFv4J%_fY zC#0OtK)`Ml)=S%}$p>}TJFmSTY{7x^Mdxn}^Ya{P*+hpu#5?K|M48Stv4jhh-d{zw zVph^=8}1`PdK$}0w3?D9$E0xSMyh(f&a~dw(!o099Zt&R`)s%{i3$J?oO~dH4Kaa9 zuWwa9R)Rm^z~dsYi>Ek=gs|oPCA|o_^}?3<@k=|L5HUqTGij0S`-FUmO25^uw{_L; zGhCMV{=geoy&nd2<(@#`VL)X%4K~9(q&+<|6MS!;@$^AgJ(qX*&)m*$9v*PnYNZvR zHNrkKlfd2jaw*fQVVk?Tx?T=ECvRg_cwvURp3`xh6#G$8xaf>b@$(tmoE_(p6@^{z16qxV>G5*HG+~RX&l3ROG zZ3nGQ1RF&49NUr-{ZTFGea@AeBSXYDg2-1;Yn(YzLe_>tZAx3>Zjme=75$9np-tMl zqowomw(m~66OP-n55eass@jj(TP9TTo3l&#rgh;lB9rBnTT*R%Z%70C-Vpy~JJcqP zI3%3VMX;Pk4l`g>!4|4VHFmIX)pg=b(MX5626p$HDJf#LAk82 z0VdWOg)zPEaG$c=0I=@u_jvf<&f8+#FQK#(DaE(bqP&VQClQe{pDE?S_-$Zawi+&fxiKe=cv>meHc<(q zL82d`O>HIR-zr~`RmhQTs^HN(z%>BnsdEzn$B1bdMCBp4E~P+4EBJLDTHFHtuu0VW z9=P~yc@{p#Erd|wTSH3Dm6K9j4`@BAO5mCT!yVeHP8V>#uJS`Rq$YcL!i0ue=(3v4 znh7Fq(RXH$4Sa`LGd8Z!d=Y1Q$^xUJZDed`Y23!WNP~LRl_5pFR3+{~mHUfDGQ$mS zp$b{_$nTw4N%J>dJi`OGHZ=NnwHd_@?PSqt`Rra1xKmS>?n`z4WL&7h=YQL~>|3R! zYY8|FXW$?avAoL`a6cb2d~attT-`Sj)x?O_;5H{v3^&E_WE4xuo&hd_J$nlBUM5OT zz^0V4IIs@gTm@NE@EEppcgnaasIn8lkdc^S%Gr+xW)V&%k9~94^_p$Xzi?t@AF7y`g$klm=TBy;7#+Uhv1jO(W@^#Y5z%k zH80auM}PJW%MXLe0NV^n`aOman3ijR&3>#jnaP#?Td_Z^d0uVus(sWix&-QXy=oU? z$^qOkQ6i!ZH;svWYy6(i%5d>U$bVzL5^`-V_WD> zkg4hq{TVs=JQo;<2bXscj(~JZ&rJ`!nHATz`F(JA?yO#W-fEHz-bc%&|96GC z)gHa}qJl}7)Squ!j^3ot^oD2@K{jzKL9%sC`ng?b&BzBtfi*N`wP?_5Rvg_T7i#*4 z?yoA_!XO4C%uMLu?$n$xhtFY}AionX7lz-ZV^;@jQKU|tuhRP^Y^wKxmjQydeIW-L zaGoYXBWtS$AFDVITmba*^HW1pF0sB|0JhBT%vtSlB-#b12Q%FT>Mpvp9DXMVYk#8- zqK9wX{?4Tjjk-s~rat^M}of<`dhl_%pQ%b7wpiN~y&j<%7g=Z`7^_%3*AM8Q2)SWb& zy@eO@9?f74epB3<=&({Ii&>SF#b`?BR{{V42kuEkK~yV-r4>^yM%#w3q7N4? zf-;O62jgC#syQebWNie@VVhFgwhfG%WnP$2N#Kwm&UCbO#i( zjReNp`-=Zo9L%6 za zEtIBQ(_9$(CoW1NM^9j~;8|I5gP43H8469-lnQ4Z5Y^00epp7yROW>rU!Il4tfX2} z@n&ZcmvR9eo(A!-2T2t~Jtjx&1`8_fPQ*MEKbop71|_&3fAH&|?zjH-F}`;)PiA0= zqcTOU%j$e#u6<;MEprVs4i7SdzVnRHxI<|r;4|AD@^Mq(4!zejO!76J3Tkvngd$vfrZ23uU@Qmd;zKu z&caij`K6*CM2Qud7W8e~j7i&tGt0F)j!<*60SG8j+Hec6|F>i;-fU|52M?^}D?7x= z?hR4|UtftkUg;=RW$`k)w}zePB}#GBIovar78_aZcCKIb*IPJRb^T@>X}E*8#p9U)$mM?eg&v9a3wh|CFn zuu7LrT)_n+Xhgt1h8C-~7irr0uDEL-1`|p#1~%KIE!));r;Kl=4Rr??+sq*JQ#n_b zSy1FQr++G=jO?y!XrGFZIQQ>BqZF}IzVfmxQtu5axaH~w)5LMFqen*!x zpqt!O#w`MFH`nE;H$AtA?b&zjkteec$w?RO*UcXwrj)3Bkvvp(RGvw0X2T64UvxBY zxMS)!CVIvp-+`@e%x>GEjIq>zxh8T%K4V`|*UrE`wDZ8eyTW_+)VzU}51x{N8O%jm zQugs_&)>s9bL45%FaVfQTqkVD=XI0Jy+vFuAMTXlM=iHq<+70?MirfoqqjdfMv`$! zk;CHwD9@GZ6#)RZj7v(1r67XmgK`F2soAE4L9sHTn%zmYpy28p)OM(b*%Q@sR3Q(` zjhOHuYDJ)01T1a6vD`vqpIjnD%fTv0L*_DY^oY9nV$6TU(gN~>C+H%iCnQ^gMdJW zVHo8Tvr6K9R1wBT^&j|bg*~u7Oe>c7J93DKFVU`nB_0A05}?*jN<&+=G0OAuQtGxkz3$k~BYDFTY$OnDvzDa=1@Y+oHwlR&3AJE011*FeE3<6@Q}0CbjW(zu(?#ERxgS$Amu{^ z3D9aqCANfwx&4hFbN|)>o@X>T0_j;PfQbuvhF5K10tzBXrII-X7OL4;JcQ2E?=VSR z|A^>l6~B|ADXkn_pkuew(!?rt*Yof>u{UUu*&7JkmaLHJSKt?vt3boOL@gFN->S6? ztRob~S+ta3{)=8y?&uZ_jrrP{aHB8eYro5%MJ1+0qsun_{o8(ie!xrw$)7J7X5HVl zv)r_B4JFKqy{>B*IUg>AFfXmBzMDs9Ri;S;DZxYb7mZbWrXIZ)=;tfv#Izq zL1beVfu?^%RO1Bz{7DG`w{3gnoBDc0vH=i+e4B=dh|(5J84%S_mYNsPs!lZpg56oD zxiPBRViH1F-VymcN!;#ZTf74yLs`{+2cvjcI1h%i>a?%bnSa7jg>g57Bm|+x0TIQYK#wk8!1OkJqBX8uEz!>&_h}ZpSX)RhWsG$bKoRw&3^( z7gz1GQk|tU<~t1l{+E7=4zAH->ma4{@87?CpT3-(0>J+RcG;(iz2QWf00000NkvXX Hu0mjf%@P=F diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png deleted file mode 100644 index 7424edaf0ffff5883a9a1df550d5440e535e0e16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41612 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 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 5671be3f..b637c893 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -11,6 +11,8 @@ #50000000 #55333333 + #000000 + #FFFFFF #EFEEEE diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9ae6fc9b..e8606ff8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -255,6 +255,7 @@ %d episode removed from queue. %d episodes removed from queue. + Play video Add to favorites Remove from favorites Visit website diff --git a/app/src/play/java/ac/mdiq/podcini/service/playback/WearMediaSession.kt b/app/src/play/java/ac/mdiq/podcini/service/playback/WearMediaSession.kt index 18dedc77..6d12168c 100644 --- a/app/src/play/java/ac/mdiq/podcini/service/playback/WearMediaSession.kt +++ b/app/src/play/java/ac/mdiq/podcini/service/playback/WearMediaSession.kt @@ -1,7 +1,7 @@ package ac.mdiq.podcini.service.playback import android.os.Bundle -import android.support.v4.media.session.MediaSessionCompat +import androidx.media3.session.MediaSession import android.support.v4.media.session.PlaybackStateCompat import android.support.wearable.media.MediaControlConstants @@ -16,10 +16,10 @@ object WearMediaSession { actionBuilder.setExtras(actionExtras) } - fun mediaSessionSetExtraForWear(mediaSession: MediaSessionCompat) { + fun mediaSessionSetExtraForWear(mediaSession: MediaSession) { val sessionExtras = Bundle() sessionExtras.putBoolean(MediaControlConstants.EXTRA_RESERVE_SLOT_SKIP_TO_PREVIOUS, false) sessionExtras.putBoolean(MediaControlConstants.EXTRA_RESERVE_SLOT_SKIP_TO_NEXT, false) - mediaSession.setExtras(sessionExtras) + mediaSession.setSessionExtras(sessionExtras) } } diff --git a/changelog.md b/changelog.md index d79cbca4..1c4c8369 100644 --- a/changelog.md +++ b/changelog.md @@ -272,4 +272,13 @@ * when video mode is set to audio only, click on image on audio player on a video episode brings up the normal player detailed view * webkit updated to Androidx * fixed bug in setting speed to wrong categories -* improved fetching of episode images when invalid addresses are given \ No newline at end of file +* improved fetching of episode images when invalid addresses are given + +## 4.9.0 + +* fixed bug of player always expands when changing audio +* migrated to media3's MediaSession and MediaLibraryService thought 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 \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/3020131.txt b/fastlane/metadata/android/en-US/changelogs/3020131.txt new file mode 100644 index 00000000..9a18421f --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/3020131.txt @@ -0,0 +1,9 @@ + +Version 4.9.0 brings several changes: + +* fixed bug of player always expands when changing audio +* migrated to media3's MediaSession and MediaLibraryService thought 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 diff --git a/images/black 108.png b/images/black 108.png deleted file mode 100644 index f0f90141bb8ff71d9f7f8248b1b0453952313580..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5317 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 Xq5-<3YNfAe00000NkvXXu0mjf+`~zB diff --git a/images/black 192.png b/images/black 192.png deleted file mode 100644 index b54722270f1bebc0f346c3026830dbf146ea93f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11755 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 diff --git a/images/black 324.png b/images/black 324.png deleted file mode 100644 index 60a71c940aca166833ddb6db3e60e0fcb403317e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26720 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 Hu0mjf%@P=F diff --git a/images/black 432.png b/images/black 432.png deleted file mode 100644 index 7424edaf0ffff5883a9a1df550d5440e535e0e16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41612 zcmV(=K-s^EP)$ZY?dTa5I}Fi+64FW;0~%zVFMY=(cT$Xsu;lGYe)K1a#3*@a_WS zR%nM31VlW=5V<1W#|C$pFXNj;1VG=?n;%L*w_5JR`4;1a<~}>VLt(X^Ux_S1AAcT! z1@NR!_v2~uoKy%-JT%560x8pgfJ9`8&N4&*;4PwC?9{0JZPa!VvP9&}3F!X)@#e)q zK(bWRm%*_YfB`Xf0uLi$!OkLpDtwAsC$3AgNXl^@ujj zt(*8Yffx|&4zXp=H4L5`hObUbh&;aITzstL$A~%M&D|@SNplU!%=(wbboaqqVbMwoZBa0G9aPW$&DomfZdi?WubQa^2)x zaZDP@pK1sbgR`r&nn?R7xPD`ddo>6^%9vOIB9gTui?H^_Yx_sFo_KHy)}fA7k$C<= z%;#88*v#g+Vf;u52PH)PB1bx$SS}g`KY|;+7hx76P0JG3fCkibq$ealku+p8V-WvHEN!4CNrY-v3`z~ZA zL}IKaj#Afi&0fJ(N#tKLp1eu3=M$WDl>h;V5RKxAq0WO6qA{k+)Dz^YM_xp?GfUVP zqc*m^o&I(-*&@%GgW}b@=R+Pa7=D_GLrg$!L|mDEp=j0zlZdjRSy0yDt?a7SvhemQv^a0HCMu(??(c#R-Y%7^@|Vh#2$3^4lL76BX3rxJ;rq z4y=xv{(IGe^5SRL2qXUeDVM#Ex>;vK1b{O!^kdD$e(OF;QyV0OrO_nk95ug?T*`g=S8=My;ATCVD(KM(;qIDFst5wY5pp;Y`7=5WM@IO|zHgqHd|WxvFs@OC&>;JuAQszyERrps1}5GI(gR52_ht1Ooj z`(zV9O@QKwZvEl8F$|hGMO#n4bRTSNA1ukgBd&H?s)1_{^rK+N_BIOwcxjn=oXx$9 z8x{w8uD)|%UzV@$CN{)x+u$P@Uk%G?^K)#@Updvl(dW{|JdVVL0$xH)T@Z+3_tLi4 z+;@?fWfMb|tQWS~fo8JQCq6VPbot-)#i81+vGLweb6|_M-Z@W^c`ZO2sLmS zL%h`BSQI5j>{%hi4~T4-c!S)*84wYXFi2|Z>>;xW?I{FCz2*l-CD_romm2O z0o%~zZn7Nm5Sey!(xUgEtA{ZNys0hE5&;-9I;p}W%rDgcWr(|7M#0;i^Rw3I{emc3~@B54bE{)=Kk;E`x;4jjkh{s z@_qGjL|OllwaZVoNXaE&3yGe(%e=Z?#o^$@MD3_qEv>cSUExS597k)%<>m_CR$b(5 z9~d0Z#+E7DL-eIKTq-X%_k!8fYuW?*7_j5g7z0ZB`;73ElknTZclR;?pZY?b^aj{8 zt0g}r?t=UzuhVFh=pdH6;y7scanfjY+?>|TvKyblb5V`L5cq?^5OFNg0!i;2sTl1U zY&|4$M~tIKBB>^(i#2)#VbhxN1vgaS>&k4(T8ofDV8N!9D6bYp1ApfScUn`0DaksOKfZ1g3gcAadMZ(LW@ z%QY-Zo8|4u&5o4L*+N=^T?JHN0vk?Ye_zNauBHR<(b1xb$w~6p+y^ z7@$8#`|@eMq2zbgd`goimFNodCJNsua<*+_1zESq$mL=YCkbfV3={8y_T}VaCUTMs z{dEy0X)n-)fAGct;8->SazF-KQtZ&(^-U{)JL=ZFpC) zl`pdrXgr}udU%spnff=A7fldsf>WU?N{80%Qv4^#_qL)=stN~}d2Nm7CMiW~qy^^8 zH7C@>TGn21QE$D?3Vs7_5zhUUXTgbW82K&QR$QM!+kXT*95V;q=^22n+tCKc=iomt+WDq&a)4OT;Lbypqks_v}9U5qx z=klNO3UydXL1E7VW5?4a6zO3p4Pi8f0X_InYpo@hj!ebZ_?o2`B`KRFK`y{-)SzR7 zB=D(^Tw$e~`vQQmV~U5S*k#>E&NK8%el8B#-&|%yu&In7PlkW_AHu&s5Mtg6%A#1x zAYOZi_T!d}DKk)7Z&sfl|B(7eZHU=j$*scdP9Y~gV4O=LiLG(9H>(Z;GR4BC(|m!| zVdh`Dcb;9MF^1)K{ep;yPsl_;0!ln&EnrkaBp>$&r}!f~in7PmJUfYXvf;I{nQMWv zAOCOxw2VeBF2oz8ROrUZRvI;kGb2*nQ5PsYn;gt=6^y&NXI2w4B$n2Edu5V};V;GJ z@)}rrbiJU6_4B}NxS>IGA);!#a!GCw!TDq;-c}?Apq1P~v-UHhqB64D&tWng>agc}f1;``v-^#E~ol8Xtg@fgLsCk8(R&hK__-3+DL5 zML3JU(8qTn=r|v8W|aKR8RcwxAVI*LN?>wcIlfl%=gb|YkG;AClyJ;IA%fO7N2$z& z%G%D+GNeLag*oS8CTRV+o#N3NcTaSscV3Y7)`QHx2?$jiVlpE6r7+`&s)c3RaoolQ zb!vRTn*A_@GgUpK(i6ZlKR?DBl~EdW4M|^%Tq7^jsxS%StB}_n;ZT^|pVH;2Re#3N zRFI2fanieG3Y}rOuhC7!P$4PfgC^LLo%S-XFc^;+hleRzQArz5U#=gG=X1jv#Mj}M z7W0v^eoEebTR27%f0Hb1?M|(cAx>c}Pqny1Y1L@MDEMV-$?`49xjQ@mv(1vm(GY%7 z34lbYoY<0@nIU@9pA$m81TLG~W9x%R?3(FRFIuK{ga{UO!a3SFjp4x|M!V~1<5G5^*KR=u?y@5hG4hc4mQag08?2PYS>TLK)^d!}(x^8m2np2Iw8T;x~bZ zTn@LsnVK6hqEW4#TGC=slRXp9#F~97a-O(`6bLL>&GMMfCbrA|0QM{nnGx3I{t^x& z`f_65NLA*j)gD>nj`?EAg#9r?G{&U^8mYF{*5PM$4QskMNA0B-e>#KZ)s9q{ zmq`Suq(D)vn<8ndcibFD_SGndW(Su~R*7Ig#-(KuB{X-Je9{qP%)fm%-tlFLPz~?d ze2BHBet=glH_aAz&cs5RKUi4C;ANgtE48Pxl2-+0KMgWrufB!K;Ti$dsc|i*Wj~q1 zREmTqG4UCdTA8eM02d>zA(YoDoPA$W$WC*_U`BJ#n-G6`Vjt{0tbb23)gpomy>#EM zPY_$|YK?K!xc(|i8slDMh$U`F3)bA<&>Dl$ny=Z6q1WL7Hc{g~m-@}R8{TY35>f|= zFPt^270c)=T-b}9P@W{5XoS2jlhrZdM;u4W&e+|D^j;ML<`FQ2))OU4`YH)=5H+n? z6y#M5v3A2>B8R%$sU}fWh}zJ_{(|Dn-Ayj{5%6_LmMq^fGCmadJ8If_Jt9|Z$*d;N z2G6oshk9{{MU1DPNuGkDKi(YpsM$k^m8n%kp+ZgAW3#``ci|!6LuEd!V{8 z#zgL(FP1=3)dz@(HnZ*41x|?4r^^I>*=mSf`j(8hc2Q)7yc-da`;fCpNY_iT!uY2PbXz>V{PQ#r}sRfryKz4d^k)}|^aDKB8$4fmHX zJ46JhN)(9sG88Qz?o3sjzg}+6JdcZnM_weHd-VVk3u9H%95bd!Z6}SA!crp%cLwDn zE)trPktYm+vc$0+I#r8^>E+R*)OME}0dHnf@|4OPhE;iHc?brb#dk6YEk#eRB0Oyc zq<1-0-mj-;gSW)ba5dTkCJRV5yh0g&970?H`td#TQaMqo&o(jLGI`{FdGL~Xz5oXf^Adj zTK#Flj#f_bpLL#FtYl=&YvXXrhN#(@a6smUK08jQ4!BW-dB3c5JH$HvRvG}Y!U`L! zn|~T3{L*(?46mtaf0z2ZgK$@|vQ?j5Cl2O|hzTpsG1f$_jc&CE0BZ^BX=43@M;r`; zCI!k)%gE=&US>63{oqTY{d_Wt0fzqgag!gj8G9 zhtft`9H$N9O*EZ3{>Vqsv0j98<05d%9FQch&O4Mg&9dW^#jwGV%jLm4zE!#gYh9CT z7@~L*Sx!X6z9thJckkgxn4N)7%%HbX@~0r7XDy>d;VD%n)0oyKGcOZBF%PP9fmt05 z<1`S7_*}?SAe6-1X^{9q3gfC{@(}c)j)cIP=htb+%5=c-H$GxKrH#nvS+KNiGj2Dk zPooTBBT+2M7=s4MQXxTX&NVItv(ZEW*T1$OKlS3(Q`adwZ^wJZL&JOi5h?YKcQWGK z$YrrF-Zc^ULTCiubx{8V%o9Orod<>@XNB^;F~*?Tn-+;;a0_pc>AeEQC_seGYy`wP z(?Si_8Z_nP4zn{+{MK6F3gMR(xb+`z+lFmp(@Y=S2`|fOaCon71DH$=fOi^~&;~tDpkM2qyt%Sm7y<4xLr1_Na z8dPbe(L_F$@yd%VV)hXYf=E0JPgV9KJ^g~QGM@_rNaudfyxj3Gb!k)>_UAaWg|KGUeLf zFWFfmXU+q*Y64;(aZ%XsJiA)=!jgQ~GRh5eaAx@h331Uo@Qko3AC#?!n$0~{fqmDp zlU4A;>*6PJ$CM8nxat)+zJ`E$<4lOWqTwsC^6Up7Tm9ii-==RmRd^*xfP7Y)c7Sv- zLa0x`aL_5N9up$6)&c_A(ye>zHYM@+Oi-UVXSxoVC0^z!5Rvgh)|>pdzT-zb%cErL z(O$9XVm;U>29OP4tXSyfmz-|}tpN?2`EoKe;~nd>OP+PKo}6aq&jnNP{DSAC;iZ>acdf@fw)Y{nR4?H<1J+frz@UZt=?vi)?n1)7zo$Tu}@e{@x;?$44@zIBgO z7)?QLxqS=#kote&I!n9YF9B_@-na;4Iv)< zvAH@j$f>lO?0LiT?BEMUo!FJg+P!F{?Q+;)X7R4Dd_Z#d-4zR5Vrz2t)oRX5!Bq*d z%MJ7L{2>u~r=Hc{Jd+y&Tr8pt(?AfkoA(}T8$=#dc&e&vx+_sQZ5E&he=z}&&3tld z`cyqG-Bemrs650ZtI3nR6!9IA^`ntd5&6OWf)EG3x$&^=P|lFRm}NQl)T09@?HT}b@_bX>6!X+7nZC<%$*F4(0>|()$BEC`I`nV zj}d8?XVukOf;j0^?7DPW&2`cqc{~y2hzN}V083<)9Z-rul`&?w zdw5n$#)qV_Hfk{sM8t>XAeRueMeoc!6TN$!#M(EH#S=)??!UtA89h9q3&+3*Y}aF0 z_ zcGxpj@rS34QgQ0|Ak1h*Z!Wj zwdtkxYMj7`LYWAC2Fw%@1fAsyISSwmjQpslo9TkR+Q@MD^P69n}PCrQam^n=BImGjCF!NEg2 zEui~9@&{7%V6vJ&PC!0fL=?GqDv$z}EMM*#6!ut=2LKx7u|l-6A!@B#3x-b+5(TMK z$>RWp&*{_;2Y>+9Pk48RuT`9!HhIO4x%8~JF=pQn-L}cJTsf-~^+%Rv)H!u!TqVboSfDelt}==Vu0K)lSkbrbu7CoZ?(Oku5>|Hsh|f_X1ASqRGN zGc*6zID+F?jogxTrWI=~vMf6{2f4|2?nwRSvuDji{J zDe2WN00Ds|e}w?SPCFtN@*ze~Js635>xZ>?S`>~0r|}jKFRR17ht~3WsqKn+$FAhJ z9FQ-eFK}S-Dx}_>e9^%h`Co6ECDA$BVVzUOU)QQbK-|#&v(X~}K@Nl0F^*IU=#PPH8?^R`{@PrK>Id4dX8w$HQQ@?zsW2aY4v{*B_eJWZXH*w^#)BCHubX(>%fuYaH-HRqR20 zS=X}7^Q{PJfY zRy;hH*Hdb&H8}YKIUG|h?Say$60(zT@;~!$5-Vge4;Xt3XqaI{G<3O zJA&TJ<=uRH>H;L{SeMp9Z~I4eG_5}Jn-$xLhyeI}me;*A3jq+Im?KQG`ynC4_B9`9 zeZb^*`7}s`+4ibz*a5hn9rpB*G)qG|!g^#@X1iI-Uuv~A><9;@d(rrEDR}SVqfyUf zh%Tv>_awfXob%v}IFB6b4BEzB)FEhqMUi{z$h-6G!yQF4e2O79!(F|vh|?o@hyD5J z#+u=wOQ;ozva{F-j4`7pRfNSBji69sx=G(IKuQ1$1$p}odT!R3!bDdGMV~9PcxmGX zPBJhQh11lHSh=L2wFIE^NI!YhE9$@gJ|jL`kC4Yp9)R(gzTn;=<2e@;X95C}MAz)lj2W6&F&$3L#_%WQqNUBgn9HA7lQCYO#15&T@2OJ zq#<8xwN<$mUbq1ev0>^Y3`+2nQUv*+Apy!6>ddPqcFc~-{9Y51F~(Xe!%-X*Hg*sk zR1j_#$IzSR9U@XE=F?FzAGda$4;@}{6o6XlcM^bzL7H9{CK0JhG>cukUV}MS39qtkGnVYO8OPFw%~EoVaiKOrD!6(CQ49fsCEK9+X8FZwKo3&l&j521*iGX}m-E9&J-VIsdPUy1 z-z;gZD)6%kWX6lhvY<4wqOUn!xC&r zKH-AY8MiTKO6rDT`^`L968V<`Lrh2+w@ly8JwJeP6ybg11qI8$n7g|+C6?wd8Vi3S z0Bnf+ZV_2wAtD>X93Tl0IXQW9;%CRO7_o(gPjxuPe(vpc6YEPB>$fAdr&DSWFMkylvWrU6RZ=o)^pxDJ)nk9jz0A>XgJ!!oGsJ^#cvu%oIaSH{sJ;u~_4#xu z?eZ)UXt$p-CZsdZ7_^*Z#68OrvajbHH_S<$9m!l%%fD~eD1Pp<77xEkBu>?b=xQNw z&uh5OI`0JiF~OFCwH1v&h=Qh^60vEci%9Yx5(9l6a+r6@RfscQ=EPcbznf((REFNI7(_I=Bv=WWc^0B@lM)Du63H}# z4?cNuCH)-PKBLDG_uT>z#~bpO;~p5T;fkJ~xSJBGvrV3Eca$MYyzZ0V(+_at3o7x= z;0N^6v{=ShkbZaw-fW6_dMv8TwEzGJ%xelBwF>24C)l>g=R4cJc5D{oF}2z;V#8n& zbuPJs{!j;o zP z!;>H}1lFH|x}=H9FQ${vSXW{`LRnV0o786>Z|9fq0^V)OvLvS&rD)d zK5T|?JQux9yjKtNw*o_y*u!r{bFVnQL?hF(J5v}H2u%)ql53k#$0h2r^ zk^t^GWqis?7Kewj&qGb$sfV6x z>&FvQ9F$(2oEF%gelH?YbWg{2=eBdGAb^i!?-E><5dR1Y!E{)VZsf=AQ;1GYm9s}n zfD+Z$KPvG<1Q8I_ZvLrT_$MM4|BLFdRl!^0y!BNaZWPe~5o}`ztAz!>2Ahp%Qp0ul z1a!!|$Q?xFB=WNOc_{2AsNP}+8F=={qYBn*)iE+Y$A9`w_>3_(C!F0np&z) zw47Lw&uMt`z}a# z%FtWi%jGe)KX!m#J3EUD-XqUgljU>00!x(iMkRy1a<{uM|KjmJ5IsE}aqVTcL^?YY zmYR2NJK>xJ1bxHSo!e}AD2LxuQ`0_5P1b)jQJJ%C-JspoUZFM_sEVC1PZL_a^#M1im;CYs?it{Ue=hz@=Y}cGq5Cz^lBJjcg1+43 zh7%^=k9dho(0z$~M9LthT&ahJW(s}6n$7-*Xm=a3)&m$cIX8HvQQ)!HusE}euJPwX zpDr3Y;af5uT(hL7eJwuo%Cl@-Yn`)K9AZIq&O;&#KB>%?9XiM{+n1BRFCQw_H#m^L zhhw4WYTS{~So9%v5{8Kc_v(ce@V`-Dw*SHX)exjako4hQPe(h<;*F4qRLG)L+92Wx zaHj_PH}b}QEtm!}8dqrCh|bsQD^Fy=qBj%0Q2Dn&{+b;$oWpJ6*(qy--`PRSZU-Pb zE|gXQoBq)SmjvO_FPrd&51v#RcBgzOFg7M$)yI<-Xj!Xl9DWp3R-1mt!*~Waw%D=* zWS(bf(_v@em@U?R{Z@9#DkmSlGMDeNII6Uj5Gkx)ED)xw^Gj-W=~B{W`JEaJk%G%U zJ?U|P?6-jc-~#1q74j7|PGQ*J){rsRdZQj~v7M)3)_Ndsc-SNCc^nZDSrw~@b*J+; zBY#=wN0VqyJamswoTEQ&MCTOQ!U`wXgG>DGJ<*;aMtXyeA0UL$j83&hmCHe=6>WLE z)Oq!boDR~&e8-GO1fM}`jXjr|0sSK!M+N!2-SmtIoHbMx54C(T`+gCx7l1wx>{23Y z4I#W2m|O+x)+ws z;mY5F1K}M2ARRd z2NVtZ7$Sg@Jy-~0s(=WF&7jL6k}MM}WDd)QWpymxV3sH~2=({mO|fkRE|0|=IFrQW zy{_%4MBs0;3W`#jRR8aqnfamOp~gayK1Qz(x+aQ-{MiI=-%t?TJ zI$3%FU+6ri$WNf6+a84Ur#E((eYh3Hh$`>3hqY>!Q(KRA)H}GyDaO4?&~zW`O))9Z z?P?eqC13X*3Wa?%MJGfCylj{rK!`}0c8-54Lk!_5cX7jLhWK6Vj6kZKX`%j+G-6IB zCFfURL;MR^=eqtLl^ccdD0<*#mZ(f}=q^`L&L4kIao@?VS8vh18?0BSX_l%QTUTsT z?vJUac5tz&Xqa8T8*gZAg7HW~>4s=RG&HHud^9&?jJ*BzZ2|zGC5z~e(4DTa&5detXVU-8k5NqT1KvIuEL<9gb28qa$MVO8sY}G#u zYl*qB@uue&IGx!kqq)|taBPke!LA?GCi7E%rDsPwRJxXEl<#mfWhkz}=DZpqd$wzV z)rzP%iQ15+BBT=QmMp@Cao`kZ|5oIAXec`|(nXPhwsXxEDnWqQruR~cS8R79*vw|F zrGlI|KaJui#F_?&FHZWj%(VH&)!xZ;3`%>`yJ#GW)jnKKnehxUm=jWW+=7k zEQ2Ncn;(qd-mnxkvtTU}C@Z)6UHqo`a>xXB6tkA~QGQ^J|{_unLYp-&)007cY8TvH5hasMoeY^>w7^}Q? z0~wAMJW^GIR4q}`*b(D`-J=qu`or@OrNyWTxnK4Y$)#?C*^uY!a5+Ow?LoX~=8#hK_I8X)c1b)|j~yYm&Qx zgH_O9hJ3)?T$~RrmARG#dlnI`r`Mi%+|yPTxu2FW)*Nwdvo%jUD~Bp2lC!<=*)bww zZ!PN1;@J;fUeKgEn;+666xtn)UHgNl{1B(vOO&+n#4UZsn1BENLH1q>43YVlF~*Wj zwqI9Za_L0nS4_y#F}Ntb;KJk?3&U=Rz!>8VUPJX>%A~}You%I3ray*3a#C1CK;%f5 zvKVfyHO7da3a;!UB69AW;rmok{eN23TH3nMgJZIUy9-aR9k*+FR%op)-Z$R{5$$$2 z#_ZN66ud+Pm3VA-L2BX%_7t2EO|OJjVNUI}HCDL9**7~B>lQ=d8a(gPsS-6p>%zs_ z9h~}TXw|h^iGN&9)E&7Ra2yAxefyz1t;sG~;8iUy!C@iM?snU@%@{V3f$#V$RH~#F zPJfMn2K_Y!2tF;&blcY-h_0HAX3VAb^a zU{Y+&YRCGOIO@v@=KCCOsMEC`)`u>~Fk6rHjo-#r2Db zc8}zn7h<1czk2}NAPaWZ8+B=J$*w!XG3BWGK=H7Hhw4OE!f$WK4+{e5d=Nv$o_fA8 zhFZr9Cx%=j#mgsIZjPT^KMiXa43N4--~}T+Pc`PWM!pd>Ie&AJf65Xez{%r}>@t=x z_YvA|WE>ZX9$zTYoWP&k2JVNCy;U1eYYuA9*d@@xg_?}flPZFS0OhmJw1|+$mmL2f zOJG(+Gko%SwF5Y=_1`;4_n4E4HGkR3?juxB>2rpgdQY`0XE4VCx99g$hVe%8*Ur_IYBPGCg1yEP;}Yx?ORpl~?tGvbhX&WWeuvMWt5KUzRh$33peF*%Wb+QhRoM&$1*z;HAn_puz25Sb4i7!Cwfn#%|C zkwH(Sys+_#uNK;#DHWap0c|*|i;nhR*J+D9xPz_A0an0I^a;wgU z#sqxB;IC!AV%i!!s9x~Y$ImtL{5!)PhNCHYOyV>{bhEJMcP@xU2mr9*%9zCafiBHS z__I}-U^B*YR^I1H#2+oBGln89{6ZS+?-j$s+UBIc=ug1!YE>?_rU_9XWWxipWH+-V zjQG{gKT&j?yX#%D7{loCyl?9wUY~rTAfj#EH7|&%J^q1x|DlPKZ;U-cmEQ)k$ebtT zT~m$)x|*AGa8uL_tr7qD!g^-63Uz%`Lh&`Y@A$~`$9ZRGAleopSWD)|xqeuIZ_u|Z zSQVrUbulxQ@Cb^m?^Q1Cok%(7a``GI1t0W!dhU=pFc2eN_SrfYA~y84&I!$8wPEW| z;Ryp*qv7fkGKzvH48si6TAm28N|XP4#wQTlKkb*jrJxpu8#u&R>!2TO7-ODVq!O3-Kt+imG8I0YAPC&L~W-xir1SP2< zSJ_6s*@*N6Xw_`wdw>#e3Yt(z+Y?T8jPNp^KVJ~8yBK35VbBl}JAOgSUf2)e24;vw z@sP#Fe|ASiV{kK@wKfS2KOhaE;}r*AbJ(sQJWnn;F8E-_`u9NzchH+^NmOuB7_&2O z$%)#6&(w2LN`C=>N)peW!u0W5srOR$tyPk03}Wlt;ECy%)(9%Aj=+hl2k(T=Dm;a= z!3)Dd?Z@zASdYcjroy34%)bu2Q;Ct{c&U1@NN&OZ8Ab{?wygBk(nT{}!Ko4+X2HuB z;M)j|K|ml&|Ni|06>JMYlySD6w{yY|6=r{UBZ!2To!QD;!lO6c7)}8-C8ExT-8?}YS%S78 ztlgMqGiEagR$LB6hljOxGaH{Z;R6&eg9t>{3s811urOVh@WZif7K(5BEli5LurML; z4~)ULdFQe`Gr=fG16UR-1~ArH1R%>7a~^rTfG)LP!yFqRpxs))aPv}7RmIJMPKf`v z?+EUoEdaa#5rD`lT^d23HltYG2zi$3J{BPYOQ{^JwSdSuI9Clp1Ie6T6|eJ5v%n7u zhi8{KmkDIutONoOqN#Y3f2d-7f3lVkEGRxGKao#`D1UQ8e`b^~rylquwBy;lrCyqh zmO?~JH_3=)tHH9$xx(Ls{tRTZw4l=F7ycE4V@}f`6-L}Palgd8vTRh8N50-Pl!`S? z5rkiwj9|_d`J+Jt8_3xcU-3JE&+v0C;&$IZBO>l;T8-a3HtU)%Q$kBu0mYjcVu2FMY!Z27Pgj z3gSPp`Rho5GOQ&c(mIoJvs{PNQkio9Kfmuzt>t`=bjh(HoN*Sm7{-?1h2EVuNS1dX zL@6Q0Il@7fB_sd*b_!&4y4E(xVT0P-r-RUC2DSMbzr7ZIHv8b_pD zfsx8J4NBlw$C?v;*GrVv(&!ZeDGzeT`ECLWm6oa*FB&ZJqItYzoxepVswtj7fOD!K zq9LCh0DzCvl{41F$6zL93uij4g)4pz2qXdMvOKS)r7<{AMQIu_)mtkvvqbADl?Z9T~5BPX5~C?1b6(y(1xtZ8Et*B~*LQeE_PJyt%iS zR~ETw0N&wZ`jg0KY3&V8tZpv4_{!2^LzlPkEKuZTkR(4ttVX}TZQHs^yf6@hWyX73Yiag1O2A`{lIhs8x9b`n z=hr(Ckp=VOFcz2U!a7fv(qadKpp7v^FKMc^wl#2}-}%uvzYiE{($Jx_S^ zVePDYVZhDzR;`jrwMK9oo)h)fb{j9Kf8JVpj13W4K6x_rC;%B__T4^)m4UW^E#$C8 z?{M4h&uLyE%RI|B#bgx^Nr>)@Gw~(}&UHQF>#187+*riv zXKF712ac33yvS(~3-$Crt1s)}8?p>d{90uC&tW_O0Fvoz{6yNNK!1zUS+KPep(eql z3t#k=H1J4k6|TxWz_3FLrLEN9PpVXqC75MGXxv`XbAW)Ha%pWv1dW$;#Z2mp6=K^y zXXJK~-4DP?XZNuOWuB@(`VAFdcgguXT}Zqs&7lf7afC z8z8?SToF|>8@4UMR{rk?*=`2WwWeKX^IZgIxp^}c9!E!syn*Z~9a*Mk#dYvG4zL71 z40@=J(y&lus2f7Vqf%@lWr!hwJGp(-|BI^R5H$eCm|V)$4EMcrg2y*v(B$0kaB-;M z+ZRJ^Ze1D=bl8L$TR&xGjK=Zhi5u?38q;mtVe0seFB3^wZNj+t0)30~8xUA_S@`7> zGFQ7J#zCSu5wbJz+V_1g5}60>GfgjDNPR-c%%4e(gJwjiTw?VQNY5e<(il>IaB9=P<0A$6Itx|-9*MAGZjlpDZM40^uNF4sTc^1I>=0I}oo-lam= z%V%$O-`BE<_gU6cQzpmdT2vrOSD_ z%2XV>>(G6**y{e>zgjMxg{6aQx9RL0bto zX@kX>cU#r(fOYXZVZ=tW-E`qRv*dz~z+2^HNZBl^4XY#2C0RJVLTt%hPT=`MZTtNW z6npnf!SEhVml%s4G87GZM4Z>ku-7irdL~klPKJvwKi1Nya8+AunN4mOebw5?WdL43Ku*zQH#yYPuiUa0U0H|A>b=_-O4v&JSe)bZ%KP!9QCi z{UN*V2rdoB`wMsmQ#lgSthqAFhq@FwgbtZ)q^|+@uV?g=ir^)RJ?H|Nj|1?@bT*Gx7f7i!YA!xDd zu`_KX1`f1sRRzzr)$lX)EUED7kSSe15pBj;@)@&pzMc%0qz0NnIbZn3fGSNAU>avGZ}XR$IiwFl5BT3ww zTU^ev8WH-&s4m44p&nZ9mFF@46bm5w3wpdY;z9n+8*rTfmN;9-hm_m|deB?o<3r6N zI_?s)Z}@M2_+p@6T8c~*#3m83r=e1y@$1cF?v@?`XPhf4(5| zbB8lz5N#&>*@Y9v4p?<0GkRBCi|3@uTZg<09%ctN6Bq7Ee()XQ1Q*QvX)tRVX05jqstOQmC zFg9UoWiZm(!k5*0x-IE8!&CWlvf&8x34#D7$8J=4JHr#nb3}svX>J*!mkc+vIfF(b z!gJ$m8Zha0(1IZ(d4(~s$3XR?=uA;cA+*yK+6_l z^;2tbb+M?YccC~JKQIvTPa{&;BGs5=`uSP>o;T|?pYp`^7t|e7>LWe*9q8;j5to=2 zQ+d?VI-~0VRO>IOEa{<<9gq+q^ZgHF@F~hZ+<~HV{Er-ez7B6$k-ZZUPq6C_n3O(N z$w*@68&WUQa>}bH8wtTglExI~s$8 zV0Qw{i~|INLETJ-^|@)-cOtaC@}qduOTEJp1FJ3k_KYjK51@TI>W4v;N3Fc@--}gm z7=?=soBR@^P(()~h_WY$T#DcrD18Y%A*ujGBmjfvA6PhX2rZE=(~Q|f?#zmQpjMY9 zs~JBB;xrFqWAzLOM z3vtPM%hjy+hK1A-nVR~z^&}EUyzTq`_NYLKyNlKTT=pv3O2SjtxpS91V#uI%&K-t?hxM#)!Bgp(?PR%i^#ay1M zaRLBi%taikU@?%L`2n-?hwE^i{FO*UwMA5cc(i-v=Bix}ze6ZrhcbE+5u#~GxuuBU z%%tG=EJ-MXrE3LWQXT)inaz^5)*43vTC#lQJa`9|C zeMy7~0ImvStn@uB86_QJ@)Lx<6e{*bbN_=A10#zcg&2jLA+Qo`*n#bxBq;x?HXUaT zLf@GESU4RK8G{LNfevGg+1eF05qJ0<;6Yp%14|yuYW(5r!0IrOZBCW;Qcd{d-BT_W zPJ@gtlyDp+8xZry`GGv#El7^@J$e~5JMF%Kg6&pZ%+7BS0(d%|aeIeEu8 zwumTESw_3T)%qaHPJGivYU94|fba>ov;FWM%z7;v%XnPZ88jj(`#S-Y7tReRu32jd zareKc>>B`p!0?sIS!5z2vbUqvs87+N62$uEttEp%GE61q1naj>m3j!?iUCAev>|ew zR2<(80A#J}k|Vo+=*P*Vr4W!iUait)*3?(?LH+Ota3?dW`e*MYBSL1`q}1sO2yz~| zzDl~+X=(EymwbsqdfPTo_mgH-gD|HNi2Z`~{{~gM=V~BCz?^F~)1dErsY}GqcsDdg5|u>OFT(ASV~ zyi-JstR21!P7y{naMVlylo;U}cMc%yIqQ_xt4=ZEWb4O7xaiW}a( z=Vejl5pX~$4vlBDsOVJDgo$|D*yiN&Vf>hC7$kTymvL0HdQ|BZ%VcUp-dS% zpQdB_HLyf7LiJkvDmN4D?f54MZ zZ&ZE!+$}_he6LNsIO<7nj-0myRtsrvD1u=1PL&8E26(8i81Dzi1|WLxk;?iCcBhKo~VD?Z7! zQNWA^D6#PHdFt10twD5mODXG>j?m$%IZKS)cSQESeF%3$cHxtF1oRSCC=VbO&Hy3+0RrN-86pDxnEQQtP_lS*@!JGG2mnOZ-wRP> zi{2-GQaq%>r%s)TKzw5i_-!qHG@dVr33BUa-5%O_`)QAl@hKwWdri+6!RFf>EI9J5 zkD+4z!3DekBNwV*{50#)FI|;mMhF1#&(ekfK){yLkmk9xRNKI8X zj0;Bwf*vt}3u8oN_v2vhlh@LJ4g^0BDTi#AS6alN*6WsnR+)aHMZJk}!p-2YcUt zjx6_PU`rHVuYSLnUPZt~uUjR%^F{s?$(8)K{` z#IpvX%1V*lj_p*rL^V))-?9(%x4MV{^OM zA8R2RT2d1RsyQRYm4r^~0Z@NRy-PB1p-}Z({*1w$<~Lr~0}q(X`K(v(E`c^ur$VFL zq56RcERn(PEGj7PoI+6ASEkQstZIiiG+v;@Lj->jDNB;J%?kDR(Rjtplm`eA0a(}} z{hqP`9e@2@)8R--aEdTaHGMhoqmJ|qLc8wVoO{Z6zZ1N#BSOBWW`!@2Dtww1Ej`ry zlR@HA62{=H(?kx^=!iKzv55%ezGmi$lTIN7N$!xu9!lIc^Mu049SY;jD=9s9z)IDU zjg#*+=Pio_CFhr}*fUm|GAX*2S!U*4eD$c0@~oF}B{a=r6hHI7>>>=?D@a!L~8=4sX}^_;2Z zui*pK|C>z|H8mNIPc4?2^n}mNaC%vtLGCaZdyKi5Ir3~VbVT;rDJno;AJ@tb)JOe7)le+(Kq>=#{k?>UaOd7$!PlLpgm zDnrmy-J@K#Mm{i4tiOz6kikRt#veWay=7jAk2}&xNv9*A1HSUwT^Y^RXrLczZ=Q}7`4+3b%^7a_U=;5{j z$UdD)CzHq63-s#Xn~?wzUwE!}nISTKiT%TQ2V3!QJdi(mKkG&WF7a!Sgun+R1#4TJ z+#yT-GEZWSC!%s<%!LjVYb&|W+1*@hxGL@E-Y9{de6{;@5Y5+f!~5|zA82D%PN*H{ zNGK_=hpNG5ZJ|JSX=p8KBwc_Cd=a-NG}ho5c!q$fBAZW2d z4s&#!JAr11wL1gS!n!9IJEU0R zlQwb}6#xWzm6c^y>7_#uHY=S7M?!}JHU7&~%p@YV2qZrxaYo4_`Ik_d8G}~gAC};~ zk#TaD#+%wF?+;xdD&~)?SfYFhx2lm?x8f?$QQx_ms0~?b*N`8i$T#cxLjdRQQs1*_ z&_ym6!fuLhUo*DYY}6=NhChrM42bc;8pqU)*@V@KEa}aTTHY)$K18&ZKa@^nr=)`7 z={XW1R8JjfPMsgV0jq)#&cJ6RoW+>;lPK0LjOB>@qvJ$Qzs_UBq896&3q znZz1JEF$7-GyA`PM8V5^*3nTiga-~?d?NlSbz>1ZuW`a&v6RlY$F^9}KD+C`U23=) zlzk2=hyQcDh8iBlb|mdOYgdg0d?)W7ck3rqRg6E$f-02JGP3du&-E@BIYkP&XOqi( z^dhc?Z=Bp?`DNpa_d`-f6O8_IkPc;ZC>G#*~QGTy;+N21w;yD zMq?0>;}Dq@TG6gu2u@nj?8?`>T2v8|50NQ^;LB?;MhEdk!b&0@>Q=BBn4Ot~2j5J? zNczp(Fu=cjcD<4O*?VrJz>g=!C@eJZW0{?7wb6~dC^fsDira;v;#sMdpC#s>@sVFr zv3IMG4vW|>EB>D#L+f9S|NP3Mati&X>7FD3K_!aB1dFosaO^n0ejj|G;{#Hrshd+R zj?SBr?JlvT zad4`Wmv(fs`HDXFUgAn>ZtKLsK(Q26HHlUkqIhz*%m*(!z#vO(|7?trJ0J4-tgVXj zU85mQl@dj}BFe!9bBj$xHy1vC2`5~Q>xSqq?Y_2Nrn#}`Smy|LyiJs}F)k(>9Bw9X z*x;~QgjlBW|II9zmgp4{I7BjU@@17F`iq;{aUHQ+cK)uLA>0ACpQwypNyn&nY$&(* zhMi4rGJ|N%OiZ$_U;8g27MoUytEGsA^z*{z4%c}B0j)_j&>VIvsn@No`P$p5UD6#r zG{I(^9Sp=ScEOg?trQWV6sVVgXIFtCTCxbZnT^6-E4h{TRMHxVZF9z$ec$DxsKi=< z=>eE(ZMn2Bzh~e4*x9Gz-6u&N2W4SDGA1K@_6#TU2C>7;I;TbpMne_0$=6K3EFtnq zJ~za1i-=&YO(f@Y;!<#aXB>^Zd#l{mco2ZHNm5A-uM@Y-&iJvQ%AeUgPkdk18lH!d z30!>lHwdlQRa?Zd9tls;kMEWYnr%aIlP+wrQQ;W1WgA`HsY1m15N1;$Be+XeZF4~1 z6zA`aEPCD)s{eEsQTu_YI^*K{h@g;t-A8L;L8ZWPX zADfM$P{iV)y}W{?6 z+;qk{UmDH1T8*RVVm4@G97V@P^6Lqv7AhH_L~0=2Uu*5QZ4jIanNx+Q_hvSgNpU&K zJ6OXXqQw;KWe}3{+ggg$u~*hwL=@Nd4?lb~Vy6cj63TD#pL?C`egQUkjC^NF8R#O$ zU2>{eTL~T{05rxB*{ZdugzTL)N;3J?K4FykCaGLH7Wt-$h`nYk8(V7uC{LDi0Dchu zZjRWi^wS@XgAQrULu)~=HP21T#;aH@%gfJDR-a)rLYovrzLt+%s)RJ9P=O)l6eu~9 zxs@T>bz^O^vRI);^bA`Es;oBlScOOYhnkof(dxNmAqMpTZrk^srr^Iti-(?n`RY+B z2CrS(pnPhse=*5nwm=r5Hu9X_ls|~wP+uRoRtTNr_?kN-f{z;H@l1J9Jq|Gj+wxY3 z143Lu2-UGT?(d}&PV3GGP%^kYi%BiSb=IXH#vwd~lbPlPV)i%jrbJ%rzTXj{L0C*6 zYQB?=caC$=dflr%=cnWrzTvuB{r>e`{`K_j}IiMXnxMgM&jXV<+<9iFZRP zfZ+Y-mq)sBj6@zG|AwkQ{hWs4?Xn;;&PS z(XZw5BLj9k^sE5#UK0`E976>0ON^AKC?y1{FZErKwVthU?Rn$2IsoKS1PS z<&80kA!E(}Q8a?ct|*)NZR_?rhUnfAf%VT%0LGYW#lw?ByL@-k-GoSS6Mh;4=5K;D_RlA`0d?h@xh(tw2 zL;$1G`L;%uYt95)X{+;AgsTcaEyEnGvsh<^>1K_bl8TGr-O(OSuM%45D+03bxL)>>2xaO|X7-YABL0gp#>Rb5i%sd2Yxf-!{8+g2pETTqqf~V{^DRI9lHlJD6-9wc6sC z$HMPRStcM1X zIb-PgO)5yb;`C0{+qIJCBB6Aa4>TXq-#5jCcw#O0OV%5%|5Q_y#s+AL>kYyZA%a0O zF4@VTUOS?Rb|zw9Z=K(>R<4^)C1KOXPKBNd;-qz}zBx^;uRwAyp%dC_B$4L>(Pk;) zPGE>xcpb6Xg>Ni1202d*c>(xrM=GH8xphwfPOfITsN4(S~>9{ zXw21FN;Yg*0G`S=@6T%DZq)JaB@=>uyw-UZQcOXzqocn(-O{PV#+;txY?7s`1IX-QmNX5VrE z2yzi*$;#r!`KEb@it5rzZ29ynZ1f!nSSu{!gB=3wHR%W=U>JlId{~cq#6lk>TcYzcFUw@y{Z#q zah@b*gA#MoU8+9R27Rn}5EWk#k1`_iNjqyT3yG-ue5t`pqQU==^^=bWzTzhMCT%eK%#o&gJ5vM)@)X_dXjkLu2CX+ z9Q_f%+7o`s43W<J@txqyY*jg8@c>7!1pEL1AOJ~3K~&%}QSLr>(+5Hnz4jU5^Oi2g@ z?UTUWucxku^29 z>}J-+zuh*{nAI5~pmmPKJNyKd_?UxO72k9eok)elcqmVNC|N%oMs4kg{YtzwsD4U5 zoX3z@GhrM>1fVT`AmKWlqkGPRd*76Q4;NeLj5~13WwL>%Fra)X{O}#98_=o|IY}%> z?cmn1q%tw5rWS1;KO{kT{2`4)R1^^c^68YpC4KUU?!#odAAb0u3mSA`C(f38Fk-t* zbkm89*<%!N`N86=kg)7V6gR1FWOF!caOAU@wX0(e)D}L2kcQ!#CxGdA#y;|{*w5K^ z+x!64zb8=jFAM~1xFZl5=W^eNzk>h>nBBJ*Qvx-5T683G+`#j-wMXHa%mN=%vE}YV ziyJ<;V>PvKvQZD9$ z_{$?S=QpV?M#>S@;1JxI{2(_S4jdg_uox~4-M9&@n7nn3TsA(L0WK`_oMXg=SGY_o z-I61}8F>HS_HUyj4HU<%baxihXguBO*Ru} zhitHXZaa~0@=38iJc62;)ny18#(m7v)+}a-*=sm51c`^_97R=#kpFtU0KnSgW{z7$ z6>Jz6Z^dz&`45-l)D}57pD{}O6?t0n8Bt2JvH+aE8V!Oi){HQDK+xF`mk_srfXV9geNcBNuCWbN58H**v zr0EmSGHZ{jl1y-U$)w#Va-|XpB!M#fzQ@)6RI&-s1!+Hi+^`G9s#ae5uHof_QPw7r zZIy&z2VIV#IwU02QYHd$Hp6yWs)RfHu#gQ(9RE^=cmzzn_K5pGnLidgo_v|w;JxQ0 zx)4@ue{zhvRMk`Qelpjagf#S;`WX%DVB=S~Y-3@)05BhHk}skaFGx8F$bay z%gWJFVS_Gi1ZHd_UWl>cuUIl+Lad;_$ORF-de?b2_Bc770Kkc|qmmtl=%YH2CT)|7 z#Y95cz@sRk&Z`a=Bci(zL6M>2Y^WWnGZp8te6M~goGX)vyk-@3`WF+^MjDj@$74x} zR&G&5q|{q9##pg-}FQ zC+4j5A{dvNCvd1G#(O!X7h4m?<&G&4^6R-F!;Oh^dViRZ{Rrqy`oQ23kq>~qXvz^3 zv|uWI&W&`agqu~1H)@oK*+s*OTGI$YL`8_%!pqs}Du*B4Sw%=68^?*$&G|EDA_)u; z86(z7L1!k(mNFiCUGail$St10h{W3c6AcHUrwIWOAj~hZB^)P#R&tBhq{J4lAC)5N zU(CKgh**Mg3QEym>e&wY)*GA0J{>9JzgIpvgE=0&bT_Zy14hkMZ3g0t+;r9b}bZu2yrr5=S2_eJ$ROg9KLs z80UO7qBs|c)L*u2h+6$VyatK{06;8kvlH1s#^B-rnw)P^Wu!vQ5C+2RyA><1mzG;y z^L9pnaGK>HTU-{IH9x6pdq(uV{L`!9Id~>jkHo}K)rz*O=r(ZXW$6H6u?8X{U!PfA zkNlSpAn8EU7BR%4S(naTLFzeL|WSiuv7q(B^^g3$T#l8RNQ>cmRvz@ z(?QnOD-V{*zPSXsA!JV3G7sH_wCiy(vy-+MtWk# zJ2+UL)WBsjK1;eorJ=b*`OBk)*eg{$Q(1}=$`pV8ejSBZAnWvrsw$?B<<&040SaTs z>~xE7G~En`YKIT!i9J-ww5RWd7%r6TD%kVX?6E98i7^Vn)L{__~;tGRBkFRo0D%rM8gv2xKUQCVt zW%R{ZHeBZ4U(F4DEAC(2=_H~vfmRV}7#+hOPaMYELj~4CR6X!ZfIDam?)yIM+-L|f zNlrsKF@|g9&|PcEnB#JZa$|7&j-}`*k+u*j zGK$xnT7_R}m~tjkjrf?e_?Qp^-Yk4fXyRw}#r9Rj@aStGIGXfabq#bSZ{&>KfQjx> z92$y+UX?$CFtFjj)u7#} z(S$I;#C%tbEPf>`mfVShRw~*yZVV2qaaFYTtbXc8O~l?AvV!Cv-Cy%qoE)qV*Y@6w zWWCJ12#h~0al`{r-=CYW@g%;LV=A<8m(e^!FuWXTeNQM~d15YtGMOv)V{CNHr=?e*(O!)ZcGw0)M&+aL((~L55}VQVpt-pzQp2wdspn0{E_#r07dOMRG?$P@;TT zHVy>_c*Ccbt2>+vCYjDBaHuu&;D;ZM;oOdnICiaV%}t?I?}fV2U`H@JyCOEkiUlwF z^R?TZKN&QLXuY~eK9`wMZk0h-hPJ#8$8b97x|CLj7RoZ>mT`n$5Cgn+9<0SrD*PHO zzXu!u_I>B`aP3-Io2-@LDQ1izvKNUj2`|>+D`Vma<=z;s#Has~Gry1?A3mTdcU?KP z=Q93TGme}bWi3CKt786qwEnV(E-LW>a_%U8^6(i9hJy^^{DvpTsftzc(r(AN$gfkU zEylre%)VQnDo~Txw;K6Mpg3(`-bhIVw3!V6B>#;iYm6D3?6CuA8vMAmR&23QFg50F z9RL|)ScV<&)=#7Ml;0#Sy=wn}oLPYY%^O@H%?E@rbBnkxwneX?*g9jr8ds%2AwY*Evn4i!je|9kS2Lg zlWyygLPv>Z%l9GY<}w-vQF3l3s?(|Z-!8U?h=d{~-q@3bxzwP~6iid1V)u$Bpl-D_ z_nk;!rSd~Fou4&kiPwjC$M%%XL zpii$U_o+B!YgYx4WizZCoB;rUt86RBF#hr$MD#bJ7DvXw$XlwPP-VRAvtk{E*gcq7 z7l~-8zXWk^cyS~bMQ0H_CzUR@#~~GXU!Z&@0ASEqYoU^%t4I#I3uS6UHuz#lIl?dH ziFfiMl4}xG+tYKkOYdz;E2-A*Pe+ivI2C7mGa(nFC><)LHIoxR6qFxe8-zDC^o{ki zcty2f#2stxNh}Wg=dHEgHGJG@t9Q0b-}KGXXmDTYRMPx)y!N&+aTc@pj;#Y?a06b| z#%$!u*|EjupWr%dhH@FKndH~KToqSn540odysl0DIzWkrXNYR=XIW2KQ{xv*5F~d3 z^5S_?_0+UbXF@M`2WZJj@(LSd0_p~iRKfE0aeKkwqNf>e$T!C>$%rdO!-Bn{EA|M)YfzJ~G z7%?T3Nr*L@8^#2b@e*xZn&EqP!&U&%9Rj%xjD1kGtzgC$i^{h(w-Yw33HhFO+cujx z+I;UK@Ag|Z{LeQ(MR-(insHZWF`_SD4+Ll_2P%YaYxJ5IfgK)|L4JbS1uVSW*gw&I z+$D&W?hz4LLKBXxK*CA@tlt6DxxfPb{Vo+Czzg1pvBR_1 zHSdp~c`nm0uiWNk+$Ibt7TKZvW#gob*gMDQds(ph>h6)tnNhTNt{;X*RDDirsc<_? zp}(>G@HO~KYwscqu|nsB@RC}?>=^5CR6FlGqpjOYS@O5ML0cjT$sG{T>5@&BNbcZH z%4pD^{qSL&g-UKV33D8eF<1;9XOV3zg7SU=)4z+KdGQ_ivBU;OlvZ6Zb6ys#=icMo zsd&VM8i!#;kBo>lg)0O^Fdsj~taWu2Bqa`LT`KRuDPB_vdDlM;)qjuEd6WS^2LNWm1W-Si+qV8H1Nnr^ml=g@7laW3nKMlE`{-S2!^O z*q9+|TEmB$cf8tYZ1Gfn+i*BhkyKrx?Y0&MlpL5z5^}r{H-wVtCcZ=QoE@8I#_JR@ z85rk29Oy`*7v@|ztFq=Gm2ki0`vPI&5SgVpFvR2eUjd+;)&ddBPBGz$y9E<+4Gj^% zT5zs?GjC;vDeb6#i-U68qP?micP?=B5U76e5_;6ixupI(ajXkZi`N-IElx$1PzJ#% z{*tlX5Oy=zGz6Afu?}WI&`Me=msdO?<)<$Fm(A|G5|d)I*vKDWCia@RP!h~85AnP? z+^eSxAYyz?XgNg4-(i@3Z>`nRD3La%hA8nySU^S5Mqfk!B^}s&Mu6E-ghmtU)&6|f z%kUvw>`s)Ir=YtQngKfDVw1+Ld&M=&3Mk(>JhKu*gkk>B%l%I7BvxCj*u#!uhEmJlfig%0$s%Aet z6Mj7c`E-BRHPv2FgG~<gC&EQXi2r7xTm#G4WmKDk$Vu8_lU97dQ z*9P%!EIttNQWbiP$oDzyj*}vv)bYvDI$K%XQ1ayjYu0^innpl%K{mN zNugJA^=lIvfe4A9lJ`+}k|1*4BdXjyh#)tVcDoY`uoJJa7eAC3N??#vAH(=0!tYBA z^E`aiAdeDSne8(55Yn6A&ns#LDoTYpZ+6O0+#d+Brx%KJYJU3Ktu@AMXe`+z2EDfC z!|`XIazsU?m%AYrI%(V5s4W02vBI|XK?F4NskR}}e2ECr6f4OjJ2)?Iw@F=9p;SvM z#HqW5=hn%D!f{k5M#bdvK_2Im?|pobKWI$At<$Oyuxbxz4}P(A=fkKZd*TmE=0AW(y83}sSL^{ob5EE(>`t)DEKx(Qh@q6?NZ`v4QiyKN? z?5G;|kkom{L%01Fvm^dz4dp++`F!+NWflJAhE?gmyC#(8$US6-k+C%Y46>x`7L=`pYSR{CBRXFm@6qgK+Y73&A z;%@l9SB>SG!Nl4~evcY*e&y}P4Wa1iT@yxD;4}EbXPK*hcoanOvp`6toG##HqSAUe z7OqR`0yy*+<7KCSAd^Unm}~mwAIjK)a5`?azowW;abj7=(JCcF>~!>1T1cXKGSZGF zi6C|IPY=4TY%mr-5tc7Pck?&{72b5J3tz)7-z=QtIguathgQ zLJKTIWx`|lQ&>clRe`y?Gw>x|W8v;&$9;+~WiIc9YF8vv@?;3tHUNOgX?~6FW;o_E zW{N&9TqvRST1UrUiy13$>p#*!D=uY-k8LbR^UMn!$b;)t|qlNx-@daQwo_c>*gXH)7b-zQxVD{9vl z2JtwY6CT9{B^a;oY(@gku}ioTl=Nror&4561$GA z1I2^-wXHeEsCABqpf!UYIiu3rGJI8(>zt^t$Ds<>KHJyQXB_1Z-G`2vdS=SuTO5ER z>*35wKfMgs(yfh%$Y=6wMeIU~a46}Rl0C0dxhZ;Lsf%$e5(j-c#$=J~h;_C?=|%U) zouJ5Z&Fz;b0)vd(C$)U&ad%Gks(29r9{~LpjmQ1s&2#Q0+pJd=owm>HKCVR!mu)Z~ zfp`8|{kme!E1p_&V2!N@fRV9m+_7#>1kcy~V%M|P=fzNHnzzlGKa9)>0BSlNTj(f8 zQr~g=YuU;nYG3LryQNB(mYFHVx#hmFxdPCmFaH6W_d#CQ+AGUrNc-$I0OzAFWRo4K z4Go=eZuUAPKZlWo3S>z65Z&wyb<2nZ6p6T2n1JwpfyuYm)rIF})kpw{as)6lpiUJV zEi_Z%34_QSSupK7*WAZ?Uz5a&RsO7hgeJ!jbBd5paCMSiW3Kca?JLghKI|CyXS_Ve zN$qR|5CVifqn6mI2uwG{2XkkkA}-Wf#ebkRmb@E6Jez!*(TEJ-Sx34^!a+uOg4y>!wM@#&EWyDRXTB zAx4VPIf;B00!P!J7r$*n!Ba71qFYn#xIav3miU}J^e@s0>-I6arf!6k6`y1lcaL&d zzbHrHFjRz)wIfpiwr$h9p4zpwR+d4^E0%4gp1KNnL{`rDr8TF!;>d{%B8uCFTcm(| z?@GlUfOj>F-!LU3W1D*RDeu;l>p4TmTU4EgZcKuMhj-a=xpw-# zJYOp@MNe=PaVF&h001$@Wmy3h<8<|NDX7uV-57FU_5gZ|FYO5y6O=PFOcV`cab7rS zulf_K(ztEb3V?|KF>Kq9+s}q`3<1P@;|DWdNH5x<+R=+KYWCdA2tiMv_axcBN{6Dd z{xluf3-{2ll$U7dk+I3B{mEDcM_QK!5T#{V03gN~BN;KX4$5gMIaM_4*RB?f=5Eqv zJbG@RG1S(~i8amYm?#?a#u8tQC}vToZ!%KdUF9A0+M+5XXaEW!*b_e2utxxxE^m0~ zU!z|L`UIdy@pdGwO3d1}4LVo}g}uJ6cI}zm8TAw>eTFf4gGlt#L(rpu6~YqZ2IBMm z`T1e=lSI}4kc^7lL0-~hQ;5VfzE?2pH(k)~RMZfGx6WFARljdtoTchT{6a*yFQF{P z^x-lhZ~15gt&VQJ=gLqKbEAgzalkUuk&`L~BO-ZH4pk>|Z$>6z)TyVLvV5HjwZF2y zTtyWPNYVKt%K%$B-x8VJi!*h-iSs{?2<2ON=#8XG-26bB;E-c)r?+-A{IJs&nG5-5 zTU?1KIY}nq6S7qnkkwcK*a`bBMAOQN&WoSVV^{hwB9zCuk1polvG_%j9f^ms-2qIc z2!7~1wZ_~@%hy9=GNX9timRCcx87Pt6#xJ^j$wTj`?Mlp2w{txy(geonuyZXD_QDE z(qYe9S=DAIocxr+X{yV>RIapzj|f>sivyOvO{#VHZ%p_^JT(0 ztg-gABl0@|6u?s9Or@ETNhK3Ph>?gi6md#LTW#%?tE5$y6KEm?PQlMYr3f!442Xj; zX6b|vsq*V&izzsqhw0jImesE~-N%cyy z&MQIII}ZPIs}DBGPF2R$$)Q`*(@kh$FXjdVh9v|Hkv6+}CsCiz6vr5? z$HTflj8TAG549PfS!prG#NoQGa%yMh(N9ux6LsPfA9_2zJ!1JUl9+J-hErBTM5btL z2=*|CgpFX950zzR^~*v+>=NaFh=?LlXraDm|Eh4dF5kG2V#WQ?xaLaERkgY4Hdgbk zj!4?sI7jX3%f67GhXypiVh3~VO>}^_xAO6kjk@Y=t242@$@!<{Ct#Z!5y}A-uut`B zYg-&8h;29pB93^8(4>TvL^^IPu`#GdM$+I*porjP?4it&B3pTIeQHYNn|TzMN=FS zAphSqAa{AX?XGj1Pcm5o!Ge5>dFFxK6K!$~4Qgd*f6;K_N-FNvWF=6M*j=k?uH=ZB zW?V)k_9P^}JHYUv_fcc3`gf_ZWFuq|X9NmVACx#l;!emaumOSOT-Fe7LF%GS`=Phk z*Xd)eY7rd>cTis5BsSOD0i7MklU`|48_daZMVTQOp~m-2Le?&{*(G!p4E8U%{sIl$ zTsNU}+YfqanXHEKEt=}iC$!o6vrQNECJr=uk*Id4X0J|(Bz-wl;sgm0eTLVzI5oj; z)BlTy>D}DiQ`g05YSx+UOZl_B~#_IExGFF zLoB3I0BG*As=CD?e)d7kR~F=W@#LnC5fS+SHV5Jy@oCJ{td@P@k>^sLIQkD3{OR1I0(}N)_T)ad^G&Pgg z3IOEz6Hh{P-gKSmXFw!L8Rj=z_IV7%xP#vxE%Pq9z}O8=E*{T>nyTKZkx>vIclEzQ zMAXYX@IE@aa8BzPF>al9tzf49<+{b@sV)_OsPbJENZB7{GXKlK90LCQPzc3YLQ5ZtoA0-y*24}~OGa0vvF_|X4av+Mn(s$=$If0!lvSf7N8>H&@)iI+ zx>we9hOBjwg+8v?JyBTOD6ij?_TARMg*5D=h^RW=Gxv$X2#K33e>~jeLl0d|1H5vl zXpAw09G9cOr{T;Y;I{YQsoMYmAOJ~3K~!xhNfm09IY5XM&nZ}1X^e4Q^@7y>sFyR1 z|;&~K*!@gWZ0Ga^nC1g+l(A_^g4h#mx7?JauxWKx_X1>C<= zKs90uy#kKT^?;CVl!YqoQls!67?e*%W9{;A4Iu5;@&Mo4=>7`nF1cN}cfafbGexIe zhKqo+QqkcM#R7|}^!sbFLB?9nqDY|^&20*TSgWi*6fvJ!W|cYenZH7yvww`d149S& zm`JMl4ko^ihV}l2LoHW|%rRCpF=+jv9^Gnu4l&cpO&{pX*(S32%ME}jV-AZ*J3cC+ zYeGtr3T*%Y5UpuwjaxT?ZL5$DwP4LT$nN7<;QINE2mxXUDe4;j)~5inf6D0W)x z{e+0>rSPVHLOuJFM77v+&;+33nik7{*IwqFE?cxSxp*%tpxkOKnpde61TnK)T{PBe zz0C&_!nSSOwt4cf?YUEDd77|o(Z&psSR8W5(bq|^>bqP#^zRY}dkZYQ3l^-QM2PV zUYDYYqvwe4Xk$ij5K&&@NvljDR-dZk8}!9p>LwfHE7W%3@acw+td5>Q>K(a5EQ6gZ zMGz5}W%=LF4**CuZ3mrfbKPr5vnB=k@R^?ZlgJ<0r zRHACPIr-T5kqG2&_;LH+p;x`kx9rrvNx#To{eh7FYB8P?N+`<+hG8Pwwk;TZ?AMTf z8r{oW-8oe}Em1WrA*y1k@6WE zqEN3P5?&lRSJg+C%|oHkI~UcLXxP?k9o||sYtuVdvxk5&?w{DhoHA#GW!BWH;K*N! z6kQ=Nmb;3rdEX^{Tk7#$TTPxU(BGpbOzlRL*Sk1Z322KOG7{l#vXEDTNvg+NcP5~B_Leud-n;#H_#rB zBhL{RD9_|Q^hqKjRlM3v%y*zB%^?keqqPi0$C~= zal&QR9wH>!O?)(EKy@Lkm2M3cUqg0FdtzXW8%YM)T`rBNd}t#e0Axd_#AjBL>_ZQI zhi(XkOuEt|MEHgc@vRN*4tq$~=tV+AN+Oh)4$E*%)^N3Q01!+mU{vwZ?iku<%Md4Y zRA0DKQ-& zezv%Q2F>UhKy&J4T>}7Z+lDENxBgP=)BwO=#u$k}a+yJ8BWNsHS(&Xq5>bpBVoIUd zU~4YVeYQ|*%Ge5jQ@F|H^z0Ddr<=Wj9DQ*h8Fa6ze9hcVaG%jEgepWj6CXlZmURWl z1+bL$v^Fr(CW>_x{KzJNe6eyRIY!ldS!$E>&bx{|TL43qHMi|>^__)g^~}g_aNw2C z7$6>c=n&1QZ|`QnetZuz$D)AWNxqS>r3D}fZ%bGp-MNg`u&NiX#+Xh)3#{0xsf}xq zYouyVu0-nSoETkStpV6z;LLq_`hv?y!=fbH6C2J)R8{*0!qLa}$1az@AJ6~Bp2QPs zB9GLCEzZti3BWe7&6dj@aj$Z;I##lVD?g;KSM#8@86v7fUsTpX3;+~kTti4ATY{&4 za|$#z$wI|0QwXVc14#)MRYK(95dGImlolMhMGzncsjx+~_EkCG$C&srqT)VLIyC)l zWPIok5!IHuBJS_<##mO{^=sE+qaXY7GCLfp0!TzlwZSKKyIq@y$HetqSKW_90dZMU zo&?0uBzG{80f}{~sjNEh76O#=XzGvsUW++S@ygBZ8XcBp;jFfbr-N<_1Fg7zW}b1Q zA9I8~^tTBm+^lq1zH5uktAmirJnNyn)VGI~C(wBq9>>iAB(!z*fZpTS+%-}`hu2Ug zrPgJZ5CGtR|N8+*5ig^_?0{j58#oeX^+oEW;2W_7nWb(7xznI|Y-0EznLNiurs%}m z{XP^{_SijM9@xG!RZv(2LNi{yP5r3m{^V_?jm)@P(h2Kmk&6hH1!5f8z6K4M22}Lv zu{Mg>LrLbMo^%Hg*=v$q)Y*gxh!{yT8?vNk4SWS2yTLAQG6<=Sn!gL*v9%Hn9 zFEe4$5XSd16ObAeQE~w3F3>)R`A{JOkT{X~r@)=(++-f#SpCf)*n*J>-ywnjzL|<*-AZ7$y$b;&jF?R{&;#r^=-U z#31arEKzoNI39(T<-)$_vSUB^Dl z{Z`wZiGr+}8KnQx2)^_=ZgE*cd)Uqx7H!qF${YgYS1@p?NPmbbCHg2}MY*c=kF4;S zw?0GFfK=5!$oSA66+&WGH2bcPWG#?W5{#35*)Y|h@j8s@8ok#rV@1~?-;@PO9}p2R z1UczKxhFB!i$uZ+p-IKsa>>H5A`v2{BZEUmeX%)nYPp`Hzl4VGCKDv^RX!g2Jv2B# zQBg;kb=(h18aQY^+Jkes7#>S0l$!6po7jSnKS6?I# z;3i!zV;4pJjo2#-OCrjVyQJoJ-im^N{;_I}9G9f$_7E|~7*G+*sgb224iZ%7GB>~X zQmOpASNVmc8of5R5BH~N2=E_GKKyT!IScY`h{^BtPEe-U{K-p1tB^RO+s54}pBJdo z{}|(xALy^jZ0KB;CC0b{KnNjHgcJ^yqX8tAeOE}VCD`5hhmzUBdwiG9jHrayBq%fy zLc34Z&bU`r7ayi>&OSbLJ>^ISz>nQ5tXZZ%(AEr%)!55h0|4XAFfm3F(`Yp1FseUND82Ny36G5(VN7d z%EWUC)yEz#s(m-q>2<+;JgKT;^Qo{Au}Cp>-DI!k9M0323&lne+Ke6)83YJyS|;NjcdNWw}stYPA#9OV^PP|o+~p$h)B`7`!!ja0PT6WnQ1Jcc*ShI>P1Ae z;6FwR9U%lgnZ{7KZERbcxmWH0l}kQxAE^rotWup9qf#`jY7ld}vR_PX4FLm92aDJp zep>n+m70`wPmr=_98X`Ny8As&KIRY@(64ZJqW%W}0On`!AtGX1GEGi#o?=S~EO!h| zK;wgD=jk0%=Ulrfip98q!F4SZn&?X$wwAGljrGg2@HbXjR0IfN0eJ=dO_BafA!FON zT{u!Bg-J&3_v(=Sg~hsY!1g(kcu{>ZzhJdLv`-&-jXY)Io>8?}O;gp@hT31T3C&Pr z#!de=XwVH}IoA*X04NIA-z)HS8pTx$vVS>chA?G2yO-8%H9+cNqT6k|IT%9#M>5vu z6L-loC9q(qDJOG5w)oOq2BZsVx5aj}FEO;;gx=8!>o;h>zlyBSdS+sBu`R~^kc(Hi zGFHnk&5%kSM}>Hf+tXt5cTWY}w~v*9BJEQJ!VqnUp~^bwHok|Y_EAFaLGuC#^`l!)^|1sMGDQc@DMXDi5w3@3cPO4<%8l`}M?zY1a zCozk%ghPu;T;a0teW#7IEFs+$y|Uev5df``LI-pp&;BO*EnR41U*604%eTilRpNoP zUGtGQM;Jg2IL{KRCm`QsR)~WE;2OsfA}X|vMH+Q98|);~r?dvd@ZW!nNM`69-CLH0 zBI%&-hZag4=CZh%8q@wz#i^?tXuk*n;ov0hIwd6kBpY`PN^(Qtsw~_?-T+<*0ejWB z@@AShhY#M7{djJaKDP3krS;yX-NCV6@(K+HqgW;l`lqR4TRx)5Wwz;}?Cx|j8!8g9 z&CW_c`Hh&dN>MeXV5HETB&468d;@a=L=NTGaH`}{+uaN`eXL~IZsIBuXJ%Y7iMq_l z#rIMXU&%LW)FF4hX(iYI^!FXOWBQ^O{Gq#%6|61^A>z5U8xM54`u3wip8^m{7WM@I zfjdORZA*99O}MJ-%UHl5HIWKW02vSwMGMaU@)&6;FU8to1R2T}D`zBF%MDTFb0g|s zwunBct7_J51kVDmSjCYVV&hJ9+32nKzM1c-b}I|VOhuZs$+2L6km1O(HPX9byccpVp(6HmiHwFB^{_H`ee0XTkV z$3es zhGEXdu&xXJ{BX){79J&3wR$#I4eKx3d6A;Y4vkz<@D?(1=;d|7B#2iV{h+`bTmt*# zE-H70uyNno_5U66LL;sx5`B;ln-=CaLgpqmm6shs=cS)v*sKLxd8?>)ROXUR z$AOXgT$W|qG~%5^4uj4ec8RC5r&$HF->>F(vTkLTt2y~ANKOQSEde&)DDIE1*fK2# z#dQjhU)50wZvQ9Q&o8NV@JMY@HurhSm&fb98?^@he~mt6eD+bpdYRK7r}%08{?}5^ zm*#y_i@;vQuGO;h$OvwBVFNKaVeB_vF(AD{pf*yJ+OD>mhMq9g6_PQRrt(m)oZ>B( zJ+vQ>z1x9Ls`&5*Lb5dGPLh6a_;ZkV zkDn;T56{RKW>nXVh;m@jrm)Ged0zi0uMXn-@c$ z(ldFc9%Fqg9?^i4{A)WSw7Hzzp_2ZJX!w8}5(6lQok@MtpjX(7P|7hG*kZXlOk81V zKqx6Et*m>9bSF#+8MPYb#D9pO6zu&}Cj>28R-*CWBShU5_dECs^xQ26^|#0saPT@i z;Ih10k87lAjf1iV3)xU^TG#UaVmBh!eqOJZyx4@Y4Ytu*IX?Zn2VXO|_crnHOkjM6OcpyR&)wpM6xpl)=&AACR^zgbWH$%02I40feyzghdZKEIVrQZ=z(i?71CI$pRk@049LON53KUCpS z1gs?VT`ms}ZGxSK*_<-Rc}C>K(lS_aN97X$K%D*1B|eR^EK3H&+IVROLOjR$d&uvD znyi`G#L;%%!>nCdH+Q~y&F#m%H^Po4`>{V4<7{l#rSuE%5CA|AyuY^7*{73_pkalGgj)qitp#8Z4Duvj3_6J}>+_G>r(_FvJx6hcRvff8)MW3AH=Y zQV1bN%3(Lv@K_^}wFVX`a7q~v4AR(!^>0oierS)zDCBdzQl-E*A3W8OSZ#h_*jYHmpbGb}9z z?XQjPYadt39v@|~@YUmeSpooUTU=4@U+y(v59f8$BTCrapvlxws5>*J1_y2Ts``PZ z61@AZz`wEZt|Hg&apwWNGj9Nnb!J{ptVJ35*uyW0hx^XXTUyfm&_~aAiXq_7&jx^e zz?bn(g}zFC3?bmOyNNNAWwjM#OslXP5YwUkGBv=$V3MLu{5YwYTdWZEK7%9>Cjtpb z3}Y`xVgx|Tv<~~KcQZqf>(8y!2~=K4tGxC(gdA2xI)$2^_1ue?=haP$dAxfNYLmcEr zB^A#?3c(rJ1=0Kci-I#lSqRu)Va1nxsVSyI5JgN20HGXQQ7@*W@^@q@MdTPM#UWM( zh3Z^02&JYlnp_EYQHL!w&6Up3l(a$RAefFQ52cvE6ycER84u?w*UR_N4^|A z!hc9c1&Mw!DZjMK%fjieM5e2eT-+VNbG_o?%yj@o(i-X^lr zIrKC$hyT!dk^p4eH~~rD~d)zleO>pIt%i zV$olSsu&6@c+Ou6lA97}z$QuU5u)mEi_RhN;kTp+8*P_7OziE=x{B*-T`M;ShayTt zXbKP!g@9`^JqFyi4Tyd=Ac_zXh!9Z|Pv+YW1H>2uIzgc`ZZYr1)LII^e1h$&=9>!$M@hAn zztycvi3$6Di@0F&fqdFkf>2a$Co2V!H216k$ZPc@_u^1U1i^azp^MEDKSA zi5j%0$qBWB(tpy{R=2X+ud-9AFa9bl|YhOELar+gn73;)&@%{25nw7SunxeG7BkN>b<|*khUdxpdCG>RN8mflCYR%zR_zzz zz&hT8xkzl1rSpC;iEOLPz<`18i4|jIkl2{YaG72}B{mg+ zsES^-y;~_%eZ+QiD@)ohlUd4^DIGl4ZgpTW=%r3W>i~?*2kCOCGuFehmHi6PNYF=G z`zW#DSZ`bY7^T_Fe;zp$aZibIa#o~btZ7|ww&%sspt)30MyVq7rQ5MCt!N0tV&yX; zV)3QE?et`6Y+1tpt?SRvMid7ZG|MB_;F@VI3sJo{*e8(CR#H}GRuS(u<&(oTR>_q! zz@aury~)q5cwCjD;ZZYU&%oMk1%E+siSGPx#5xA`CZQJY{mzYDW~ehta0r{RYSc8OLcC)v0TQ{y^>hw`V!9h>(E?6zs0y%lSLlez@K7_oMTX* z_BjWPw1wpMD4MHPW|D+FL=-SYNv8wIcv!fktyA0W$#8aCd9%>Ywn)p~!0Alt8Pu%M zTBz_qKoD7-NHGcra4OYI`Q!Yvm(T~y^Ek|FIiO^tcmev`3%@%Jy%gl|R!V~)0!pDs zwHVRpo&%ceuw8VH6Qf-(dSOvaR}>Gbo}GIFG*wBqss)3Lhm^uvhRv{t2$J%POLABK z`)`fW;Z_t`$4JuvVgv}l(L5mp+LB<8-8h`YP^k#-lL%Q=*Rni35blx!-%9`?4OCxf zwXC9my2Xz#-lNYXd&!FtEh2Z{S<*~XY)(9}1&-?JQSaQiT*hI3wTu_kQZJ6@FN^aCK_&+X~)_ z!h5=r%gbECSIy>PfY2Iq{ zfpxEeAgAG#`u42Z3MW(q;LDhRvPtJ{G-KmK#3+8etAcV4QoirE6%R272s3lKhDm{d zd5uJaAi2SNlu`1pX0i^3luwJj;86XVAF*|dJdrTT9adx6OqRhApcIygOg%(;-AYzz z5MfQHxPj~@5d_z;vbbh`RShj2{C4gs>#heYfoE#Ll?M z0|Li@<27rY&j1Ww%LG4s{p@Qj%?PT8bhitL&qZ{GB?%_&et&!zQ#yv@49YsA^8M8{ zwRWvSE-#l=aV95CjlAmH@-B zu`w{7*=QET)(42`lBs1`Krn)>YuVul2_mx}!@0@cG76;vz1c?-57N;^~%a0yC?u=7ldJ*r|Hx(F2V!&n`4f6+x`tLq=?Xy zR=IypH&1UWEhbJ1)_GM^wWd_ND{9387vw>w0Ce7CRX_zT*Hc=u%7)H#D_*}xEL4RM z5TiT@CQ1pb!T^XA0g%w(mGIDpqhxWDh01Mj4SJ7xyr13UpTlE|DA0Z&~+@SU&L`~l<&4GfcVNW`9Cr{9L+ABzQqo$<> zs#uR7QtoDPJg#mMQcRP0jQ zcKQ;V2m3}RziA@C08+mKbWep}mLY7X<%aJjri z^<~}(@?=MZWm!^khx9(IO|l%^WX@-qvl68dDQ>pgs+nskcW~|2MCPwK0WQhjvNH@H zLZC>H45M$it#U>H00II@L_t(pMFWG^c->a8aw3}KVv&lu=(qF%6nfo3bTxHH*lfxd zu*{(AdWexImRU|G+OupEQK8n8NOL{sBBP{h6YP+qL|ZnhXZPfuEFmRvNA?T?LS8A{ zql8^RkZvLt^PgoK)M5z0s%HWa76-Q&|65lgSozFN;aBl!31N$okHM5jSqLHp$3$3+ zOHfy9@jd^jxgm8Ra&KlP*|BVc-0(?TO+g%|c@-WVT~9N%wlh4WjlELZ5U}uZA7X4? z;yY?Z{Qymf`6NcI3)q%dP<{yj$eu~47D&nGK*_BF0~u?a>(vwiBgFvWXrD^RPFEFq z3}Y#Ax5h2*1#@Ii#UK_|u{1aY0HprnqMrZ|BN1&ZmfDe#xJ6JkJcr%visF11jB8Bg zNb$krz4=saca74tzXB)mNTv(%ZL^<{bKXyH0gltDkS}TcuJ2`1QGFu=0EoDq+yYyJ zTAybbG#%bb1G3l5zhcPjwgwDh%S<|&2L#2cIIfm gFmcBsBp~Ad1I#o?XWILz^Z)<=07*qoM6N<$f>+3tX8-^I diff --git a/images/black.png b/images/black.png deleted file mode 100644 index d0cee814b5ffc687f1da9a6fc1b45eba94845de8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71331 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�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 R^*R6m002ovPDHLkV1l0!*sA~l