/* * 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; } }