diff --git a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/TunerAdapterTest.java b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/TunerAdapterTest.java index 7a9976779df9f..d851a7724e8ee 100644 --- a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/TunerAdapterTest.java +++ b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/TunerAdapterTest.java @@ -98,7 +98,7 @@ public final class TunerAdapterTest { throw new IllegalArgumentException(); } if (program.getPrimaryId().getValue() < AM_LOWER_LIMIT_KHZ) { - mTunerCallback.onTuneFailed(RadioManager.STATUS_BAD_VALUE, program); + mTunerCallback.onTuneFailed(RadioTuner.TUNER_RESULT_INVALID_ARGUMENTS, program); } else { mTunerCallback.onCurrentProgramInfoChanged(FM_PROGRAM_INFO); } @@ -208,14 +208,14 @@ public final class TunerAdapterTest { @Test public void seek_forTunerAdapter_invokesOnErrorWhenTimeout() throws Exception { doAnswer(invocation -> { - mTunerCallback.onTuneFailed(RadioManager.STATUS_TIMED_OUT, FM_SELECTOR); + mTunerCallback.onTuneFailed(RadioTuner.TUNER_RESULT_TIMEOUT, FM_SELECTOR); return RadioManager.STATUS_OK; }).when(mTunerMock).seek(anyBoolean(), anyBoolean()); mRadioTuner.scan(RadioTuner.DIRECTION_UP, /* skipSubChannel*/ true); verify(mCallbackMock, timeout(CALLBACK_TIMEOUT_MS)).onTuneFailed( - RadioManager.STATUS_TIMED_OUT, FM_SELECTOR); + RadioTuner.TUNER_RESULT_TIMEOUT, FM_SELECTOR); } @Test @@ -246,7 +246,7 @@ public final class TunerAdapterTest { mRadioTuner.tune(invalidSelector); verify(mCallbackMock, timeout(CALLBACK_TIMEOUT_MS)) - .onTuneFailed(RadioManager.STATUS_BAD_VALUE, invalidSelector); + .onTuneFailed(RadioTuner.TUNER_RESULT_INVALID_ARGUMENTS, invalidSelector); } @Test diff --git a/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/ConversionUtilsResultTest.java b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/ConversionUtilsResultTest.java new file mode 100644 index 0000000000000..df3ddfd6bb717 --- /dev/null +++ b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/ConversionUtilsResultTest.java @@ -0,0 +1,65 @@ +/* + * 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 com.android.server.broadcastradio.aidl; + +import android.hardware.broadcastradio.Result; +import android.hardware.radio.RadioTuner; + +import com.google.common.truth.Expect; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Arrays; +import java.util.List; + +@RunWith(Parameterized.class) +public final class ConversionUtilsResultTest { + + private final int mHalResult; + private final int mTunerResult; + + @Rule + public final Expect expect = Expect.create(); + + public ConversionUtilsResultTest(int halResult, int tunerResult) { + this.mHalResult = halResult; + this.mTunerResult = tunerResult; + } + + @Parameterized.Parameters + public static List inputParameters() { + return Arrays.asList(new Object[][]{ + {Result.OK, RadioTuner.TUNER_RESULT_OK}, + {Result.INTERNAL_ERROR, RadioTuner.TUNER_RESULT_INTERNAL_ERROR}, + {Result.INVALID_ARGUMENTS, RadioTuner.TUNER_RESULT_INVALID_ARGUMENTS}, + {Result.INVALID_STATE, RadioTuner.TUNER_RESULT_INVALID_STATE}, + {Result.NOT_SUPPORTED, RadioTuner.TUNER_RESULT_NOT_SUPPORTED}, + {Result.TIMEOUT, RadioTuner.TUNER_RESULT_TIMEOUT}, + {Result.UNKNOWN_ERROR, RadioTuner.TUNER_RESULT_UNKNOWN_ERROR} + }); + } + + @Test + public void halResultToTunerResult() { + expect.withMessage("Tuner result converted from AIDL HAL result %s", mHalResult) + .that(ConversionUtils.halResultToTunerResult(mHalResult)) + .isEqualTo(mTunerResult); + } +} diff --git a/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/TunerSessionTest.java b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/TunerSessionTest.java index 36c96260ae8f2..c5c6349df07e4 100644 --- a/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/TunerSessionTest.java +++ b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/TunerSessionTest.java @@ -416,7 +416,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase { for (int index = 0; index < numSessions; index++) { verify(mAidlTunerCallbackMocks[index], CALLBACK_TIMEOUT) - .onTuneFailed(eq(Result.TIMEOUT), any()); + .onTuneFailed(eq(RadioTuner.TUNER_RESULT_TIMEOUT), any()); } } diff --git a/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/hal2/ConvertResultTest.java b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/hal2/ConvertResultTest.java new file mode 100644 index 0000000000000..d106de9be06f2 --- /dev/null +++ b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/hal2/ConvertResultTest.java @@ -0,0 +1,66 @@ +/* + * 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 com.android.server.broadcastradio.hal2; + +import android.hardware.broadcastradio.V2_0.Result; +import android.hardware.radio.RadioTuner; + +import com.google.common.truth.Expect; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Arrays; +import java.util.List; + +@RunWith(Parameterized.class) +public final class ConvertResultTest { + + private final int mHalResult; + private final int mTunerResult; + + @Rule + public final Expect expect = Expect.create(); + + public ConvertResultTest(int halResult, int tunerResult) { + this.mHalResult = halResult; + this.mTunerResult = tunerResult; + } + + @Parameterized.Parameters + public static List inputParameters() { + return Arrays.asList(new Object[][]{ + {Result.OK, RadioTuner.TUNER_RESULT_OK}, + {Result.INTERNAL_ERROR, RadioTuner.TUNER_RESULT_INTERNAL_ERROR}, + {Result.INVALID_ARGUMENTS, RadioTuner.TUNER_RESULT_INVALID_ARGUMENTS}, + {Result.INVALID_STATE, RadioTuner.TUNER_RESULT_INVALID_STATE}, + {Result.NOT_SUPPORTED, RadioTuner.TUNER_RESULT_NOT_SUPPORTED}, + {Result.TIMEOUT, RadioTuner.TUNER_RESULT_TIMEOUT}, + {Result.UNKNOWN_ERROR, RadioTuner.TUNER_RESULT_UNKNOWN_ERROR} + }); + } + + @Test + public void halResultToTunerResult() { + expect.withMessage("Tuner result converted from HAL 2.0 result %s", + Result.toString(mHalResult)) + .that(Convert.halResultToTunerResult(mHalResult)) + .isEqualTo(mTunerResult); + } +} diff --git a/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/hal2/TunerSessionHidlTest.java b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/hal2/TunerSessionHidlTest.java index 6b75d8d0b5dc6..db16c0362e7c9 100644 --- a/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/hal2/TunerSessionHidlTest.java +++ b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/hal2/TunerSessionHidlTest.java @@ -409,7 +409,7 @@ public final class TunerSessionHidlTest extends ExtendedRadioMockitoTestCase { for (int index = 0; index < numSessions; index++) { verify(mAidlTunerCallbackMocks[index], CALLBACK_TIMEOUT) - .onTuneFailed(eq(Result.TIMEOUT), any()); + .onTuneFailed(eq(RadioTuner.TUNER_RESULT_TIMEOUT), any()); } } diff --git a/services/core/java/com/android/server/broadcastradio/aidl/ConversionUtils.java b/services/core/java/com/android/server/broadcastradio/aidl/ConversionUtils.java index 9a7a3b5e18706..3c0fda863cdc2 100644 --- a/services/core/java/com/android/server/broadcastradio/aidl/ConversionUtils.java +++ b/services/core/java/com/android/server/broadcastradio/aidl/ConversionUtils.java @@ -33,6 +33,7 @@ import android.hardware.radio.ProgramList; import android.hardware.radio.ProgramSelector; import android.hardware.radio.RadioManager; import android.hardware.radio.RadioMetadata; +import android.hardware.radio.RadioTuner; import android.os.Build; import android.os.ParcelableException; import android.os.ServiceSpecificException; @@ -95,6 +96,27 @@ final class ConversionUtils { } } + @RadioTuner.TunerResultType + static int halResultToTunerResult(int result) { + switch (result) { + case Result.OK: + return RadioTuner.TUNER_RESULT_OK; + case Result.INTERNAL_ERROR: + return RadioTuner.TUNER_RESULT_INTERNAL_ERROR; + case Result.INVALID_ARGUMENTS: + return RadioTuner.TUNER_RESULT_INVALID_ARGUMENTS; + case Result.INVALID_STATE: + return RadioTuner.TUNER_RESULT_INVALID_STATE; + case Result.NOT_SUPPORTED: + return RadioTuner.TUNER_RESULT_NOT_SUPPORTED; + case Result.TIMEOUT: + return RadioTuner.TUNER_RESULT_TIMEOUT; + case Result.UNKNOWN_ERROR: + default: + return RadioTuner.TUNER_RESULT_UNKNOWN_ERROR; + } + } + static VendorKeyValue[] vendorInfoToHalVendorKeyValues(@Nullable Map info) { if (info == null) { return new VendorKeyValue[]{}; diff --git a/services/core/java/com/android/server/broadcastradio/aidl/RadioModule.java b/services/core/java/com/android/server/broadcastradio/aidl/RadioModule.java index 47203c8854a3a..6193f234730dd 100644 --- a/services/core/java/com/android/server/broadcastradio/aidl/RadioModule.java +++ b/services/core/java/com/android/server/broadcastradio/aidl/RadioModule.java @@ -100,6 +100,7 @@ final class RadioModule { synchronized (mLock) { android.hardware.radio.ProgramSelector csel = ConversionUtils.programSelectorFromHalProgramSelector(programSelector); + int tunerResult = ConversionUtils.halResultToTunerResult(result); fanoutAidlCallbackLocked((cb, sdkVersion) -> { if (csel != null && !ConversionUtils .programSelectorMeetsSdkVersionRequirement(csel, sdkVersion)) { @@ -107,7 +108,7 @@ final class RadioModule { + "requiring higher target SDK version"); return; } - cb.onTuneFailed(result, csel); + cb.onTuneFailed(tunerResult, csel); }); } }); diff --git a/services/core/java/com/android/server/broadcastradio/hal2/Convert.java b/services/core/java/com/android/server/broadcastradio/hal2/Convert.java index 620364dab3b5a..98a450fa45e47 100644 --- a/services/core/java/com/android/server/broadcastradio/hal2/Convert.java +++ b/services/core/java/com/android/server/broadcastradio/hal2/Convert.java @@ -36,6 +36,7 @@ import android.hardware.radio.ProgramList; import android.hardware.radio.ProgramSelector; import android.hardware.radio.RadioManager; import android.hardware.radio.RadioMetadata; +import android.hardware.radio.RadioTuner; import android.os.ParcelableException; import android.util.Slog; @@ -81,6 +82,27 @@ class Convert { } } + @RadioTuner.TunerResultType + static int halResultToTunerResult(int result) { + switch (result) { + case Result.OK: + return RadioTuner.TUNER_RESULT_OK; + case Result.INTERNAL_ERROR: + return RadioTuner.TUNER_RESULT_INTERNAL_ERROR; + case Result.INVALID_ARGUMENTS: + return RadioTuner.TUNER_RESULT_INVALID_ARGUMENTS; + case Result.INVALID_STATE: + return RadioTuner.TUNER_RESULT_INVALID_STATE; + case Result.NOT_SUPPORTED: + return RadioTuner.TUNER_RESULT_NOT_SUPPORTED; + case Result.TIMEOUT: + return RadioTuner.TUNER_RESULT_TIMEOUT; + case Result.UNKNOWN_ERROR: + default: + return RadioTuner.TUNER_RESULT_UNKNOWN_ERROR; + } + } + static @NonNull ArrayList vendorInfoToHal(@Nullable Map info) { if (info == null) return new ArrayList<>(); diff --git a/services/core/java/com/android/server/broadcastradio/hal2/RadioModule.java b/services/core/java/com/android/server/broadcastradio/hal2/RadioModule.java index 0ea5f0fc1d6a0..59a81544d8ef5 100644 --- a/services/core/java/com/android/server/broadcastradio/hal2/RadioModule.java +++ b/services/core/java/com/android/server/broadcastradio/hal2/RadioModule.java @@ -87,8 +87,9 @@ final class RadioModule { fireLater(() -> { android.hardware.radio.ProgramSelector csel = Convert.programSelectorFromHal(programSelector); + int tunerResult = Convert.halResultToTunerResult(result); synchronized (mLock) { - fanoutAidlCallbackLocked(cb -> cb.onTuneFailed(result, csel)); + fanoutAidlCallbackLocked(cb -> cb.onTuneFailed(tunerResult, csel)); } }); }