Fix default constructor for DisplayAdjustments
Add a default value for the configuration.
Add test for the default constructor.
Add tests for the configuration copy constructor.
Bug: 147711863
Test: atest FrameworksCoreTests:DisplayAdjustmentsTests
Change-Id: Ibb8480047eeb5f38e3695bdc3152388f1f90a999
diff --git a/core/java/android/view/DisplayAdjustments.java b/core/java/android/view/DisplayAdjustments.java
index 834dd7b..27c2d5c 100644
--- a/core/java/android/view/DisplayAdjustments.java
+++ b/core/java/android/view/DisplayAdjustments.java
@@ -16,6 +16,8 @@
package android.view;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
@@ -27,25 +29,25 @@
public static final DisplayAdjustments DEFAULT_DISPLAY_ADJUSTMENTS = new DisplayAdjustments();
private volatile CompatibilityInfo mCompatInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
- private Configuration mConfiguration;
+ private final Configuration mConfiguration = new Configuration(Configuration.EMPTY);
@UnsupportedAppUsage
public DisplayAdjustments() {
}
- public DisplayAdjustments(Configuration configuration) {
- mConfiguration = new Configuration(configuration != null
- ? configuration : Configuration.EMPTY);
+ public DisplayAdjustments(@Nullable Configuration configuration) {
+ if (configuration != null) {
+ mConfiguration.setTo(configuration);
+ }
}
- public DisplayAdjustments(DisplayAdjustments daj) {
+ public DisplayAdjustments(@NonNull DisplayAdjustments daj) {
setCompatibilityInfo(daj.mCompatInfo);
- mConfiguration = new Configuration(daj.mConfiguration != null
- ? daj.mConfiguration : Configuration.EMPTY);
+ mConfiguration.setTo(daj.getConfiguration());
}
@UnsupportedAppUsage
- public void setCompatibilityInfo(CompatibilityInfo compatInfo) {
+ public void setCompatibilityInfo(@Nullable CompatibilityInfo compatInfo) {
if (this == DEFAULT_DISPLAY_ADJUSTMENTS) {
throw new IllegalArgumentException(
"setCompatbilityInfo: Cannot modify DEFAULT_DISPLAY_ADJUSTMENTS");
@@ -62,7 +64,13 @@
return mCompatInfo;
}
- public void setConfiguration(Configuration configuration) {
+ /**
+ * Updates the configuration for the DisplayAdjustments with new configuration.
+ * Default to EMPTY configuration if new configuration is {@code null}
+ * @param configuration new configuration
+ * @throws IllegalArgumentException if trying to modify DEFAULT_DISPLAY_ADJUSTMENTS
+ */
+ public void setConfiguration(@Nullable Configuration configuration) {
if (this == DEFAULT_DISPLAY_ADJUSTMENTS) {
throw new IllegalArgumentException(
"setConfiguration: Cannot modify DEFAULT_DISPLAY_ADJUSTMENTS");
@@ -71,6 +79,7 @@
}
@UnsupportedAppUsage
+ @NonNull
public Configuration getConfiguration() {
return mConfiguration;
}
diff --git a/core/tests/coretests/src/android/view/DisplayAdjustmentsTests.java b/core/tests/coretests/src/android/view/DisplayAdjustmentsTests.java
new file mode 100644
index 0000000..afbf8db
--- /dev/null
+++ b/core/tests/coretests/src/android/view/DisplayAdjustmentsTests.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2020 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import static org.junit.Assert.assertEquals;
+
+import android.content.res.Configuration;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests for {@link DisplayAdjustmentsTests}.
+ *
+ * <p>Build/Install/Run:
+ * atest FrameworksCoreTests:DisplayAdjustmentsTests
+ */
+@RunWith(AndroidJUnit4.class)
+public class DisplayAdjustmentsTests {
+
+ @Test
+ public void testDefaultConstructor_hasEmptyConfiguration() {
+ DisplayAdjustments emptyAdjustments = new DisplayAdjustments();
+
+ assertEquals(Configuration.EMPTY, emptyAdjustments.getConfiguration());
+ }
+
+ @Test
+ public void testConfigurationConstructor_nullConfigurationBecomesEmpty() {
+ DisplayAdjustments emptyAdjustments = new DisplayAdjustments((Configuration) null);
+
+ assertEquals(Configuration.EMPTY, emptyAdjustments.getConfiguration());
+ }
+
+ @Test
+ public void testConfigurationConstructor_copiesConfiguration() {
+ Configuration configuration = new Configuration();
+ configuration.colorMode = 1000;
+ DisplayAdjustments adjustments = new DisplayAdjustments(configuration);
+
+ assertEquals(configuration, adjustments.getConfiguration());
+ }
+
+ @Test
+ public void testDisplayAdjustmentsConstructor_copiesConfiguration() {
+ Configuration configuration = new Configuration();
+ configuration.colorMode = 1000;
+ DisplayAdjustments oldAdjustments = new DisplayAdjustments(configuration);
+
+ DisplayAdjustments newAdjustments = new DisplayAdjustments(oldAdjustments);
+
+ assertEquals(configuration, newAdjustments.getConfiguration());
+ }
+}