diff options
| -rw-r--r-- | core/java/android/hardware/radio/TunerCallbackAdapter.java | 67 |
1 files changed, 37 insertions, 30 deletions
diff --git a/core/java/android/hardware/radio/TunerCallbackAdapter.java b/core/java/android/hardware/radio/TunerCallbackAdapter.java index f9a2dbb1bdb4..b1b4de35a9c4 100644 --- a/core/java/android/hardware/radio/TunerCallbackAdapter.java +++ b/core/java/android/hardware/radio/TunerCallbackAdapter.java @@ -63,48 +63,53 @@ final class TunerCallbackAdapter extends ITunerCallback.Stub { } void close() { + ProgramList programList; synchronized (mLock) { - if (mProgramList != null) { - mProgramList.close(); + if (mProgramList == null) { + return; } + programList = mProgramList; } + programList.close(); } void setProgramListObserver(@Nullable ProgramList programList, ProgramList.OnCloseListener closeListener) { Objects.requireNonNull(closeListener, "CloseListener cannot be null"); + ProgramList prevProgramList; synchronized (mLock) { - if (mProgramList != null) { - Log.w(TAG, "Previous program list observer wasn't properly closed, closing it..."); - mProgramList.close(); - } + prevProgramList = mProgramList; mProgramList = programList; - if (programList == null) { - return; + } + if (prevProgramList != null) { + Log.w(TAG, "Previous program list observer wasn't properly closed, closing it..."); + prevProgramList.close(); + } + if (programList == null) { + return; + } + programList.setOnCloseListener(() -> { + synchronized (mLock) { + if (mProgramList != programList) { + return; + } + mProgramList = null; + mLastCompleteList = null; } - programList.setOnCloseListener(() -> { - synchronized (mLock) { - if (mProgramList != programList) { - return; - } - mProgramList = null; - mLastCompleteList = null; + closeListener.onClose(); + }); + programList.addOnCompleteListener(() -> { + synchronized (mLock) { + if (mProgramList != programList) { + return; } - closeListener.onClose(); - }); - programList.addOnCompleteListener(() -> { - synchronized (mLock) { - if (mProgramList != programList) { - return; - } - mLastCompleteList = programList.toList(); - if (mDelayedCompleteCallback) { - Log.d(TAG, "Sending delayed onBackgroundScanComplete callback"); - sendBackgroundScanCompleteLocked(); - } + mLastCompleteList = programList.toList(); + if (mDelayedCompleteCallback) { + Log.d(TAG, "Sending delayed onBackgroundScanComplete callback"); + sendBackgroundScanCompleteLocked(); } - }); - } + } + }); } @Nullable List<RadioManager.ProgramInfo> getLastCompleteList() { @@ -245,12 +250,14 @@ final class TunerCallbackAdapter extends ITunerCallback.Stub { @Override public void onProgramListUpdated(ProgramList.Chunk chunk) { mHandler.post(() -> { + ProgramList programList; synchronized (mLock) { if (mProgramList == null) { return; } - mProgramList.apply(Objects.requireNonNull(chunk, "Chunk cannot be null")); + programList = mProgramList; } + programList.apply(Objects.requireNonNull(chunk, "Chunk cannot be null")); }); } |