TunerAdapter.java revision 14752375d74908632195a875f32a2b5fd1e719ef
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 */ 16347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 17347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykpackage android.hardware.radio; 18347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 19347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport android.annotation.NonNull; 20347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport android.annotation.Nullable; 21347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport android.os.RemoteException; 22347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport android.util.Log; 23347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 24347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport java.util.List; 25347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 26347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk/** 27347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * Implements the RadioTuner interface by forwarding calls to radio service. 28347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk */ 29347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykclass TunerAdapter extends RadioTuner { 30347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk private static final String TAG = "radio.TunerAdapter"; 31347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 32347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @NonNull private final ITuner mTuner; 33d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk private boolean mIsClosed = false; 34347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 35347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk TunerAdapter(ITuner tuner) { 36347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk if (tuner == null) { 37347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk throw new NullPointerException(); 38347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 39347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk mTuner = tuner; 40347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 41347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 42347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 43347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public void close() { 44d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk synchronized (mTuner) { 45d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk if (mIsClosed) { 4614752375d74908632195a875f32a2b5fd1e719efTomasz Wasilczyk Log.v(TAG, "Tuner is already closed"); 47d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk return; 48d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk } 49d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk mIsClosed = true; 50d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk } 51d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk try { 52d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk mTuner.close(); 53d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk } catch (RemoteException e) { 54d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk Log.e(TAG, "Exception trying to close tuner", e); 55d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk } 56347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 57347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 58347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 59347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public int setConfiguration(RadioManager.BandConfig config) { 608b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk try { 618b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk mTuner.setConfiguration(config); 628b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk return RadioManager.STATUS_OK; 638b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk } catch (IllegalArgumentException e) { 648b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk Log.e(TAG, "Can't set configuration", e); 658b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk return RadioManager.STATUS_BAD_VALUE; 668b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk } catch (RemoteException e) { 679fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk Log.e(TAG, "service died", e); 689fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk return RadioManager.STATUS_DEAD_OBJECT; 698b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk } 70347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 71347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 72347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 73347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public int getConfiguration(RadioManager.BandConfig[] config) { 748b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk if (config == null || config.length != 1) { 758b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk throw new IllegalArgumentException("The argument must be an array of length 1"); 768b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk } 778b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk try { 788b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk config[0] = mTuner.getConfiguration(); 798b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk return RadioManager.STATUS_OK; 808b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk } catch (RemoteException e) { 819fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk Log.e(TAG, "service died", e); 829fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk return RadioManager.STATUS_DEAD_OBJECT; 838b6db4f2eb02f231dd8006debbc1e1be1181178aTomasz Wasilczyk } 84347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 85347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 86347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 87347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public int setMute(boolean mute) { 889fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk try { 899fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk mTuner.setMuted(mute); 909fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } catch (IllegalStateException e) { 919fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk Log.e(TAG, "Can't set muted", e); 929fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk return RadioManager.STATUS_ERROR; 939fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } catch (RemoteException e) { 949fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk Log.e(TAG, "service died", e); 959fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk return RadioManager.STATUS_DEAD_OBJECT; 969fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } 979fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk return RadioManager.STATUS_OK; 98347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 99347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 100347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 101347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public boolean getMute() { 1029fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk try { 1039fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk return mTuner.isMuted(); 1049fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } catch (RemoteException e) { 1059fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk Log.e(TAG, "service died", e); 1069fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk return true; 1079fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk } 108347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 109347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 110347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 111347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public int step(int direction, boolean skipSubChannel) { 1122383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk try { 1132383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk mTuner.step(direction == RadioTuner.DIRECTION_DOWN, skipSubChannel); 1142383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk } catch (IllegalStateException e) { 1152383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk Log.e(TAG, "Can't step", e); 1162383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk return RadioManager.STATUS_INVALID_OPERATION; 1172383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk } catch (RemoteException e) { 1182383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk Log.e(TAG, "service died", e); 1192383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk return RadioManager.STATUS_DEAD_OBJECT; 1202383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk } 1212383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk return RadioManager.STATUS_OK; 122347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 123347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 124347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 125347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public int scan(int direction, boolean skipSubChannel) { 1262383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk try { 1272383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk mTuner.scan(direction == RadioTuner.DIRECTION_DOWN, skipSubChannel); 1282383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk } catch (IllegalStateException e) { 1292383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk Log.e(TAG, "Can't scan", e); 1302383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk return RadioManager.STATUS_INVALID_OPERATION; 1312383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk } catch (RemoteException e) { 1322383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk Log.e(TAG, "service died", e); 1332383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk return RadioManager.STATUS_DEAD_OBJECT; 1342383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk } 1352383793eaee223546985ee12c2f35a3445e34b1cTomasz Wasilczyk return RadioManager.STATUS_OK; 136347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 137347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 138347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 139347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public int tune(int channel, int subChannel) { 14037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk try { 14137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk mTuner.tune(channel, subChannel); 14237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } catch (IllegalStateException e) { 14337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk Log.e(TAG, "Can't tune", e); 14437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk return RadioManager.STATUS_INVALID_OPERATION; 14537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } catch (IllegalArgumentException e) { 14637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk Log.e(TAG, "Can't tune", e); 14737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk return RadioManager.STATUS_BAD_VALUE; 14837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } catch (RemoteException e) { 14937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk Log.e(TAG, "service died", e); 15037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk return RadioManager.STATUS_DEAD_OBJECT; 15137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 15237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk return RadioManager.STATUS_OK; 153347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 154347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 155347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 156347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public int cancel() { 15737d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk try { 15837d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk mTuner.cancel(); 15937d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } catch (IllegalStateException e) { 16037d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk Log.e(TAG, "Can't cancel", e); 16137d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk return RadioManager.STATUS_INVALID_OPERATION; 16237d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } catch (RemoteException e) { 16337d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk Log.e(TAG, "service died", e); 16437d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk return RadioManager.STATUS_DEAD_OBJECT; 16537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk } 16637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk return RadioManager.STATUS_OK; 167347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 168347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 169347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 170347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public int getProgramInformation(RadioManager.ProgramInfo[] info) { 171347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk if (info == null || info.length != 1) { 172347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk throw new IllegalArgumentException("The argument must be an array of length 1"); 173347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 174347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk try { 17537d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk info[0] = mTuner.getProgramInformation(); 17637d986d17d0210706be907ce9119b711eeaca235Tomasz Wasilczyk return RadioManager.STATUS_OK; 177347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } catch (RemoteException e) { 1789fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk Log.e(TAG, "service died", e); 1799fa0287c1802df074d4039489dcfad712c19bcbaTomasz Wasilczyk return RadioManager.STATUS_DEAD_OBJECT; 180347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 181347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 182347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 183347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 184347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public boolean startBackgroundScan() { 185d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk try { 186d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk return mTuner.startBackgroundScan(); 187d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } catch (RemoteException e) { 188d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk throw new RuntimeException("service died", e); 189d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 190347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 191347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 192347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 193347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public @NonNull List<RadioManager.ProgramInfo> getProgramList(@Nullable String filter) { 194d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk try { 195d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk return mTuner.getProgramList(filter); 196d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } catch (RemoteException e) { 197d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk throw new RuntimeException("service died", e); 198d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 199347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 200347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 201347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 202347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public boolean isAnalogForced() { 203d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk try { 204d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk return mTuner.isAnalogForced(); 205d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } catch (RemoteException e) { 206d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk throw new RuntimeException("service died", e); 207d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 208347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 209347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 210347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 211347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public void setAnalogForced(boolean isForced) { 212d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk try { 213d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk mTuner.setAnalogForced(isForced); 214d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } catch (RemoteException e) { 215d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk throw new RuntimeException("service died", e); 216d3d53f669268fe8dd15f16abbd0504f7b9e38405Tomasz Wasilczyk } 217347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 218347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 219347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 220347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public boolean isAntennaConnected() { 22139ac214838988a33096529bd4e1f003ef7895491Tomasz Wasilczyk try { 22239ac214838988a33096529bd4e1f003ef7895491Tomasz Wasilczyk return mTuner.isAntennaConnected(); 22339ac214838988a33096529bd4e1f003ef7895491Tomasz Wasilczyk } catch (RemoteException e) { 22439ac214838988a33096529bd4e1f003ef7895491Tomasz Wasilczyk throw new RuntimeException("service died", e); 22539ac214838988a33096529bd4e1f003ef7895491Tomasz Wasilczyk } 226347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 227347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk 228347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk @Override 229347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk public boolean hasControl() { 230468a53b71025a42dde24922e0255ab3251e63fbeTomasz Wasilczyk try { 231468a53b71025a42dde24922e0255ab3251e63fbeTomasz Wasilczyk // don't rely on mIsClosed, as tuner might get closed internally 232468a53b71025a42dde24922e0255ab3251e63fbeTomasz Wasilczyk return !mTuner.isClosed(); 233468a53b71025a42dde24922e0255ab3251e63fbeTomasz Wasilczyk } catch (RemoteException e) { 234468a53b71025a42dde24922e0255ab3251e63fbeTomasz Wasilczyk return false; 235468a53b71025a42dde24922e0255ab3251e63fbeTomasz Wasilczyk } 236347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk } 237347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk} 238