Merge "Caption settings cleanup" into main

This commit is contained in:
Riley Jones
2024-11-08 21:06:11 +00:00
committed by Android (Google) Code Review
6 changed files with 142 additions and 25 deletions

View File

@@ -16,6 +16,7 @@
package com.android.settings.accessibility;
import android.annotation.Nullable;
import android.content.ContentResolver;
import android.content.Context;
import android.os.Handler;
@@ -39,6 +40,7 @@ import java.util.List;
public class CaptioningCustomController extends BasePreferenceController
implements LifecycleObserver, OnStart, OnStop {
@Nullable
private Preference mCustom;
private final CaptionHelper mCaptionHelper;
private final ContentResolver mContentResolver;
@@ -50,32 +52,41 @@ public class CaptioningCustomController extends BasePreferenceController
);
public CaptioningCustomController(Context context, String preferenceKey) {
super(context, preferenceKey);
mCaptionHelper = new CaptionHelper(context);
mContentResolver = context.getContentResolver();
mSettingsContentObserver = new AccessibilitySettingsContentObserver(
new Handler(Looper.getMainLooper()));
mSettingsContentObserver.registerKeysToObserverCallback(CAPTIONING_FEATURE_KEYS,
key -> refreshShowingCustom());
this(context, preferenceKey, new CaptionHelper(context),
new AccessibilitySettingsContentObserver(new Handler(Looper.getMainLooper())));
}
@VisibleForTesting
CaptioningCustomController(Context context, String preferenceKey,
CaptioningCustomController(
Context context, String preferenceKey, CaptionHelper captionHelper,
AccessibilitySettingsContentObserver contentObserver) {
this(context, preferenceKey);
super(context, preferenceKey);
mCaptionHelper = new CaptionHelper(context);
mContentResolver = context.getContentResolver();
mSettingsContentObserver = contentObserver;
mSettingsContentObserver.registerKeysToObserverCallback(CAPTIONING_FEATURE_KEYS, key -> {
if (mCustom != null) {
mCustom.setVisible(shouldShowPreference());
}
});
}
@Override
public int getAvailabilityStatus() {
return AVAILABLE;
if (com.android.settings.accessibility.Flags.fixA11ySettingsSearch()) {
return (shouldShowPreference()) ? AVAILABLE : AVAILABLE_UNSEARCHABLE;
} else {
return AVAILABLE;
}
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mCustom = screen.findPreference(getPreferenceKey());
refreshShowingCustom();
if (mCustom != null) {
mCustom.setVisible(shouldShowPreference());
}
}
@Override
@@ -88,9 +99,7 @@ public class CaptioningCustomController extends BasePreferenceController
mSettingsContentObserver.unregister(mContentResolver);
}
private void refreshShowingCustom() {
final boolean isCustomPreset =
mCaptionHelper.getRawUserStyle() == CaptioningManager.CaptionStyle.PRESET_CUSTOM;
mCustom.setVisible(isCustomPreset);
private boolean shouldShowPreference() {
return mCaptionHelper.getRawUserStyle() == CaptioningManager.CaptionStyle.PRESET_CUSTOM;
}
}

View File

