Browse Source

Add WorkManager code in an attempt to persist i2pd's instance

pull/49/head
nonlin-lin-chaos-order-etc-etal 1 year ago
parent
commit
4a89894430
  1. 2
      app/build.gradle
  2. 37
      app/src/main/java/org/purplei2p/i2pd/I2PDActivity.java

2
app/build.gradle

@ -5,6 +5,7 @@ plugins { @@ -5,6 +5,7 @@ plugins {
dependencies {
implementation 'androidx.core:core:1.9.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'androidx.work:work-runtime:2.0.1-rc01'
}
android {
@ -14,6 +15,7 @@ android { @@ -14,6 +15,7 @@ android {
applicationId "org.purplei2p.i2pd"
targetSdkVersion 33
minSdkVersion 16
compileSdkVersion 33
versionCode 2450100
versionName "2.45.1"
archivesBaseName += "-$versionName"

37
app/src/main/java/org/purplei2p/i2pd/I2PDActivity.java

@ -35,6 +35,9 @@ import android.widget.Toast; @@ -35,6 +35,9 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.work.*;
import java.util.UUID;
import com.google.common.util.concurrent.ListenableFuture;
import static android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS;
@ -50,9 +53,26 @@ public class I2PDActivity extends Activity { @@ -50,9 +53,26 @@ public class I2PDActivity extends Activity {
private CheckBox BOBState;
private CheckBox SAMState;
private CheckBox I2CPState;
private UUID workRequestId;
private static volatile DaemonWrapper daemon;
private static class I2PDWorker extends ListenableWorker {
public I2PDWorker(Context appContext, WorkerParameters workerParams) {
super(appContext, workerParams);
}
public ListenableFuture<ListenableWorker.Result> startWork() {
try {
for (;;) {
Thread.sleep(1000);
}
} catch (InterruptedException ex) {
Log.e(TAG, "", ex);
}
return null;
}
}
private final DaemonWrapper.StateUpdateListener daemonStateUpdatedListener = new DaemonWrapper.StateUpdateListener() {
@Override
@ -105,6 +125,8 @@ public class I2PDActivity extends Activity { @@ -105,6 +125,8 @@ public class I2PDActivity extends Activity {
long remSec = remainingSeconds - remainingMinutes * 60;
return remainingMinutes + ":" + (remSec / 10) + remSec % 10;
}
private static final String I2PD_WORK_NAME = "i2pd";
@Override
public void onCreate(Bundle savedInstanceState) {
@ -152,6 +174,11 @@ public class I2PDActivity extends Activity { @@ -152,6 +174,11 @@ public class I2PDActivity extends Activity {
}
rescheduleGraceStop(gracefulQuitTimer, gracefulStopAtMillis);
}
WorkManager workManager = WorkManager.getInstance();
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(I2PDWorker.class).build();
workRequestId = request.getId();
workManager.beginUniqueWork(I2PD_WORK_NAME, ExistingWorkPolicy.REPLACE, request);
openBatteryOptimizationDialogIfNeeded();
}
@ -494,6 +521,14 @@ public class I2PDActivity extends Activity { @@ -494,6 +521,14 @@ public class I2PDActivity extends Activity {
}
private void quit() {
try {
if (workRequestId != null) {
WorkManager workManager = WorkManager.getInstance();
workManager.cancelWorkById(workRequestId);
}
} catch (Throwable tr) {
Log.e(TAG, "", tr);
}
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
finishAndRemoveTask();

Loading…
Cancel
Save