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 3d2f570bde873..0a0530c056afd 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java @@ -60,6 +60,7 @@ 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 new file mode 100644 index 0000000000000..30843ec70f912 --- /dev/null +++ b/packages/SystemUI/res/color/caption_tint_color_selector.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/layout/volume_dialog.xml b/packages/SystemUI/res/layout/volume_dialog.xml index 1d0a24274b125..d1c80c43b3e93 100644 --- a/packages/SystemUI/res/layout/volume_dialog.xml +++ b/packages/SystemUI/res/layout/volume_dialog.xml @@ -15,6 +15,7 @@ --> - + android:soundEffectsEnabled="false" + sysui:optedOut="false"/> diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index 27d2bcdc05b4a..e0bcf2435948d 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -146,5 +146,9 @@ + + + + diff --git a/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java b/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java new file mode 100644 index 0000000000000..8ec66e4bcc301 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.volume; + +import android.content.Context; +import android.util.AttributeSet; + +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 */ +public class CaptionsToggleImageButton extends AlphaOptimizedImageButton { + + private static final int[] OPTED_OUT_STATE = new int[] { R.attr.optedOut }; + + private boolean mComponentEnabled = false; + private boolean mOptedOut = false; + + public CaptionsToggleImageButton(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public int[] onCreateDrawableState(int extraSpace) { + int[] state = super.onCreateDrawableState(extraSpace + 1); + if (mOptedOut) { + mergeDrawableStates(state, OPTED_OUT_STATE); + } + return state; + } + + Runnable setComponentEnabled(boolean isComponentEnabled) { + this.mComponentEnabled = isComponentEnabled; + + return this.setImageResourceAsync(this.mComponentEnabled + ? R.drawable.ic_volume_odi_captions + : R.drawable.ic_volume_odi_captions_disabled); + } + + boolean getComponentEnabled() { + return this.mComponentEnabled; + } + + /** 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; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java index 2fa8889a02f91..a3db533bb7d03 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java @@ -282,6 +282,13 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa Settings.Secure.ODI_CAPTIONS_ENABLED, isEnabled ? 1 : 0); } + @Override + public boolean isCaptionStreamOptedOut() { + int currentValue = Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.ODI_CAPTIONS_OPTED_OUT, 0); + return currentValue == 1; + } + public void getCaptionsComponentState(boolean fromTooltip) { if (mDestroyed) return; mWorker.obtainMessage(W.GET_CAPTIONS_COMPONENT_STATE, fromTooltip).sendToTarget(); diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index cdda216c5220a..bd7824df1d242 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -133,7 +133,7 @@ public class VolumeDialogImpl implements VolumeDialog { private ViewGroup mRinger; private ImageButton mRingerIcon; private ViewGroup mODICaptionsView; - private ImageButton mODICaptionsIcon; + private CaptionsToggleImageButton mODICaptionsIcon; private View mSettingsView; private ImageButton mSettingsIcon; private FrameLayout mZenIcon; @@ -587,11 +587,15 @@ public class VolumeDialogImpl implements VolumeDialog { } private void updateCaptionsIcon() { - mHandler.post( - mODICaptionsIcon.setImageResourceAsync( - mController.areCaptionsEnabled() - ? R.drawable.ic_volume_odi_captions - : R.drawable.ic_volume_odi_captions_disabled)); + boolean componentEnabled = mController.areCaptionsEnabled(); + if (mODICaptionsIcon.getComponentEnabled() != componentEnabled) { + mHandler.post(mODICaptionsIcon.setComponentEnabled(componentEnabled)); + } + + boolean isOptedOut = mController.isCaptionStreamOptedOut(); + if (mODICaptionsIcon.getOptedOut() != isOptedOut) { + mHandler.post(() -> mODICaptionsIcon.setOptedOut(isOptedOut)); + } } private void onCaptionIconClicked() { @@ -952,7 +956,7 @@ public class VolumeDialogImpl implements VolumeDialog { } private void updateVolumeRowH(VolumeRow row) { - if (D.BUG) Log.d(TAG, "updateVolumeRowH s=" + row.stream); + if (D.BUG) Log.i(TAG, "updateVolumeRowH s=" + row.stream); if (mState == null) return; final StreamState ss = mState.states.get(row.stream); if (ss == null) return;