From aebcc1edd67e18e835fa3155700a2e3364cbff0f Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 25 Jun 2026 13:38:46 +0200 Subject: [PATCH] port 1.x swap startup to 2.x The whole swap setup was designed around having certain tiny background processes start at app start. They are designed to be very low impact, run at lowest priority, and be scheduled via WorkManager. port was in 0f73f9ca0e --- app/src/basic/kotlin/org/fdroid/AppFull.kt | 10 ++++++++++ .../java/org/fdroid/fdroid/nearby/SwapService.java | 5 ----- .../fdroid/nearby/WifiStateChangeService.java | 8 ++------ app/src/full/kotlin/org/fdroid/AppFull.kt | 14 ++++++++++++++ app/src/main/kotlin/org/fdroid/App.kt | 3 +++ 5 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 app/src/basic/kotlin/org/fdroid/AppFull.kt create mode 100644 app/src/full/kotlin/org/fdroid/AppFull.kt diff --git a/app/src/basic/kotlin/org/fdroid/AppFull.kt b/app/src/basic/kotlin/org/fdroid/AppFull.kt new file mode 100644 index 000000000..6005ecf1f --- /dev/null +++ b/app/src/basic/kotlin/org/fdroid/AppFull.kt @@ -0,0 +1,10 @@ +package org.fdroid + +import android.content.Context; + +/** In the basic flavor, this class is just a placeholder. */ +class AppFull { + companion object { + fun onCreate(context: Context) = println() + } +} diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java b/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java index bdb300780..e84c35e98 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java @@ -363,8 +363,6 @@ public class SwapService extends Service { @Nullable private Timer timer; - private final WifiStateChangeReceiver wifiStateChangeReceiver = new WifiStateChangeReceiver(); - public class Binder extends android.os.Binder { public SwapService getService() { return SwapService.this; @@ -375,8 +373,6 @@ public class SwapService extends Service { public void onCreate() { super.onCreate(); startForeground(NOTIFICATION, createNotification()); - WifiStateChangeService.start(this, null); - WifiStateChangeService.registerReceiver(this, wifiStateChangeReceiver); localBroadcastManager = LocalBroadcastManager.getInstance(this); swapPreferences = getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE); @@ -486,7 +482,6 @@ public class SwapService extends Service { @Override public void onDestroy() { Utils.debugLog(TAG, "Destroying service, will disable swapping if required, and unregister listeners."); - WifiStateChangeService.unregisterReceiver(this, wifiStateChangeReceiver); Preferences.get().unregisterLocalRepoHttpsListeners(httpsEnabledListener); localBroadcastManager.unregisterReceiver(onWifiChange); localBroadcastManager.unregisterReceiver(bluetoothPeerFound); diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java b/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java index 39af3b174..a7e756c49 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java @@ -84,18 +84,14 @@ public class WifiStateChangeService extends Worker { super(context, workerParams); } - public static void registerReceiver(Context context, WifiStateChangeReceiver wifiStateChangeReceiver) { + public static void registerReceiver(Context context) { ContextCompat.registerReceiver( context, - wifiStateChangeReceiver, + new WifiStateChangeReceiver(), new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION), ContextCompat.RECEIVER_NOT_EXPORTED); } - public static void unregisterReceiver(Context context, WifiStateChangeReceiver wifiStateChangeReceiver) { - context.unregisterReceiver(wifiStateChangeReceiver); - } - public static void start(Context context, @Nullable Intent intent) { int networkInfoStateInt = NETWORK_INFO_STATE_NOT_SET; if (intent != null) { diff --git a/app/src/full/kotlin/org/fdroid/AppFull.kt b/app/src/full/kotlin/org/fdroid/AppFull.kt new file mode 100644 index 000000000..eee3edc30 --- /dev/null +++ b/app/src/full/kotlin/org/fdroid/AppFull.kt @@ -0,0 +1,14 @@ +package org.fdroid + +import android.content.Context; +import org.fdroid.fdroid.nearby.WifiStateChangeService + +/** Wrapper class to isolate things only needed in the full flavor. */ +class AppFull { + companion object { + fun onCreate(context: Context) { + WifiStateChangeService.registerReceiver(context) + WifiStateChangeService.start(context, null) + } + } +} diff --git a/app/src/main/kotlin/org/fdroid/App.kt b/app/src/main/kotlin/org/fdroid/App.kt index b0bac13d0..c76248b76 100644 --- a/app/src/main/kotlin/org/fdroid/App.kt +++ b/app/src/main/kotlin/org/fdroid/App.kt @@ -26,6 +26,7 @@ import org.acra.config.dialog import org.acra.config.mailSender import org.acra.data.StringFormat.JSON import org.acra.ktx.initAcra +import org.fdroid.AppFull import org.fdroid.BuildConfig.APPLICATION_ID import org.fdroid.BuildConfig.VERSION_NAME import org.fdroid.download.DownloadRequest @@ -106,6 +107,8 @@ class App : Application(), Configuration.Provider, SingletonImageLoader.Factory RepoUpdateWorker.scheduleOrCancel(applicationContext, settingsManager.repoUpdates) AppUpdateWorker.scheduleOrCancel(applicationContext, settingsManager.autoUpdateApps) + + AppFull.onCreate(applicationContext) } private fun isAcraProces(): Boolean {