diff --git a/app/build.gradle b/app/build.gradle index d78b7e730..35cdde5f4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -220,6 +220,7 @@ dependencies { // https://developer.android.com/jetpack/androidx/releases/viewpager2#1.1.0-alpha01 implementation 'androidx.viewpager2:viewpager2:1.1.0-beta01' implementation 'androidx.webkit:webkit:1.4.0' + implementation 'androidx.work:work-runtime:2.7.1' implementation 'com.google.android.material:material:1.4.0' /** Third-party libraries **/ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2f215a768..f9c99819c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -381,10 +381,6 @@ - diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index 6f1bea376..b208d8443 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -173,10 +173,9 @@ public class MainActivity extends AppCompatActivity { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(app); if (prefs.getBoolean(app.getString(R.string.update_app_key), true)) { - // Start the service which is checking all conditions + // Start the worker 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. - CheckForNewAppVersion.startNewVersionCheckService(app); + NewVersionWorker.enqueueNewVersionCheckingWork(app); } } diff --git a/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java b/app/src/main/java/org/schabi/newpipe/NewVersionWorker.java similarity index 87% rename from app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java rename to app/src/main/java/org/schabi/newpipe/NewVersionWorker.java index 4ed4d1b1b..00405a899 100644 --- a/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java +++ b/app/src/main/java/org/schabi/newpipe/NewVersionWorker.java @@ -8,11 +8,14 @@ import android.net.Uri; import android.util.Log; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.app.JobIntentService; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; import androidx.preference.PreferenceManager; +import androidx.work.OneTimeWorkRequest; +import androidx.work.WorkManager; +import androidx.work.WorkRequest; +import androidx.work.Worker; +import androidx.work.WorkerParameters; import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonParser; @@ -24,12 +27,16 @@ import org.schabi.newpipe.util.ReleaseVersionUtil; import java.io.IOException; -public final class CheckForNewAppVersion extends JobIntentService { +public final class NewVersionWorker extends Worker { private static final boolean DEBUG = MainActivity.DEBUG; - private static final String TAG = CheckForNewAppVersion.class.getSimpleName(); + private static final String TAG = NewVersionWorker.class.getSimpleName(); private static final String NEWPIPE_API_URL = "https://newpipe.net/api/data.json"; - private static final int JOB_ID = -17000; + + public NewVersionWorker(@NonNull final Context context, + @NonNull final WorkerParameters workerParams) { + super(context, workerParams); + } /** * Method to compare the current and latest available app version. @@ -130,7 +137,7 @@ public final class CheckForNewAppVersion extends JobIntentService { } /** - * Start a new service which + * Start a new worker 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 @@ -144,22 +151,25 @@ public final class CheckForNewAppVersion extends JobIntentService { *
  • 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 Context context) { - enqueueWork(context, CheckForNewAppVersion.class, JOB_ID, - new Intent(context, CheckForNewAppVersion.class)); + public static void enqueueNewVersionCheckingWork(final Context context) { + final WorkRequest workRequest = + new OneTimeWorkRequest.Builder(NewVersionWorker.class).build(); + WorkManager.getInstance(context).enqueue(workRequest); } + @NonNull @Override - protected void onHandleWork(@Nullable final Intent intent) { + public Result doWork() { try { checkNewVersion(); } catch (final IOException e) { Log.w(TAG, "Could not fetch NewPipe API: probably network problem", e); + return Result.failure(); } catch (final ReCaptchaException e) { Log.e(TAG, "ReCaptchaException should never happen here.", e); + return Result.failure(); } - + return Result.success(); } } diff --git a/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java index 46582cb24..1043e88c2 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java @@ -1,12 +1,11 @@ package org.schabi.newpipe.settings; -import static org.schabi.newpipe.CheckForNewAppVersion.startNewVersionCheckService; - import android.os.Bundle; import android.widget.Toast; import androidx.preference.Preference; +import org.schabi.newpipe.NewVersionWorker; import org.schabi.newpipe.R; public class UpdateSettingsFragment extends BasePreferenceFragment { @@ -33,7 +32,7 @@ public class UpdateSettingsFragment extends BasePreferenceFragment { // Reset the expire time. This is necessary to check for an update immediately. defaultPreferences.edit() .putLong(getString(R.string.update_expiry_key), 0).apply(); - startNewVersionCheckService(getContext()); + NewVersionWorker.enqueueNewVersionCheckingWork(getContext()); } @Override