Switch WindowContainer to use ConfigurationContainer

To reduce implementation dupication.
This also involved moving ConfigurationContainer to the wm package.

Test: bit FrameworksServicesTests:com.android.server.wm.ConfigurationContainerTests
Test: bit FrameworksServicesTests:com.android.server.wm.WindowContainerTests
Test: go/wm-smoke
Change-Id: Ibeca7e2ad2685f0984fccc66852d53ed9af0925f
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index 3c84941..889bb9b 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -167,6 +167,7 @@
 import com.android.server.am.ActivityStack.ActivityState;
 import com.android.server.wm.AppWindowContainerController;
 import com.android.server.wm.AppWindowContainerListener;
+import com.android.server.wm.ConfigurationContainer;
 import com.android.server.wm.TaskWindowContainerController;
 
 import org.xmlpull.v1.XmlPullParser;
@@ -2223,7 +2224,7 @@
     }
 
     @Override
-    void onOverrideConfigurationChanged(Configuration newConfig) {
+    public void onOverrideConfigurationChanged(Configuration newConfig) {
         final Configuration currentConfig = getOverrideConfiguration();
         if (currentConfig.equals(newConfig)) {
             return;
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 9925ba0..45e8fc3 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -125,6 +125,7 @@
 import com.android.internal.os.BatteryStatsImpl;
 import com.android.server.Watchdog;
 import com.android.server.am.ActivityManagerService.ItemMatcher;
+import com.android.server.wm.ConfigurationContainer;
 import com.android.server.wm.StackWindowController;
 import com.android.server.wm.StackWindowListener;
 import com.android.server.wm.WindowManagerService;
@@ -209,7 +210,7 @@
     }
 
     @Override
-    void onParentChanged() {
+    protected void onParentChanged() {
         super.onParentChanged();
         mStackSupervisor.updateUIDsPresentOnDisplay();
     }
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 5f42cdb..590cc7c 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -134,7 +134,6 @@
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
-import android.os.ParcelFileDescriptor;
 import android.os.PowerManager;
 import android.os.Process;
 import android.os.RemoteException;
@@ -167,6 +166,7 @@
 import com.android.internal.widget.LockPatternUtils;
 import com.android.server.LocalServices;
 import com.android.server.am.ActivityStack.ActivityState;
+import com.android.server.wm.ConfigurationContainer;
 import com.android.server.wm.PinnedStackWindowController;
 import com.android.server.wm.WindowManagerService;
 
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index 5753fbc..64ce1b9 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -53,6 +53,7 @@
 import com.android.internal.util.XmlUtils;
 
 import com.android.server.wm.AppWindowContainerController;
+import com.android.server.wm.ConfigurationContainer;
 import com.android.server.wm.StackWindowController;
 import com.android.server.wm.TaskWindowContainerController;
 import com.android.server.wm.TaskWindowContainerListener;
@@ -971,7 +972,7 @@
     }
 
     @Override
-    void onParentChanged() {
+    protected void onParentChanged() {
         super.onParentChanged();
         mService.mStackSupervisor.updateUIDsPresentOnDisplay();
     }
diff --git a/services/core/java/com/android/server/am/ConfigurationContainer.java b/services/core/java/com/android/server/wm/ConfigurationContainer.java
similarity index 87%
rename from services/core/java/com/android/server/am/ConfigurationContainer.java
rename to services/core/java/com/android/server/wm/ConfigurationContainer.java
index 3d60681..64bfbd0 100644
--- a/services/core/java/com/android/server/am/ConfigurationContainer.java
+++ b/services/core/java/com/android/server/wm/ConfigurationContainer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.server.am;
+package com.android.server.wm;
 
 import android.content.res.Configuration;
 
@@ -22,9 +22,7 @@
  * Contains common logic for classes that have override configurations and are organized in a
  * hierarchy.
  */
-// TODO(b/36505427): Move to wm package and have WindowContainer use this instead of having its own
-// implementation for merging configuration.
-abstract class ConfigurationContainer<E extends ConfigurationContainer> {
+public abstract class ConfigurationContainer<E extends ConfigurationContainer> {
 
     /** Contains override configuration settings applied to this configuration container. */
     private Configuration mOverrideConfiguration = new Configuration();
@@ -47,7 +45,7 @@
      * This method should be used for getting settings applied in each particular level of the
      * hierarchy.
      */
-    Configuration getConfiguration() {
+    public Configuration getConfiguration() {
         return mFullConfiguration;
     }
 
@@ -55,7 +53,7 @@
      * Notify that parent config changed and we need to update full configuration.
      * @see #mFullConfiguration
      */
-    void onConfigurationChanged(Configuration newParentConfig) {
+    public void onConfigurationChanged(Configuration newParentConfig) {
         mFullConfiguration.setTo(newParentConfig);
         mFullConfiguration.updateFrom(mOverrideConfiguration);
         for (int i = getChildCount() - 1; i >= 0; --i) {
@@ -65,7 +63,7 @@
     }
 
     /** Returns override configuration applied to this configuration container. */
-    Configuration getOverrideConfiguration() {
+    public Configuration getOverrideConfiguration() {
         return mOverrideConfiguration;
     }
 
@@ -74,7 +72,7 @@
      * @see #mOverrideConfiguration
      * @see #mFullConfiguration
      */
-    void onOverrideConfigurationChanged(Configuration overrideConfiguration) {
+    public void onOverrideConfigurationChanged(Configuration overrideConfiguration) {
         mOverrideConfiguration.setTo(overrideConfiguration);
         // Update full configuration of this container and all its children.
         final ConfigurationContainer parent = getParent();
@@ -87,7 +85,7 @@
      * Get merged override configuration from the top of the hierarchy down to this particular
      * instance. This should be reported to client as override config.
      */
-    Configuration getMergedOverrideConfiguration() {
+    public Configuration getMergedOverrideConfiguration() {
         return mMergedOverrideConfiguration;
     }
 
@@ -97,7 +95,7 @@
      * override config.
      * @see #mMergedOverrideConfiguration
      */
-    private void onMergedOverrideConfigurationChanged() {
+    void onMergedOverrideConfigurationChanged() {
         final ConfigurationContainer parent = getParent();
         if (parent != null) {
             mMergedOverrideConfiguration.setTo(parent.getMergedOverrideConfiguration());
@@ -114,7 +112,7 @@
     /**
      * Must be called when new parent for the container was set.
      */
-    void onParentChanged() {
+    protected void onParentChanged() {
         final ConfigurationContainer parent = getParent();
         // Removing parent usually means that we've detached this entity to destroy it or to attach
         // to another parent. In both cases we don't need to update the configuration now.
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index a37b2e5..dff963a 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -1446,7 +1446,7 @@
     }
 
     @VisibleForTesting
-    int getStaskPosById(int stackId) {
+    int getStackPosById(int stackId) {
         for (int i = mTaskStackContainers.size() - 1; i >= 0; --i) {
             final TaskStack stack = mTaskStackContainers.get(i);
             if (stack.mStackId == stackId) {
@@ -1457,7 +1457,7 @@
     }
 
     @Override
-    void onConfigurationChanged(Configuration newParentConfig) {
+    public void onConfigurationChanged(Configuration newParentConfig) {
         super.onConfigurationChanged(newParentConfig);
 
         // The display size information is heavily dependent on the resources in the current
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 233e75b..0d6c7e3 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -359,7 +359,7 @@
     }
 
     @Override
-    void onConfigurationChanged(Configuration newParentConfig) {
+    public void onConfigurationChanged(Configuration newParentConfig) {
         prepareFreezingTaskBounds();
         super.onConfigurationChanged(newParentConfig);
 
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index 600bc5c..018f738 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -38,7 +38,8 @@
  * The test class is {@link WindowContainerTests} which must be kept up-to-date and ran anytime
  * changes are made to this class.
  */
-class WindowContainer<E extends WindowContainer> implements Comparable<WindowContainer> {
+class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<E>
+        implements Comparable<WindowContainer> {
 
     static final int POSITION_TOP = Integer.MAX_VALUE;
     static final int POSITION_BOTTOM = Integer.MIN_VALUE;
@@ -54,22 +55,6 @@
     // screen with the top-most window container at the tail of the list.
     protected final WindowList<E> mChildren = new WindowList<E>();
 
-    /** Contains override configuration settings applied to this window container. */
-    private Configuration mOverrideConfiguration = new Configuration();
-
-    /**
-     * Contains full configuration applied to this window container. Corresponds to full parent's
-     * config with applied {@link #mOverrideConfiguration}.
-     */
-    private Configuration mFullConfiguration = new Configuration();
-
-    /**
-     * Contains merged override configuration settings from the top of the hierarchy down to this
-     * particular instance. It is different from {@link #mFullConfiguration} because it starts from
-     * topmost container's override config instead of global config.
-     */
-    private Configuration mMergedOverrideConfiguration = new Configuration();
-
     // The specified orientation for this window container.
     protected int mOrientation = SCREEN_ORIENTATION_UNSPECIFIED;
 
@@ -79,17 +64,29 @@
     // The owner/creator for this container. No controller if null.
     private WindowContainerController mController;
 
+    @Override
     final protected WindowContainer getParent() {
         return mParent;
     }
 
+
+    @Override
+    final protected int getChildCount() {
+        return mChildren.size();
+    }
+
+    @Override
+    final protected E getChildAt(int index) {
+        return mChildren.get(index);
+    }
+
     final protected void setParent(WindowContainer parent) {
         mParent = parent;
         // Removing parent usually means that we've detached this entity to destroy it or to attach
         // to another parent. In both cases we don't need to update the configuration now.
         if (mParent != null) {
             // Update full configuration of this container and all its children.
-            onConfigurationChanged(mParent.mFullConfiguration);
+            onConfigurationChanged(mParent.getConfiguration());
             // Update merged override configuration of this container and all its children.
             onMergedOverrideConfigurationChanged();
         }
@@ -282,44 +279,13 @@
     }
 
     /**
-     * Returns full configuration applied to this window container.
-     * This method should be used for getting settings applied in each particular level of the
-     * hierarchy.
-     */
-    Configuration getConfiguration() {
-        return mFullConfiguration;
-    }
-
-    /**
-     * Notify that parent config changed and we need to update full configuration.
-     * @see #mFullConfiguration
-     */
-    void onConfigurationChanged(Configuration newParentConfig) {
-        mFullConfiguration.setTo(newParentConfig);
-        mFullConfiguration.updateFrom(mOverrideConfiguration);
-        for (int i = mChildren.size() - 1; i >= 0; --i) {
-            final WindowContainer child = mChildren.get(i);
-            child.onConfigurationChanged(mFullConfiguration);
-        }
-    }
-
-    /** Returns override configuration applied to this window container. */
-    Configuration getOverrideConfiguration() {
-        return mOverrideConfiguration;
-    }
-
-    /**
      * Update override configuration and recalculate full config.
      * @see #mOverrideConfiguration
      * @see #mFullConfiguration
      */
-    void onOverrideConfigurationChanged(Configuration overrideConfiguration) {
-        mOverrideConfiguration.setTo(overrideConfiguration);
-        // Update full configuration of this container and all its children.
-        onConfigurationChanged(mParent != null ? mParent.getConfiguration() : EMPTY);
-        // Update merged override config of this container and all its children.
-        onMergedOverrideConfigurationChanged();
-
+    @Override
+    final public void onOverrideConfigurationChanged(Configuration overrideConfiguration) {
+        super.onOverrideConfigurationChanged(overrideConfiguration);
         if (mParent != null) {
             mParent.onDescendantOverrideConfigurationChanged();
         }
@@ -335,33 +301,6 @@
     }
 
     /**
-     * Get merged override configuration from the top of the hierarchy down to this
-     * particular instance. This should be reported to client as override config.
-     */
-    Configuration getMergedOverrideConfiguration() {
-        return mMergedOverrideConfiguration;
-    }
-
-    /**
-     * Update merged override configuration based on corresponding parent's config and notify all
-     * its children. If there is no parent, merged override configuration will set equal to current
-     * override config.
-     * @see #mMergedOverrideConfiguration
-     */
-    private void onMergedOverrideConfigurationChanged() {
-        if (mParent != null) {
-            mMergedOverrideConfiguration.setTo(mParent.getMergedOverrideConfiguration());
-            mMergedOverrideConfiguration.updateFrom(mOverrideConfiguration);
-        } else {
-            mMergedOverrideConfiguration.setTo(mOverrideConfiguration);
-        }
-        for (int i = mChildren.size() - 1; i >= 0; --i) {
-            final WindowContainer child = mChildren.get(i);
-            child.onMergedOverrideConfigurationChanged();
-        }
-    }
-
-    /**
      * Notify that the display this container is on has changed.
      * @param dc The new display this container is on.
      */
diff --git a/services/tests/servicestests/src/com/android/server/am/ConfigurationContainerTests.java b/services/tests/servicestests/src/com/android/server/wm/ConfigurationContainerTests.java
similarity index 94%
rename from services/tests/servicestests/src/com/android/server/am/ConfigurationContainerTests.java
rename to services/tests/servicestests/src/com/android/server/wm/ConfigurationContainerTests.java
index fd2fb4b..0f9b721 100644
--- a/services/tests/servicestests/src/com/android/server/am/ConfigurationContainerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/ConfigurationContainerTests.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.server.am;
+package com.android.server.wm;
 
 
 import org.junit.Test;
@@ -35,12 +35,10 @@
 import static org.junit.Assert.assertEquals;
 
 /**
- * Test class for {@link ConfigurationContainer}. Mostly duplicates configuration tests from
- * {@link com.android.server.wm.WindowContainerTests}.
+ * Test class for {@link ConfigurationContainer}.
  *
- * Build: mmma -j32 frameworks/base/services/tests/servicestests
- * Install: adb install -r out/target/product/$TARGET_PRODUCT/data/app/FrameworksServicesTests/FrameworksServicesTests.apk
- * Run: adb shell am instrument -w -e class com.android.server.am.ConfigurationContainerTests com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner
+ * Build/Install/Run:
+ *  bit FrameworksServicesTests:com.android.server.wm.ConfigurationContainerTests
  */
 @SmallTest
 @Presubmit
diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
index 856e940..3e9fd18 100644
--- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
@@ -301,14 +301,14 @@
         createStackControllerOnStackOnDisplay(PINNED_STACK_ID, mDisplayContent);
         final int initialStackCount = mDisplayContent.getStackCount();
         // Ensure that the pinned stack was placed at the end
-        assertEquals(initialStackCount - 1, mDisplayContent.getStaskPosById(PINNED_STACK_ID));
+        assertEquals(initialStackCount - 1, mDisplayContent.getStackPosById(PINNED_STACK_ID));
         // By default, this should try to create a new stack on top
         createTaskStackOnDisplay(mDisplayContent);
         final int afterStackCount = mDisplayContent.getStackCount();
         // Make sure the stack count has increased
         assertEquals(initialStackCount + 1, afterStackCount);
         // Ensure that the pinned stack is still on top
-        assertEquals(afterStackCount - 1, mDisplayContent.getStaskPosById(PINNED_STACK_ID));
+        assertEquals(afterStackCount - 1, mDisplayContent.getStackPosById(PINNED_STACK_ID));
     }
 
     /**
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 a7d594c..16b6ca6 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java
@@ -559,168 +559,6 @@
         assertEquals(1, child2223.compareTo(child21));
     }
 
-    @Test
-    public void testConfigurationInit() throws Exception {
-        final TestWindowContainerBuilder builder = new TestWindowContainerBuilder();
-
-        // Check root container initial config.
-        final TestWindowContainer root = builder.setLayer(0).build();
-        assertEquals(Configuration.EMPTY, root.getOverrideConfiguration());
-        assertEquals(Configuration.EMPTY, root.getMergedOverrideConfiguration());
-        assertEquals(Configuration.EMPTY, root.getConfiguration());
-
-        // Check child initial config.
-        final TestWindowContainer child1 = root.addChildWindow();
-        assertEquals(Configuration.EMPTY, child1.getOverrideConfiguration());
-        assertEquals(Configuration.EMPTY, child1.getMergedOverrideConfiguration());
-        assertEquals(Configuration.EMPTY, child1.getConfiguration());
-
-        // Check child initial config if root has overrides.
-        final Configuration rootOverrideConfig = new Configuration();
-        rootOverrideConfig.fontScale = 1.3f;
-        root.onOverrideConfigurationChanged(rootOverrideConfig);
-        final TestWindowContainer child2 = root.addChildWindow();
-        assertEquals(Configuration.EMPTY, child2.getOverrideConfiguration());
-        assertEquals(rootOverrideConfig, child2.getMergedOverrideConfiguration());
-        assertEquals(rootOverrideConfig, child2.getConfiguration());
-
-        // Check child initial config if root has parent config set.
-        final Configuration rootParentConfig = new Configuration();
-        rootParentConfig.fontScale = 0.8f;
-        rootParentConfig.orientation = SCREEN_ORIENTATION_LANDSCAPE;
-        root.onConfigurationChanged(rootParentConfig);
-        final Configuration rootFullConfig = new Configuration(rootParentConfig);
-        rootFullConfig.updateFrom(rootOverrideConfig);
-
-        final TestWindowContainer child3 = root.addChildWindow();
-        assertEquals(Configuration.EMPTY, child3.getOverrideConfiguration());
-        assertEquals(rootOverrideConfig, child3.getMergedOverrideConfiguration());
-        assertEquals(rootFullConfig, child3.getConfiguration());
-    }
-
-    @Test
-    public void testConfigurationChangeOnAddRemove() throws Exception {
-        final TestWindowContainerBuilder builder = new TestWindowContainerBuilder();
-
-        // Init root's config.
-        final TestWindowContainer root = builder.setLayer(0).build();
-        final Configuration rootOverrideConfig = new Configuration();
-        rootOverrideConfig.fontScale = 1.3f;
-        root.onOverrideConfigurationChanged(rootOverrideConfig);
-
-        // Init child's config.
-        final TestWindowContainer child = root.addChildWindow();
-        final Configuration childOverrideConfig = new Configuration();
-        childOverrideConfig.densityDpi = 320;
-        child.onOverrideConfigurationChanged(childOverrideConfig);
-        final Configuration mergedOverrideConfig = new Configuration(root.getConfiguration());
-        mergedOverrideConfig.updateFrom(childOverrideConfig);
-
-        // Check configuration update when child is removed from parent - it should remain same.
-        root.removeChild(child);
-        assertEquals(childOverrideConfig, child.getOverrideConfiguration());
-        assertEquals(mergedOverrideConfig, child.getMergedOverrideConfiguration());
-        assertEquals(mergedOverrideConfig, child.getConfiguration());
-
-        // It may be paranoia... but let's check if parent's config didn't change after removal.
-        assertEquals(rootOverrideConfig, root.getOverrideConfiguration());
-        assertEquals(rootOverrideConfig, root.getMergedOverrideConfiguration());
-        assertEquals(rootOverrideConfig, root.getConfiguration());
-
-        // Init different root
-        final TestWindowContainer root2 = builder.setLayer(0).build();
-        final Configuration rootOverrideConfig2 = new Configuration();
-        rootOverrideConfig2.fontScale = 1.1f;
-        root2.onOverrideConfigurationChanged(rootOverrideConfig2);
-
-        // Check configuration update when child is added to different parent.
-        mergedOverrideConfig.setTo(rootOverrideConfig2);
-        mergedOverrideConfig.updateFrom(childOverrideConfig);
-        root2.addChildWindow(child);
-        assertEquals(childOverrideConfig, child.getOverrideConfiguration());
-        assertEquals(mergedOverrideConfig, child.getMergedOverrideConfiguration());
-        assertEquals(mergedOverrideConfig, child.getConfiguration());
-    }
-
-    @Test
-    public void testConfigurationChangePropagation() throws Exception {
-        final TestWindowContainerBuilder builder = new TestWindowContainerBuilder();
-
-        // Builds 3-level vertical hierarchy with one window container on each level.
-        // In addition to different overrides on each level, everyone in hierarchy will have one
-        // common overridden value - orientation;
-
-        // Init root's config.
-        final TestWindowContainer root = builder.setLayer(0).build();
-        final Configuration rootOverrideConfig = new Configuration();
-        rootOverrideConfig.fontScale = 1.3f;
-        rootOverrideConfig.orientation = SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
-        root.onOverrideConfigurationChanged(rootOverrideConfig);
-
-        // Init children.
-        final TestWindowContainer child1 = root.addChildWindow();
-        final Configuration childOverrideConfig1 = new Configuration();
-        childOverrideConfig1.densityDpi = 320;
-        childOverrideConfig1.orientation = SCREEN_ORIENTATION_LANDSCAPE;
-        child1.onOverrideConfigurationChanged(childOverrideConfig1);
-
-        final TestWindowContainer child2 = child1.addChildWindow();
-        final Configuration childOverrideConfig2 = new Configuration();
-        childOverrideConfig2.screenWidthDp = 150;
-        childOverrideConfig2.orientation = SCREEN_ORIENTATION_PORTRAIT;
-        child2.onOverrideConfigurationChanged(childOverrideConfig2);
-
-        // Check configuration on all levels when root override is updated.
-        rootOverrideConfig.smallestScreenWidthDp = 200;
-        root.onOverrideConfigurationChanged(rootOverrideConfig);
-
-        final Configuration mergedOverrideConfig1 = new Configuration(rootOverrideConfig);
-        mergedOverrideConfig1.updateFrom(childOverrideConfig1);
-        final Configuration mergedConfig1 = new Configuration(mergedOverrideConfig1);
-
-        final Configuration mergedOverrideConfig2 = new Configuration(mergedOverrideConfig1);
-        mergedOverrideConfig2.updateFrom(childOverrideConfig2);
-        final Configuration mergedConfig2 = new Configuration(mergedOverrideConfig2);
-
-        assertEquals(rootOverrideConfig, root.getOverrideConfiguration());
-        assertEquals(rootOverrideConfig, root.getMergedOverrideConfiguration());
-        assertEquals(rootOverrideConfig, root.getConfiguration());
-
-        assertEquals(childOverrideConfig1, child1.getOverrideConfiguration());
-        assertEquals(mergedOverrideConfig1, child1.getMergedOverrideConfiguration());
-        assertEquals(mergedConfig1, child1.getConfiguration());
-
-        assertEquals(childOverrideConfig2, child2.getOverrideConfiguration());
-        assertEquals(mergedOverrideConfig2, child2.getMergedOverrideConfiguration());
-        assertEquals(mergedConfig2, child2.getConfiguration());
-
-        // Check configuration on all levels when root parent config is updated.
-        final Configuration rootParentConfig = new Configuration();
-        rootParentConfig.screenHeightDp = 100;
-        rootParentConfig.orientation = SCREEN_ORIENTATION_REVERSE_PORTRAIT;
-        root.onConfigurationChanged(rootParentConfig);
-        final Configuration mergedRootConfig = new Configuration(rootParentConfig);
-        mergedRootConfig.updateFrom(rootOverrideConfig);
-
-        mergedConfig1.setTo(mergedRootConfig);
-        mergedConfig1.updateFrom(mergedOverrideConfig1);
-
-        mergedConfig2.setTo(mergedConfig1);
-        mergedConfig2.updateFrom(mergedOverrideConfig2);
-
-        assertEquals(rootOverrideConfig, root.getOverrideConfiguration());
-        assertEquals(rootOverrideConfig, root.getMergedOverrideConfiguration());
-        assertEquals(mergedRootConfig, root.getConfiguration());
-
-        assertEquals(childOverrideConfig1, child1.getOverrideConfiguration());
-        assertEquals(mergedOverrideConfig1, child1.getMergedOverrideConfiguration());
-        assertEquals(mergedConfig1, child1.getConfiguration());
-
-        assertEquals(childOverrideConfig2, child2.getOverrideConfiguration());
-        assertEquals(mergedOverrideConfig2, child2.getMergedOverrideConfiguration());
-        assertEquals(mergedConfig2, child2.getConfiguration());
-    }
-
     /* Used so we can gain access to some protected members of the {@link WindowContainer} class */
     private class TestWindowContainer extends WindowContainer<TestWindowContainer> {
         private final int mLayer;
@@ -779,10 +617,6 @@
             return addChildWindow(new TestWindowContainerBuilder().setLayer(1));
         }
 
-        TestWindowContainer getChildAt(int index) {
-            return mChildren.get(index);
-        }
-
         @Override
         void onParentSet() {
             mOnParentSetCalled = true;