aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/moe/yuuta/sysuicontroller/auto_start/AutoStartWorker.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/moe/yuuta/sysuicontroller/auto_start/AutoStartWorker.java')
-rw-r--r--app/src/main/java/moe/yuuta/sysuicontroller/auto_start/AutoStartWorker.java76
1 files changed, 76 insertions, 0 deletions
diff --git a/app/src/main/java/moe/yuuta/sysuicontroller/auto_start/AutoStartWorker.java b/app/src/main/java/moe/yuuta/sysuicontroller/auto_start/AutoStartWorker.java
new file mode 100644
index 0000000..650eeb3
--- /dev/null
+++ b/app/src/main/java/moe/yuuta/sysuicontroller/auto_start/AutoStartWorker.java
@@ -0,0 +1,76 @@
+package moe.yuuta.sysuicontroller.auto_start;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import androidx.annotation.NonNull;
+import androidx.work.Worker;
+import androidx.work.WorkerParameters;
+import eu.chainfire.librootjava.RootIPCReceiver;
+import eu.chainfire.librootjavadaemon.RootDaemon;
+import eu.chainfire.libsuperuser.Shell;
+import moe.yuuta.sysuicontroller.BuildConfig;
+import moe.yuuta.sysuicontroller.IStatusController;
+import moe.yuuta.sysuicontroller.core.ControllerService;
+
+public class AutoStartWorker extends Worker {
+ private static final String TAG = AutoStartWorker.class.getSimpleName();
+
+ public AutoStartWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
+ super(context, workerParams);
+ }
+
+ private CountDownLatch countDownLatch;
+
+ private RootIPCReceiver<IStatusController> mReceiver = new RootIPCReceiver<IStatusController>(null, ControllerService.CODE_SERVICE) {
+ @Override
+ public void onConnect(IStatusController ipc) {
+ try {
+ SharedPreferences preferences = getApplicationContext().getSharedPreferences("flags", Context.MODE_PRIVATE);
+ ipc.disable(preferences.getInt("disable_flags", ipc.getDisableFlags()));
+ ipc.disable2(preferences.getInt("disable2_flags", ipc.getDisable2Flags()));
+ Log.i(TAG, "Settings restored");
+ } catch (RemoteException e) {
+ Log.e(TAG, "Unable to restore settings", e);
+ }
+ countDownLatch.countDown();
+ }
+
+ @Override
+ public void onDisconnect(IStatusController ipc) {
+
+ }
+ };
+
+ @NonNull
+ @Override
+ public Result doWork() {
+ Log.i(TAG, "Start auto starting");
+ countDownLatch = new CountDownLatch(1);
+ mReceiver.setContext(getApplicationContext());
+ List<String> commands = RootDaemon.getLaunchScript(getApplicationContext(),
+ ControllerService.class,
+ null,
+ null,
+ null, BuildConfig.APPLICATION_ID + ":daemon");
+ if (BuildConfig.DEBUG) Log.d(TAG, commands.toString());
+ Shell.Interactive shell = new Shell.Builder().useSU().open();
+ shell.addCommand(commands);
+ try {
+ countDownLatch.await(10, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ Log.e(TAG, "await()", e);
+ }
+ Log.i(TAG, "Done, releasing receiver");
+ mReceiver.release();
+ shell.kill(); // Kill the process, will make it idle and it won't kill the forked process
+ shell.close();
+ return Result.SUCCESS;
+ }
+}