diff options
author | David Luhmer <david-dev@live.de> | 2022-03-27 19:20:33 +0300 |
---|---|---|
committer | David Luhmer <david-dev@live.de> | 2022-03-27 19:20:33 +0300 |
commit | e41e159be51c1b3d1268ae300d5c00d578d91942 (patch) | |
tree | 936d0fc1298ddc816f75e6bbd8b517f60afd864f /News-Android-App/src/main/java | |
parent | 9856005c94cd05292acd70052ec1e2e3898f021a (diff) |
optimize podcast playback / fix seek / fix rotate
Diffstat (limited to 'News-Android-App/src/main/java')
6 files changed, 53 insertions, 28 deletions
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java index 74fbbed6..181da22e 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java @@ -11,7 +11,6 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import android.os.Handler; -import android.os.RemoteException; import android.os.ResultReceiver; import android.support.v4.media.MediaBrowserCompat; import android.support.v4.media.MediaMetadataCompat; @@ -44,6 +43,7 @@ import de.luhmer.owncloudnewsreader.ListView.PodcastArrayAdapter; import de.luhmer.owncloudnewsreader.ListView.PodcastFeedArrayAdapter; import de.luhmer.owncloudnewsreader.databinding.FragmentPodcastBinding; import de.luhmer.owncloudnewsreader.events.podcast.CollapsePodcastView; +import de.luhmer.owncloudnewsreader.events.podcast.ExitPlayback; import de.luhmer.owncloudnewsreader.events.podcast.ExpandPodcastView; import de.luhmer.owncloudnewsreader.events.podcast.SpeedPodcast; import de.luhmer.owncloudnewsreader.events.podcast.StartDownloadPodcast; @@ -229,6 +229,8 @@ public class PodcastFragment extends Fragment { binding.btnPreviousPodcastSlider.setOnClickListener((v) -> windBack()); binding.btnPodcastSpeed.setOnClickListener((v) -> openSpeedMenu()); + binding.btnExitPodcast.setOnClickListener((v) -> eventBus.post(new ExitPlayback())); + //View view = inflater.inflate(R.layout.fragment_podcast, container, false); if(getActivity() instanceof PodcastFragmentActivity) { @@ -301,15 +303,16 @@ public class PodcastFragment extends Fragment { @Override public void onStartTrackingTouch(SeekBar seekBar) { Log.v(TAG, "onStartTrackingTouch"); - before = seekBar.getProgress(); blockSeekbarUpdate = true; } @Override public void onStopTrackingTouch(final SeekBar seekBar) { - Log.v(TAG, "onStopTrackingTouch"); - int diffInSeconds = seekBar.getProgress() - before; - eventBus.post(new WindPodcast(diffInSeconds)); + int after = seekBar.getProgress(); + long ms = Math.round((after / 100d) * maxPositionInMillis); + Log.v(TAG, "onStopTrackingTouch - after (%): " + after + " - ms: " + ms); + + eventBus.post(new WindPodcast(ms)); blockSeekbarUpdate = false; } }; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java index 73af7b8d..1a2217e7 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java @@ -8,6 +8,7 @@ import android.content.SharedPreferences; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; +import android.os.Handler; import android.support.v4.media.session.MediaControllerCompat; import android.util.Log; import android.util.TypedValue; @@ -34,6 +35,7 @@ import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm; import de.luhmer.owncloudnewsreader.database.model.RssItem; import de.luhmer.owncloudnewsreader.di.ApiProvider; import de.luhmer.owncloudnewsreader.events.podcast.CollapsePodcastView; +import de.luhmer.owncloudnewsreader.events.podcast.ExitPlayback; import de.luhmer.owncloudnewsreader.events.podcast.ExpandPodcastView; import de.luhmer.owncloudnewsreader.events.podcast.PodcastCompletedEvent; import de.luhmer.owncloudnewsreader.helper.PostDelayHandler; @@ -205,17 +207,10 @@ public abstract class PodcastFragmentActivity extends AppCompatActivity implemen if(mPodcastFragment == null) { mPodcastFragment = PodcastFragment.newInstance(); } - /* - if(mPodcastFragment != null) { - getSupportFragmentManager().beginTransaction().remove(mPodcastFragment).commitAllowingStateLoss(); - } - */ - getSupportFragmentManager().beginTransaction() .replace(R.id.podcast_frame, mPodcastFragment) .commitAllowingStateLoss(); - - collapsePodcastView(); + // collapsePodcastView(); } @@ -231,6 +226,12 @@ public abstract class PodcastFragmentActivity extends AppCompatActivity implemen expandPodcastView(); } + @Subscribe + public void onEvent(ExitPlayback event) { + Log.v(TAG, "onEvent(ExitPlayback) called with: event = [" + event + "]"); + collapsePodcastView(); + getPodcastSlidingUpPanelLayout().setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); + } private void collapsePodcastView() { getPodcastSlidingUpPanelLayout().setPanelHeight(0); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/ExitPlayback.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/ExitPlayback.java new file mode 100644 index 00000000..fae8f708 --- /dev/null +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/ExitPlayback.java @@ -0,0 +1,4 @@ +package de.luhmer.owncloudnewsreader.events.podcast; + +public class ExitPlayback { +} diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/RssItemObservable.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/RssItemObservable.java index 65de602e..86f45a01 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/RssItemObservable.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/RssItemObservable.java @@ -102,7 +102,7 @@ public class RssItemObservable implements Publisher<Integer> { } public static boolean performDatabaseBatchInsert(DatabaseConnectionOrm dbConn, List<RssItem> buffer) { - Log.v(TAG, "performDatabaseBatchInsert() called with: dbConn = [" + dbConn + "], buffer = [" + buffer + "]"); + Log.v(TAG, "performDatabaseBatchInsert() called with [" + buffer.size() + " rss items]"); dbConn.insertNewItems(buffer); buffer.clear(); return true; @@ -183,6 +183,8 @@ public class RssItemObservable implements Publisher<Integer> { @Override public void onNext(@NonNull RssItem rssItem) { long rssLastModified = rssItem.getLastModified().getTime(); + // Log.v(TAG, "onNext() rssItem: " + rssItem.getTitle() + " - " + rssItem.getLastModified()); + // If updated item is unread and last modification was different from last sync time if (!rssItem.getRead() && rssLastModified != lastModified) { totalUpdatedUnreadItemCount++; @@ -190,6 +192,7 @@ public class RssItemObservable implements Publisher<Integer> { buffer.add(rssItem); if (buffer.size() >= bufferSize) { + Log.v(TAG, "onNext() buffer size exceeded - insert items: " + buffer.size()); performDatabaseBatchInsert(mDbConn, buffer); } } @@ -201,7 +204,7 @@ public class RssItemObservable implements Publisher<Integer> { @Override public void onComplete() { - Log.v(TAG, "onComplete() called"); + Log.v(TAG, "onComplete() called - items: " + buffer.size()); performDatabaseBatchInsert(mDbConn, buffer); //If no exception occurs, set the number of updated items diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java index 674c6951..e3d25509 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java @@ -24,6 +24,7 @@ import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; +import androidx.annotation.IntegerRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; @@ -36,15 +37,18 @@ import org.greenrobot.eventbus.Subscribe; import java.util.ArrayList; import java.util.List; +import java.util.Random; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; import de.luhmer.owncloudnewsreader.NewsReaderListActivity; import de.luhmer.owncloudnewsreader.R; import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm; import de.luhmer.owncloudnewsreader.database.model.RssItem; +import de.luhmer.owncloudnewsreader.events.podcast.ExitPlayback; import de.luhmer.owncloudnewsreader.events.podcast.NewPodcastPlaybackListener; import de.luhmer.owncloudnewsreader.events.podcast.PodcastCompletedEvent; import de.luhmer.owncloudnewsreader.events.podcast.RegisterVideoOutput; @@ -134,6 +138,9 @@ public class PodcastPlaybackService extends MediaBrowserServiceCompat { return mPlaybackService != null; } + static final AtomicLong NEXT_ID = new AtomicLong(0); + final long id = NEXT_ID.getAndIncrement(); + @Nullable @Override public BrowserRoot onGetRoot(@NonNull String s, int i, @Nullable Bundle bundle) { @@ -203,23 +210,14 @@ public class PodcastPlaybackService extends MediaBrowserServiceCompat { @Override public boolean onUnbind(Intent intent) { - Log.d(TAG, "onUnbind() called with: intent = [" + intent + "]"); - if (!isActive()) { - Log.v(TAG, "Stopping PodcastPlaybackService because of inactivity"); - stopSelf(); - - if (mSession != null) { - mSession.release(); - } - } + Log.d(TAG, "onUnbind() called with: intent = [" + intent + "] - ID: " + id); return super.onUnbind(intent); } @Override public void onCreate() { super.onCreate(); - Log.v(TAG, "onCreate PodcastPlaybackService"); - + Log.v(TAG, "onCreate PodcastPlaybackService - ID: " + id); // pause podcast when phone is ringing if(ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { @@ -261,7 +259,18 @@ public class PodcastPlaybackService extends MediaBrowserServiceCompat { @Override public void onDestroy() { - Log.v(TAG, "onDestroy PodcastPlaybackService"); + Log.v(TAG, "onDestroy PodcastPlaybackService - ID: " + id); + + if (!isActive()) { + Log.v(TAG, "Stopping PodcastPlaybackService/PlaybackService because of inactivity"); + stopSelf(); + + if (mSession != null) { + mSession.release(); + } + } else { + Log.v(TAG, "Stopping PlaybackService is not active - skip exit"); + } try { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { @@ -398,6 +407,10 @@ public class PodcastPlaybackService extends MediaBrowserServiceCompat { abandonAudioFocus(); } + @Subscribe + public void onEvent(ExitPlayback event) { + this.endCurrentMediaPlayback(); + } @Subscribe public void onEvent(TogglePlayerStateEvent event) { diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java index 096ce698..81c64d5d 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java @@ -101,7 +101,8 @@ public class MediaPlayerPlaybackService extends PlaybackService { @Override public void seekTo(int position) { - //double totalDuration = mMediaPlayer.getDuration(); + double totalDuration = mMediaPlayer.getDuration(); + Log.d(TAG, "seekTo position: " + position + " totalDuration: " + totalDuration); //int position = (int) ((totalDuration / 100d) * percent); mMediaPlayer.seekTo(position); } |