Add symmetric Getters to PictureInPictureParams
- Adds getter to all setters in PictureInPictureParams.Builder - Changes getAspectRatio and getExpandedAspect ratio to return the Rational values instead of floats to ensure symmetry Bug: 220740459 Test: atest PictureInPictureParamsTest#testPictureInPictureParamsGetters Test: atest PictureInPictureParamsTest#testPictureInPictureParamsGettersNullValues Test: atest PinnedStackTests#testFillMaxAllowedActions Test: atest PinnedStackTests#testRejectExceededActions Test: atest PinnedStackTests#testCloseActionIsSet Test: atest PinnedStackTests#testTitleIsSet Test: atest PinnedStackTests#testSubtitleIsSet Test: atest PinnedStackTests#testIsSeamlessResizeEnabledDefaultToTrue Test: atest PinnedStackTests#testDisableIsSeamlessResizeEnabled Change-Id: Idb06fbf326815181c3e43907dc9c47e5ecc125d0
This commit is contained in:
@@ -6644,6 +6644,15 @@ package android.app {
|
||||
|
||||
public final class PictureInPictureParams implements android.os.Parcelable {
|
||||
method public int describeContents();
|
||||
method @NonNull public java.util.List<android.app.RemoteAction> getActions();
|
||||
method @Nullable public android.util.Rational getAspectRatio();
|
||||
method @Nullable public android.app.RemoteAction getCloseAction();
|
||||
method @Nullable public android.util.Rational getExpandedAspectRatio();
|
||||
method @Nullable public android.graphics.Rect getSourceRectHint();
|
||||
method @Nullable public CharSequence getSubtitle();
|
||||
method @Nullable public CharSequence getTitle();
|
||||
method public boolean isAutoEnterEnabled();
|
||||
method public boolean isSeamlessResizeEnabled();
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field @NonNull public static final android.os.Parcelable.Creator<android.app.PictureInPictureParams> CREATOR;
|
||||
}
|
||||
|
||||
@@ -356,14 +356,8 @@ package android.app {
|
||||
}
|
||||
|
||||
public final class PictureInPictureParams implements android.os.Parcelable {
|
||||
method public java.util.List<android.app.RemoteAction> getActions();
|
||||
method public float getAspectRatio();
|
||||
method @Nullable public android.app.RemoteAction getCloseAction();
|
||||
method public float getExpandedAspectRatio();
|
||||
method public android.graphics.Rect getSourceRectHint();
|
||||
method @Nullable public CharSequence getSubtitle();
|
||||
method @Nullable public CharSequence getTitle();
|
||||
method public boolean isSeamlessResizeEnabled();
|
||||
method public float getAspectRatioFloat();
|
||||
method public float getExpandedAspectRatioFloat();
|
||||
}
|
||||
|
||||
public final class PictureInPictureUiState implements android.os.Parcelable {
|
||||
|
||||
@@ -280,7 +280,7 @@ public final class PictureInPictureParams implements Parcelable {
|
||||
private Rational mAspectRatio;
|
||||
|
||||
/**
|
||||
* The expected aspect ratio of the vertically expanded picture-in-picture window.
|
||||
* The expected aspect ratio of the expanded picture-in-picture window.
|
||||
*/
|
||||
@Nullable
|
||||
private Rational mExpandedAspectRatio;
|
||||
@@ -441,15 +441,21 @@ public final class PictureInPictureParams implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@TestApi
|
||||
public float getAspectRatio() {
|
||||
public float getAspectRatioFloat() {
|
||||
if (mAspectRatio != null) {
|
||||
return mAspectRatio.floatValue();
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public Rational getAspectRatioRational() {
|
||||
/**
|
||||
* Returns the expected aspect ratio of the picture-in-picture window.
|
||||
*
|
||||
* @return aspect ratio as the desired width / height or {@code null} if not set.
|
||||
* @see PictureInPictureParams.Builder#setAspectRatio(Rational)
|
||||
*/
|
||||
@Nullable
|
||||
public Rational getAspectRatio() {
|
||||
return mAspectRatio;
|
||||
}
|
||||
|
||||
@@ -466,13 +472,24 @@ public final class PictureInPictureParams implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@TestApi
|
||||
public float getExpandedAspectRatio() {
|
||||
public float getExpandedAspectRatioFloat() {
|
||||
if (mExpandedAspectRatio != null) {
|
||||
return mExpandedAspectRatio.floatValue();
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the desired aspect ratio of the expanded picture-in-picture window.
|
||||
*
|
||||
* @return aspect ratio as the desired width / height or {@code null} if not set.
|
||||
* @see PictureInPictureParams.Builder#setExpandedAspectRatio(Rational)
|
||||
*/
|
||||
@Nullable
|
||||
public Rational getExpandedAspectRatio() {
|
||||
return mExpandedAspectRatio;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether the expanded aspect ratio is set
|
||||
* @hide
|
||||
@@ -482,11 +499,17 @@ public final class PictureInPictureParams implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the set of user actions.
|
||||
* @hide
|
||||
* Returns the list of user actions that are associated with the activity when in
|
||||
* picture-in-picture mode.
|
||||
*
|
||||
* @return the user actions in a new list.
|
||||
* @see PictureInPictureParams.Builder#setActions(List)
|
||||
*/
|
||||
@TestApi
|
||||
@NonNull
|
||||
public List<RemoteAction> getActions() {
|
||||
if (mUserActions == null) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return mUserActions;
|
||||
}
|
||||
|
||||
@@ -499,10 +522,11 @@ public final class PictureInPictureParams implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the close action.
|
||||
* @hide
|
||||
* Returns the action that is to replace the system close action.
|
||||
*
|
||||
* @return the close action or {@code null} if not set.
|
||||
* @see PictureInPictureParams.Builder#setCloseAction(RemoteAction)
|
||||
*/
|
||||
@TestApi
|
||||
@Nullable
|
||||
public RemoteAction getCloseAction() {
|
||||
return mCloseAction;
|
||||
@@ -528,10 +552,12 @@ public final class PictureInPictureParams implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the source rect hint
|
||||
* @hide
|
||||
* Returns the source rect hint.
|
||||
*
|
||||
* @return the source rect hint also known as launch bounds or {@code null} if not set.
|
||||
* @see PictureInPictureParams.Builder#setSourceRectHint(Rect)
|
||||
*/
|
||||
@TestApi
|
||||
@Nullable
|
||||
public Rect getSourceRectHint() {
|
||||
return mSourceRectHint;
|
||||
}
|
||||
@@ -545,18 +571,23 @@ public final class PictureInPictureParams implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether auto pip is enabled.
|
||||
* @hide
|
||||
* Returns whether auto enter picture-in-picture is enabled.
|
||||
*
|
||||
* @return {@code true} if the system will automatically put the activity in
|
||||
* picture-in-picture mode.
|
||||
* @see PictureInPictureParams.Builder#setAutoEnterEnabled(boolean)
|
||||
*/
|
||||
public boolean isAutoEnterEnabled() {
|
||||
return mAutoEnterEnabled == null ? false : mAutoEnterEnabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether seamless resize is enabled.
|
||||
* @hide
|
||||
* Returns whether seamless resize is enabled.
|
||||
*
|
||||
* @return true if the system can seamlessly resize the window while activity is in
|
||||
* picture-in-picture mode.
|
||||
* @see PictureInPictureParams.Builder#setSeamlessResizeEnabled(boolean)
|
||||
*/
|
||||
@TestApi
|
||||
public boolean isSeamlessResizeEnabled() {
|
||||
return mSeamlessResizeEnabled == null ? true : mSeamlessResizeEnabled;
|
||||
}
|
||||
@@ -570,10 +601,11 @@ public final class PictureInPictureParams implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return title of the pip.
|
||||
* @hide
|
||||
* Returns the title of the picture-in-picture window that may be displayed to the user.
|
||||
*
|
||||
* @return title of the picture-in-picture window.
|
||||
* @see PictureInPictureParams.Builder#setTitle(CharSequence)
|
||||
*/
|
||||
@TestApi
|
||||
@Nullable
|
||||
public CharSequence getTitle() {
|
||||
return mTitle;
|
||||
@@ -588,10 +620,11 @@ public final class PictureInPictureParams implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return subtitle of the pip.
|
||||
* @hide
|
||||
* Returns the subtitle of the picture-in-picture window that may be displayed to the user.
|
||||
*
|
||||
* @return subtitle of the picture-in-picture window.
|
||||
* @see PictureInPictureParams.Builder#setSubtitle(CharSequence)
|
||||
*/
|
||||
@TestApi
|
||||
@Nullable
|
||||
public CharSequence getSubtitle() {
|
||||
return mSubtitle;
|
||||
@@ -716,7 +749,7 @@ public final class PictureInPictureParams implements Parcelable {
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PictureInPictureParams("
|
||||
+ " aspectRatio=" + getAspectRatioRational()
|
||||
+ " aspectRatio=" + getAspectRatio()
|
||||
+ " expandedAspectRatio=" + mExpandedAspectRatio
|
||||
+ " sourceRectHint=" + getSourceRectHint()
|
||||
+ " hasSetActions=" + hasSetActions()
|
||||
|
||||
@@ -194,7 +194,7 @@ public class PipBoundsAlgorithm {
|
||||
public float getAspectRatioOrDefault(
|
||||
@android.annotation.Nullable PictureInPictureParams params) {
|
||||
return params != null && params.hasSetAspectRatio()
|
||||
? params.getAspectRatio()
|
||||
? params.getAspectRatioFloat()
|
||||
: getDefaultAspectRatio();
|
||||
}
|
||||
|
||||
|
||||
@@ -1071,13 +1071,13 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
|
||||
*/
|
||||
private boolean applyPictureInPictureParams(@NonNull PictureInPictureParams params) {
|
||||
final Rational currentAspectRatio =
|
||||
mPictureInPictureParams != null ? mPictureInPictureParams.getAspectRatioRational()
|
||||
mPictureInPictureParams != null ? mPictureInPictureParams.getAspectRatio()
|
||||
: null;
|
||||
final boolean aspectRatioChanged = !Objects.equals(currentAspectRatio,
|
||||
params.getAspectRatioRational());
|
||||
params.getAspectRatio());
|
||||
mPictureInPictureParams = params;
|
||||
if (aspectRatioChanged) {
|
||||
mPipBoundsState.setAspectRatio(params.getAspectRatio());
|
||||
mPipBoundsState.setAspectRatio(params.getAspectRatioFloat());
|
||||
}
|
||||
return aspectRatioChanged;
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ public class TvPipBoundsState extends PipBoundsState {
|
||||
public void setBoundsStateForEntry(ComponentName componentName, ActivityInfo activityInfo,
|
||||
PictureInPictureParams params, PipBoundsAlgorithm pipBoundsAlgorithm) {
|
||||
super.setBoundsStateForEntry(componentName, activityInfo, params, pipBoundsAlgorithm);
|
||||
setDesiredTvExpandedAspectRatio(params.getExpandedAspectRatio(), true);
|
||||
setDesiredTvExpandedAspectRatio(params.getExpandedAspectRatioFloat(), true);
|
||||
}
|
||||
|
||||
/** Resets the TV PiP state for a new activity. */
|
||||
|
||||
@@ -746,8 +746,9 @@ class ActivityClientController extends IActivityClientController.Stub {
|
||||
// if it is not already expanding to fullscreen. Otherwise, the arguments will
|
||||
// be used the next time the activity enters PiP.
|
||||
final Task rootTask = r.getRootTask();
|
||||
rootTask.setPictureInPictureAspectRatio(r.pictureInPictureArgs.getAspectRatio(),
|
||||
r.pictureInPictureArgs.getExpandedAspectRatio());
|
||||
rootTask.setPictureInPictureAspectRatio(
|
||||
r.pictureInPictureArgs.getAspectRatioFloat(),
|
||||
r.pictureInPictureArgs.getExpandedAspectRatioFloat());
|
||||
rootTask.setPictureInPictureActions(r.pictureInPictureArgs.getActions());
|
||||
}
|
||||
}
|
||||
@@ -828,7 +829,7 @@ class ActivityClientController extends IActivityClientController.Stub {
|
||||
|
||||
if (params.hasSetAspectRatio()
|
||||
&& !mService.mWindowManager.isValidPictureInPictureAspectRatio(
|
||||
r.mDisplayContent, params.getAspectRatio())) {
|
||||
r.mDisplayContent, params.getAspectRatioFloat())) {
|
||||
throw new IllegalArgumentException(String.format(caller
|
||||
+ ": Aspect ratio is too extreme (must be between %f and %f).",
|
||||
minAspectRatio, maxAspectRatio));
|
||||
@@ -836,7 +837,7 @@ class ActivityClientController extends IActivityClientController.Stub {
|
||||
|
||||
if (mService.mSupportsExpandedPictureInPicture && params.hasSetExpandedAspectRatio()
|
||||
&& !mService.mWindowManager.isValidExpandedPictureInPictureAspectRatio(
|
||||
r.mDisplayContent, params.getExpandedAspectRatio())) {
|
||||
r.mDisplayContent, params.getExpandedAspectRatioFloat())) {
|
||||
throw new IllegalArgumentException(String.format(caller
|
||||
+ ": Expanded aspect ratio is not extreme enough (must not be between"
|
||||
+ " %f and %f).",
|
||||
|
||||
@@ -3523,8 +3523,9 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
}
|
||||
// Only update the saved args from the args that are set
|
||||
r.setPictureInPictureParams(params);
|
||||
final float aspectRatio = r.pictureInPictureArgs.getAspectRatio();
|
||||
final float expandedAspectRatio = r.pictureInPictureArgs.getExpandedAspectRatio();
|
||||
final float aspectRatio = r.pictureInPictureArgs.getAspectRatioFloat();
|
||||
final float expandedAspectRatio =
|
||||
r.pictureInPictureArgs.getExpandedAspectRatioFloat();
|
||||
final List<RemoteAction> actions = r.pictureInPictureArgs.getActions();
|
||||
mRootWindowContainer.moveActivityToPinnedRootTask(r,
|
||||
null /* launchIntoPipHostActivity */, "enterPictureInPictureMode");
|
||||
|
||||
@@ -932,7 +932,7 @@ public class WindowOrganizerTests extends WindowTestsBase {
|
||||
mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents();
|
||||
assertNotNull(o.mChangedInfo);
|
||||
assertNotNull(o.mChangedInfo.pictureInPictureParams);
|
||||
final Rational ratio = o.mChangedInfo.pictureInPictureParams.getAspectRatioRational();
|
||||
final Rational ratio = o.mChangedInfo.pictureInPictureParams.getAspectRatio();
|
||||
assertEquals(3, ratio.getNumerator());
|
||||
assertEquals(4, ratio.getDenominator());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user