Merge "Improve logging of embed failure" into tm-qpr-dev

This commit is contained in:
Charles Chen
2022-06-01 15:46:42 +00:00
committed by Android (Google) Code Review
2 changed files with 36 additions and 9 deletions

View File

@@ -106,6 +106,24 @@ public class ActivityInfo extends ComponentInfo implements Parcelable {
public @interface LaunchMode {
}
/** @hide */
public static String launchModeToString(@LaunchMode int launchMode) {
switch(launchMode) {
case LAUNCH_MULTIPLE:
return "LAUNCH_MULTIPLE";
case LAUNCH_SINGLE_TOP:
return "LAUNCH_SINGLE_TOP";
case LAUNCH_SINGLE_TASK:
return "LAUNCH_SINGLE_TASK";
case LAUNCH_SINGLE_INSTANCE:
return "LAUNCH_SINGLE_INSTANCE";
case LAUNCH_SINGLE_INSTANCE_PER_TASK:
return "LAUNCH_SINGLE_INSTANCE_PER_TASK";
default:
return "unknown=" + launchMode;
}
}
/**
* The launch mode style requested by the activity. From the
* {@link android.R.attr#launchMode} attribute.
@@ -1585,7 +1603,7 @@ public class ActivityInfo extends ComponentInfo implements Parcelable {
+ " persistableMode=" + persistableModeToString());
}
if (launchMode != 0 || flags != 0 || privateFlags != 0 || theme != 0) {
pw.println(prefix + "launchMode=" + launchMode
pw.println(prefix + "launchMode=" + launchModeToString(launchMode)
+ " flags=0x" + Integer.toHexString(flags)
+ " privateFlags=0x" + Integer.toHexString(privateFlags)
+ " theme=0x" + Integer.toHexString(theme));

View File

@@ -51,6 +51,7 @@ import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_INSTANCE;
import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_INSTANCE_PER_TASK;
import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TASK;
import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TOP;
import static android.content.pm.ActivityInfo.launchModeToString;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.Process.INVALID_UID;
import static android.view.Display.DEFAULT_DISPLAY;
@@ -2071,8 +2072,20 @@ class ActivityStarter {
}
if (mInTaskFragment != null && !canEmbedActivity(mInTaskFragment, r, newTask, targetTask)) {
Slog.e(TAG, "Permission denied: Cannot embed " + r + " to " + mInTaskFragment.getTask()
+ " targetTask= " + targetTask);
final StringBuilder errorMsg = new StringBuilder("Permission denied: Cannot embed " + r
+ " to " + mInTaskFragment.getTask() + ". newTask=" + newTask + ", targetTask= "
+ targetTask);
if (newTask && isLaunchModeOneOf(LAUNCH_SINGLE_INSTANCE,
LAUNCH_SINGLE_INSTANCE_PER_TASK, LAUNCH_SINGLE_TASK)) {
errorMsg.append("\nActivity tries to launch on a new task because the launch mode"
+ " is " + launchModeToString(mLaunchMode));
} else if (newTask && (mLaunchFlags & (FLAG_ACTIVITY_NEW_DOCUMENT
| FLAG_ACTIVITY_NEW_TASK)) != 0) {
errorMsg.append("\nActivity tries to launch on a new task because the launch flags"
+ " contains FLAG_ACTIVITY_NEW_DOCUMENT or FLAG_ACTIVITY_NEW_TASK. "
+ "mLaunchFlag=" + mLaunchFlags);
}
Slog.e(TAG, errorMsg.toString());
return START_PERMISSION_DENIED;
}
@@ -3301,12 +3314,8 @@ class ActivityStarter {
pw.println(mOptions);
}
pw.print(prefix);
pw.print("mLaunchSingleTop=");
pw.print(LAUNCH_SINGLE_TOP == mLaunchMode);
pw.print(" mLaunchSingleInstance=");
pw.print(LAUNCH_SINGLE_INSTANCE == mLaunchMode);
pw.print(" mLaunchSingleTask=");
pw.println(LAUNCH_SINGLE_TASK == mLaunchMode);
pw.print("mLaunchMode=");
pw.print(launchModeToString(mLaunchMode));
pw.print(prefix);
pw.print("mLaunchFlags=0x");
pw.print(Integer.toHexString(mLaunchFlags));