Fix issue with force resizing activity when app level doesn't want to
Don't force resize activity whose manifest attribute has resizeableActivity set to false at the application tag level. Fixes: 36704475 Test: Launch an app that disables resizeableActivity at the app level in multi-window mode. Change-Id: I73137175290355266a4d3ecc469e7a39d73dbc62
This commit is contained in:
@@ -523,12 +523,21 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
public static final int PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER = 1 << 9;
|
||||
|
||||
/**
|
||||
* When set, the application explicitly requested that its activities by resizeable by default.
|
||||
* When set, the application explicitly requested that its activities be resizeable by default.
|
||||
* @see android.R.styleable#AndroidManifestActivity_resizeableActivity
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_EXPLICITLY_SET = 1 << 10;
|
||||
public static final int PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE = 1 << 10;
|
||||
|
||||
/**
|
||||
* When set, the application explicitly requested that its activities *not* be resizeable by
|
||||
* default.
|
||||
* @see android.R.styleable#AndroidManifestActivity_resizeableActivity
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE = 1 << 11;
|
||||
|
||||
/**
|
||||
* The application isn't requesting explicitly requesting for its activities to be resizeable or
|
||||
@@ -542,7 +551,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION = 1 << 11;
|
||||
public static final int PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION =
|
||||
1 << 12;
|
||||
|
||||
/**
|
||||
* Value for {@link #privateFlags}: {@code true} means the OS should go ahead and
|
||||
@@ -550,14 +560,14 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
* foreground-equivalent run state. Defaults to {@code false} if unspecified.
|
||||
* @hide
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_BACKUP_IN_FOREGROUND = 1 << 12;
|
||||
public static final int PRIVATE_FLAG_BACKUP_IN_FOREGROUND = 1 << 13;
|
||||
|
||||
/**
|
||||
* Value for {@link #privateFlags}: {@code true} means this application
|
||||
* contains a static shared library. Defaults to {@code false} if unspecified.
|
||||
* @hide
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_STATIC_SHARED_LIBRARY = 1 << 13;
|
||||
public static final int PRIVATE_FLAG_STATIC_SHARED_LIBRARY = 1 << 14;
|
||||
|
||||
/**
|
||||
* Value for {@linl #privateFlags}: When set, the application will only have its splits loaded
|
||||
@@ -565,7 +575,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
* {@link Context#createContextForSplit(String)} API.
|
||||
* @hide
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_ISOLATED_SPLIT_LOADING = 1 << 14;
|
||||
public static final int PRIVATE_FLAG_ISOLATED_SPLIT_LOADING = 1 << 15;
|
||||
|
||||
/**
|
||||
* Private/hidden flags. See {@code PRIVATE_FLAG_...} constants.
|
||||
|
||||
@@ -27,8 +27,9 @@ import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VER
|
||||
import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
|
||||
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
|
||||
import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED;
|
||||
import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_EXPLICITLY_SET;
|
||||
import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION;
|
||||
import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE;
|
||||
import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE;
|
||||
import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
|
||||
import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST;
|
||||
import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME;
|
||||
import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING;
|
||||
@@ -3462,10 +3463,12 @@ public class PackageParser {
|
||||
|
||||
if (sa.hasValueOrEmpty(R.styleable.AndroidManifestApplication_resizeableActivity)) {
|
||||
if (sa.getBoolean(R.styleable.AndroidManifestApplication_resizeableActivity, true)) {
|
||||
ai.privateFlags |= PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_EXPLICITLY_SET;
|
||||
ai.privateFlags |= PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE;
|
||||
} else {
|
||||
ai.privateFlags |= PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE;
|
||||
}
|
||||
} else if (owner.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.N) {
|
||||
ai.privateFlags |= PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION;
|
||||
ai.privateFlags |= PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
|
||||
}
|
||||
|
||||
ai.maxAspectRatio = sa.getFloat(R.styleable.AndroidManifestApplication_maxAspectRatio, 0);
|
||||
@@ -4348,13 +4351,16 @@ public class PackageParser {
|
||||
|
||||
private void setActivityResizeMode(ActivityInfo aInfo, TypedArray sa, Package owner) {
|
||||
final boolean appExplicitDefault = (owner.applicationInfo.privateFlags
|
||||
& PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_EXPLICITLY_SET) != 0;
|
||||
& (PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE
|
||||
| PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE)) != 0;
|
||||
|
||||
if (sa.hasValue(R.styleable.AndroidManifestActivity_resizeableActivity)
|
||||
|| appExplicitDefault) {
|
||||
// Activity or app explicitly set if it is resizeable or not;
|
||||
final boolean appResizeable = (owner.applicationInfo.privateFlags
|
||||
& PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE) != 0;
|
||||
if (sa.getBoolean(R.styleable.AndroidManifestActivity_resizeableActivity,
|
||||
appExplicitDefault)) {
|
||||
appResizeable)) {
|
||||
aInfo.resizeMode = RESIZE_MODE_RESIZEABLE;
|
||||
} else {
|
||||
aInfo.resizeMode = RESIZE_MODE_UNRESIZEABLE;
|
||||
@@ -4363,7 +4369,7 @@ public class PackageParser {
|
||||
}
|
||||
|
||||
if ((owner.applicationInfo.privateFlags
|
||||
& PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION) != 0) {
|
||||
& PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION) != 0) {
|
||||
// The activity or app didn't explicitly set the resizing option, however we want to
|
||||
// make it resize due to the sdk version it is targeting.
|
||||
aInfo.resizeMode = RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
|
||||
|
||||
Reference in New Issue
Block a user