Merge "fix(Color correction): Display default value in slider to match the radio button" into main

This commit is contained in:
Treehugger Robot
2024-08-15 21:40:41 +00:00
committed by Android (Google) Code Review
5 changed files with 110 additions and 48 deletions

View File

@@ -0,0 +1,59 @@
/*
* Copyright (C) 2024 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.settings.accessibility;
import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
import android.content.ContentResolver;
import android.provider.Settings;
import android.view.accessibility.AccessibilityManager;
import com.google.common.primitives.Ints;
/**
* Utility class for retrieving accessibility daltonizer related values in secure settings.
*/
public class DaltonizerPreferenceUtil {
/**
* Return the daltonizer display mode stored in
* {@link Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER}.
* By default it returns {@link DALTONIZER_CORRECT_DEUTERANOMALY}.
*/
public static int getSecureAccessibilityDaltonizerValue(ContentResolver resolver) {
final String daltonizerStringValue = Settings.Secure.getString(
resolver, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER);
if (daltonizerStringValue == null) {
return AccessibilityManager.DALTONIZER_CORRECT_DEUTERANOMALY;
}
final Integer daltonizerIntValue = Ints.tryParse(daltonizerStringValue);
return daltonizerIntValue == null ? AccessibilityManager.DALTONIZER_CORRECT_DEUTERANOMALY
: daltonizerIntValue;
}
/**
* Returns the daltonizer enabled value in
* {@link Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED}.
* By default it returns false.
*/
public static boolean isSecureAccessibilityDaltonizerEnabled(ContentResolver resolver) {
return Settings.Secure.getInt(
resolver,
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
OFF) == ON;
}
}

View File

@@ -24,7 +24,6 @@ import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import android.view.View;
import android.view.accessibility.AccessibilityManager;
import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver;
@@ -36,8 +35,6 @@ import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import com.google.common.primitives.Ints;
import java.util.HashMap;
import java.util.Map;
@@ -70,17 +67,6 @@ public class DaltonizerRadioButtonPreferenceController extends BasePreferenceCon
};
}
protected static int getSecureAccessibilityDaltonizerValue(ContentResolver resolver) {
final String daltonizerStringValue = Settings.Secure.getString(
resolver, DALTONIZER_TYPE_SETTINGS_KEY);
if (daltonizerStringValue == null) {
return AccessibilityManager.DALTONIZER_CORRECT_DEUTERANOMALY;
}
final Integer daltonizerIntValue = Ints.tryParse(daltonizerStringValue);
return daltonizerIntValue == null ? AccessibilityManager.DALTONIZER_CORRECT_DEUTERANOMALY
: daltonizerIntValue;
}
private Map<String, Integer> getDaltonizerValueToKeyMap() {
if (mAccessibilityDaltonizerKeyToValueMap.isEmpty()) {
@@ -123,7 +109,8 @@ public class DaltonizerRadioButtonPreferenceController extends BasePreferenceCon
}
private int getAccessibilityDaltonizerValue() {
final int daltonizerValue = getSecureAccessibilityDaltonizerValue(mContentResolver);
final int daltonizerValue =
DaltonizerPreferenceUtil.getSecureAccessibilityDaltonizerValue(mContentResolver);
return daltonizerValue;
}

View File

@@ -15,6 +15,9 @@
*/
package com.android.settings.accessibility;
import static com.android.settings.accessibility.DaltonizerPreferenceUtil.isSecureAccessibilityDaltonizerEnabled;
import static com.android.settings.accessibility.DaltonizerPreferenceUtil.getSecureAccessibilityDaltonizerValue;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
@@ -158,14 +161,11 @@ public class DaltonizerSaturationSeekbarPreferenceController
}
private boolean shouldSeekBarEnabled() {
int enabled = Settings.Secure.getInt(
mContentResolver, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0);
int mode = Settings.Secure.getInt(
mContentResolver, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER, -1);
boolean enabled = isSecureAccessibilityDaltonizerEnabled(mContentResolver);
int mode = getSecureAccessibilityDaltonizerValue(mContentResolver);
// enabled == 0 is disabled and also default.
// mode == 0 is gray scale where saturation level isn't applicable.
// mode == -1 is disabled and also default.
return enabled != 0 && mode != -1 && mode != 0;
return enabled && mode != -1 && mode != 0;
}
}

View File

@@ -21,6 +21,7 @@ import static com.android.internal.accessibility.AccessibilityShortcutController
import static com.android.settings.accessibility.AccessibilityStatsLogUtils.logAccessibilityServiceEnabled;
import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
import static com.android.settings.accessibility.DaltonizerPreferenceUtil.isSecureAccessibilityDaltonizerEnabled;
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
@@ -145,7 +146,8 @@ public class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePreferenceF
@Override
protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
final boolean isEnabled = Settings.Secure.getInt(getContentResolver(), ENABLED, OFF) == ON;
final boolean isEnabled =
isSecureAccessibilityDaltonizerEnabled(getContentResolver());
if (enabled == isEnabled) {
return;
}

