diff options
author | Trumeet <liangyuteng12345@gmail.com> | 2018-11-26 16:09:42 -0800 |
---|---|---|
committer | Trumeet <liangyuteng12345@gmail.com> | 2018-11-26 16:09:42 -0800 |
commit | c94ac86ad18e8d678cd4d549c0f4db209c989bb0 (patch) | |
tree | 16c50f3217229c12eed5c37e3186a9ec4fc28dff /app/src/main/java/eu/chainfire/librootjava/IPCBroadcastHelper.java | |
parent | a8f7cffa1329dd9d200dea2e70028b54507c58c3 (diff) | |
download | SysUIController-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.java | 42 |
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; + } +} |