RadioTunerTest.java revision 6b4b646d9c0fa42973a429dbe78c8919a2772961
1347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk/* 2347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * Copyright (C) 2017 The Android Open Source Project 3347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * 4347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * Licensed under the Apache License, Version 2.0 (the "License"); 5347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * you may not use this file except in compliance with the License. 6347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * You may obtain a copy of the License at 7347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * 8347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * http://www.apache.org/licenses/LICENSE-2.0 9347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * 10347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * Unless required by applicable law or agreed to in writing, software 11347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * distributed under the License is distributed on an "AS IS" BASIS, 12347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * See the License for the specific language governing permissions and 14347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * limitations under the License. 15347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk */ 166b4b646d9c0fa42973a429dbe78c8919a2772961Tomasz Wasilczykpackage android.hardware.radio.tests.functional; 17347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 1840ce30096cd2c5c242558d99fa43f956a7035394Tomasz Wasilczykimport android.Manifest; 19347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport android.content.Context; 20347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport android.content.pm.PackageManager; 218cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczykimport android.hardware.radio.ProgramSelector; 22347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport android.hardware.radio.RadioManager; 23347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport android.hardware.radio.RadioTuner; 24347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport android.support.test.InstrumentationRegistry; 25347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport android.support.test.runner.AndroidJUnit4; 266390f888de30b7560b2838629011ceb76ff574a1smaraaospimport android.test.suitebuilder.annotation.MediumTest; 27d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczykimport android.util.Log; 28347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 298b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczykimport java.lang.reflect.Constructor; 30347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport java.util.ArrayList; 31347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport java.util.List; 32347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 33347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport org.junit.After; 34347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport org.junit.Before; 35347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport org.junit.Test; 36347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport org.junit.runner.RunWith; 3737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczykimport org.mockito.ArgumentCaptor; 382134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport org.mockito.Mock; 398b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczykimport org.mockito.Mockito; 402134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport org.mockito.MockitoAnnotations; 41347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 42347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport static org.junit.Assert.*; 43347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport static org.junit.Assume.*; 442134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport static org.mockito.Matchers.any; 452134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport static org.mockito.Matchers.anyInt; 4637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczykimport static org.mockito.Mockito.after; 4724250ef9481da08f26cdeb2ef7075783662f05eeTomasz Wasilczykimport static org.mockito.Mockito.atLeast; 4837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczykimport static org.mockito.Mockito.atMost; 492134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport static org.mockito.Mockito.never; 508b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczykimport static org.mockito.Mockito.timeout; 512134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport static org.mockito.Mockito.times; 522134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport static org.mockito.Mockito.verify; 532383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczykimport static org.mockito.Mockito.verifyNoMoreInteractions; 54d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczykimport static org.testng.Assert.assertThrows; 55347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 56347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk/** 57347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * A test for broadcast radio API. 58347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk */ 59347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk@RunWith(AndroidJUnit4.class) 606390f888de30b7560b2838629011ceb76ff574a1smaraaosp@MediumTest 616b4b646d9c0fa42973a429dbe78c8919a2772961Tomasz Wasilczykpublic class RadioTunerTest { 626b4b646d9c0fa42973a429dbe78c8919a2772961Tomasz Wasilczyk private static final String TAG = "BroadcastRadioTests.RadioTuner"; 63347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 64347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public final Context mContext = InstrumentationRegistry.getContext(); 65347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 6637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk private final int kConfigCallbackTimeoutMs = 10000; 6737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk private final int kCancelTimeoutMs = 1000; 6837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk private final int kTuneCallbackTimeoutMs = 30000; 698cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk private final int kFullScanTimeoutMs = 60000; 708b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 71347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk private RadioManager mRadioManager; 72347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk private RadioTuner mRadioTuner; 73d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk private RadioManager.ModuleProperties mModule; 74347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk private final List<RadioManager.ModuleProperties> mModules = new ArrayList<>(); 752134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk @Mock private RadioTuner.Callback mCallback; 762134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 772134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk RadioManager.AmBandDescriptor mAmBandDescriptor; 782134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk RadioManager.FmBandDescriptor mFmBandDescriptor; 79347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 808b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.BandConfig mAmBandConfig; 818b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.BandConfig mFmBandConfig; 828b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 83347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Before 84347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public void setup() { 852134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk MockitoAnnotations.initMocks(this); 862134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 87347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk // check if radio is supported and skip the test if it's not 88347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk PackageManager packageManager = mContext.getPackageManager(); 8905392d6360b89538aa8fcbb1afd50775adfadcf4Tomasz Wasilczyk boolean isRadioSupported = packageManager.hasSystemFeature( 9005392d6360b89538aa8fcbb1afd50775adfadcf4Tomasz Wasilczyk PackageManager.FEATURE_BROADCAST_RADIO); 91347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assumeTrue(isRadioSupported); 92347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 9340ce30096cd2c5c242558d99fa43f956a7035394Tomasz Wasilczyk // Check radio access permission 9440ce30096cd2c5c242558d99fa43f956a7035394Tomasz Wasilczyk int res = mContext.checkCallingOrSelfPermission(Manifest.permission.ACCESS_FM_RADIO); 9540ce30096cd2c5c242558d99fa43f956a7035394Tomasz Wasilczyk assertEquals("ACCESS_FM_RADIO permission not granted", 9640ce30096cd2c5c242558d99fa43f956a7035394Tomasz Wasilczyk PackageManager.PERMISSION_GRANTED, res); 9740ce30096cd2c5c242558d99fa43f956a7035394Tomasz Wasilczyk 98347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk mRadioManager = (RadioManager)mContext.getSystemService(Context.RADIO_SERVICE); 99347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assertNotNull(mRadioManager); 100347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 101347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk int status = mRadioManager.listModules(mModules); 102347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, status); 103347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assertFalse(mModules.isEmpty()); 104347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 105347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 106347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @After 107347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public void tearDown() { 108347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk mRadioManager = null; 109347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk mModules.clear(); 110347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk if (mRadioTuner != null) { 111347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk mRadioTuner.close(); 112347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk mRadioTuner = null; 113347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 11424250ef9481da08f26cdeb2ef7075783662f05eeTomasz Wasilczyk resetCallback(); 115347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 116347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 1172134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk private void openTuner() { 1189fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk openTuner(true); 1199fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } 1209fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 1212383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk private void resetCallback() { 12224250ef9481da08f26cdeb2ef7075783662f05eeTomasz Wasilczyk verify(mCallback, atLeast(0)).onMetadataChanged(any()); 1232383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk verifyNoMoreInteractions(mCallback); 1242383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk Mockito.reset(mCallback); 1252383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk } 1262383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 1279fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk private void openTuner(boolean withAudio) { 128347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assertNull(mRadioTuner); 129347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 130347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk // find FM band and build its config 131d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mModule = mModules.get(0); 132d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk for (RadioManager.BandDescriptor band : mModule.getBands()) { 13333d00704d6c04327350c42d87aa74da5ccfaf865Tomasz Wasilczyk int bandType = band.getType(); 13433d00704d6c04327350c42d87aa74da5ccfaf865Tomasz Wasilczyk if (bandType == RadioManager.BAND_AM || bandType == RadioManager.BAND_AM_HD) { 1352134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk mAmBandDescriptor = (RadioManager.AmBandDescriptor)band; 1362134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk } 13733d00704d6c04327350c42d87aa74da5ccfaf865Tomasz Wasilczyk if (bandType == RadioManager.BAND_FM || bandType == RadioManager.BAND_FM_HD) { 1382134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk mFmBandDescriptor = (RadioManager.FmBandDescriptor)band; 139347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 140347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 1412134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk assertNotNull(mAmBandDescriptor); 1422134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk assertNotNull(mFmBandDescriptor); 1438b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk mAmBandConfig = new RadioManager.AmBandConfig.Builder(mAmBandDescriptor).build(); 1448b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk mFmBandConfig = new RadioManager.FmBandConfig.Builder(mFmBandDescriptor).build(); 145347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 146d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mRadioTuner = mRadioManager.openTuner(mModule.getId(), 1479fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk mFmBandConfig, withAudio, mCallback, null); 148347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assertNotNull(mRadioTuner); 14937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any()); 1502383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk resetCallback(); 151347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 1528cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk boolean isAntennaConnected = mRadioTuner.isAntennaConnected(); 1538cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertTrue(isAntennaConnected); 15437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 15537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 156347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Test 157347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public void testOpenTuner() { 1582134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 159347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 160d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk 161d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk @Test 1628b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk public void testReopenTuner() throws Throwable { 1632134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 164d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk mRadioTuner.close(); 165d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk mRadioTuner = null; 1668b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk Thread.sleep(100); // TODO(b/36122635): force reopen 1672134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 1682134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk } 1692134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 1702134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk @Test 171f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk public void testDoubleClose() { 172f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk openTuner(); 173f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk mRadioTuner.close(); 174f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk mRadioTuner.close(); 175f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk } 176f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk 177f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk @Test 178f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk public void testUseAfterClose() { 179f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk openTuner(); 180f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk mRadioTuner.close(); 181f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk int ret = mRadioTuner.cancel(); 182f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk assertEquals(RadioManager.STATUS_INVALID_OPERATION, ret); 183f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk } 184f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk 185f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk @Test 1862134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk public void testSetAndGetConfiguration() { 1872134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 1882134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 1898b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // set 1908b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk int ret = mRadioTuner.setConfiguration(mAmBandConfig); 1918b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 19237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any()); 1938b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 1948b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // get 1958b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.BandConfig[] config = new RadioManager.BandConfig[1]; 1968b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk ret = mRadioTuner.getConfiguration(config); 1978b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 1982134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 1998b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(mAmBandConfig, config[0]); 2008b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk } 2012134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 2028b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk @Test 2038b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk public void testSetBadConfiguration() throws Throwable { 2048b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk openTuner(); 2058b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 2068b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // set bad config 2078b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk Constructor<RadioManager.AmBandConfig> configConstr = 2088b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.AmBandConfig.class.getDeclaredConstructor( 2098b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk int.class, int.class, int.class, int.class, int.class, boolean.class); 2108b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk configConstr.setAccessible(true); 2118b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.AmBandConfig badConfig = configConstr.newInstance( 2128b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 0 /*region*/, RadioManager.BAND_AM /*type*/, 2138b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 10000 /*lowerLimit*/, 1 /*upperLimit*/, 100 /*spacing*/, false /*stereo*/); 2148b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk int ret = mRadioTuner.setConfiguration(badConfig); 2158b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_BAD_VALUE, ret); 2168b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk verify(mCallback, never()).onConfigurationChanged(any()); 2178b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 2188b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // set null config 2198b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk ret = mRadioTuner.setConfiguration(null); 2208b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_BAD_VALUE, ret); 2218b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk verify(mCallback, never()).onConfigurationChanged(any()); 2228b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 2238b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // setting good config should recover 2248b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk ret = mRadioTuner.setConfiguration(mAmBandConfig); 2258b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 22637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any()); 227d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk } 2289fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2299fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk @Test 2309fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk public void testMute() { 2319fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk openTuner(); 2329fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2339fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk boolean isMuted = mRadioTuner.getMute(); 2349fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertFalse(isMuted); 2359fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2369fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk int ret = mRadioTuner.setMute(true); 2379fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 2389fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk isMuted = mRadioTuner.getMute(); 2399fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertTrue(isMuted); 2409fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2419fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk ret = mRadioTuner.setMute(false); 2429fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 2439fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk isMuted = mRadioTuner.getMute(); 2449fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertFalse(isMuted); 2459fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } 2469fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2479fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk @Test 2489fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk public void testMuteNoAudio() { 2499fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk openTuner(false); 2509fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2519fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk int ret = mRadioTuner.setMute(false); 2529fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertEquals(RadioManager.STATUS_ERROR, ret); 2539fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2549fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk boolean isMuted = mRadioTuner.getMute(); 2559fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertTrue(isMuted); 2569fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } 2572383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2582383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk @Test 2592383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk public void testStep() { 2602383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk openTuner(); 2612383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2622383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, true); 2632383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 26437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any()); 2652383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2662383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk resetCallback(); 2672383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2682383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk ret = mRadioTuner.step(RadioTuner.DIRECTION_UP, false); 2692383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 27037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any()); 27137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 27237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 27337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 27437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testTuneAndGetPI() { 27537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 27637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 27737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int channel = mFmBandConfig.getLowerLimit() + mFmBandConfig.getSpacing(); 27837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 27937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk // test tune 28037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int ret = mRadioTuner.tune(channel, 0); 28137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 28237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk ArgumentCaptor<RadioManager.ProgramInfo> infoc = 28337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk ArgumentCaptor.forClass(RadioManager.ProgramInfo.class); 28437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)) 28537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk .onProgramInfoChanged(infoc.capture()); 28637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(channel, infoc.getValue().getChannel()); 28737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 28837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk // test getProgramInformation 28937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk RadioManager.ProgramInfo[] info = new RadioManager.ProgramInfo[1]; 29037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk ret = mRadioTuner.getProgramInformation(info); 29137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 29237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertNotNull(info[0]); 29337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(channel, info[0].getChannel()); 29437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 29537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 29637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 29737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testDummyCancel() { 29837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 29937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 30037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int ret = mRadioTuner.cancel(); 30137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 30237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 30337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 30437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 30537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testLateCancel() { 30637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 30737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 30837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, false); 30937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 31037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any()); 31137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 31237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int cancelRet = mRadioTuner.cancel(); 31337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, cancelRet); 31437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 31537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 31637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 31737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testScanAndCancel() { 31837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 31937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 32037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk /* There is a possible race condition between scan and cancel commands - the scan may finish 32137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk * before cancel command is issued. Thus we accept both outcomes in this test. 32237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk */ 32337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int scanRet = mRadioTuner.scan(RadioTuner.DIRECTION_DOWN, true); 32437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int cancelRet = mRadioTuner.cancel(); 32537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 32637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, scanRet); 32737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, cancelRet); 32837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 32937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, after(kCancelTimeoutMs).atMost(1)).onError(RadioTuner.ERROR_CANCELLED); 33037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, atMost(1)).onProgramInfoChanged(any()); 3312383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk } 332d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 333d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk @Test 334d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk public void testStartBackgroundScan() { 335d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk openTuner(); 336d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 337d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean ret = mRadioTuner.startBackgroundScan(); 338d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean isSupported = mModule.isBackgroundScanningSupported(); 339d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertEquals(isSupported, ret); 340d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 341d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 342d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk @Test 343d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk public void testGetProgramList() { 344d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk openTuner(); 345d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 346d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk try { 347d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk List<RadioManager.ProgramInfo> list = mRadioTuner.getProgramList(null); 348d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertNotNull(list); 349d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } catch (IllegalStateException e) { 350d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk // the list may or may not be ready at this point 351d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk Log.i(TAG, "Background list is not ready"); 352d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 353d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 354d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 355d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk @Test 3568cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk public void testTuneFromProgramList() { 3578cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk openTuner(); 3588cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3598cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk List<RadioManager.ProgramInfo> list; 3608cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3618cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk try { 3628cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk list = mRadioTuner.getProgramList(null); 3638cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertNotNull(list); 3648cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } catch (IllegalStateException e) { 3658cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk Log.i(TAG, "Background list is not ready, trying to fix it"); 3668cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3678cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk boolean success = mRadioTuner.startBackgroundScan(); 3688cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertTrue(success); 3698cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk verify(mCallback, timeout(kFullScanTimeoutMs)).onBackgroundScanComplete(); 3708cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3718cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk list = mRadioTuner.getProgramList(null); 3728cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertNotNull(list); 3738cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } 3748cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3758cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk if (list.isEmpty()) { 3768cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk Log.i(TAG, "Program list is empty, can't test tune"); 3778cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk return; 3788cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } 3798cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3808cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk ProgramSelector sel = list.get(0).getSelector(); 3818cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk mRadioTuner.tune(sel); 3828cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk ArgumentCaptor<RadioManager.ProgramInfo> infoc = 3838cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk ArgumentCaptor.forClass(RadioManager.ProgramInfo.class); 3848cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(infoc.capture()); 3858cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertEquals(sel, infoc.getValue().getSelector()); 3868cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } 3878cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3888cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk @Test 389d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk public void testForcedAnalog() { 390d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk openTuner(); 391d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 392d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean isSupported = true; 393d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean isForced; 394d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk try { 395d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isForced = mRadioTuner.isAnalogForced(); 396d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertFalse(isForced); 397d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } catch (IllegalStateException ex) { 398d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk Log.i(TAG, "Forced analog switch is not supported by this tuner"); 399d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isSupported = false; 400d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 401d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 402d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk if (isSupported) { 403d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mRadioTuner.setAnalogForced(true); 404d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isForced = mRadioTuner.isAnalogForced(); 405d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertTrue(isForced); 406d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 407d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mRadioTuner.setAnalogForced(false); 408d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isForced = mRadioTuner.isAnalogForced(); 409d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertFalse(isForced); 410d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } else { 411d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertThrows(IllegalStateException.class, () -> mRadioTuner.setAnalogForced(true)); 412d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 413d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 414347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk} 415