RadioTunerTest.java revision fd7194acb3e20a00f2d51ac890a7ac6ad93828d8
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); 134a6f1523532c08387e4ecd0282460321b50aecf0eTomasz Wasilczyk 135d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk for (RadioManager.BandDescriptor band : mModule.getBands()) { 136a6f1523532c08387e4ecd0282460321b50aecf0eTomasz Wasilczyk Log.d(TAG, "Band: " + band); 13733d00704d6c04327350c42d87aa74da5ccfaf865Tomasz Wasilczyk int bandType = band.getType(); 13833d00704d6c04327350c42d87aa74da5ccfaf865Tomasz Wasilczyk if (bandType == RadioManager.BAND_AM || bandType == RadioManager.BAND_AM_HD) { 1392134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk mAmBandDescriptor = (RadioManager.AmBandDescriptor)band; 1402134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk } 14133d00704d6c04327350c42d87aa74da5ccfaf865Tomasz Wasilczyk if (bandType == RadioManager.BAND_FM || bandType == RadioManager.BAND_FM_HD) { 1422134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk mFmBandDescriptor = (RadioManager.FmBandDescriptor)band; 143347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 144347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 1452134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk assertNotNull(mAmBandDescriptor); 1462134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk assertNotNull(mFmBandDescriptor); 1478b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk mAmBandConfig = new RadioManager.AmBandConfig.Builder(mAmBandDescriptor).build(); 1488b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk mFmBandConfig = new RadioManager.FmBandConfig.Builder(mFmBandDescriptor).build(); 149347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 150d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mRadioTuner = mRadioManager.openTuner(mModule.getId(), 1519fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk mFmBandConfig, withAudio, mCallback, null); 152347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk assertNotNull(mRadioTuner); 15337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any()); 1542383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk resetCallback(); 155347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 1568cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk boolean isAntennaConnected = mRadioTuner.isAntennaConnected(); 1578cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertTrue(isAntennaConnected); 15837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 15937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 160347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Test 161347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public void testOpenTuner() { 1622134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 163347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 164d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk 165d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk @Test 1668b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk public void testReopenTuner() throws Throwable { 1672134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 168d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk mRadioTuner.close(); 169d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk mRadioTuner = null; 1708b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk Thread.sleep(100); // TODO(b/36122635): force reopen 1712134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 1722134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk } 1732134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 1742134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk @Test 175f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk public void testDoubleClose() { 176f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk openTuner(); 177f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk mRadioTuner.close(); 178f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk mRadioTuner.close(); 179f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk } 180f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk 181f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk @Test 182f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk public void testUseAfterClose() { 183f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk openTuner(); 184f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk mRadioTuner.close(); 185f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk int ret = mRadioTuner.cancel(); 186f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk assertEquals(RadioManager.STATUS_INVALID_OPERATION, ret); 187f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk } 188f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk 189f13b8419b84848a557a87938d7504bb13ecbe62aTomasz Wasilczyk @Test 1902134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk public void testSetAndGetConfiguration() { 1912134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk openTuner(); 1922134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 1938b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // set 1948b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk int ret = mRadioTuner.setConfiguration(mAmBandConfig); 1958b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 19637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any()); 1978b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 1988b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // get 1998b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.BandConfig[] config = new RadioManager.BandConfig[1]; 2008b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk ret = mRadioTuner.getConfiguration(config); 2018b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 2022134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 2038b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(mAmBandConfig, config[0]); 2048b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk } 2052134817b391b004a6f54cee8574e1cc4a1e98285Tomasz Wasilczyk 2068b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk @Test 2078b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk public void testSetBadConfiguration() throws Throwable { 2088b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk openTuner(); 2098b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 2108b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // set bad config 2118b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk Constructor<RadioManager.AmBandConfig> configConstr = 2128b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.AmBandConfig.class.getDeclaredConstructor( 2138b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk int.class, int.class, int.class, int.class, int.class, boolean.class); 2148b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk configConstr.setAccessible(true); 2158b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk RadioManager.AmBandConfig badConfig = configConstr.newInstance( 2168b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 0 /*region*/, RadioManager.BAND_AM /*type*/, 2178b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 10000 /*lowerLimit*/, 1 /*upperLimit*/, 100 /*spacing*/, false /*stereo*/); 2188b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk int ret = mRadioTuner.setConfiguration(badConfig); 2198b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_BAD_VALUE, ret); 2208b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk verify(mCallback, never()).onConfigurationChanged(any()); 2218b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 2228b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // set null config 2238b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk ret = mRadioTuner.setConfiguration(null); 2248b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_BAD_VALUE, ret); 2258b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk verify(mCallback, never()).onConfigurationChanged(any()); 2268b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk 2278b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk // setting good config should recover 2288b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk ret = mRadioTuner.setConfiguration(mAmBandConfig); 2298b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 23037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any()); 231d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk } 2329fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2339fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk @Test 2349fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk public void testMute() { 2359fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk openTuner(); 2369fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2379fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk boolean isMuted = mRadioTuner.getMute(); 2389fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertFalse(isMuted); 2399fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2409fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk int ret = mRadioTuner.setMute(true); 2419fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 2429fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk isMuted = mRadioTuner.getMute(); 2439fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertTrue(isMuted); 2449fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2459fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk ret = mRadioTuner.setMute(false); 2469fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 2479fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk isMuted = mRadioTuner.getMute(); 2489fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertFalse(isMuted); 2499fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } 2509fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2519fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk @Test 2529fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk public void testMuteNoAudio() { 2539fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk openTuner(false); 2549fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2559fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk int ret = mRadioTuner.setMute(false); 2569fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertEquals(RadioManager.STATUS_ERROR, ret); 2579fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk 2589fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk boolean isMuted = mRadioTuner.getMute(); 2599fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk assertTrue(isMuted); 2609fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } 2612383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2622383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk @Test 2632383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk public void testStep() { 2642383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk openTuner(); 2652383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2662383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, true); 2672383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 26837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any()); 2692383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2702383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk resetCallback(); 2712383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk 2722383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk ret = mRadioTuner.step(RadioTuner.DIRECTION_UP, false); 2732383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 27437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any()); 27537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 27637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 27737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 278fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk public void testStepLoop() { 279fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk openTuner(); 280fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk 281fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk for (int i = 0; i < 10; i++) { 282fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk Log.d(TAG, "step loop iteration " + (i + 1)); 283fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk 284fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, true); 285fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 286fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any()); 287fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk 288fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk resetCallback(); 289fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk } 290fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk } 291fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk 292fd7194acb3e20a00f2d51ac890a7ac6ad93828d8Tomasz Wasilczyk @Test 29337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testTuneAndGetPI() { 29437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 29537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 29637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int channel = mFmBandConfig.getLowerLimit() + mFmBandConfig.getSpacing(); 29737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 29837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk // test tune 29937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int ret = mRadioTuner.tune(channel, 0); 30037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 30137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk ArgumentCaptor<RadioManager.ProgramInfo> infoc = 30237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk ArgumentCaptor.forClass(RadioManager.ProgramInfo.class); 30337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)) 30437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk .onProgramInfoChanged(infoc.capture()); 30537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(channel, infoc.getValue().getChannel()); 30637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 30737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk // test getProgramInformation 30837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk RadioManager.ProgramInfo[] info = new RadioManager.ProgramInfo[1]; 30937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk ret = mRadioTuner.getProgramInformation(info); 31037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 31137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertNotNull(info[0]); 31237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(channel, info[0].getChannel()); 3130f1776d08b43f5f71a9f89b6a4f1838df4d3d744Tomasz Wasilczyk Log.d(TAG, "PI: " + info[0].toString()); 31437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 31537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 31637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 31737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testDummyCancel() { 31837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 31937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 32037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int ret = mRadioTuner.cancel(); 32137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 32237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 32337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 32437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 32537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testLateCancel() { 32637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 32737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 32837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, false); 32937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, ret); 33037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any()); 33137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 33237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int cancelRet = mRadioTuner.cancel(); 33337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, cancelRet); 33437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 33537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 33637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk @Test 33737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk public void testScanAndCancel() { 33837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk openTuner(); 33937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 34037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk /* There is a possible race condition between scan and cancel commands - the scan may finish 34137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk * before cancel command is issued. Thus we accept both outcomes in this test. 34237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk */ 34337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int scanRet = mRadioTuner.scan(RadioTuner.DIRECTION_DOWN, true); 34437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk int cancelRet = mRadioTuner.cancel(); 34537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 34637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, scanRet); 34737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk assertEquals(RadioManager.STATUS_OK, cancelRet); 34837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk 34937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, after(kCancelTimeoutMs).atMost(1)).onError(RadioTuner.ERROR_CANCELLED); 35037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk verify(mCallback, atMost(1)).onProgramInfoChanged(any()); 3512383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk } 352d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 353d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk @Test 354d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk public void testStartBackgroundScan() { 355d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk openTuner(); 356d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 357d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean ret = mRadioTuner.startBackgroundScan(); 358d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean isSupported = mModule.isBackgroundScanningSupported(); 359d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertEquals(isSupported, ret); 360d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 361d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 362d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk @Test 363d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk public void testGetProgramList() { 364d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk openTuner(); 365d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 366d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk try { 3670f1776d08b43f5f71a9f89b6a4f1838df4d3d744Tomasz Wasilczyk Map<String, String> filter = new HashMap<>(); 3680f1776d08b43f5f71a9f89b6a4f1838df4d3d744Tomasz Wasilczyk filter.put("com.google.dummy", "dummy"); 3690f1776d08b43f5f71a9f89b6a4f1838df4d3d744Tomasz Wasilczyk List<RadioManager.ProgramInfo> list = mRadioTuner.getProgramList(filter); 370d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertNotNull(list); 371d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } catch (IllegalStateException e) { 372d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk // the list may or may not be ready at this point 373d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk Log.i(TAG, "Background list is not ready"); 374d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 375d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 376d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 377d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk @Test 3788cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk public void testTuneFromProgramList() { 3798cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk openTuner(); 3808cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3818cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk List<RadioManager.ProgramInfo> list; 3828cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3838cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk try { 3848cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk list = mRadioTuner.getProgramList(null); 3858cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertNotNull(list); 3868cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } catch (IllegalStateException e) { 3878cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk Log.i(TAG, "Background list is not ready, trying to fix it"); 3888cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3898cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk boolean success = mRadioTuner.startBackgroundScan(); 3908cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertTrue(success); 3918cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk verify(mCallback, timeout(kFullScanTimeoutMs)).onBackgroundScanComplete(); 3928cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3938cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk list = mRadioTuner.getProgramList(null); 3948cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertNotNull(list); 3958cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } 3968cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 3978cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk if (list.isEmpty()) { 3988cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk Log.i(TAG, "Program list is empty, can't test tune"); 3998cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk return; 4008cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } 4018cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 4028cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk ProgramSelector sel = list.get(0).getSelector(); 4038cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk mRadioTuner.tune(sel); 4048cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk ArgumentCaptor<RadioManager.ProgramInfo> infoc = 4058cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk ArgumentCaptor.forClass(RadioManager.ProgramInfo.class); 4068cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(infoc.capture()); 4078cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk assertEquals(sel, infoc.getValue().getSelector()); 4088cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk } 4098cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk 4108cfb0e81fdd91b7fe1c02287394ac068287281d5Tomasz Wasilczyk @Test 411d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk public void testForcedAnalog() { 412d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk openTuner(); 413d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 414d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean isSupported = true; 415d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk boolean isForced; 416d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk try { 417d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isForced = mRadioTuner.isAnalogForced(); 418d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertFalse(isForced); 419d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } catch (IllegalStateException ex) { 420d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk Log.i(TAG, "Forced analog switch is not supported by this tuner"); 421d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isSupported = false; 422d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 423d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 424d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk if (isSupported) { 425d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mRadioTuner.setAnalogForced(true); 426d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isForced = mRadioTuner.isAnalogForced(); 427d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertTrue(isForced); 428d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk 429d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mRadioTuner.setAnalogForced(false); 430d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk isForced = mRadioTuner.isAnalogForced(); 431d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertFalse(isForced); 432d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } else { 433d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk assertThrows(IllegalStateException.class, () -> mRadioTuner.setAnalogForced(true)); 434d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 435d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 436347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk} 437