@@ -19,10 +19,12 @@ package com.android.settings.accessibility;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.view.accessibility.CaptioningManager;
import android.view.accessibility.CaptioningManager.CaptionStyle;
import androidx.preference.PreferenceScreen;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
import com.android.settings.core.BasePreferenceController;
@@ -34,14 +36,26 @@ public class CaptioningWindowColorController extends BasePreferenceController
private final CaptionHelper mCaptionHelper;
private int mCachedNonDefaultOpacity = CaptionStyle.COLOR_UNSPECIFIED;
public CaptioningWindowColorController(Context context, String preferenceKey) {
@VisibleForTesting
CaptioningWindowColorController(Context context, String preferenceKey,
CaptionHelper captionHelper) {
super(context, preferenceKey);
mCaptionHelper = new CaptionHelper(context);
mCaptionHelper = captionHelper;
}
public CaptioningWindowColorController(Context context, String preferenceKey) {
this(context, preferenceKey, new CaptionHelper(context));
}
@Override
public int getAvailabilityStatus() {
return AVAILABLE;
if (com.android.settings.accessibility.Flags.fixA11ySettingsSearch()) {
return (mCaptionHelper.getRawUserStyle()
== CaptioningManager.CaptionStyle.PRESET_CUSTOM)
? AVAILABLE : AVAILABLE_UNSEARCHABLE;
} else {
return AVAILABLE;
}
}
@Override

View File

@@ -18,9 +18,11 @@ package com.android.settings.accessibility;
import android.content.Context;
import android.content.res.Resources;
import android.view.accessibility.CaptioningManager;
import androidx.preference.PreferenceScreen;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
import com.android.settings.core.BasePreferenceController;
@@ -31,14 +33,26 @@ public class CaptioningWindowOpacityController extends BasePreferenceController
private final CaptionHelper mCaptionHelper;
public CaptioningWindowOpacityController(Context context, String preferenceKey) {
@VisibleForTesting
CaptioningWindowOpacityController(Context context, String preferenceKey,
CaptionHelper captionHelper) {
super(context, preferenceKey);
mCaptionHelper = new CaptionHelper(context);
mCaptionHelper = captionHelper;
}
public CaptioningWindowOpacityController(Context context, String preferenceKey) {
this(context, preferenceKey, new CaptionHelper(context));
}
@Override
public int getAvailabilityStatus() {
return AVAILABLE;
if (com.android.settings.accessibility.Flags.fixA11ySettingsSearch()) {
return (mCaptionHelper.getRawUserStyle()
== CaptioningManager.CaptionStyle.PRESET_CUSTOM)
? AVAILABLE : AVAILABLE_UNSEARCHABLE;
} else {
return AVAILABLE;
}
}
@Override

View File

@@ -23,6 +23,9 @@ import static org.mockito.Mockito.when;
import android.content.ContentResolver;
import android.content.Context;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.view.accessibility.CaptioningManager.CaptionStyle;
@@ -49,6 +52,8 @@ public class CaptioningCustomControllerTest {
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@Rule
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@Mock
private PreferenceScreen mScreen;
@Mock
@@ -57,22 +62,43 @@ public class CaptioningCustomControllerTest {
private ContentResolver mContentResolver;
private CaptioningCustomController mController;
private Preference mPreference;
private CaptionHelper mCaptionHelper;
@Before
public void setUp() {
mContentResolver = mContext.getContentResolver();
mController = new CaptioningCustomController(mContext, PREF_KEY,
mCaptionHelper = new CaptionHelper(mContext);
mController = new CaptioningCustomController(mContext, PREF_KEY, mCaptionHelper,
mAccessibilitySettingsContentObserver);
mPreference = new Preference(mContext);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
}
@Test
@DisableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void getAvailabilityStatus_shouldReturnAvailable() {
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE);
}
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void getAvailabilityStatus_customCaption_shouldReturnAvailable() {
mCaptionHelper.setRawUserStyle(CaptionStyle.PRESET_CUSTOM);
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE);
}
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void getAvailabilityStatus_notCustom_shouldReturnUnsearchable() {
mCaptionHelper.setRawUserStyle(0);
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE);
}
@Test
public void displayPreference_byDefault_shouldIsInvisible() {

View File

@@ -24,6 +24,9 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.util.AttributeSet;
import android.view.accessibility.CaptioningManager;
@@ -53,16 +56,21 @@ public class CaptioningWindowColorControllerTest {
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@Rule
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@Mock
private PreferenceScreen mScreen;
private final Context mContext = ApplicationProvider.getApplicationContext();
private CaptioningWindowColorController mController;
private ColorPreference mPreference;
private ShadowCaptioningManager mShadowCaptioningManager;
private CaptionHelper mCaptionHelper;
@Before
public void setUp() {
mController = new CaptioningWindowColorController(mContext, "captioning_window_color");
mCaptionHelper = new CaptionHelper(mContext);
mController = new CaptioningWindowColorController(
mContext, "captioning_window_color", mCaptionHelper);
final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
mPreference = new ColorPreference(mContext, attributeSet);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
@@ -71,11 +79,30 @@ public class CaptioningWindowColorControllerTest {
}
@Test
@DisableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void getAvailabilityStatus_shouldReturnAvailable() {
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE);
}
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void getAvailabilityStatus_customCaption_shouldReturnAvailable() {
mCaptionHelper.setRawUserStyle(CaptionStyle.PRESET_CUSTOM);
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE);
}
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void getAvailabilityStatus_noCustom_shouldReturnUnsearchable() {
mCaptionHelper.setRawUserStyle(0);
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE);
}
@Test
public void getSummary_defaultValue_shouldReturnNone() {
mController.displayPreference(mScreen);

View File

@@ -24,6 +24,9 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.util.AttributeSet;
import android.view.accessibility.CaptioningManager;
@@ -48,19 +51,24 @@ import org.robolectric.shadows.ShadowCaptioningManager;
/** Tests for {@link CaptioningWindowOpacityController}. */
@RunWith(RobolectricTestRunner.class)
public class CaptioningWindowOpacityControllerTest {
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@Rule
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@Mock
private PreferenceScreen mScreen;
private final Context mContext = ApplicationProvider.getApplicationContext();
private CaptioningWindowOpacityController mController;
private ColorPreference mPreference;
private ShadowCaptioningManager mShadowCaptioningManager;
private CaptionHelper mCaptionHelper;
@Before
public void setUp() {
mController = new CaptioningWindowOpacityController(mContext, "captioning_window_opacity");
mCaptionHelper = new CaptionHelper(mContext);
mController = new CaptioningWindowOpacityController(
mContext, "captioning_window_opacity", mCaptionHelper);
final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
mPreference = new ColorPreference(mContext, attributeSet);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
@@ -69,11 +77,30 @@ public class CaptioningWindowOpacityControllerTest {
}
@Test
@DisableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void getAvailabilityStatus_shouldReturnAvailable() {
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE);
}
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void getAvailabilityStatus_customCaption_shouldReturnAvailable() {
mCaptionHelper.setRawUserStyle(CaptioningManager.CaptionStyle.PRESET_CUSTOM);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.AVAILABLE);
}
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void getAvailabilityStatus_notCustom_shouldReturnUnsearchable() {
mCaptionHelper.setRawUserStyle(0);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.AVAILABLE_UNSEARCHABLE);
}
@Test
public void getSummary_defaultValue_shouldReturnNonTransparent() {
mController.displayPreference(mScreen);