Separate fillsParent from deciding orientation
This keep the behavior of commit a930e1e to avoid orientation
from being affected by the change of mOccludesParent.
But the animation style can still refer to the runtime change of
translucent, e.g. AppTransitionController#findAnimLayoutParamsToken.
Bug: 234328568
Test: ActivityRecordTests#testShouldStartWhenMakeClientActive
Change-Id: If9019dfa6e4a69cd34607f24dfe2d06994fd6f10
This commit is contained in:
@@ -670,9 +670,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
* from the style of activity. Because we don't want {@link WindowContainer#getOrientation()}
|
||||
* to be affected by the temporal state of {@link ActivityClientController#convertToTranslucent}
|
||||
* when running ANIM_SCENE_TRANSITION.
|
||||
* @see WindowContainer#fillsParent()
|
||||
* @see WindowContainer#providesOrientation()
|
||||
*/
|
||||
private final boolean mFillsParent;
|
||||
private final boolean mStyleFillsParent;
|
||||
|
||||
// The input dispatching timeout for this application token in milliseconds.
|
||||
long mInputDispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS;
|
||||
@@ -1971,10 +1971,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
// This style is propagated to the main window attributes with
|
||||
// FLAG_SHOW_WALLPAPER from PhoneWindow#generateLayout.
|
||||
|| ent.array.getBoolean(R.styleable.Window_windowShowWallpaper, false);
|
||||
mFillsParent = mOccludesParent;
|
||||
mStyleFillsParent = mOccludesParent;
|
||||
noDisplay = ent.array.getBoolean(R.styleable.Window_windowNoDisplay, false);
|
||||
} else {
|
||||
mFillsParent = mOccludesParent = true;
|
||||
mStyleFillsParent = mOccludesParent = true;
|
||||
noDisplay = false;
|
||||
}
|
||||
|
||||
@@ -2879,9 +2879,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
return (TaskDisplayArea) super.getDisplayArea();
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean providesOrientation() {
|
||||
return mStyleFillsParent;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean fillsParent() {
|
||||
return mFillsParent;
|
||||
return occludesParent(true /* includingFinishing */);
|
||||
}
|
||||
|
||||
/** Returns true if this activity is not finishing, is opaque and fills the entire space of
|
||||
|
||||
@@ -172,7 +172,7 @@ class PinnedTaskController {
|
||||
*/
|
||||
void deferOrientationChangeForEnteringPipFromFullScreenIfNeeded() {
|
||||
final ActivityRecord topFullscreen = mDisplayContent.getActivity(
|
||||
a -> a.fillsParent() && !a.getTask().inMultiWindowMode());
|
||||
a -> a.providesOrientation() && !a.getTask().inMultiWindowMode());
|
||||
if (topFullscreen == null || topFullscreen.hasFixedRotationTransform()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1495,8 +1495,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
||||
*/
|
||||
int getOrientation(int candidate) {
|
||||
mLastOrientationSource = null;
|
||||
if (!fillsParent()) {
|
||||
// Ignore containers that don't completely fill their parents.
|
||||
if (!providesOrientation()) {
|
||||
return SCREEN_ORIENTATION_UNSET;
|
||||
}
|
||||
|
||||
@@ -1530,8 +1529,8 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
||||
continue;
|
||||
}
|
||||
|
||||
if (wc.fillsParent() || orientation != SCREEN_ORIENTATION_UNSPECIFIED) {
|
||||
// Use the orientation if the container fills its parent or requested an explicit
|
||||
if (wc.providesOrientation() || orientation != SCREEN_ORIENTATION_UNSPECIFIED) {
|
||||
// Use the orientation if the container can provide or requested an explicit
|
||||
// orientation that isn't SCREEN_ORIENTATION_UNSPECIFIED.
|
||||
ProtoLog.v(WM_DEBUG_ORIENTATION, "%s is requesting orientation %d (%s)",
|
||||
wc.toString(), orientation,
|
||||
@@ -1560,6 +1559,10 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
||||
return source;
|
||||
}
|
||||
|
||||
boolean providesOrientation() {
|
||||
return fillsParent();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this container is opaque and fills all the space made available by its parent
|
||||
* container.
|
||||
|
||||
@@ -756,8 +756,8 @@ public class ActivityRecordTests extends WindowTestsBase {
|
||||
final ActivityRecord activity = createActivityWithTask();
|
||||
ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(activity.getTask()).build();
|
||||
topActivity.setOccludesParent(false);
|
||||
// The requested occluding state doesn't affect whether it fills parent.
|
||||
assertTrue(topActivity.fillsParent());
|
||||
// The requested occluding state doesn't affect whether it can decide orientation.
|
||||
assertTrue(topActivity.providesOrientation());
|
||||
activity.setState(STOPPED, "Testing");
|
||||
activity.setVisibility(true);
|
||||
activity.makeActiveIfNeeded(null /* activeActivity */);
|
||||
|
||||
Reference in New Issue
Block a user