diff --git a/core/java/android/hardware/radio/ITuner.aidl b/core/java/android/hardware/radio/ITuner.aidl index 1fc71e07cdb73..69e135d448e75 100644 --- a/core/java/android/hardware/radio/ITuner.aidl +++ b/core/java/android/hardware/radio/ITuner.aidl @@ -22,6 +22,8 @@ import android.hardware.radio.RadioManager; interface ITuner { void close(); + boolean isClosed(); + /** * @throws IllegalArgumentException if config is not valid or null */ diff --git a/core/java/android/hardware/radio/TunerAdapter.java b/core/java/android/hardware/radio/TunerAdapter.java index a457494012849..710dc1021dd8b 100644 --- a/core/java/android/hardware/radio/TunerAdapter.java +++ b/core/java/android/hardware/radio/TunerAdapter.java @@ -227,7 +227,11 @@ class TunerAdapter extends RadioTuner { @Override public boolean hasControl() { - // TODO(b/36863239): forward to mTuner - throw new RuntimeException("Not implemented"); + try { + // don't rely on mIsClosed, as tuner might get closed internally + return !mTuner.isClosed(); + } catch (RemoteException e) { + return false; + } } } diff --git a/services/core/java/com/android/server/radio/Tuner.java b/services/core/java/com/android/server/radio/Tuner.java index 5bd7c816943aa..c4e4657d4267f 100644 --- a/services/core/java/com/android/server/radio/Tuner.java +++ b/services/core/java/com/android/server/radio/Tuner.java @@ -92,13 +92,18 @@ class Tuner extends ITuner.Stub { public void close() { synchronized (mLock) { if (mIsClosed) return; + mIsClosed = true; mTunerCallback.detach(); mClientCallback.asBinder().unlinkToDeath(mDeathRecipient, 0); nativeClose(mNativeContext); - mIsClosed = true; } } + @Override + public boolean isClosed() { + return mIsClosed; + } + private void checkNotClosedLocked() { if (mIsClosed) { throw new IllegalStateException("Tuner is closed, no further operations are allowed");