Use RxJava instead of AsyncTask to handle updates.
This commit is contained in:
parent
c0a699e21e
commit
eab5ef59b9
@ -13,6 +13,10 @@ import android.os.Build;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
|
|
||||||
import org.apache.commons.net.util.SubnetUtils;
|
import org.apache.commons.net.util.SubnetUtils;
|
||||||
import org.fdroid.fdroid.BuildConfig;
|
import org.fdroid.fdroid.BuildConfig;
|
||||||
import org.fdroid.fdroid.FDroidApp;
|
import org.fdroid.fdroid.FDroidApp;
|
||||||
@ -31,10 +35,8 @@ import java.security.cert.Certificate;
|
|||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
|
||||||
import cc.mvdan.accesspoint.WifiApControl;
|
import cc.mvdan.accesspoint.WifiApControl;
|
||||||
|
import io.reactivex.rxjava3.disposables.CompositeDisposable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle state changes to the device's wifi, storing the required bits.
|
* Handle state changes to the device's wifi, storing the required bits.
|
||||||
@ -70,6 +72,8 @@ public class WifiStateChangeService extends IntentService {
|
|||||||
private static int previousWifiState = Integer.MIN_VALUE;
|
private static int previousWifiState = Integer.MIN_VALUE;
|
||||||
private static int wifiState;
|
private static int wifiState;
|
||||||
|
|
||||||
|
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
|
||||||
|
|
||||||
public WifiStateChangeService() {
|
public WifiStateChangeService() {
|
||||||
super("WifiStateChangeService");
|
super("WifiStateChangeService");
|
||||||
}
|
}
|
||||||
@ -82,6 +86,12 @@ public class WifiStateChangeService extends IntentService {
|
|||||||
context.startService(intent);
|
context.startService(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
compositeDisposable.dispose();
|
||||||
|
super.onDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onHandleIntent(Intent intent) {
|
protected void onHandleIntent(Intent intent) {
|
||||||
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_LOWEST);
|
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_LOWEST);
|
||||||
@ -109,7 +119,7 @@ public class WifiStateChangeService extends IntentService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT < 21 && wifiState == WifiManager.WIFI_STATE_ENABLED) {
|
if (Build.VERSION.SDK_INT < 21 && wifiState == WifiManager.WIFI_STATE_ENABLED) {
|
||||||
UpdateService.scheduleIfStillOnWifi(this);
|
compositeDisposable.add(UpdateService.scheduleIfStillOnWifi(this).subscribe());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,6 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.AsyncTask;
|
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
@ -38,6 +37,12 @@ import android.text.TextUtils;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.core.app.JobIntentService;
|
||||||
|
import androidx.core.app.NotificationCompat;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
|
|
||||||
import org.fdroid.fdroid.data.Apk;
|
import org.fdroid.fdroid.data.Apk;
|
||||||
import org.fdroid.fdroid.data.ApkProvider;
|
import org.fdroid.fdroid.data.ApkProvider;
|
||||||
import org.fdroid.fdroid.data.App;
|
import org.fdroid.fdroid.data.App;
|
||||||
@ -51,15 +56,13 @@ import org.fdroid.fdroid.installer.InstallManagerService;
|
|||||||
import org.fdroid.fdroid.net.BluetoothDownloader;
|
import org.fdroid.fdroid.net.BluetoothDownloader;
|
||||||
import org.fdroid.fdroid.net.ConnectivityMonitorService;
|
import org.fdroid.fdroid.net.ConnectivityMonitorService;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||||
import androidx.core.app.JobIntentService;
|
import io.reactivex.rxjava3.core.Completable;
|
||||||
import androidx.core.app.NotificationCompat;
|
import io.reactivex.rxjava3.schedulers.Schedulers;
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
|
||||||
|
|
||||||
public class UpdateService extends JobIntentService {
|
public class UpdateService extends JobIntentService {
|
||||||
|
|
||||||
@ -215,42 +218,30 @@ public class UpdateService extends JobIntentService {
|
|||||||
* unlimited networks over metered networks for index updates and auto
|
* unlimited networks over metered networks for index updates and auto
|
||||||
* downloads of app updates. Starting with {@code android-21}, this uses
|
* downloads of app updates. Starting with {@code android-21}, this uses
|
||||||
* {@link android.app.job.JobScheduler} instead.
|
* {@link android.app.job.JobScheduler} instead.
|
||||||
|
*
|
||||||
|
* @return a {@link Completable} that schedules the update. If this process is already running,
|
||||||
|
* a {@code Completable} that completes immediately is returned.
|
||||||
*/
|
*/
|
||||||
public static void scheduleIfStillOnWifi(Context context) {
|
@NonNull
|
||||||
|
public static Completable scheduleIfStillOnWifi(Context context) {
|
||||||
if (Build.VERSION.SDK_INT >= 21) {
|
if (Build.VERSION.SDK_INT >= 21) {
|
||||||
throw new IllegalStateException("This should never be used on android-21 or newer!");
|
throw new IllegalStateException("This should never be used on android-21 or newer!");
|
||||||
}
|
}
|
||||||
if (isScheduleIfStillOnWifiRunning || !Preferences.get().isBackgroundDownloadAllowed()) {
|
if (isScheduleIfStillOnWifiRunning || !Preferences.get().isBackgroundDownloadAllowed()) {
|
||||||
return;
|
return Completable.complete();
|
||||||
}
|
}
|
||||||
isScheduleIfStillOnWifiRunning = true;
|
isScheduleIfStillOnWifiRunning = true;
|
||||||
new StillOnWifiAsyncTask(context).execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final class StillOnWifiAsyncTask extends AsyncTask<Void, Void, Void> {
|
|
||||||
|
|
||||||
private final WeakReference<Context> contextWeakReference;
|
|
||||||
|
|
||||||
private StillOnWifiAsyncTask(Context context) {
|
|
||||||
this.contextWeakReference = new WeakReference<>(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Void doInBackground(Void... voids) {
|
|
||||||
Context context = contextWeakReference.get();
|
|
||||||
try {
|
|
||||||
Thread.sleep(120000);
|
|
||||||
if (Preferences.get().isBackgroundDownloadAllowed()) {
|
|
||||||
Utils.debugLog(TAG, "scheduling update because there is good internet");
|
|
||||||
schedule(context);
|
|
||||||
}
|
|
||||||
} catch (Throwable e) { // NOPMD
|
|
||||||
Utils.debugLog(TAG, e.getMessage());
|
|
||||||
}
|
|
||||||
isScheduleIfStillOnWifiRunning = false;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
return Completable.timer(2, TimeUnit.MINUTES)
|
||||||
|
.andThen(Completable.fromAction(() -> {
|
||||||
|
if (Preferences.get().isBackgroundDownloadAllowed()) {
|
||||||
|
Utils.debugLog(TAG, "scheduling update because there is good internet");
|
||||||
|
schedule(context);
|
||||||
|
}
|
||||||
|
isScheduleIfStillOnWifiRunning = false;
|
||||||
|
}))
|
||||||
|
.subscribeOn(Schedulers.computation())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void stopNow(Context context) {
|
public static void stopNow(Context context) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user