From 614607a8783465c1b2e05d71342f90bb5899a26b Mon Sep 17 00:00:00 2001 From: Howard Wu <40033067+Howard20181@users.noreply.github.com> Date: Fri, 8 Oct 2021 18:18:34 +0800 Subject: [PATCH] [core] Add secret code receiver (#1240) * [core] Add secret code receiver *#*#5776733#*#* --- .../lspd/service/LSPManagerService.java | 2 +- .../lsposed/lspd/service/LSPosedService.java | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java b/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java index f49a0afb..40cbd4ad 100644 --- a/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java +++ b/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java @@ -171,7 +171,7 @@ public class LSPManagerService extends ILSPManagerService.Stub { return getIcon(org.lsposed.manager.R.drawable.ic_extension); } - private static Intent getManagerIntent() { + static Intent getManagerIntent() { try { if (managerIntent == null) { var intent = PackageService.getLaunchIntentForPackage(BuildConfig.MANAGER_INJECTED_PKG_NAME); diff --git a/core/src/main/java/org/lsposed/lspd/service/LSPosedService.java b/core/src/main/java/org/lsposed/lspd/service/LSPosedService.java index b973cbe9..e4015aca 100644 --- a/core/src/main/java/org/lsposed/lspd/service/LSPosedService.java +++ b/core/src/main/java/org/lsposed/lspd/service/LSPosedService.java @@ -186,6 +186,21 @@ public class LSPosedService extends ILSPosedService.Stub { } } + synchronized public void dispatchSecretCodeReceive() { + Intent intent = LSPManagerService.getManagerIntent(); + try { + var userInfo = ActivityManagerService.getCurrentUser(); + if (userInfo != null) { + var userId = userInfo.id; + if (userId == 0) + ActivityManagerService.startActivityAsUserWithFeature("android", null, + intent, intent.getType(), null, null, 0, 0, null, null, userId); + } + } catch (Throwable e) { + Log.e(TAG, "dispatch secret code received", e); + } + } + private void registerPackageReceiver() { try { IntentFilter packageFilter = new IntentFilter(); @@ -261,6 +276,30 @@ public class LSPosedService extends ILSPosedService.Stub { Log.d(TAG, "registered configuration receiver"); } + private void registerSecretCodeReceiver() { + try { + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction("android.provider.Telephony.SECRET_CODE"); + intentFilter.addDataAuthority("5776733", null); + intentFilter.addDataScheme("android_secret_code"); + + ActivityManagerService.registerReceiver("android", null, new IIntentReceiver.Stub() { + @Override + public void performReceive(Intent intent, int resultCode, String data, Bundle extras, boolean ordered, boolean sticky, int sendingUser) { + new Thread(() -> dispatchSecretCodeReceive()).start(); + try { + ActivityManagerService.finishReceiver(this, resultCode, data, extras, false, intent.getFlags()); + } catch (Throwable e) { + Log.e(TAG, "finish receiver", e); + } + } + }, intentFilter, null, 0, 0); + } catch (Throwable e) { + Log.e(TAG, "register secret code receiver", e); + } + Log.d(TAG, "registered secret code receiver"); + } + @Override public void dispatchSystemServerContext(IBinder activityThread, IBinder activityToken) { Log.d(TAG, "received system context"); @@ -268,6 +307,7 @@ public class LSPosedService extends ILSPosedService.Stub { registerPackageReceiver(); registerUnlockReceiver(); registerConfigurationReceiver(); + registerSecretCodeReceiver(); } @Override