From b658e2dff0a7a4c941061b2ed52db933e7c38fd5 Mon Sep 17 00:00:00 2001 From: Henri Chataing Date: Fri, 23 Dec 2022 14:45:42 +0000 Subject: [PATCH 1/2] Nfc: Replace use of android.view.Window->isDestroyed() The code was testing to know if an Activity is destroyed, directly use Activity->isDestroyed() to this purpose. Bug: 244264995 Test: m Change-Id: Ia3845819f65214367648f35c8e1ad685f2e00c85 --- core/java/android/nfc/NfcActivityManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/java/android/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java index 935374d15d9bc..911aaf317e3e3 100644 --- a/core/java/android/nfc/NfcActivityManager.java +++ b/core/java/android/nfc/NfcActivityManager.java @@ -122,7 +122,7 @@ public final class NfcActivityManager extends IAppCallback.Stub Binder token; public NfcActivityState(Activity activity) { - if (activity.getWindow().isDestroyed()) { + if (activity.isDestroyed()) { throw new IllegalStateException("activity is already destroyed"); } // Check if activity is resumed right now, as we will not From 268f2b902e441d5a0a52c16ea2e565d1032a3750 Mon Sep 17 00:00:00 2001 From: Henri Chataing Date: Fri, 23 Dec 2022 16:10:19 +0000 Subject: [PATCH 2/2] Nfc: Change TechListParcel to use public Parcel->readStringArray() Implement unit tests for TechListParcel to validate the change. Test: atest NfcManagerTests Bug: 244264995 Change-Id: Ic84936e09cb0f88ef4e1f873bf28411c20a46d08 --- core/java/android/nfc/TechListParcel.java | 2 +- core/tests/nfctests/Android.bp | 1 + .../src/android/nfc/TechListParcelTest.java | 82 +++++++++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 core/tests/nfctests/src/android/nfc/TechListParcelTest.java diff --git a/core/java/android/nfc/TechListParcel.java b/core/java/android/nfc/TechListParcel.java index 90645dd939ae1..9f01559bd3443 100644 --- a/core/java/android/nfc/TechListParcel.java +++ b/core/java/android/nfc/TechListParcel.java @@ -53,7 +53,7 @@ public class TechListParcel implements Parcelable { int count = source.readInt(); String[][] techLists = new String[count][]; for (int i = 0; i < count; i++) { - techLists[i] = source.readStringArray(); + techLists[i] = source.createStringArray(); } return new TechListParcel(techLists); } diff --git a/core/tests/nfctests/Android.bp b/core/tests/nfctests/Android.bp index 335cea140df65..c74600bbab22c 100644 --- a/core/tests/nfctests/Android.bp +++ b/core/tests/nfctests/Android.bp @@ -27,6 +27,7 @@ android_test { "androidx.test.ext.junit", "androidx.test.rules", "mockito-target-minus-junit4", + "truth-prebuilt", ], libs: [ "android.test.runner", diff --git a/core/tests/nfctests/src/android/nfc/TechListParcelTest.java b/core/tests/nfctests/src/android/nfc/TechListParcelTest.java new file mode 100644 index 0000000000000..a12bbbc6884b3 --- /dev/null +++ b/core/tests/nfctests/src/android/nfc/TechListParcelTest.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2022 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.nfc; + +import static com.google.common.truth.Truth.assertThat; + +import android.os.Parcel; + +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Arrays; + +@RunWith(AndroidJUnit4.class) +public class TechListParcelTest { + + private static final String[] TECH_LIST_1 = new String[] { "tech1.1", "tech1.2" }; + private static final String[] TECH_LIST_2 = new String[] { "tech2.1" }; + private static final String[] TECH_LIST_EMPTY = new String[] {}; + + @Test + public void testWriteParcel() { + TechListParcel techListParcel = new TechListParcel(TECH_LIST_1, TECH_LIST_2); + + Parcel parcel = Parcel.obtain(); + techListParcel.writeToParcel(parcel, 0); + parcel.setDataPosition(0); + TechListParcel actualTechList = + TechListParcel.CREATOR.createFromParcel(parcel); + parcel.recycle(); + + assertThat(actualTechList.getTechLists().length).isEqualTo(2); + assertThat(Arrays.equals(actualTechList.getTechLists()[0], TECH_LIST_1)).isTrue(); + assertThat(Arrays.equals(actualTechList.getTechLists()[1], TECH_LIST_2)).isTrue(); + } + + @Test + public void testWriteParcelArrayEmpty() { + TechListParcel techListParcel = new TechListParcel(); + + Parcel parcel = Parcel.obtain(); + techListParcel.writeToParcel(parcel, 0); + parcel.setDataPosition(0); + TechListParcel actualTechList = + TechListParcel.CREATOR.createFromParcel(parcel); + parcel.recycle(); + + assertThat(actualTechList.getTechLists().length).isEqualTo(0); + } + + @Test + public void testWriteParcelElementEmpty() { + TechListParcel techListParcel = new TechListParcel(TECH_LIST_EMPTY); + + Parcel parcel = Parcel.obtain(); + techListParcel.writeToParcel(parcel, 0); + parcel.setDataPosition(0); + TechListParcel actualTechList = + TechListParcel.CREATOR.createFromParcel(parcel); + parcel.recycle(); + + assertThat(actualTechList.getTechLists().length).isEqualTo(1); + assertThat(Arrays.equals(actualTechList.getTechLists()[0], TECH_LIST_EMPTY)).isTrue(); + } + +}