set up WorkManager on demand to avoid slowing down starts

This also provides a convenient place to configure the debug logging.
This commit is contained in:
Hans-Christoph Steiner 2021-01-06 16:15:43 +01:00
parent 2975d4c09f
commit 4662c0bdaa
3 changed files with 38 additions and 14 deletions

View File

@ -4,13 +4,11 @@
-keep class org.fdroid.fdroid.** {*;} -keep class org.fdroid.fdroid.** {*;}
-dontskipnonpubliclibraryclassmembers -dontskipnonpubliclibraryclassmembers
-dontwarn android.test.** -dontwarn android.test.**
-dontwarn com.android.support.test.**
-dontwarn javax.naming.** -dontwarn javax.naming.**
-dontwarn org.slf4j.** -dontwarn org.slf4j.**
-dontnote org.apache.http.** -dontnote org.apache.http.**
-dontnote android.net.http.** -dontnote android.net.http.**
-dontnote android.support.**
-dontnote **ILicensingService -dontnote **ILicensingService
# Needed for espresso https://stackoverflow.com/a/21706087 # Needed for espresso https://stackoverflow.com/a/21706087
@ -49,3 +47,8 @@ public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; }
-keep public class your.class.** { -keep public class your.class.** {
*; *;
} }
# This is necessary so that RemoteWorkManager can be initialized (also marked with @Keep)
-keep class androidx.work.multiprocess.RemoteWorkManagerClient {
public <init>(...);
}

View File

@ -266,8 +266,11 @@
android:name=".AddRepoIntentService" android:name=".AddRepoIntentService"
android:exported="false"/> android:exported="false"/>
<provider
<!-- Warning: Please add all new services to HidingManager --> android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
android:exported="false"
tools:node="remove" />
<activity <activity
android:name=".views.main.MainActivity" android:name=".views.main.MainActivity"

View File

@ -46,11 +46,10 @@ import android.util.Log;
import android.view.Display; import android.view.Display;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.collection.LongSparseArray; import androidx.collection.LongSparseArray;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.nostra13.universalimageloader.cache.disc.DiskCache; import com.nostra13.universalimageloader.cache.disc.DiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache; import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache;
@ -58,7 +57,8 @@ import com.nostra13.universalimageloader.core.DefaultConfigurationFactory;
import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.process.BitmapProcessor; import com.nostra13.universalimageloader.core.process.BitmapProcessor;
import info.guardianproject.netcipher.NetCipher;
import info.guardianproject.netcipher.proxy.OrbotHelper;
import org.acra.ACRA; import org.acra.ACRA;
import org.acra.ReportField; import org.acra.ReportField;
import org.acra.ReportingInteractionMode; import org.acra.ReportingInteractionMode;
@ -82,17 +82,13 @@ import org.fdroid.fdroid.net.ImageLoaderForUIL;
import org.fdroid.fdroid.panic.HidingManager; import org.fdroid.fdroid.panic.HidingManager;
import org.fdroid.fdroid.work.CleanCacheWorker; import org.fdroid.fdroid.work.CleanCacheWorker;
import javax.microedition.khronos.opengles.GL10;
import java.io.IOException; import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.security.Security; import java.security.Security;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.microedition.khronos.opengles.GL10;
import info.guardianproject.netcipher.NetCipher;
import info.guardianproject.netcipher.proxy.OrbotHelper;
@ReportsCrashes(mailTo = BuildConfig.ACRA_REPORT_EMAIL, @ReportsCrashes(mailTo = BuildConfig.ACRA_REPORT_EMAIL,
mode = ReportingInteractionMode.DIALOG, mode = ReportingInteractionMode.DIALOG,
reportDialogClass = org.fdroid.fdroid.acra.CrashReportActivity.class, reportDialogClass = org.fdroid.fdroid.acra.CrashReportActivity.class,
@ -113,7 +109,7 @@ import info.guardianproject.netcipher.proxy.OrbotHelper;
ReportField.STACK_TRACE, ReportField.STACK_TRACE,
} }
) )
public class FDroidApp extends Application { public class FDroidApp extends Application implements androidx.work.Configuration.Provider {
private static final String TAG = "FDroidApp"; private static final String TAG = "FDroidApp";
private static final String ACRA_ID = BuildConfig.APPLICATION_ID + ":acra"; private static final String ACRA_ID = BuildConfig.APPLICATION_ID + ":acra";
@ -654,7 +650,7 @@ public class FDroidApp extends Application {
/** /**
* Put proxy settings (or Tor settings) globally into effect based on whats configured in Preferences. * Put proxy settings (or Tor settings) globally into effect based on whats configured in Preferences.
* * <p>
* Must be called on App startup and after every proxy configuration change. * Must be called on App startup and after every proxy configuration change.
*/ */
public static void configureProxy(Preferences preferences) { public static void configureProxy(Preferences preferences) {
@ -676,4 +672,26 @@ public class FDroidApp extends Application {
public static Context getInstance() { public static Context getInstance() {
return instance; return instance;
} }
/**
* Set up WorkManager on demand to avoid slowing down starts.
*
* @see CleanCacheWorker
* @see org.fdroid.fdroid.work.PopularityContestWorker
* @see org.fdroid.fdroid.work.UpdateWorker
* @see <a href="https://developer.android.com/codelabs/android-adv-workmanager#3">example</a>
*/
@NonNull
@Override
public androidx.work.Configuration getWorkManagerConfiguration() {
if (BuildConfig.DEBUG) {
return new androidx.work.Configuration.Builder()
.setMinimumLoggingLevel(Log.DEBUG)
.build();
} else {
return new androidx.work.Configuration.Builder()
.setMinimumLoggingLevel(Log.ERROR)
.build();
}
}
} }