From 124a9e1ebd5b02354ac396a7d837ea76db47408a Mon Sep 17 00:00:00 2001 From: Yiyi Shen Date: Wed, 31 Jul 2024 16:41:53 +0800 Subject: [PATCH] [Audiosharing] Not announce enable/disable when toggle main switch Fix: 356318679 Test: atest Flag: com.android.settingslib.flags.enable_le_audio_sharing Change-Id: I3331f9ded48352f442712287a6b536da883fe73d --- .../AudioSharingSwitchBarController.java | 19 +++++++++++++++ .../AudioSharingDashboardFragmentTest.java | 4 ++++ .../AudioSharingSwitchBarControllerTest.java | 24 +++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java index 60b2ee507cd..3c0faba5db8 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java @@ -30,6 +30,9 @@ import android.content.IntentFilter; import android.util.FeatureFlagUtils; import android.util.Log; import android.util.Pair; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; @@ -284,6 +287,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController : mProfileManager.getLeAudioBroadcastAssistantProfile(); mExecutor = Executors.newSingleThreadExecutor(); mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider(); + mSwitchBar.getRootView().setAccessibilityDelegate(new MainSwitchAccessibilityDelegate()); } @Override @@ -564,4 +568,19 @@ public class AudioSharingSwitchBarController extends BasePreferenceController } }); } + + private static final class MainSwitchAccessibilityDelegate extends View.AccessibilityDelegate { + @Override + public boolean onRequestSendAccessibilityEvent( + @NonNull ViewGroup host, @NonNull View view, @NonNull AccessibilityEvent event) { + if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED + && (event.getContentChangeTypes() + & AccessibilityEvent.CONTENT_CHANGE_TYPE_ENABLED) + != 0) { + Log.d(TAG, "Skip accessibility event for CONTENT_CHANGE_TYPE_ENABLED"); + return false; + } + return super.onRequestSendAccessibilityEvent(host, view, event); + } + } } diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDashboardFragmentTest.java index 8e4915cc8ff..7d8846d0506 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDashboardFragmentTest.java @@ -21,10 +21,12 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.app.settings.SettingsEnums; import android.content.Context; import android.os.Bundle; +import android.view.View; import androidx.test.core.app.ApplicationProvider; @@ -52,6 +54,7 @@ public class AudioSharingDashboardFragmentTest { @Mock private SettingsActivity mActivity; @Mock private SettingsMainSwitchBar mSwitchBar; + @Mock private View mView; @Mock private AudioSharingDeviceVolumeGroupController mVolumeGroupController; @Mock private AudioSharingCallAudioPreferenceController mCallAudioController; @Mock private AudioSharingPlaySoundPreferenceController mPlaySoundController; @@ -61,6 +64,7 @@ public class AudioSharingDashboardFragmentTest { @Before public void setUp() { + when(mSwitchBar.getRootView()).thenReturn(mView); mFragment = new AudioSharingDashboardFragment(); } diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java index bfb4f2f754c..711ef6f6955 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java @@ -51,6 +51,8 @@ import android.os.Looper; import android.platform.test.flag.junit.SetFlagsRule; import android.util.FeatureFlagUtils; import android.util.Pair; +import android.view.View; +import android.view.accessibility.AccessibilityEvent; import android.widget.CompoundButton; import androidx.fragment.app.DialogFragment; @@ -590,4 +592,26 @@ public class AudioSharingSwitchBarControllerTest { mController.mBroadcastAssistantCallback.onSourceLost(/* broadcastId= */ 1); verifyNoMoreInteractions(mFeatureFactory.metricsFeatureProvider); } + + @Test + public void testAccessibilityDelegate() { + View view = new View(mContext); + AccessibilityEvent event = + new AccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); + event.setContentChangeTypes(AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + assertThat( + mSwitchBar + .getRootView() + .getAccessibilityDelegate() + .onRequestSendAccessibilityEvent(mSwitchBar, view, event)) + .isTrue(); + + event.setContentChangeTypes(AccessibilityEvent.CONTENT_CHANGE_TYPE_ENABLED); + assertThat( + mSwitchBar + .getRootView() + .getAccessibilityDelegate() + .onRequestSendAccessibilityEvent(mSwitchBar, view, event)) + .isFalse(); + } }