| /* |
| * 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.content.ComponentName; |
| import android.content.Context; |
| import android.content.SharedPreferences; |
| import android.text.TextUtils; |
| |
| import androidx.annotation.NonNull; |
| |
| import java.util.StringJoiner; |
| |
| /** Provides utility methods to accessibility quick settings only. */ |
| final class AccessibilityQuickSettingUtils { |
| |
| private static final String ACCESSIBILITY_PERF = "accessibility_prefs"; |
| private static final String KEY_TILE_SERVICE_SHOWN = "tile_service_shown"; |
| private static final char COMPONENT_NAME_SEPARATOR = ':'; |
| private static final TextUtils.SimpleStringSplitter sStringColonSplitter = |
| new TextUtils.SimpleStringSplitter(COMPONENT_NAME_SEPARATOR); |
| |
| /** |
| * Opts in component name into {@link AccessibilityQuickSettingUtils#KEY_TILE_SERVICE_SHOWN} |
| * colon-separated string in {@link SharedPreferences}. |
| * |
| * @param context The current context. |
| * @param componentName The component name that need to be opted in SharedPreferences. |
| */ |
| public static void optInValueToSharedPreferences(Context context, |
| @NonNull ComponentName componentName) { |
| final String targetString = getFromSharedPreferences(context); |
| if (hasValueInSharedPreferences(targetString, componentName)) { |
| return; |
| } |
| |
| final StringJoiner joiner = new StringJoiner(String.valueOf(COMPONENT_NAME_SEPARATOR)); |
| if (!TextUtils.isEmpty(targetString)) { |
| joiner.add(targetString); |
| } |
| joiner.add(componentName.flattenToString()); |
| |
| SharedPreferences.Editor editor = getSharedPreferences(context).edit(); |
| editor.putString(KEY_TILE_SERVICE_SHOWN, joiner.toString()).apply(); |
| } |
| |
| /** |
| * Returns if component name existed in {@link |
| * AccessibilityQuickSettingUtils#KEY_TILE_SERVICE_SHOWN} string in {@link SharedPreferences}. |
| * |
| * @param context The current context. |
| * @param componentName The component name that need to be checked existed in SharedPreferences. |
| * @return {@code true} if componentName existed in SharedPreferences. |
| */ |
| public static boolean hasValueInSharedPreferences(Context context, |
| @NonNull ComponentName componentName) { |
| final String targetString = getFromSharedPreferences(context); |
| return hasValueInSharedPreferences(targetString, componentName); |
| } |
| |
| private static boolean hasValueInSharedPreferences(String targetString, |
| @NonNull ComponentName componentName) { |
| if (TextUtils.isEmpty(targetString)) { |
| return false; |
| } |
| |
| sStringColonSplitter.setString(targetString); |
| |
| while (sStringColonSplitter.hasNext()) { |
| final String name = sStringColonSplitter.next(); |
| if (TextUtils.equals(componentName.flattenToString(), name)) { |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| private static String getFromSharedPreferences(Context context) { |
| return getSharedPreferences(context).getString(KEY_TILE_SERVICE_SHOWN, ""); |
| } |
| |
| private static SharedPreferences getSharedPreferences(Context context) { |
| return context.getSharedPreferences(ACCESSIBILITY_PERF, Context.MODE_PRIVATE); |
| } |
| |
| private AccessibilityQuickSettingUtils(){} |
| } |