TunerAdapter.java revision d7c21d3cbfe8e1016a92234f89d6fe8c110144d1
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.ArrayList;
25347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykimport java.util.List;
26347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
27347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk/**
28347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk * Implements the RadioTuner interface by forwarding calls to radio service.
29347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk */
30347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczykclass TunerAdapter extends RadioTuner {
31347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    private static final String TAG = "radio.TunerAdapter";
32347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
33347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @NonNull private final ITuner mTuner;
34d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk    private boolean mIsClosed = false;
35347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
36347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    TunerAdapter(ITuner tuner) {
37347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        if (tuner == null) {
38347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk            throw new NullPointerException();
39347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        }
40347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        mTuner = tuner;
41347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
42347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
43347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
44347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public void close() {
45d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk        synchronized (mTuner) {
46d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk            if (mIsClosed) {
47d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk                Log.d(TAG, "Tuner is already closed");
48d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk                return;
49d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk            }
50d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk            mIsClosed = true;
51d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk        }
52d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk        try {
53d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk            mTuner.close();
54d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk        } catch (RemoteException e) {
55d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk            Log.e(TAG, "Exception trying to close tuner", e);
56d7c21d3cbfe8e1016a92234f89d6fe8c110144d1Tomasz Wasilczyk        }
57347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
58347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
59347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
60347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public int setConfiguration(RadioManager.BandConfig config) {
61347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
62347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
63347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
64347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
65347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
66347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public int getConfiguration(RadioManager.BandConfig[] config) {
67347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
68347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
69347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
70347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
71347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
72347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public int setMute(boolean mute) {
73347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
74347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
75347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
76347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
77347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
78347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public boolean getMute() {
79347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
80347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
81347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
82347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
83347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
84347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public int step(int direction, boolean skipSubChannel) {
85347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
86347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
87347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
88347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
89347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
90347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public int scan(int direction, boolean skipSubChannel) {
91347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
92347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
93347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
94347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
95347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
96347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public int tune(int channel, int subChannel) {
97347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
98347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
99347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
100347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
101347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
102347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public int cancel() {
103347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
104347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
105347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
106347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
107347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
108347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public int getProgramInformation(RadioManager.ProgramInfo[] info) {
109347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        if (info == null || info.length != 1) {
110347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk            throw new IllegalArgumentException("The argument must be an array of length 1");
111347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        }
112347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        try {
113347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk            return mTuner.getProgramInformation(info);
114347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        } catch (RemoteException e) {
115347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk            throw e.rethrowFromSystemServer();
116347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        }
117347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
118347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
119347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
120347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public boolean startBackgroundScan() {
121347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
122347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
123347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
124347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
125347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
126347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public @NonNull List<RadioManager.ProgramInfo> getProgramList(@Nullable String filter) {
127347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
128347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
129347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
130347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
131347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
132347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public boolean isAnalogForced() {
133347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
134347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
135347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
136347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
137347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
138347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public void setAnalogForced(boolean isForced) {
139347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
140347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
141347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
142347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
143347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
144347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public boolean isAntennaConnected() {
145347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
146347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
147347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
148347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk
149347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    @Override
150347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    public boolean hasControl() {
151347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        // TODO(b/36863239): forward to mTuner
152347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk        throw new RuntimeException("Not implemented");
153347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk    }
154347192e0da1f39347e7ab7b58b002f166b4afaa7Tomasz Wasilczyk}
155