Skip to content

Commit

Permalink
Fix startActivity() for supporting API < 30
Browse files Browse the repository at this point in the history
Call the older startActivityAsUser() instead of
startActivityAsUserWithFeature() so that it also works on older Android
versions.

Fixes #4704 <#4704>
PR #4473 <#4473>
  • Loading branch information
rom1v committed Feb 29, 2024
1 parent f557188 commit 54dede3
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ private static void startWorkaroundAndroid11() {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setComponent(new ComponentName(FakeContext.PACKAGE_NAME, "com.android.shell.HeapDumpActivity"));
ServiceManager.getActivityManager().startActivityAsUserWithFeature(intent);
ServiceManager.getActivityManager().startActivity(intent);
}

private static void stopWorkaroundAndroid11() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public final class ActivityManager {
private Method getContentProviderExternalMethod;
private boolean getContentProviderExternalMethodNewVersion = true;
private Method removeContentProviderExternalMethod;
private Method startActivityAsUserWithFeatureMethod;
private Method startActivityAsUserMethod;
private Method forceStopPackageMethod;

static ActivityManager create() {
Expand Down Expand Up @@ -107,26 +107,25 @@ public ContentProvider createSettingsProvider() {
return getContentProviderExternal("settings", new Binder());
}

private Method getStartActivityAsUserWithFeatureMethod() throws NoSuchMethodException, ClassNotFoundException {
if (startActivityAsUserWithFeatureMethod == null) {
private Method getStartActivityAsUserMethod() throws NoSuchMethodException, ClassNotFoundException {
if (startActivityAsUserMethod == null) {
Class<?> iApplicationThreadClass = Class.forName("android.app.IApplicationThread");
Class<?> profilerInfo = Class.forName("android.app.ProfilerInfo");
startActivityAsUserWithFeatureMethod = manager.getClass()
.getMethod("startActivityAsUserWithFeature", iApplicationThreadClass, String.class, String.class, Intent.class, String.class,
IBinder.class, String.class, int.class, int.class, profilerInfo, Bundle.class, int.class);
startActivityAsUserMethod = manager.getClass()
.getMethod("startActivityAsUser", iApplicationThreadClass, String.class, Intent.class, String.class, IBinder.class, String.class,
int.class, int.class, profilerInfo, Bundle.class, int.class);
}
return startActivityAsUserWithFeatureMethod;
return startActivityAsUserMethod;
}

@SuppressWarnings("ConstantConditions")
public int startActivityAsUserWithFeature(Intent intent) {
public int startActivity(Intent intent) {
try {
Method method = getStartActivityAsUserWithFeatureMethod();
Method method = getStartActivityAsUserMethod();
return (int) method.invoke(
/* this */ manager,
/* caller */ null,
/* callingPackage */ FakeContext.PACKAGE_NAME,
/* callingFeatureId */ null,
/* intent */ intent,
/* resolvedType */ null,
/* resultTo */ null,
Expand Down

0 comments on commit 54dede3

Please sign in to comment.