diff options
author | 2017-02-01 17:11:30 +0000 | |
---|---|---|
committer | 2017-02-01 17:11:34 +0000 | |
commit | a99952c18db3e40ea50eb36bf8978ac29cf1fbb3 (patch) | |
tree | 9b2f490119e57fb6c62f7a5601b20e5f5af1f0b3 | |
parent | 26dbff358ce258af5c3ef31ef4f98c976961fa94 (diff) | |
parent | 2fb7de3d51bea5daf8790c0bc5070bd2ecba2a2a (diff) |
Merge "Revert "Allow opening activity to specify orientation.""
6 files changed, 22 insertions, 90 deletions
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 38b36a677a4d..baf777220691 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -1899,22 +1899,11 @@ final class ActivityRecord implements AppWindowContainerListener { task.taskId, requestedOrientation); } - /** - * Set the last reported global configuration to the client. Should be called whenever a new - * global configuration is sent to the client for this activity. - */ - void setLastReportedGlobalConfiguration(@NonNull Configuration config) { + // TODO: now used only in one place to address race-condition. Remove when that will be fixed. + void setLastReportedConfiguration(@NonNull Configuration config) { mLastReportedConfiguration.setTo(config); } - /** - * Set the last reported merged configuration to the client. Should be called whenever a new - * merged configuration is sent to the client for this activity. - */ - void setLastReportedMergedOverrideConfiguration(@NonNull Configuration config) { - mLastReportedOverrideConfiguration.setTo(config); - } - /** Call when override config was sent to the Window Manager to update internal records. */ void onOverrideConfigurationSent() { mLastReportedOverrideConfiguration.setTo(task.getMergedOverrideConfiguration()); diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 33a9586617f0..4411794d13f7 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -1333,18 +1333,10 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // Because we could be starting an Activity in the system process this may not go across // a Binder interface which would create a new Configuration. Consequently we have to // always create a new Configuration here. - - final Configuration globalConfiguration = - new Configuration(mService.getGlobalConfiguration()); - r.setLastReportedGlobalConfiguration(globalConfiguration); - final Configuration mergedOverrideConfiguration = - new Configuration(task.getMergedOverrideConfiguration()); - r.setLastReportedMergedOverrideConfiguration(mergedOverrideConfiguration); - app.thread.scheduleLaunchActivity(new Intent(r.intent), r.appToken, System.identityHashCode(r), r.info, - globalConfiguration, - mergedOverrideConfiguration, r.compat, + new Configuration(mService.getGlobalConfiguration()), + new Configuration(task.getMergedOverrideConfiguration()), r.compat, r.launchedFromPackage, task.voiceInteractor, app.repProcState, r.icicle, r.persistentState, results, newIntents, !andResume, mService.isNextTransitionForward(), profilerInfo); @@ -1739,7 +1731,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // We'll update with whatever configuration it now says // it used to launch. if (config != null) { - r.setLastReportedGlobalConfiguration(config); + r.setLastReportedConfiguration(config); } // We are now idle. If someone is waiting for a thumbnail from diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index d64376973616..bcc720d05424 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -1151,11 +1151,10 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree */ @Override int getOrientation() { - if (fillsParent() && (isVisible() || mService.mOpeningApps.contains(this))) { - return mOrientation; + if (hidden || hiddenRequested) { + return SCREEN_ORIENTATION_UNSET; } - - return SCREEN_ORIENTATION_UNSET; + return mOrientation; } /** Returns the app's preferred orientation regardless of its currently visibility state. */ diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 5e25da31d4eb..5b96263b1817 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -510,13 +510,14 @@ class WindowContainer<E extends WindowContainer> implements Comparable<WindowCon * specification... */ int getOrientation() { - if (!fillsParent()) { - // Ignore containers that don't completely fills their parents. + + if (!fillsParent() || !isVisible()) { + // Ignore invisible containers or containers that don't completely fills their parents. return SCREEN_ORIENTATION_UNSET; } - // The container fills its parent and is visible so we can use it orientation if it has one - // specified; otherwise we prefer to use the orientation of its topmost child that has one + // The container fills its parent so we can use it orientation if it has one specified, + // otherwise we prefer to use the orientation of its topmost child that has one // specified and fall back on this container's unset or unspecified value as a candidate // if none of the children have a better candidate for the orientation. if (mOrientation != SCREEN_ORIENTATION_UNSET diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 779ac5775bde..9b96523af73f 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2442,15 +2442,6 @@ public class WindowManagerService extends IWindowManager.Stub } } - /** - * Updates the device orientation from the present app tokens. - * - * Note: A place this is method called is before an {@link android.app.Activity} starts to - * ensure that it is created in the proper orientation. It is imperative that the present - * {@link AppWindowToken} specify that they can influence the orientation, accomplished with the - * override of {@link WindowContainer#canSpecifyOrientation()}. Visibility changes only will not - * guarantee this as other operations (such as freezing the screen) can defer these operations. - */ @Override public Configuration updateOrientationFromAppTokens(Configuration currentConfig, IBinder freezeThisOneIfNeeded, int displayId) { diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java index 4f9cd9547a52..4f740ac46646 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java @@ -388,32 +388,6 @@ public class WindowContainerTests extends WindowTestsBase { } @Test - public void testGetOrientation_childSpecified() throws Exception { - testGetOrientation_childSpecifiedConfig(false, SCREEN_ORIENTATION_LANDSCAPE, - SCREEN_ORIENTATION_LANDSCAPE); - testGetOrientation_childSpecifiedConfig(false, SCREEN_ORIENTATION_UNSET, - SCREEN_ORIENTATION_UNSET); - } - - private void testGetOrientation_childSpecifiedConfig(boolean childVisible, int childOrientation, - int expectedOrientation) { - final TestWindowContainerBuilder builder = new TestWindowContainerBuilder(); - final TestWindowContainer root = builder.setLayer(0).build(); - root.setFillsParent(true); - - builder.setIsVisible(childVisible); - - if (childOrientation != SCREEN_ORIENTATION_UNSET) { - builder.setOrientation(childOrientation); - } - - final TestWindowContainer child1 = root.addChildWindow(builder); - child1.setFillsParent(true); - - assertTrue(root.getOrientation() == expectedOrientation); - } - - @Test public void testGetOrientation_Unset() throws Exception { final TestWindowContainerBuilder builder = new TestWindowContainerBuilder(); final TestWindowContainer root = builder.setLayer(0).setIsVisible(true).build(); @@ -433,17 +407,18 @@ public class WindowContainerTests extends WindowTestsBase { invisibleChild1VisibleAndSet.setOrientation(SCREEN_ORIENTATION_LANDSCAPE); // Landscape well because the container is visible and that is what we set on it above. assertEquals(SCREEN_ORIENTATION_LANDSCAPE, invisibleChild1VisibleAndSet.getOrientation()); - // Landscape because even though the container isn't visible it has a child that is - // specifying it can influence the orientation by being visible. - assertEquals(SCREEN_ORIENTATION_LANDSCAPE, invisible.getOrientation()); - // Landscape because the grandchild is visible and therefore can participate. - assertEquals(SCREEN_ORIENTATION_LANDSCAPE, root.getOrientation()); + // Unset because the container isn't visible even though it has a child that thinks it is + // visible. + assertEquals(SCREEN_ORIENTATION_UNSET, invisible.getOrientation()); + // Unspecified because we are visible and we didn't specify an orientation and there isn't + // a visible child. + assertEquals(SCREEN_ORIENTATION_UNSPECIFIED, root.getOrientation()); builder.setIsVisible(true).setLayer(-3); final TestWindowContainer visibleUnset = root.addChildWindow(builder); visibleUnset.setOrientation(SCREEN_ORIENTATION_UNSET); assertEquals(SCREEN_ORIENTATION_UNSET, visibleUnset.getOrientation()); - assertEquals(SCREEN_ORIENTATION_LANDSCAPE, root.getOrientation()); + assertEquals(SCREEN_ORIENTATION_UNSPECIFIED, root.getOrientation()); } @@ -715,7 +690,6 @@ public class WindowContainerTests extends WindowTestsBase { private boolean mIsAnimating; private boolean mIsVisible; private boolean mFillsParent; - private Integer mOrientation; private boolean mOnParentSetCalled; @@ -734,13 +708,11 @@ public class WindowContainerTests extends WindowTestsBase { return 1; }; - TestWindowContainer(int layer, boolean isAnimating, boolean isVisible, - Integer orientation) { + TestWindowContainer(int layer, boolean isAnimating, boolean isVisible) { mLayer = layer; mIsAnimating = isAnimating; mIsVisible = isVisible; mFillsParent = true; - mOrientation = orientation; } TestWindowContainer getParentWindow() { @@ -786,11 +758,6 @@ public class WindowContainerTests extends WindowTestsBase { } @Override - int getOrientation() { - return mOrientation != null ? mOrientation : super.getOrientation(); - } - - @Override boolean fillsParent() { return mFillsParent; } @@ -804,7 +771,6 @@ public class WindowContainerTests extends WindowTestsBase { private int mLayer; private boolean mIsAnimating; private boolean mIsVisible; - private Integer mOrientation; public TestWindowContainerBuilder() { reset(); @@ -825,21 +791,15 @@ public class WindowContainerTests extends WindowTestsBase { return this; } - TestWindowContainerBuilder setOrientation(int orientation) { - mOrientation = orientation; - return this; - } - TestWindowContainerBuilder reset() { mLayer = 0; mIsAnimating = false; mIsVisible = false; - mOrientation = null; return this; } TestWindowContainer build() { - return new TestWindowContainer(mLayer, mIsAnimating, mIsVisible, mOrientation); + return new TestWindowContainer(mLayer, mIsAnimating, mIsVisible); } } } |