aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/eu/chainfire/librootjava/IPCBroadcastHelper.java
diff options
context:
space:
mode:
authorTrumeet <liangyuteng12345@gmail.com>2018-11-26 16:09:42 -0800
committerTrumeet <liangyuteng12345@gmail.com>2018-11-26 16:09:42 -0800
commitc94ac86ad18e8d678cd4d549c0f4db209c989bb0 (patch)
tree16c50f3217229c12eed5c37e3186a9ec4fc28dff /app/src/main/java/eu/chainfire/librootjava/IPCBroadcastHelper.java
parenta8f7cffa1329dd9d200dea2e70028b54507c58c3 (diff)
downloadSysUIController-c94ac86ad18e8d678cd4d549c0f4db209c989bb0.tar
SysUIController-c94ac86ad18e8d678cd4d549c0f4db209c989bb0.tar.gz
SysUIController-c94ac86ad18e8d678cd4d549c0f4db209c989bb0.tar.bz2
SysUIController-c94ac86ad18e8d678cd4d549c0f4db209c989bb0.zip
feat(server): use sticky broadcast to prevent starting again when UI starts
Diffstat (limited to 'app/src/main/java/eu/chainfire/librootjava/IPCBroadcastHelper.java')
-rw-r--r--app/src/main/java/eu/chainfire/librootjava/IPCBroadcastHelper.java42
1 files changed, 42 insertions, 0 deletions
diff --git a/app/src/main/java/eu/chainfire/librootjava/IPCBroadcastHelper.java b/app/src/main/java/eu/chainfire/librootjava/IPCBroadcastHelper.java
new file mode 100644
index 0000000..0b67ef0
--- /dev/null
+++ b/app/src/main/java/eu/chainfire/librootjava/IPCBroadcastHelper.java
@@ -0,0 +1,42 @@
+package eu.chainfire.librootjava;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.IBinder;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import androidx.annotation.NonNull;
+
+/**
+ * A helper to create custom broadcasts
+ * Should be synced with {@link eu.chainfire.librootjava.RootIPC}.
+ */
+public class IPCBroadcastHelper {
+ public static Intent buildStickyBroadcastIntent (@NonNull RootIPC rootIPC) throws NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+ // RootIPC.java part
+ Field fIBinder = rootIPC.getClass().getDeclaredField("binder");
+ Field fCode = rootIPC.getClass().getDeclaredField("code");
+ Field fPackageName = rootIPC.getClass().getDeclaredField("packageName");
+ fIBinder.setAccessible(true);
+ fCode.setAccessible(true);
+ fPackageName.setAccessible(true);
+ Intent intent = new Intent();
+ intent.setPackage((String) fPackageName.get(rootIPC));
+ intent.setAction(RootIPCReceiver.BROADCAST_ACTION);
+
+ Bundle bundle = new Bundle();
+ bundle.putBinder(RootIPCReceiver.BROADCAST_BINDER, (IBinder) fIBinder.get(rootIPC));
+ bundle.putInt(RootIPCReceiver.BROADCAST_CODE, fCode.getInt(rootIPC));
+ intent.putExtra(RootIPCReceiver.BROADCAST_EXTRA, bundle);
+
+ // Reflection.java part
+ Method mGetFlagReceiverFromShell = Reflection.class.getDeclaredMethod("getFlagReceiverFromShell");
+ mGetFlagReceiverFromShell.setAccessible(true);
+ intent.setFlags((int) mGetFlagReceiverFromShell.invoke(null));
+
+ return intent;
+ }
+}