diff --git a/app/src/full/java/a/w.java b/app/src/full/java/a/w.java index d144ed884..b6a107c43 100644 --- a/app/src/full/java/a/w.java +++ b/app/src/full/java/a/w.java @@ -10,7 +10,7 @@ import androidx.annotation.NonNull; import androidx.work.Worker; import androidx.work.WorkerParameters; -public class w extends Worker { +public abstract class w extends Worker { /* Wrapper class to workaround Proguard -keep class * extends Worker */ @@ -22,6 +22,7 @@ public class w extends Worker { try { base = ((Class) ((ParameterizedType) getClass().getGenericSuperclass()) .getActualTypeArguments()[0]).newInstance(); + base.setActualWorker(this); } catch (Exception ignored) {} } @@ -32,4 +33,10 @@ public class w extends Worker { return Result.failure(); return base.doWork(); } + + @Override + public void onStopped() { + if (base != null) + base.onStopped(); + } } diff --git a/app/src/full/java/com/topjohnwu/magisk/services/DelegateWorker.java b/app/src/full/java/com/topjohnwu/magisk/services/DelegateWorker.java index 4637a372e..f0b2fc618 100644 --- a/app/src/full/java/com/topjohnwu/magisk/services/DelegateWorker.java +++ b/app/src/full/java/com/topjohnwu/magisk/services/DelegateWorker.java @@ -1,9 +1,88 @@ package com.topjohnwu.magisk.services; +import android.content.Context; +import android.net.Network; +import android.net.Uri; + +import com.google.common.util.concurrent.ListenableFuture; + +import java.util.List; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.Executor; + +import androidx.annotation.MainThread; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; +import androidx.annotation.RestrictTo; +import androidx.work.Data; import androidx.work.ListenableWorker; +import androidx.work.WorkerFactory; +import androidx.work.impl.utils.taskexecutor.TaskExecutor; public abstract class DelegateWorker { + + private ListenableWorker worker; + @NonNull public abstract ListenableWorker.Result doWork(); + + public void onStopped() {} + + public void setActualWorker(ListenableWorker w) { + worker = w; + } + + @NonNull + public Context getApplicationContext() { + return worker.getApplicationContext(); + } + + @NonNull + public UUID getId() { + return worker.getId(); + } + + @NonNull + public Data getInputData() { + return worker.getInputData(); + } + + @NonNull + public Set getTags() { + return worker.getTags(); + } + + @NonNull + @RequiresApi(24) + public List getTriggeredContentUris() { + return worker.getTriggeredContentUris(); + } + + @NonNull + @RequiresApi(24) + public List getTriggeredContentAuthorities() { + return worker.getTriggeredContentAuthorities(); + } + + @Nullable + @RequiresApi(28) + public Network getNetwork() { + return worker.getNetwork(); + } + + public int getRunAttemptCount() { + return worker.getRunAttemptCount(); + } + + @NonNull + @MainThread + public ListenableFuture startWork() { + return worker.startWork(); + } + + public boolean isStopped() { + return worker.isStopped(); + } }