Merge changes Ic134c432,I5c5c1233 into rvc-qpr-dev am: 45f8014a04
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12468084 Change-Id: Id64d101dec22d9f34e11eb652a0745620b2f01bf
This commit is contained in:
@@ -1573,7 +1573,12 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
|||||||
// the heavy operations. This also benefits that the states of multiple activities
|
// the heavy operations. This also benefits that the states of multiple activities
|
||||||
// are handled together.
|
// are handled together.
|
||||||
r.linkFixedRotationTransform(prevRotatedLaunchingApp);
|
r.linkFixedRotationTransform(prevRotatedLaunchingApp);
|
||||||
|
if (r != mFixedRotationTransitionListener.mAnimatingRecents) {
|
||||||
|
// Only update the record for normal activity so the display orientation can be
|
||||||
|
// updated when the transition is done if it becomes the top. And the case of
|
||||||
|
// recents can be handled when the recents animation is finished.
|
||||||
setFixedRotationLaunchingAppUnchecked(r, rotation);
|
setFixedRotationLaunchingAppUnchecked(r, rotation);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -531,7 +531,7 @@ class WindowToken extends WindowContainer<WindowState> {
|
|||||||
void applyFixedRotationTransform(DisplayInfo info, DisplayFrames displayFrames,
|
void applyFixedRotationTransform(DisplayInfo info, DisplayFrames displayFrames,
|
||||||
Configuration config) {
|
Configuration config) {
|
||||||
if (mFixedRotationTransformState != null) {
|
if (mFixedRotationTransformState != null) {
|
||||||
return;
|
cleanUpFixedRotationTransformState(true /* replacing */);
|
||||||
}
|
}
|
||||||
mFixedRotationTransformState = new FixedRotationTransformState(info, displayFrames,
|
mFixedRotationTransformState = new FixedRotationTransformState(info, displayFrames,
|
||||||
new Configuration(config), mDisplayContent.getRotation());
|
new Configuration(config), mDisplayContent.getRotation());
|
||||||
@@ -548,12 +548,12 @@ class WindowToken extends WindowContainer<WindowState> {
|
|||||||
* one. This takes the same effect as {@link #applyFixedRotationTransform}.
|
* one. This takes the same effect as {@link #applyFixedRotationTransform}.
|
||||||
*/
|
*/
|
||||||
void linkFixedRotationTransform(WindowToken other) {
|
void linkFixedRotationTransform(WindowToken other) {
|
||||||
if (mFixedRotationTransformState != null) {
|
final FixedRotationTransformState fixedRotationState = other.mFixedRotationTransformState;
|
||||||
|
if (fixedRotationState == null || mFixedRotationTransformState == fixedRotationState) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final FixedRotationTransformState fixedRotationState = other.mFixedRotationTransformState;
|
if (mFixedRotationTransformState != null) {
|
||||||
if (fixedRotationState == null) {
|
cleanUpFixedRotationTransformState(true /* replacing */);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
mFixedRotationTransformState = fixedRotationState;
|
mFixedRotationTransformState = fixedRotationState;
|
||||||
fixedRotationState.mAssociatedTokens.add(this);
|
fixedRotationState.mAssociatedTokens.add(this);
|
||||||
@@ -609,11 +609,17 @@ class WindowToken extends WindowContainer<WindowState> {
|
|||||||
// The state is cleared at the end, because it is used to indicate that other windows can
|
// The state is cleared at the end, because it is used to indicate that other windows can
|
||||||
// use seamless rotation when applying rotation to display.
|
// use seamless rotation when applying rotation to display.
|
||||||
for (int i = state.mAssociatedTokens.size() - 1; i >= 0; i--) {
|
for (int i = state.mAssociatedTokens.size() - 1; i >= 0; i--) {
|
||||||
state.mAssociatedTokens.get(i).cleanUpFixedRotationTransformState();
|
state.mAssociatedTokens.get(i).cleanUpFixedRotationTransformState(
|
||||||
|
false /* replacing */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cleanUpFixedRotationTransformState() {
|
private void cleanUpFixedRotationTransformState(boolean replacing) {
|
||||||
|
if (replacing && mFixedRotationTransformState.mAssociatedTokens.size() > 1) {
|
||||||
|
// The state is not only used by self. Make sure to leave the influence by others.
|
||||||
|
mFixedRotationTransformState.mAssociatedTokens.remove(this);
|
||||||
|
mFixedRotationTransformState.mRotatedContainers.remove(this);
|
||||||
|
}
|
||||||
mFixedRotationTransformState = null;
|
mFixedRotationTransformState = null;
|
||||||
notifyFixedRotationTransform(false /* enabled */);
|
notifyFixedRotationTransform(false /* enabled */);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertNotEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
@@ -139,6 +140,8 @@ public class WindowTokenTests extends WindowTestsBase {
|
|||||||
public void testFinishFixedRotationTransform() {
|
public void testFinishFixedRotationTransform() {
|
||||||
final WindowToken appToken = mAppWindow.mToken;
|
final WindowToken appToken = mAppWindow.mToken;
|
||||||
final WindowToken wallpaperToken = mWallpaperWindow.mToken;
|
final WindowToken wallpaperToken = mWallpaperWindow.mToken;
|
||||||
|
final WindowToken testToken =
|
||||||
|
WindowTestUtils.createTestWindowToken(TYPE_APPLICATION_OVERLAY, mDisplayContent);
|
||||||
final Configuration config = new Configuration(mDisplayContent.getConfiguration());
|
final Configuration config = new Configuration(mDisplayContent.getConfiguration());
|
||||||
final int originalRotation = config.windowConfiguration.getRotation();
|
final int originalRotation = config.windowConfiguration.getRotation();
|
||||||
final int targetRotation = (originalRotation + 1) % 4;
|
final int targetRotation = (originalRotation + 1) % 4;
|
||||||
@@ -151,11 +154,20 @@ public class WindowTokenTests extends WindowTestsBase {
|
|||||||
assertEquals(targetRotation, appToken.getWindowConfiguration().getRotation());
|
assertEquals(targetRotation, appToken.getWindowConfiguration().getRotation());
|
||||||
assertEquals(targetRotation, wallpaperToken.getWindowConfiguration().getRotation());
|
assertEquals(targetRotation, wallpaperToken.getWindowConfiguration().getRotation());
|
||||||
|
|
||||||
// The display doesn't rotate, the transformation will be canceled.
|
testToken.applyFixedRotationTransform(mDisplayInfo, mDisplayContent.mDisplayFrames, config);
|
||||||
mAppWindow.mToken.finishFixedRotationTransform();
|
// The wallpaperToken was linked to appToken, this should make it link to testToken.
|
||||||
|
wallpaperToken.linkFixedRotationTransform(testToken);
|
||||||
|
|
||||||
// The window tokens should restore to the original rotation.
|
// Assume the display doesn't rotate, the transformation will be canceled.
|
||||||
|
appToken.finishFixedRotationTransform();
|
||||||
|
|
||||||
|
// The appToken should restore to the original rotation.
|
||||||
assertEquals(originalRotation, appToken.getWindowConfiguration().getRotation());
|
assertEquals(originalRotation, appToken.getWindowConfiguration().getRotation());
|
||||||
|
// The wallpaperToken is linked to testToken, it should keep the target rotation.
|
||||||
|
assertNotEquals(originalRotation, wallpaperToken.getWindowConfiguration().getRotation());
|
||||||
|
|
||||||
|
testToken.finishFixedRotationTransform();
|
||||||
|
// The rotation of wallpaperToken should be restored because its linked state is finished.
|
||||||
assertEquals(originalRotation, wallpaperToken.getWindowConfiguration().getRotation());
|
assertEquals(originalRotation, wallpaperToken.getWindowConfiguration().getRotation());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user