diff options
| -rw-r--r-- | api/current.txt | 25 | ||||
| -rw-r--r-- | api/system-current.txt | 25 | ||||
| -rw-r--r-- | core/java/android/content/pm/ActivityInfo.java | 14 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageParser.java | 3 | ||||
| -rw-r--r-- | core/res/res/values/attrs_manifest.xml | 22 | ||||
| -rw-r--r-- | core/res/res/values/public.xml | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityStackSupervisor.java | 7 |
7 files changed, 64 insertions, 33 deletions
diff --git a/api/current.txt b/api/current.txt index f75ef0b5580e..e91244074522 100644 --- a/api/current.txt +++ b/api/current.txt @@ -321,7 +321,7 @@ package android { field public static final int buttonBarNeutralButtonStyle = 16843914; // 0x101048a field public static final int buttonBarPositiveButtonStyle = 16843913; // 0x1010489 field public static final int buttonBarStyle = 16843566; // 0x101032e - field public static final int buttonGravity = 16844030; // 0x10104fe + field public static final int buttonGravity = 16844031; // 0x10104ff field public static final int buttonStyle = 16842824; // 0x1010048 field public static final int buttonStyleInset = 16842826; // 0x101004a field public static final int buttonStyleSmall = 16842825; // 0x1010049 @@ -371,7 +371,7 @@ package android { field public static final int codes = 16843330; // 0x1010242 field public static final int collapseColumns = 16843083; // 0x101014b field public static final int collapseContentDescription = 16843984; // 0x10104d0 - field public static final int collapseIcon = 16844031; // 0x10104ff + field public static final int collapseIcon = 16844032; // 0x1010500 field public static final int color = 16843173; // 0x10101a5 field public static final int colorAccent = 16843829; // 0x1010435 field public static final int colorActivatedHighlight = 16843664; // 0x1010390 @@ -412,7 +412,7 @@ package android { field public static final int contentInsetRight = 16843862; // 0x1010456 field public static final int contentInsetStart = 16843859; // 0x1010453 field public static final int contextClickable = 16844007; // 0x10104e7 - field public static final int contextPopupMenuStyle = 16844033; // 0x1010501 + field public static final int contextPopupMenuStyle = 16844034; // 0x1010502 field public static final int controlX1 = 16843772; // 0x10103fc field public static final int controlX2 = 16843774; // 0x10103fe field public static final int controlY1 = 16843773; // 0x10103fd @@ -780,7 +780,7 @@ package android { field public static final int layout_y = 16843136; // 0x1010180 field public static final int left = 16843181; // 0x10101ad field public static final int letterSpacing = 16843958; // 0x10104b6 - field public static final int level = 16844032; // 0x1010500 + field public static final int level = 16844033; // 0x1010501 field public static final int lineSpacingExtra = 16843287; // 0x1010217 field public static final int lineSpacingMultiplier = 16843288; // 0x1010218 field public static final int lines = 16843092; // 0x1010154 @@ -813,7 +813,7 @@ package android { field public static final int marqueeRepeatLimit = 16843293; // 0x101021d field public static final int matchOrder = 16843855; // 0x101044f field public static final int max = 16843062; // 0x1010136 - field public static final int maxButtonHeight = 16844029; // 0x10104fd + field public static final int maxButtonHeight = 16844030; // 0x10104fe field public static final int maxDate = 16843584; // 0x1010340 field public static final int maxEms = 16843095; // 0x1010157 field public static final int maxHeight = 16843040; // 0x1010120 @@ -1174,6 +1174,7 @@ package android { field public static final int summaryOn = 16843247; // 0x10101ef field public static final int supportsAssist = 16844016; // 0x10104f0 field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1 + field public static final int supportsPictureInPicture = 16844024; // 0x10104f8 field public static final int supportsRtl = 16843695; // 0x10103af field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb field public static final int supportsUploading = 16843419; // 0x101029b @@ -1222,7 +1223,7 @@ package android { field public static final int textAppearanceListItemSmall = 16843679; // 0x101039f field public static final int textAppearanceMedium = 16842817; // 0x1010041 field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044 - field public static final int textAppearancePopupMenuHeader = 16844034; // 0x1010502 + field public static final int textAppearancePopupMenuHeader = 16844035; // 0x1010503 field public static final int textAppearanceSearchResultSubtitle = 16843424; // 0x10102a0 field public static final int textAppearanceSearchResultTitle = 16843425; // 0x10102a1 field public static final int textAppearanceSmall = 16842818; // 0x1010042 @@ -1291,11 +1292,11 @@ package android { field public static final int tintMode = 16843771; // 0x10103fb field public static final int title = 16843233; // 0x10101e1 field public static final int titleCondensed = 16843234; // 0x10101e2 - field public static final int titleMargin = 16844024; // 0x10104f8 - field public static final int titleMarginBottom = 16844028; // 0x10104fc - field public static final int titleMarginEnd = 16844026; // 0x10104fa - field public static final int titleMarginStart = 16844025; // 0x10104f9 - field public static final int titleMarginTop = 16844027; // 0x10104fb + field public static final int titleMargin = 16844025; // 0x10104f9 + field public static final int titleMarginBottom = 16844029; // 0x10104fd + field public static final int titleMarginEnd = 16844027; // 0x10104fb + field public static final int titleMarginStart = 16844026; // 0x10104fa + field public static final int titleMarginTop = 16844028; // 0x10104fc field public static final int titleTextAppearance = 16843822; // 0x101042e field public static final int titleTextColor = 16844003; // 0x10104e3 field public static final int titleTextStyle = 16843512; // 0x10102f8 @@ -1395,7 +1396,7 @@ package android { field public static final int windowAllowReturnTransitionOverlap = 16843835; // 0x101043b field public static final int windowAnimationStyle = 16842926; // 0x10100ae field public static final int windowBackground = 16842836; // 0x1010054 - field public static final int windowBackgroundFallback = 16844035; // 0x1010503 + field public static final int windowBackgroundFallback = 16844036; // 0x1010504 field public static final int windowClipToOutline = 16843947; // 0x10104ab field public static final int windowCloseOnTouchOutside = 16843611; // 0x101035b field public static final int windowContentOverlay = 16842841; // 0x1010059 diff --git a/api/system-current.txt b/api/system-current.txt index c4c6f1c9edff..b996af313a07 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -413,7 +413,7 @@ package android { field public static final int buttonBarNeutralButtonStyle = 16843914; // 0x101048a field public static final int buttonBarPositiveButtonStyle = 16843913; // 0x1010489 field public static final int buttonBarStyle = 16843566; // 0x101032e - field public static final int buttonGravity = 16844030; // 0x10104fe + field public static final int buttonGravity = 16844031; // 0x10104ff field public static final int buttonStyle = 16842824; // 0x1010048 field public static final int buttonStyleInset = 16842826; // 0x101004a field public static final int buttonStyleSmall = 16842825; // 0x1010049 @@ -463,7 +463,7 @@ package android { field public static final int codes = 16843330; // 0x1010242 field public static final int collapseColumns = 16843083; // 0x101014b field public static final int collapseContentDescription = 16843984; // 0x10104d0 - field public static final int collapseIcon = 16844031; // 0x10104ff + field public static final int collapseIcon = 16844032; // 0x1010500 field public static final int color = 16843173; // 0x10101a5 field public static final int colorAccent = 16843829; // 0x1010435 field public static final int colorActivatedHighlight = 16843664; // 0x1010390 @@ -504,7 +504,7 @@ package android { field public static final int contentInsetRight = 16843862; // 0x1010456 field public static final int contentInsetStart = 16843859; // 0x1010453 field public static final int contextClickable = 16844007; // 0x10104e7 - field public static final int contextPopupMenuStyle = 16844033; // 0x1010501 + field public static final int contextPopupMenuStyle = 16844034; // 0x1010502 field public static final int controlX1 = 16843772; // 0x10103fc field public static final int controlX2 = 16843774; // 0x10103fe field public static final int controlY1 = 16843773; // 0x10103fd @@ -872,7 +872,7 @@ package android { field public static final int layout_y = 16843136; // 0x1010180 field public static final int left = 16843181; // 0x10101ad field public static final int letterSpacing = 16843958; // 0x10104b6 - field public static final int level = 16844032; // 0x1010500 + field public static final int level = 16844033; // 0x1010501 field public static final int lineSpacingExtra = 16843287; // 0x1010217 field public static final int lineSpacingMultiplier = 16843288; // 0x1010218 field public static final int lines = 16843092; // 0x1010154 @@ -905,7 +905,7 @@ package android { field public static final int marqueeRepeatLimit = 16843293; // 0x101021d field public static final int matchOrder = 16843855; // 0x101044f field public static final int max = 16843062; // 0x1010136 - field public static final int maxButtonHeight = 16844029; // 0x10104fd + field public static final int maxButtonHeight = 16844030; // 0x10104fe field public static final int maxDate = 16843584; // 0x1010340 field public static final int maxEms = 16843095; // 0x1010157 field public static final int maxHeight = 16843040; // 0x1010120 @@ -1270,6 +1270,7 @@ package android { field public static final int summaryOn = 16843247; // 0x10101ef field public static final int supportsAssist = 16844016; // 0x10104f0 field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1 + field public static final int supportsPictureInPicture = 16844024; // 0x10104f8 field public static final int supportsRtl = 16843695; // 0x10103af field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb field public static final int supportsUploading = 16843419; // 0x101029b @@ -1318,7 +1319,7 @@ package android { field public static final int textAppearanceListItemSmall = 16843679; // 0x101039f field public static final int textAppearanceMedium = 16842817; // 0x1010041 field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044 - field public static final int textAppearancePopupMenuHeader = 16844034; // 0x1010502 + field public static final int textAppearancePopupMenuHeader = 16844035; // 0x1010503 field public static final int textAppearanceSearchResultSubtitle = 16843424; // 0x10102a0 field public static final int textAppearanceSearchResultTitle = 16843425; // 0x10102a1 field public static final int textAppearanceSmall = 16842818; // 0x1010042 @@ -1387,11 +1388,11 @@ package android { field public static final int tintMode = 16843771; // 0x10103fb field public static final int title = 16843233; // 0x10101e1 field public static final int titleCondensed = 16843234; // 0x10101e2 - field public static final int titleMargin = 16844024; // 0x10104f8 - field public static final int titleMarginBottom = 16844028; // 0x10104fc - field public static final int titleMarginEnd = 16844026; // 0x10104fa - field public static final int titleMarginStart = 16844025; // 0x10104f9 - field public static final int titleMarginTop = 16844027; // 0x10104fb + field public static final int titleMargin = 16844025; // 0x10104f9 + field public static final int titleMarginBottom = 16844029; // 0x10104fd + field public static final int titleMarginEnd = 16844027; // 0x10104fb + field public static final int titleMarginStart = 16844026; // 0x10104fa + field public static final int titleMarginTop = 16844028; // 0x10104fc field public static final int titleTextAppearance = 16843822; // 0x101042e field public static final int titleTextColor = 16844003; // 0x10104e3 field public static final int titleTextStyle = 16843512; // 0x10102f8 @@ -1491,7 +1492,7 @@ package android { field public static final int windowAllowReturnTransitionOverlap = 16843835; // 0x101043b field public static final int windowAnimationStyle = 16842926; // 0x10100ae field public static final int windowBackground = 16842836; // 0x1010054 - field public static final int windowBackgroundFallback = 16844035; // 0x1010503 + field public static final int windowBackgroundFallback = 16844036; // 0x1010504 field public static final int windowClipToOutline = 16843947; // 0x10104ab field public static final int windowCloseOnTouchOutside = 16843611; // 0x101035b field public static final int windowContentOverlay = 16842841; // 0x1010059 diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index 38537720d119..7ca39cb7c443 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -671,6 +671,13 @@ public class ActivityInfo extends ComponentInfo */ public boolean resizeable; + /** + * Value indicating if the activity is supports picture-in-picture form of multi-window mode. + * See {@link android.R.attr#supportsPictureInPicture}. + * @hide + */ + public boolean supportsPip; + /** @hide */ public static final int LOCK_TASK_LAUNCH_MODE_DEFAULT = 0; /** @hide */ @@ -723,6 +730,7 @@ public class ActivityInfo extends ComponentInfo parentActivityName = orig.parentActivityName; maxRecents = orig.maxRecents; resizeable = orig.resizeable; + supportsPip = orig.supportsPip; lockTaskLaunchMode = orig.lockTaskLaunchMode; layout = orig.layout; } @@ -769,8 +777,8 @@ public class ActivityInfo extends ComponentInfo if (uiOptions != 0) { pw.println(prefix + " uiOptions=0x" + Integer.toHexString(uiOptions)); } - pw.println(prefix + "resizeable=" + resizeable + " lockTaskLaunchMode=" - + lockTaskLaunchModeToString(lockTaskLaunchMode)); + pw.println(prefix + "resizeable=" + resizeable + " supportsPip=" + supportsPip); + pw.println(prefix + "lockTaskLaunchMode=" + lockTaskLaunchModeToString(lockTaskLaunchMode)); if (layout != null) { pw.println(prefix + "initialLayout=" + layout.width + "|" + layout.widthFraction + ", " + layout.height + "|" @@ -806,6 +814,7 @@ public class ActivityInfo extends ComponentInfo dest.writeInt(persistableMode); dest.writeInt(maxRecents); dest.writeInt(resizeable ? 1 : 0); + dest.writeInt(supportsPip ? 1 : 0); dest.writeInt(lockTaskLaunchMode); if (layout != null) { dest.writeInt(1); @@ -847,6 +856,7 @@ public class ActivityInfo extends ComponentInfo persistableMode = source.readInt(); maxRecents = source.readInt(); resizeable = (source.readInt() == 1); + supportsPip = (source.readInt() == 1); lockTaskLaunchMode = source.readInt(); if (source.readInt() == 1) { layout = new Layout(source); diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 1e85dfb14d7b..5d73b06acecc 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -3220,6 +3220,9 @@ public class PackageParser { R.styleable.AndroidManifestActivity_resizeableActivity, owner.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.N); + a.info.supportsPip = a.info.resizeable ? sa.getBoolean( + R.styleable.AndroidManifestActivity_supportsPictureInPicture, false) : false; + a.info.screenOrientation = sa.getInt( R.styleable.AndroidManifestActivity_screenOrientation, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index 322ac4f9dfa7..07ac471ae6f4 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -1059,7 +1059,7 @@ at the same time. <p>The default value is <code>false</code> for applications with - <code>targetSdkVersion</code> lesser than {@link android.os.Build.VERSION_CODES#M} and + <code>targetSdkVersion</code> lesser than {@link android.os.Build.VERSION_CODES#N} and <code>true</code> otherwise. <p>NOTE: A task's root activity value is applied to all additional activities launched in @@ -1067,11 +1067,24 @@ all other activities in the task as resizeable and will not if the root activity isn't resizeable. - <p>NOTE: The value of {@link android.R.attr#screenOrientation} will be ignored for - resizeable activities as the system doesn't support fixed orientation on a resizeable - activity. --> + <p>NOTE: The value of {@link android.R.attr#screenOrientation} is ignored for + resizeable activities when in multi-window mode. --> <attr name="resizeableActivity" format="boolean" /> + <!-- Indicates that the activity supports the picture-in-picture (PiP) form of multi-window. + While it makes sense to be able to resize most activities types in multi-window mode when + {@link android.R.attr#resizeableActivity} is set. It only makes sense to put specific types + of activities in PiP mode of multi-window. For example, activities that play video. When + set the activity will be allowed to enter PiP mode when the system deems it appropriate on + devices that support PiP. + + <p>The default value is <code>false</code> for applications with + <code>targetSdkVersion</code> lesser than {@link android.os.Build.VERSION_CODES#N} and + <code>true</code> otherwise. + + <p>NOTE: Attribute is only used if {@link android.R.attr#resizeableActivity} is true. --> + <attr name="supportsPictureInPicture" format="boolean" /> + <!-- This value indicates how tasks rooted at this activity will behave in lockTask mode. While in lockTask mode the system will not launch non-permitted tasks until lockTask mode is disabled. @@ -1826,6 +1839,7 @@ <attr name="relinquishTaskIdentity" /> <attr name="resumeWhilePausing" /> <attr name="resizeableActivity" /> + <attr name="supportsPictureInPicture" /> <attr name="lockTaskMode" /> <attr name="showForAllUsers" /> </declare-styleable> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index c05b585be298..037f1c43d745 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2666,6 +2666,7 @@ <public type="attr" name="initialHeight" /> <public type="attr" name="minimalSize" /> <public type="attr" name="resizeableActivity" /> + <public type="attr" name="supportsPictureInPicture" /> <public type="attr" name="titleMargin" /> <public type="attr" name="titleMarginStart" /> <public type="attr" name="titleMarginEnd" /> diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 716088596f5e..b40ec7516c11 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -3325,13 +3325,14 @@ public final class ActivityStackSupervisor implements DisplayListener { return false; } - final TaskRecord task = r.task; - if (!task.mResizeable) { - Slog.w(TAG, "moveTopStackActivityToPinnedStackLocked: Activity not resizeable" + if (!r.info.supportsPip) { + Slog.w(TAG, + "moveTopStackActivityToPinnedStackLocked: Picture-In-Picture not supported for " + " r=" + r); return false; } + final TaskRecord task = r.task; if (task.mActivities.size() == 1) { // There is only one activity in the task. So, we can just move the task over to the // pinned stack without re-parenting the activity in a different task. |