View File

@@ -58,8 +58,6 @@ public class DaltonizerSaturationSeekbarPreferenceControllerTest {
private ContentResolver mContentResolver;
private DaltonizerSaturationSeekbarPreferenceController mController;
private int mOriginalSaturationLevel = -1;
private PreferenceScreen mScreen;
private LifecycleOwner mLifecycleOwner;
private Lifecycle mLifecycle;
@@ -73,10 +71,6 @@ public class DaltonizerSaturationSeekbarPreferenceControllerTest {
public void setup() {
Context context = ApplicationProvider.getApplicationContext();
mContentResolver = context.getContentResolver();
mOriginalSaturationLevel = Settings.Secure.getInt(
mContentResolver,
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_SATURATION_LEVEL,
7);
mPreference = new SeekBarPreference(context);
mPreference.setKey(ToggleDaltonizerPreferenceFragment.KEY_SATURATION);
@@ -92,10 +86,18 @@ public class DaltonizerSaturationSeekbarPreferenceControllerTest {
@After
public void cleanup() {
Settings.Secure.putInt(
Settings.Secure.putString(
mContentResolver,
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER,
null);
Settings.Secure.putString(
mContentResolver,
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
null);
Settings.Secure.putString(
mContentResolver,
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_SATURATION_LEVEL,
mOriginalSaturationLevel);
null);
}
@Test
@@ -111,6 +113,22 @@ public class DaltonizerSaturationSeekbarPreferenceControllerTest {
assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
}
@Test
@EnableFlags(Flags.FLAG_ENABLE_COLOR_CORRECTION_SATURATION)
public void getAvailabilityStatus_defaultSettings_unavailable() {
// By default enabled == false.
assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
}
@Test
@EnableFlags(Flags.FLAG_ENABLE_COLOR_CORRECTION_SATURATION)
public void getAvailabilityStatus_enabledDefaultDisplayMode_available() {
setDaltonizerEnabled(1);
// By default display mode is deuteranomaly.
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
}
@Test
@EnableFlags(Flags.FLAG_ENABLE_COLOR_CORRECTION_SATURATION)
public void getAvailabilityStatus_flagEnabledProtanEnabled_available() {
@@ -306,10 +324,7 @@ public class DaltonizerSaturationSeekbarPreferenceControllerTest {
mLifecycle.addObserver(mController);
mLifecycle.handleLifecycleEvent(ON_RESUME);
Settings.Secure.putInt(
mContentResolver,
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
1);
setDaltonizerEnabled(1);
shadowOf(Looper.getMainLooper()).idle();
assertThat(mPreference.isEnabled()).isTrue();
@@ -324,10 +339,7 @@ public class DaltonizerSaturationSeekbarPreferenceControllerTest {
mLifecycle.addObserver(mController);
mLifecycle.handleLifecycleEvent(ON_RESUME);
Settings.Secure.putInt(
mContentResolver,
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
0);
setDaltonizerEnabled(0);
shadowOf(Looper.getMainLooper()).idle();
assertThat(mPreference.isEnabled()).isFalse();
@@ -342,10 +354,7 @@ public class DaltonizerSaturationSeekbarPreferenceControllerTest {
mLifecycle.addObserver(mController);
mLifecycle.handleLifecycleEvent(ON_RESUME);
Settings.Secure.putInt(
mContentResolver,
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER,
0);
setDaltonizerDisplay(0);
shadowOf(Looper.getMainLooper()).idle();
assertThat(mPreference.isEnabled()).isFalse();
@@ -361,23 +370,28 @@ public class DaltonizerSaturationSeekbarPreferenceControllerTest {
mLifecycle.handleLifecycleEvent(ON_STOP);
// enabled.
Settings.Secure.putInt(
mContentResolver,
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
1);
setDaltonizerEnabled(1);
shadowOf(Looper.getMainLooper()).idle();
assertThat(mPreference.isEnabled()).isFalse();
}
private void setDaltonizerMode(int enabled, int mode) {
setDaltonizerEnabled(enabled);
setDaltonizerDisplay(mode);
}
private void setDaltonizerEnabled(int enabled) {
Settings.Secure.putInt(
mContentResolver,
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
enabled);
Settings.Secure.putInt(
}
private void setDaltonizerDisplay(int mode) {
Settings.Secure.putString(
mContentResolver,
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER,
mode);
Integer.toString(mode));
}
}