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