From 904975fd69975015ca18dd626861a02c32c8576a Mon Sep 17 00:00:00 2001 From: Nadav Bar Date: Wed, 23 Feb 2022 12:24:11 +0000 Subject: [PATCH] Integrate captions volume button with new CaptioningManager API The code that checks for the captions service component will be removed once the integration in the system captions side will happen. Also cleans up the unused stream opt-out property. Change-Id: I606f0d7a5319bbdc54b2e853fb70ea44ff9645a0 Bug: 221021539. Bug: 136282740. Test: Manually. --- packages/SystemUI/AndroidManifest.xml | 3 +++ .../plugins/VolumeDialogController.java | 1 - .../res/color/caption_tint_color_selector.xml | 3 --- .../layout-land-television/volume_dialog.xml | 3 +-- .../res/layout-land/volume_dialog.xml | 3 +-- .../SystemUI/res/layout/volume_dialog.xml | 3 +-- packages/SystemUI/res/values/attrs.xml | 4 --- .../dagger/FrameworkServicesModule.java | 7 +++++ .../volume/CaptionsToggleImageButton.java | 21 ++------------- .../volume/VolumeDialogControllerImpl.java | 26 ++++++++++--------- .../systemui/volume/VolumeDialogImpl.java | 5 ---- .../VolumeDialogControllerImplTest.java | 8 ++++-- 12 files changed, 35 insertions(+), 52 deletions(-) diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index ad6074a93c96c..1a6ca1fe05d72 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -311,6 +311,9 @@ + + + diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java index 0a0530c056afd..3d2f570bde873 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java @@ -60,7 +60,6 @@ public interface VolumeDialogController { boolean areCaptionsEnabled(); void setCaptionsEnabled(boolean isEnabled); - boolean isCaptionStreamOptedOut(); void getCaptionsComponentState(boolean fromTooltip); diff --git a/packages/SystemUI/res/color/caption_tint_color_selector.xml b/packages/SystemUI/res/color/caption_tint_color_selector.xml index 30843ec70f912..5239d269eb4ae 100644 --- a/packages/SystemUI/res/color/caption_tint_color_selector.xml +++ b/packages/SystemUI/res/color/caption_tint_color_selector.xml @@ -16,8 +16,5 @@ --> - - \ No newline at end of file diff --git a/packages/SystemUI/res/layout-land-television/volume_dialog.xml b/packages/SystemUI/res/layout-land-television/volume_dialog.xml index 6b5629facd418..0fbc519ca8ddb 100644 --- a/packages/SystemUI/res/layout-land-television/volume_dialog.xml +++ b/packages/SystemUI/res/layout-land-television/volume_dialog.xml @@ -73,8 +73,7 @@ android:layout_height="match_parent" android:tint="@color/caption_tint_color_selector" android:layout_gravity="center" - android:soundEffectsEnabled="false" - sysui:optedOut="false"/> + android:soundEffectsEnabled="false"/> diff --git a/packages/SystemUI/res/layout-land/volume_dialog.xml b/packages/SystemUI/res/layout-land/volume_dialog.xml index f1cda277f0451..3b70dc060e84e 100644 --- a/packages/SystemUI/res/layout-land/volume_dialog.xml +++ b/packages/SystemUI/res/layout-land/volume_dialog.xml @@ -136,8 +136,7 @@ android:layout_height="match_parent" android:tint="?android:attr/colorAccent" android:layout_gravity="center" - android:soundEffectsEnabled="false" - sysui:optedOut="false"/> + android:soundEffectsEnabled="false" /> diff --git a/packages/SystemUI/res/layout/volume_dialog.xml b/packages/SystemUI/res/layout/volume_dialog.xml index 51718d9af0543..6a192d4b7e059 100644 --- a/packages/SystemUI/res/layout/volume_dialog.xml +++ b/packages/SystemUI/res/layout/volume_dialog.xml @@ -135,8 +135,7 @@ android:layout_height="match_parent" android:tint="?android:attr/colorAccent" android:layout_gravity="center" - android:soundEffectsEnabled="false" - sysui:optedOut="false"/> + android:soundEffectsEnabled="false"/> diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index 2992859b1ce72..e28de8a9cf96e 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -154,10 +154,6 @@ - - - - diff --git a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java index bd472a48ab3ec..71c538d9324b8 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java @@ -71,6 +71,7 @@ import android.view.ViewConfiguration; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.CaptioningManager; import android.view.inputmethod.InputMethodManager; import com.android.internal.app.IBatteryStats; @@ -118,6 +119,12 @@ public class FrameworkServicesModule { return context.getSystemService(AudioManager.class); } + @Provides + @Singleton + static CaptioningManager provideCaptioningManager(Context context) { + return context.getSystemService(CaptioningManager.class); + } + @Provides @Singleton static ColorDisplayManager provideColorDisplayManager(Context context) { diff --git a/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java b/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java index 1862ed3a4de8e..ae23ca64e31e5 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java +++ b/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java @@ -28,14 +28,11 @@ import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.Accessibilit import com.android.keyguard.AlphaOptimizedImageButton; import com.android.systemui.R; -/** Toggle button in Volume Dialog that allows extra state for when streams are opted-out */ +/** Toggle button in Volume Dialog for controlling system captions state */ public class CaptionsToggleImageButton extends AlphaOptimizedImageButton { - private static final int[] OPTED_OUT_STATE = new int[] { R.attr.optedOut }; - private ConfirmedTapListener mConfirmedTapListener; private boolean mCaptionsEnabled = false; - private boolean mOptedOut = false; private GestureDetector mGestureDetector; private GestureDetector.SimpleOnGestureListener mGestureListener = @@ -60,11 +57,7 @@ public class CaptionsToggleImageButton extends AlphaOptimizedImageButton { @Override public int[] onCreateDrawableState(int extraSpace) { - int[] state = super.onCreateDrawableState(extraSpace + 1); - if (mOptedOut) { - mergeDrawableStates(state, OPTED_OUT_STATE); - } - return state; + return super.onCreateDrawableState(extraSpace + 1); } Runnable setCaptionsEnabled(boolean areCaptionsEnabled) { @@ -95,16 +88,6 @@ public class CaptionsToggleImageButton extends AlphaOptimizedImageButton { return this.mCaptionsEnabled; } - /** Sets whether or not the current stream has opted out of captions */ - void setOptedOut(boolean isOptedOut) { - this.mOptedOut = isOptedOut; - refreshDrawableState(); - } - - boolean getOptedOut() { - return this.mOptedOut; - } - void setOnConfirmedTapListener(ConfirmedTapListener listener, Handler handler) { mConfirmedTapListener = listener; diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java index 57c7f11b752d6..97e03a68205ca 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java @@ -54,6 +54,7 @@ import android.util.ArrayMap; import android.util.Log; import android.util.Slog; import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.CaptioningManager; import androidx.lifecycle.Observer; @@ -130,6 +131,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa private final Receiver mReceiver = new Receiver(); private final RingerModeObservers mRingerModeObservers; private final MediaSessions mMediaSessions; + private final CaptioningManager mCaptioningManager; protected C mCallbacks = new C(); private final State mState = new State(); protected final MediaSessionsCallbacks mMediaSessionsCallbacksW; @@ -175,7 +177,8 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa IAudioService iAudioService, AccessibilityManager accessibilityManager, PackageManager packageManager, - WakefulnessLifecycle wakefulnessLifecycle) { + WakefulnessLifecycle wakefulnessLifecycle, + CaptioningManager captioningManager) { mContext = context.getApplicationContext(); mPackageManager = packageManager; mWakefulnessLifecycle = wakefulnessLifecycle; @@ -200,6 +203,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa mVibrator = vibrator; mHasVibrator = mVibrator.hasVibrator(); mAudioService = iAudioService; + mCaptioningManager = captioningManager; boolean accessibilityVolumeStreamActive = accessibilityManager .isAccessibilityVolumeStreamActive(); @@ -307,20 +311,11 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } public boolean areCaptionsEnabled() { - int currentValue = Settings.Secure.getIntForUser(mContext.getContentResolver(), - Settings.Secure.ODI_CAPTIONS_ENABLED, 0, UserHandle.USER_CURRENT); - return currentValue == 1; + return mCaptioningManager.isSystemAudioCaptioningEnabled(); } public void setCaptionsEnabled(boolean isEnabled) { - Settings.Secure.putIntForUser(mContext.getContentResolver(), - Settings.Secure.ODI_CAPTIONS_ENABLED, isEnabled ? 1 : 0, UserHandle.USER_CURRENT); - } - - @Override - public boolean isCaptionStreamOptedOut() { - // TODO(b/129768185): Removing secure setting, to be replaced by sound event listener - return false; + mCaptioningManager.setSystemAudioCaptioningEnabled(isEnabled); } public void getCaptionsComponentState(boolean fromTooltip) { @@ -423,6 +418,13 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } private void onGetCaptionsComponentStateW(boolean fromTooltip) { + if (mCaptioningManager.isSystemAudioCaptioningUiEnabled()) { + mCallbacks.onCaptionComponentStateChanged(true, fromTooltip); + return; + } + + // TODO(b/220968335): Remove this check once system captions component migrates + // to new CaptioningManager APIs. try { String componentNameString = mContext.getString( com.android.internal.R.string.config_defaultSystemCaptionsService); diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index 58f74a0d2a02c..bfdcbd6deb487 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -1180,11 +1180,6 @@ public class VolumeDialogImpl implements VolumeDialog, if (mODICaptionsIcon.getCaptionsEnabled() != captionsEnabled) { mHandler.post(mODICaptionsIcon.setCaptionsEnabled(captionsEnabled)); } - - boolean isOptedOut = mController.isCaptionStreamOptedOut(); - if (mODICaptionsIcon.getOptedOut() != isOptedOut) { - mHandler.post(() -> mODICaptionsIcon.setOptedOut(isOptedOut)); - } } private void onCaptionIconClicked() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java index b3805533cabd8..ec619bb5952ac 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java @@ -36,6 +36,7 @@ import android.os.Process; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.CaptioningManager; import androidx.test.filters.SmallTest; @@ -88,6 +89,8 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { private PackageManager mPackageManager; @Mock private WakefulnessLifecycle mWakefullnessLifcycle; + @Mock + private CaptioningManager mCaptioningManager; @Before @@ -109,7 +112,7 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { mVolumeController = new TestableVolumeDialogControllerImpl(mContext, mBroadcastDispatcher, mRingerModeTracker, mThreadFactory, mAudioManager, mNotificationManager, mVibrator, mIAudioService, mAccessibilityManager, - mPackageManager, mWakefullnessLifcycle, mCallback); + mPackageManager, mWakefullnessLifcycle, mCaptioningManager, mCallback); mVolumeController.setEnableDialogs(true, true); } @@ -184,10 +187,11 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { AccessibilityManager accessibilityManager, PackageManager packageManager, WakefulnessLifecycle wakefulnessLifecycle, + CaptioningManager captioningManager, C callback) { super(context, broadcastDispatcher, ringerModeTracker, theadFactory, audioManager, notificationManager, optionalVibrator, iAudioService, accessibilityManager, - packageManager, wakefulnessLifecycle); + packageManager, wakefulnessLifecycle, captioningManager); mCallbacks = callback; ArgumentCaptor observerCaptor =