[core] Add secret code receiver (#1240)

* [core] Add secret code receiver

*#*#5776733#*#*
This commit is contained in:
Howard Wu 2021-10-08 18:18:34 +08:00 committed by GitHub
parent ec56d45492
commit 614607a878
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 1 deletions

View File

@ -171,7 +171,7 @@ public class LSPManagerService extends ILSPManagerService.Stub {
return getIcon(org.lsposed.manager.R.drawable.ic_extension); return getIcon(org.lsposed.manager.R.drawable.ic_extension);
} }
private static Intent getManagerIntent() { static Intent getManagerIntent() {
try { try {
if (managerIntent == null) { if (managerIntent == null) {
var intent = PackageService.getLaunchIntentForPackage(BuildConfig.MANAGER_INJECTED_PKG_NAME); var intent = PackageService.getLaunchIntentForPackage(BuildConfig.MANAGER_INJECTED_PKG_NAME);

View File

@ -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() { private void registerPackageReceiver() {
try { try {
IntentFilter packageFilter = new IntentFilter(); IntentFilter packageFilter = new IntentFilter();
@ -261,6 +276,30 @@ public class LSPosedService extends ILSPosedService.Stub {
Log.d(TAG, "registered configuration receiver"); 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 @Override
public void dispatchSystemServerContext(IBinder activityThread, IBinder activityToken) { public void dispatchSystemServerContext(IBinder activityThread, IBinder activityToken) {
Log.d(TAG, "received system context"); Log.d(TAG, "received system context");
@ -268,6 +307,7 @@ public class LSPosedService extends ILSPosedService.Stub {
registerPackageReceiver(); registerPackageReceiver();
registerUnlockReceiver(); registerUnlockReceiver();
registerConfigurationReceiver(); registerConfigurationReceiver();
registerSecretCodeReceiver();
} }
@Override @Override