Root cause: There is a bunch of different logic of preferences in CaptionAppearanceFragment. It’s hard to implement new features and hard to maintain and hard to be testable. Solution: Move out color and edge preference logic of CaptionAppearanceFragment into controllers to reduce the complexity of the relationship between preference and fragment. Bug: 197695932 Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.accessibility Change-Id: I8ed80b445a0d376a7e9dda87feda82420a78a9da
89 lines
3.0 KiB
Java
89 lines
3.0 KiB
Java
/*
|
|
* Copyright (C) 2022 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 android.graphics.Color;
|
|
import android.view.accessibility.CaptioningManager.CaptionStyle;
|
|
|
|
/** Provides utility methods related caption. */
|
|
public final class CaptionUtils {
|
|
|
|
/**
|
|
* Unpacks the specified color value to get the color value.
|
|
*
|
|
* @param value the specified color value.
|
|
*/
|
|
public static int parseColor(int value) {
|
|
final int colorValue;
|
|
if (!CaptionStyle.hasColor(value)) {
|
|
// "Default" color with variable alpha.
|
|
colorValue = CaptionStyle.COLOR_UNSPECIFIED;
|
|
} else if ((value >>> 24) == 0) {
|
|
// "None" color with variable alpha.
|
|
colorValue = Color.TRANSPARENT;
|
|
} else {
|
|
// Normal color.
|
|
colorValue = value | 0xFF000000;
|
|
}
|
|
return colorValue;
|
|
}
|
|
|
|
/**
|
|
* Unpacks the specified color value to get the opacity value.
|
|
*
|
|
* @param value the specified color value.
|
|
*/
|
|
public static int parseOpacity(int value) {
|
|
final int opacityValue;
|
|
if (!CaptionStyle.hasColor(value)) {
|
|
// "Default" color with variable alpha.
|
|
opacityValue = (value & 0xFF) << 24;
|
|
} else if ((value >>> 24) == 0) {
|
|
// "None" color with variable alpha.
|
|
opacityValue = (value & 0xFF) << 24;
|
|
} else {
|
|
// Normal color.
|
|
opacityValue = value & 0xFF000000;
|
|
}
|
|
|
|
// Opacity value is always white.
|
|
return opacityValue | 0xFFFFFF;
|
|
}
|
|
|
|
/**
|
|
* Packs the specified color value and specified opacity value into merged color value.
|
|
*
|
|
* @param colorValue the color value.
|
|
* @param opacityValue the opacity value.
|
|
*/
|
|
public static int mergeColorOpacity(int colorValue, int opacityValue) {
|
|
final int value;
|
|
// "Default" is 0x00FFFFFF or, for legacy support, 0x00000100.
|
|
if (!CaptionStyle.hasColor(colorValue)) {
|
|
// Encode "default" as 0x00FFFFaa.
|
|
value = 0x00FFFF00 | Color.alpha(opacityValue);
|
|
} else if (colorValue == Color.TRANSPARENT) {
|
|
// Encode "none" as 0x000000aa.
|
|
value = Color.alpha(opacityValue);
|
|
} else {
|
|
// Encode custom color normally.
|
|
value = (colorValue & 0x00FFFFFF) | (opacityValue & 0xFF000000);
|
|
}
|
|
return value;
|
|
}
|
|
}
|