RadioTunerTest.java revision 0f1776d08b43f5f71a9f89b6a4f1838df4d3d744
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; 310f1776d08b43f5f71a9f89b6a4f1838df4d3d744Tomasz Wasilczykimport java.util.HashMap; 32347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport java.util.List; 330f1776d08b43f5f71a9f89b6a4f1838df4d3d744Tomasz Wasilczykimport java.util.Map; 34347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 35347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport org.junit.After; 36347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport org.junit.Before; 37347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport org.junit.Test; 38347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport org.junit.runner.RunWith; 3937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczykimport org.mockito.ArgumentCaptor; 402134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport org.mockito.Mock; 418b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczykimport org.mockito.Mockito; 422134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport org.mockito.MockitoAnnotations; 43347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 44347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport static org.junit.Assert.*; 45347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport static org.junit.Assume.*; 462134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport static org.mockito.Matchers.any; 472134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport static org.mockito.Matchers.anyInt; 4837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczykimport static org.mockito.Mockito.after; 4924250ef9481da08f26cdeb2ef7075783662f05eeTomasz Wasilczykimport static org.mockito.Mockito.atLeast; 5037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczykimport static org.mockito.Mockito.atMost; 512134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport static org.mockito.Mockito.never; 528b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczykimport static org.mockito.Mockito.timeout; 532134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport static org.mockito.Mockito.times; 542134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczykimport static org.mockito.Mockito.verify; 552383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczykimport static org.mockito.Mockito.verifyNoMoreInteractions; 56d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczykimport static org.testng.Assert.assertThrows; 57347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 58347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk/** 59347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * A test for broadcast radio API. 60347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk */ 61347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk@RunWith(AndroidJUnit4.class) 626390f888de30b7560b2838629011ceb76ff574a1smaraaosp@MediumTest 636b4b646d9c0fa42973a429dbe78c8919a2772961Tomasz Wasilczykpublic class RadioTunerTest { 646b4b646d9c0fa42973a429dbe78c8919a2772961Tomasz Wasilczyk private static final String TAG = "BroadcastRadioTests.RadioTuner"; 65347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 66347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public final Context mContext = InstrumentationRegistry.getContext(); 67347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 6837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk private final int kConfigCallbackTimeoutMs = 10000; 6937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk private final int kCancelTimeoutMs = 1000; 7037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk private final int kTuneCallbackTimeoutMs = 30000; 718cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk private final int kFullScanTimeoutMs = 60000; 728b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 73347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk private RadioManager mRadioManager; 74347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk private RadioTuner mRadioTuner; 75d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk private RadioManager.ModuleProperties mModule; 76347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk private final List<RadioManager.ModuleProperties> mModules = new ArrayList<>(); 772134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk @Mock private RadioTuner.Callback mCallback; 782134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 792134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk RadioManager.AmBandDescriptor mAmBandDescriptor; 802134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk RadioManager.FmBandDescriptor mFmBandDescriptor; 81347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 828b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.BandConfig mAmBandConfig; 838b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.BandConfig mFmBandConfig; 848b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 85347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Before 86347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public void setup() { 872134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk MockitoAnnotations.initMocks(this); 882134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 89347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk // check if radio is supported and skip the test if it's not 90347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk PackageManager packageManager = mContext.getPackageManager(); 9105392d6360b89538aa8fcbb1afd50775adfadcf4Tomasz Wasilczyk boolean isRadioSupported = packageManager.hasSystemFeature( 9205392d6360b89538aa8fcbb1afd50775adfadcf4Tomasz Wasilczyk PackageManager.FEATURE_BROADCAST_RADIO); 93347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assumeTrue(isRadioSupported); 94347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 9540ce30096cd2c5c242558d99fa43f956a7035394Tomasz Wasilczyk // Check radio access permission 96df77643cd8024b381c7df2f509175c7be719fae9Tomasz Wasilczyk int res = mContext.checkCallingOrSelfPermission(Manifest.permission.ACCESS_BROADCAST_RADIO); 97df77643cd8024b381c7df2f509175c7be719fae9Tomasz Wasilczyk assertEquals("ACCESS_BROADCAST_RADIO permission not granted", 9840ce30096cd2c5c242558d99fa43f956a7035394Tomasz Wasilczyk PackageManager.PERMISSION_GRANTED, res); 9940ce30096cd2c5c242558d99fa43f956a7035394Tomasz Wasilczyk 100347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk mRadioManager = (RadioManager)mContext.getSystemService(Context.RADIO_SERVICE); 101347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assertNotNull(mRadioManager); 102347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 103347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk int status = mRadioManager.listModules(mModules); 104347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, status); 105347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assertFalse(mModules.isEmpty()); 106347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 107347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 108347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @After 109347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public void tearDown() { 110347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk mRadioManager = null; 111347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk mModules.clear(); 112347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk if (mRadioTuner != null) { 113347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk mRadioTuner.close(); 114347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk mRadioTuner = null; 115347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 11624250ef9481da08f26cdeb2ef7075783662f05eeTomasz Wasilczyk resetCallback(); 117347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 118347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 1192134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk private void openTuner() { 1209fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk openTuner(true); 1219fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } 1229fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 1232383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk private void resetCallback() { 12424250ef9481da08f26cdeb2ef7075783662f05eeTomasz Wasilczyk verify(mCallback, atLeast(0)).onMetadataChanged(any()); 1252383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk verifyNoMoreInteractions(mCallback); 1262383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk Mockito.reset(mCallback); 1272383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk } 1282383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 1299fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk private void openTuner(boolean withAudio) { 130347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assertNull(mRadioTuner); 131347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 132347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk // find FM band and build its config 133d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mModule = mModules.get(0); 134d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk for (RadioManager.BandDescriptor band : mModule.getBands()) { 13533d00704d6c04327350c42d87aa74da5ccfaf865Tomasz Wasilczyk int bandType = band.getType(); 13633d00704d6c04327350c42d87aa74da5ccfaf865Tomasz Wasilczyk if (bandType == RadioManager.BAND_AM || bandType == RadioManager.BAND_AM_HD) { 1372134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk mAmBandDescriptor = (RadioManager.AmBandDescriptor)band; 1382134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk } 13933d00704d6c04327350c42d87aa74da5ccfaf865Tomasz Wasilczyk if (bandType == RadioManager.BAND_FM || bandType == RadioManager.BAND_FM_HD) { 1402134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk mFmBandDescriptor = (RadioManager.FmBandDescriptor)band; 141347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 142347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 1432134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk assertNotNull(mAmBandDescriptor); 1442134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk assertNotNull(mFmBandDescriptor); 1458b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk mAmBandConfig = new RadioManager.AmBandConfig.Builder(mAmBandDescriptor).build(); 1468b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk mFmBandConfig = new RadioManager.FmBandConfig.Builder(mFmBandDescriptor).build(); 147347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 148d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mRadioTuner = mRadioManager.openTuner(mModule.getId(), 1499fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk mFmBandConfig, withAudio, mCallback, null); 150347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assertNotNull(mRadioTuner); 15137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any()); 1522383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk resetCallback(); 153347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 1548cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk boolean isAntennaConnected = mRadioTuner.isAntennaConnected(); 1558cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertTrue(isAntennaConnected); 15637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 15737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 158347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Test 159347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public void testOpenTuner() { 1602134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 161347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 162d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk 163d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk @Test 1648b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk public void testReopenTuner() throws Throwable { 1652134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 166d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk mRadioTuner.close(); 167d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk mRadioTuner = null; 1688b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk Thread.sleep(100); // TODO(b/36122635): force reopen 1692134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 1702134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk } 1712134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 1722134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk @Test 173f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk public void testDoubleClose() { 174f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk openTuner(); 175f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk mRadioTuner.close(); 176f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk mRadioTuner.close(); 177f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk } 178f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk 179f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk @Test 180f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk public void testUseAfterClose() { 181f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk openTuner(); 182f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk mRadioTuner.close(); 183f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk int ret = mRadioTuner.cancel(); 184f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk assertEquals(RadioManager.STATUS_INVALID_OPERATION, ret); 185f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk } 186f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk 187f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk @Test 1882134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk public void testSetAndGetConfiguration() { 1892134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 1902134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 1918b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // set 1928b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk int ret = mRadioTuner.setConfiguration(mAmBandConfig); 1938b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 19437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any()); 1958b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 1968b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // get 1978b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.BandConfig[] config = new RadioManager.BandConfig[1]; 1988b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk ret = mRadioTuner.getConfiguration(config); 1998b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 2002134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 2018b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(mAmBandConfig, config[0]); 2028b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk } 2032134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 2048b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk @Test 2058b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk public void testSetBadConfiguration() throws Throwable { 2068b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk openTuner(); 2078b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 2088b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // set bad config 2098b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk Constructor<RadioManager.AmBandConfig> configConstr = 2108b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.AmBandConfig.class.getDeclaredConstructor( 2118b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk int.class, int.class, int.class, int.class, int.class, boolean.class); 2128b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk configConstr.setAccessible(true); 2138b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.AmBandConfig badConfig = configConstr.newInstance( 2148b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 0 /*region*/, RadioManager.BAND_AM /*type*/, 2158b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 10000 /*lowerLimit*/, 1 /*upperLimit*/, 100 /*spacing*/, false /*stereo*/); 2168b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk int ret = mRadioTuner.setConfiguration(badConfig); 2178b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_BAD_VALUE, ret); 2188b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk verify(mCallback, never()).onConfigurationChanged(any()); 2198b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 2208b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // set null config 2218b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk ret = mRadioTuner.setConfiguration(null); 2228b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_BAD_VALUE, ret); 2238b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk verify(mCallback, never()).onConfigurationChanged(any()); 2248b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 2258b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // setting good config should recover 2268b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk ret = mRadioTuner.setConfiguration(mAmBandConfig); 2278b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 22837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any()); 229d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk } 2309fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2319fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk @Test 2329fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk public void testMute() { 2339fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk openTuner(); 2349fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2359fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk boolean isMuted = mRadioTuner.getMute(); 2369fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertFalse(isMuted); 2379fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2389fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk int ret = mRadioTuner.setMute(true); 2399fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 2409fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk isMuted = mRadioTuner.getMute(); 2419fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertTrue(isMuted); 2429fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2439fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk ret = mRadioTuner.setMute(false); 2449fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 2459fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk isMuted = mRadioTuner.getMute(); 2469fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertFalse(isMuted); 2479fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } 2489fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2499fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk @Test 2509fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk public void testMuteNoAudio() { 2519fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk openTuner(false); 2529fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2539fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk int ret = mRadioTuner.setMute(false); 2549fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertEquals(RadioManager.STATUS_ERROR, ret); 2559fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2569fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk boolean isMuted = mRadioTuner.getMute(); 2579fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertTrue(isMuted); 2589fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } 2592383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2602383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk @Test 2612383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk public void testStep() { 2622383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk openTuner(); 2632383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2642383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, true); 2652383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 26637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any()); 2672383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2682383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk resetCallback(); 2692383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2702383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk ret = mRadioTuner.step(RadioTuner.DIRECTION_UP, false); 2712383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 27237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any()); 27337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 27437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 27537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 27637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testTuneAndGetPI() { 27737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 27837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 27937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int channel = mFmBandConfig.getLowerLimit() + mFmBandConfig.getSpacing(); 28037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 28137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk // test tune 28237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int ret = mRadioTuner.tune(channel, 0); 28337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 28437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk ArgumentCaptor<RadioManager.ProgramInfo> infoc = 28537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk ArgumentCaptor.forClass(RadioManager.ProgramInfo.class); 28637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)) 28737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk .onProgramInfoChanged(infoc.capture()); 28837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(channel, infoc.getValue().getChannel()); 28937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 29037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk // test getProgramInformation 29137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk RadioManager.ProgramInfo[] info = new RadioManager.ProgramInfo[1]; 29237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk ret = mRadioTuner.getProgramInformation(info); 29337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 29437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertNotNull(info[0]); 29537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(channel, info[0].getChannel()); 2960f1776d08b43f5f71a9f89b6a4f1838df4d3d744Tomasz Wasilczyk Log.d(TAG, "PI: " + info[0].toString()); 29737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 29837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 29937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 30037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testDummyCancel() { 30137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 30237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 30337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int ret = mRadioTuner.cancel(); 30437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 30537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 30637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 30737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 30837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testLateCancel() { 30937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 31037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 31137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, false); 31237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 31337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any()); 31437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 31537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int cancelRet = mRadioTuner.cancel(); 31637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, cancelRet); 31737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 31837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 31937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 32037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testScanAndCancel() { 32137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 32237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 32337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk /* There is a possible race condition between scan and cancel commands - the scan may finish 32437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk * before cancel command is issued. Thus we accept both outcomes in this test. 32537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk */ 32637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int scanRet = mRadioTuner.scan(RadioTuner.DIRECTION_DOWN, true); 32737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int cancelRet = mRadioTuner.cancel(); 32837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 32937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, scanRet); 33037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, cancelRet); 33137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 33237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, after(kCancelTimeoutMs).atMost(1)).onError(RadioTuner.ERROR_CANCELLED); 33337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, atMost(1)).onProgramInfoChanged(any()); 3342383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk } 335d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 336d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk @Test 337d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk public void testStartBackgroundScan() { 338d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk openTuner(); 339d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 340d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean ret = mRadioTuner.startBackgroundScan(); 341d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean isSupported = mModule.isBackgroundScanningSupported(); 342d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertEquals(isSupported, ret); 343d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 344d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 345d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk @Test 346d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk public void testGetProgramList() { 347d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk openTuner(); 348d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 349d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk try { 3500f1776d08b43f5f71a9f89b6a4f1838df4d3d744Tomasz Wasilczyk Map<String, String> filter = new HashMap<>(); 3510f1776d08b43f5f71a9f89b6a4f1838df4d3d744Tomasz Wasilczyk filter.put("com.google.dummy", "dummy"); 3520f1776d08b43f5f71a9f89b6a4f1838df4d3d744Tomasz Wasilczyk List<RadioManager.ProgramInfo> list = mRadioTuner.getProgramList(filter); 353d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertNotNull(list); 354d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } catch (IllegalStateException e) { 355d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk // the list may or may not be ready at this point 356d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk Log.i(TAG, "Background list is not ready"); 357d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 358d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 359d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 360d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk @Test 3618cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk public void testTuneFromProgramList() { 3628cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk openTuner(); 3638cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3648cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk List<RadioManager.ProgramInfo> list; 3658cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3668cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk try { 3678cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk list = mRadioTuner.getProgramList(null); 3688cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertNotNull(list); 3698cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } catch (IllegalStateException e) { 3708cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk Log.i(TAG, "Background list is not ready, trying to fix it"); 3718cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3728cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk boolean success = mRadioTuner.startBackgroundScan(); 3738cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertTrue(success); 3748cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk verify(mCallback, timeout(kFullScanTimeoutMs)).onBackgroundScanComplete(); 3758cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3768cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk list = mRadioTuner.getProgramList(null); 3778cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertNotNull(list); 3788cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } 3798cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3808cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk if (list.isEmpty()) { 3818cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk Log.i(TAG, "Program list is empty, can't test tune"); 3828cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk return; 3838cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } 3848cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3858cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk ProgramSelector sel = list.get(0).getSelector(); 3868cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk mRadioTuner.tune(sel); 3878cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk ArgumentCaptor<RadioManager.ProgramInfo> infoc = 3888cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk ArgumentCaptor.forClass(RadioManager.ProgramInfo.class); 3898cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(infoc.capture()); 3908cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertEquals(sel, infoc.getValue().getSelector()); 3918cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } 3928cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3938cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk @Test 394d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk public void testForcedAnalog() { 395d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk openTuner(); 396d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 397d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean isSupported = true; 398d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean isForced; 399d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk try { 400d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isForced = mRadioTuner.isAnalogForced(); 401d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertFalse(isForced); 402d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } catch (IllegalStateException ex) { 403d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk Log.i(TAG, "Forced analog switch is not supported by this tuner"); 404d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isSupported = false; 405d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 406d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 407d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk if (isSupported) { 408d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mRadioTuner.setAnalogForced(true); 409d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isForced = mRadioTuner.isAnalogForced(); 410d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertTrue(isForced); 411d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 412d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mRadioTuner.setAnalogForced(false); 413d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isForced = mRadioTuner.isAnalogForced(); 414d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertFalse(isForced); 415d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } else { 416d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertThrows(IllegalStateException.class, () -> mRadioTuner.setAnalogForced(true)); 417d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 418d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 419347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk} 420