From 6d828503251c96ca8cc33e6f60c48ea8801870c0 Mon Sep 17 00:00:00 2001 From: jasonwshsu Date: Thu, 13 Mar 2025 05:52:12 +0800 Subject: Fix test fail for HearingDevicePhoneCallNotificationController Root Cause: attempt to call addOnCommunicationDeviceChangedListeneron a previously registered listener, and fail on pts-bot:HFP/AG#HFP/AG/ECS/BV-03-I CtsTelecomTestCases CtsTelephonyTestCases Solution: Add protection to not register it multiple times Bug: 402755697 Bug: 402749422 Test: atest HearingDevicePhoneCallNotificationControllerTest Test: atest pts-bot:HFP/AG#HFP/AG/ECS/BV-03-I CtsTelecomTestCases CtsTelephonyTestCases Flag: com.android.server.accessibility.hearing_input_change_when_comm_device Change-Id: I51dd57f5578b6672d91356273930371f088fcdd5 --- ...aringDevicePhoneCallNotificationController.java | 32 ++++++++++++++++------ 1 file changed, 24 insertions(+), 8 deletions(-) (limited to 'services/accessibility') diff --git a/services/accessibility/java/com/android/server/accessibility/HearingDevicePhoneCallNotificationController.java b/services/accessibility/java/com/android/server/accessibility/HearingDevicePhoneCallNotificationController.java index 94cef418b6c8..edcf5748a8fc 100644 --- a/services/accessibility/java/com/android/server/accessibility/HearingDevicePhoneCallNotificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/HearingDevicePhoneCallNotificationController.java @@ -17,6 +17,7 @@ package com.android.server.accessibility; import android.Manifest; +import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.SuppressLint; import android.app.Notification; @@ -149,11 +150,7 @@ public class HearingDevicePhoneCallNotificationController { } if (state == TelephonyManager.CALL_STATE_IDLE) { - if (mIsCommDeviceChangedRegistered) { - mIsCommDeviceChangedRegistered = false; - mAudioManager.removeOnCommunicationDeviceChangedListener( - mCommDeviceChangedListener); - } + removeOnCommunicationDeviceChangedListenerIfNeeded(mCommDeviceChangedListener); dismissNotificationIfNeeded(); if (mHearingDevice != null) { @@ -172,10 +169,8 @@ public class HearingDevicePhoneCallNotificationController { if (mHearingDevice != null) { showNotificationIfNeeded(); } else { - mAudioManager.addOnCommunicationDeviceChangedListener( - mCommDeviceChangedExecutor, + addOnCommunicationDeviceChangedListenerIfNeeded(mCommDeviceChangedExecutor, mCommDeviceChangedListener); - mIsCommDeviceChangedRegistered = true; } } else { mHearingDevice = getSupportedInputHearingDeviceInfo( @@ -187,6 +182,27 @@ public class HearingDevicePhoneCallNotificationController { } } + private void addOnCommunicationDeviceChangedListenerIfNeeded( + @NonNull @CallbackExecutor Executor executor, + @NonNull AudioManager.OnCommunicationDeviceChangedListener listener) { + if (mIsCommDeviceChangedRegistered) { + return; + } + + mIsCommDeviceChangedRegistered = true; + mAudioManager.addOnCommunicationDeviceChangedListener(executor, listener); + } + + private void removeOnCommunicationDeviceChangedListenerIfNeeded( + @NonNull AudioManager.OnCommunicationDeviceChangedListener listener) { + if (!mIsCommDeviceChangedRegistered) { + return; + } + + mAudioManager.removeOnCommunicationDeviceChangedListener(listener); + mIsCommDeviceChangedRegistered = false; + } + private void showNotificationIfNeeded() { if (mIsNotificationShown) { return; -- cgit v1.2.3-59-g8ed1b