diff --git a/app/build.gradle b/app/build.gradle
index 970cfa89d..6da55c1b6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -17,8 +17,8 @@ android {
resValue "string", "app_name", "NewPipe"
minSdkVersion 19
targetSdkVersion 29
- versionCode 978
- versionName "0.21.12"
+ versionCode 979
+ versionName "0.21.13"
multiDexEnabled true
diff --git a/app/src/main/java/org/schabi/newpipe/App.java b/app/src/main/java/org/schabi/newpipe/App.java
index b44f7517d..3785249b4 100644
--- a/app/src/main/java/org/schabi/newpipe/App.java
+++ b/app/src/main/java/org/schabi/newpipe/App.java
@@ -254,4 +254,5 @@ public class App extends MultiDexApplication {
protected boolean isDisposedRxExceptionsReported() {
return false;
}
+
}
diff --git a/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java b/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java
index 64874cd93..9c392be1e 100644
--- a/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java
+++ b/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java
@@ -235,6 +235,23 @@ public final class CheckForNewAppVersion extends IntentService {
}
}
+ /**
+ * Start a new service which
+ * checks if all conditions for performing a version check are met,
+ * fetches the API endpoint {@link #NEWPIPE_API_URL} containing info
+ * about the latest NewPipe version
+ * and displays a notification about ana available update.
+ *
+ * Following conditions need to be met, before data is request from the server:
+ *
+ * - The app is signed with the correct signing key (by TeamNewPipe / schabi).
+ * If the signing key differs from the one used upstream, the update cannot be installed.
+ * - The user enabled searching for and notifying about updates in the settings.
+ * - The app did not recently check for updates.
+ * We do not want to make unnecessary connections and DOS our servers.
+ *
+ * Must not be executed when the app is in background.
+ */
public static void startNewVersionCheckService() {
final Intent intent = new Intent(App.getApp().getApplicationContext(),
CheckForNewAppVersion.class);
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index 371adc4ea..1855d45cd 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -164,8 +164,14 @@ public class MainActivity extends AppCompatActivity {
FocusOverlayView.setupFocusObserver(this);
}
openMiniPlayerUponPlayerStarted();
+ }
- // Check for new version
+ @Override
+ protected void onPostCreate(final Bundle savedInstanceState) {
+ super.onPostCreate(savedInstanceState);
+ // Start the service which is checking all conditions
+ // and eventually searching for a new version.
+ // The service searching for a new NewPipe version must not be started in background.
startNewVersionCheckService();
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index bda16849a..5552cf73f 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -1181,7 +1181,7 @@ public final class VideoDetailFragment
addVideoPlayerView();
final Intent playerIntent = NavigationHelper.getPlayerIntent(requireContext(),
- MainPlayer.class, queue, autoPlayEnabled);
+ MainPlayer.class, queue, true, autoPlayEnabled);
ContextCompat.startForegroundService(activity, playerIntent);
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
index 1c94743d0..c01e051b0 100644
--- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
@@ -77,7 +77,8 @@ public final class NavigationHelper {
@NonNull
public static Intent getPlayerIntent(@NonNull final Context context,
@NonNull final Class targetClazz,
- @Nullable final PlayQueue playQueue) {
+ @Nullable final PlayQueue playQueue,
+ final boolean resumePlayback) {
final Intent intent = new Intent(context, targetClazz);
if (playQueue != null) {
@@ -87,6 +88,7 @@ public final class NavigationHelper {
}
}
intent.putExtra(Player.PLAYER_TYPE, MainPlayer.PlayerType.VIDEO.ordinal());
+ intent.putExtra(Player.RESUME_PLAYBACK, resumePlayback);
return intent;
}
@@ -95,8 +97,9 @@ public final class NavigationHelper {
public static Intent getPlayerIntent(@NonNull final Context context,
@NonNull final Class targetClazz,
@Nullable final PlayQueue playQueue,
+ final boolean resumePlayback,
final boolean playWhenReady) {
- return getPlayerIntent(context, targetClazz, playQueue)
+ return getPlayerIntent(context, targetClazz, playQueue, resumePlayback)
.putExtra(Player.PLAY_WHEN_READY, playWhenReady);
}
@@ -104,7 +107,14 @@ public final class NavigationHelper {
public static Intent getPlayerEnqueueIntent(@NonNull final Context context,
@NonNull final Class targetClazz,
@Nullable final PlayQueue playQueue) {
- return getPlayerIntent(context, targetClazz, playQueue)
+ // when enqueueing `resumePlayback` is always `false` since:
+ // - if there is a video already playing, the value of `resumePlayback` just doesn't make
+ // any difference.
+ // - if there is nothing already playing, it is useful for the enqueue action to have a
+ // slightly different behaviour than the normal play action: the latter resumes playback,
+ // the former doesn't. (note that enqueue can be triggered when nothing is playing only
+ // by long pressing the video detail fragment, playlist or channel controls
+ return getPlayerIntent(context, targetClazz, playQueue, false)
.putExtra(Player.ENQUEUE, true);
}
@@ -112,7 +122,8 @@ public final class NavigationHelper {
public static Intent getPlayerEnqueueNextIntent(@NonNull final Context context,
@NonNull final Class targetClazz,
@Nullable final PlayQueue playQueue) {
- return getPlayerIntent(context, targetClazz, playQueue)
+ // see comment in `getPlayerEnqueueIntent` as to why `resumePlayback` is false
+ return getPlayerIntent(context, targetClazz, playQueue, false)
.putExtra(Player.ENQUEUE_NEXT, true);
}
diff --git a/fastlane/metadata/android/en-US/changelogs/979.txt b/fastlane/metadata/android/en-US/changelogs/979.txt
new file mode 100644
index 000000000..520d92993
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/979.txt
@@ -0,0 +1,2 @@
+- Fixed resuming playback
+- Improvements to ensure that the service which determines if NewPipe should check for a new version checks is not started in background
\ No newline at end of file