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