Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/news-android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Luhmer <david-dev@live.de>2022-03-27 19:20:33 +0300
committerDavid Luhmer <david-dev@live.de>2022-03-27 19:20:33 +0300
commite41e159be51c1b3d1268ae300d5c00d578d91942 (patch)
tree936d0fc1298ddc816f75e6bbd8b517f60afd864f
parent9856005c94cd05292acd70052ec1e2e3898f021a (diff)
optimize podcast playback / fix seek / fix rotate
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java13
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java17
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/ExitPlayback.java4
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/RssItemObservable.java7
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java37
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java3
-rw-r--r--News-Android-App/src/main/res/layout/fragment_podcast.xml19
-rw-r--r--News-Android-App/src/main/res/values/strings.xml1
-rw-r--r--build.gradle2
-rw-r--r--docker-nextcloud-test-instances/README.md6
10 files changed, 78 insertions, 31 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);
}
diff --git a/News-Android-App/src/main/res/layout/fragment_podcast.xml b/News-Android-App/src/main/res/layout/fragment_podcast.xml
index 9e484085..e69f26f6 100644
--- a/News-Android-App/src/main/res/layout/fragment_podcast.xml
+++ b/News-Android-App/src/main/res/layout/fragment_podcast.xml
@@ -205,6 +205,18 @@
android:textSize="18sp"
android:textColor="@color/divider_row_color"/>
+ <Button
+ android:id="@+id/btn_exit_podcast"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:text="@string/exit_playback"
+ android:textSize="18sp"
+ android:textColor="@color/primaryTextColor"
+ android:background="@color/colorPrimary"
+ android:layout_marginBottom="16dp"
+ android:layout_alignBottom="@id/tv_no_podcasts_available" />
+
<!--
<it.gmariotti.cardslib.library.view.CardGridView
android:layout_width="match_parent"
@@ -257,7 +269,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/primaryTextColor"
- tools:text="00:00"
+ tools:text="000:00"
+ android:minWidth="50dp"
android:layout_gravity="center_vertical" />
@@ -295,7 +308,9 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/primaryTextColor"
- tools:text="00:00"
+ android:gravity="right"
+ tools:text="000:00"
+ android:minWidth="50dp"
android:layout_gravity="center_vertical" />
</LinearLayout>
diff --git a/News-Android-App/src/main/res/values/strings.xml b/News-Android-App/src/main/res/values/strings.xml
index 19f60464..d0d94bdc 100644
--- a/News-Android-App/src/main/res/values/strings.xml
+++ b/News-Android-App/src/main/res/values/strings.xml
@@ -212,6 +212,7 @@
<!-- Podcast -->
<string name="no_podcast_selected">No podcast selected</string>
<string name="no_chapters_available">No chapters available</string>
+ <string name="exit_playback">Exit Player</string>
<string name="podcast_playback_speed_dialog_title">Playback Speed</string>
<string name="notification_downloading_podcast_title">Downloading podcast</string>
diff --git a/build.gradle b/build.gradle
index 2cea24cf..c334558e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.1.1'
+ classpath 'com.android.tools.build:gradle:7.1.2'
}
}
diff --git a/docker-nextcloud-test-instances/README.md b/docker-nextcloud-test-instances/README.md
index 79552202..afe98e24 100644
--- a/docker-nextcloud-test-instances/README.md
+++ b/docker-nextcloud-test-instances/README.md
@@ -14,3 +14,9 @@ Start image with:
5. Setup News App
6. Add Nextcloud Account to your phone (in the nextcloud files app)
7. Use SSO in Nextcloud News App to access test instance
+
+
+# Debug requests
+
+curl -u admin http://localhost/index.php/apps/news/api/v1-2/items
+curl -u admin http://localhost/index.php/apps/news/api/v1-2/items/updated?lastModified=1636295405&type=3&id=0 | jq '. | length' \ No newline at end of file