diff options
5 files changed, 37 insertions, 130 deletions
diff --git a/core/java/android/app/servertransaction/ConfigurationChangeItem.java b/core/java/android/app/servertransaction/ConfigurationChangeItem.java index 22da706cc7f4..123d7926160c 100644 --- a/core/java/android/app/servertransaction/ConfigurationChangeItem.java +++ b/core/java/android/app/servertransaction/ConfigurationChangeItem.java @@ -16,6 +16,8 @@ package android.app.servertransaction; +import static java.util.Objects.requireNonNull; + import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ClientTransactionHandler; @@ -27,12 +29,20 @@ import java.util.Objects; /** * App configuration change message. + * * @hide */ public class ConfigurationChangeItem extends ClientTransactionItem { - private Configuration mConfiguration; - private int mDeviceId; + @NonNull + private final Configuration mConfiguration; + + private final int mDeviceId; + + public ConfigurationChangeItem(@NonNull Configuration config, int deviceId) { + mConfiguration = new Configuration(config); + mDeviceId = deviceId; + } @Override public void preExecute(@NonNull ClientTransactionHandler client) { @@ -46,55 +56,31 @@ public class ConfigurationChangeItem extends ClientTransactionItem { client.handleConfigurationChanged(mConfiguration, mDeviceId); } - // ObjectPoolItem implementation - - private ConfigurationChangeItem() {} - - /** Obtain an instance initialized with provided params. */ - public static ConfigurationChangeItem obtain(@NonNull Configuration config, int deviceId) { - ConfigurationChangeItem instance = ObjectPool.obtain(ConfigurationChangeItem.class); - if (instance == null) { - instance = new ConfigurationChangeItem(); - } - instance.mConfiguration = new Configuration(config); - instance.mDeviceId = deviceId; - - return instance; - } - - @Override - public void recycle() { - mConfiguration = null; - mDeviceId = 0; - ObjectPool.recycle(this); - } - - // Parcelable implementation - /** Write to Parcel. */ + /** Writes to Parcel. */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeTypedObject(mConfiguration, flags); dest.writeInt(mDeviceId); } - /** Read from Parcel. */ + /** Reads from Parcel. */ private ConfigurationChangeItem(Parcel in) { - mConfiguration = in.readTypedObject(Configuration.CREATOR); + mConfiguration = requireNonNull(in.readTypedObject(Configuration.CREATOR)); mDeviceId = in.readInt(); } public static final @android.annotation.NonNull Creator<ConfigurationChangeItem> CREATOR = - new Creator<ConfigurationChangeItem>() { - public ConfigurationChangeItem createFromParcel(Parcel in) { - return new ConfigurationChangeItem(in); - } - - public ConfigurationChangeItem[] newArray(int size) { - return new ConfigurationChangeItem[size]; - } - }; + new Creator<>() { + public ConfigurationChangeItem createFromParcel(Parcel in) { + return new ConfigurationChangeItem(in); + } + + public ConfigurationChangeItem[] newArray(int size) { + return new ConfigurationChangeItem[size]; + } + }; @Override public boolean equals(@Nullable Object o) { diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java index c7d5f4182473..24f6ceaf786c 100644 --- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java +++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java @@ -254,8 +254,8 @@ public class ActivityThreadTest { try { // Send process level config change. ClientTransaction transaction = newTransaction(activityThread); - transaction.addTransactionItem(ConfigurationChangeItem.obtain( - newConfig, DEVICE_ID_INVALID)); + transaction.addTransactionItem( + new ConfigurationChangeItem(newConfig, DEVICE_ID_INVALID)); appThread.scheduleTransaction(transaction); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); @@ -474,15 +474,15 @@ public class ActivityThreadTest { activity.mTestLatch = new CountDownLatch(1); ClientTransaction transaction = newTransaction(activityThread); - transaction.addTransactionItem(ConfigurationChangeItem.obtain( - processConfigLandscape, DEVICE_ID_INVALID)); + transaction.addTransactionItem( + new ConfigurationChangeItem(processConfigLandscape, DEVICE_ID_INVALID)); appThread.scheduleTransaction(transaction); transaction = newTransaction(activityThread); transaction.addTransactionItem(new ActivityConfigurationChangeItem( activity.getActivityToken(), activityConfigLandscape, new ActivityWindowInfo())); - transaction.addTransactionItem(ConfigurationChangeItem.obtain( - processConfigPortrait, DEVICE_ID_INVALID)); + transaction.addTransactionItem( + new ConfigurationChangeItem(processConfigPortrait, DEVICE_ID_INVALID)); transaction.addTransactionItem(new ActivityConfigurationChangeItem( activity.getActivityToken(), activityConfigPortrait, new ActivityWindowInfo())); appThread.scheduleTransaction(transaction); diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java deleted file mode 100644 index c068cdf6c93d..000000000000 --- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 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. - * 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.app.servertransaction; - -import static android.app.servertransaction.TestUtils.config; - -import static org.junit.Assert.assertNotSame; - -import android.annotation.NonNull; -import android.os.IBinder; -import android.platform.test.annotations.Presubmit; - -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.filters.SmallTest; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -import java.util.function.Supplier; - -/** - * Tests for {@link ObjectPool}. - * - * <p>Build/Install/Run: - * atest FrameworksCoreTests:ObjectPoolTests - * - * <p>This test class is a part of Window Manager Service tests and specified in - * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. - */ -@RunWith(AndroidJUnit4.class) -@SmallTest -@Presubmit -public class ObjectPoolTests { - - @Rule - public final MockitoRule mocks = MockitoJUnit.rule(); - - @Mock - private IBinder mActivityToken; - - // 1. Check if two obtained objects from pool are not the same. - // 2. Check if the state of the object is cleared after recycling. - // 3. Check if the same object is obtained from pool after recycling. - - @Test - public void testRecycleConfigurationChangeItem() { - testRecycle(() -> ConfigurationChangeItem.obtain(config(), 1)); - } - - private void testRecycle(@NonNull Supplier<? extends ObjectPoolItem> obtain) { - // Reuse the same object after recycle. - final ObjectPoolItem item = obtain.get(); - item.recycle(); - final ObjectPoolItem item2 = obtain.get(); - - assertNotSame(item, item2); // Different instance. - - // Create new object when the pool is empty. - final ObjectPoolItem item3 = obtain.get(); - - assertNotSame(item, item3); - } -} diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java index 79b4b4f08ead..59d8c8dd3c60 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java @@ -74,11 +74,13 @@ public class TransactionParcelTests { @Test public void testConfigurationChange() { // Write to parcel - ConfigurationChangeItem item = ConfigurationChangeItem.obtain(config(), 1 /* deviceId */); + final ConfigurationChangeItem item = + new ConfigurationChangeItem(config(), 1 /* deviceId */); writeAndPrepareForReading(item); // Read from parcel and assert - ConfigurationChangeItem result = ConfigurationChangeItem.CREATOR.createFromParcel(mParcel); + final ConfigurationChangeItem result = + ConfigurationChangeItem.CREATOR.createFromParcel(mParcel); assertEquals(item.hashCode(), result.hashCode()); assertEquals(item, result); diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index 984caf1c692b..2bae0a826417 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -437,7 +437,7 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio final ConfigurationChangeItem configurationChangeItem; synchronized (mLastReportedConfiguration) { onConfigurationChangePreScheduled(mLastReportedConfiguration); - configurationChangeItem = ConfigurationChangeItem.obtain( + configurationChangeItem = new ConfigurationChangeItem( mLastReportedConfiguration, mLastTopActivityDeviceId); } // Schedule immediately to make sure the app component (e.g. receiver, service) can get @@ -1721,8 +1721,8 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio } onConfigurationChangePreScheduled(config); - scheduleClientTransactionItem(thread, ConfigurationChangeItem.obtain( - config, mLastTopActivityDeviceId)); + scheduleClientTransactionItem( + thread, new ConfigurationChangeItem(config, mLastTopActivityDeviceId)); } private void onConfigurationChangePreScheduled(@NonNull Configuration config) { |