| /* | |
| * Copyright (C) 2020 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.ContentResolver; | |
| import android.content.Context; | |
| import android.database.ContentObserver; | |
| import android.provider.Settings; | |
| import androidx.annotation.IntDef; | |
| import com.android.settings.R; | |
| import com.google.common.primitives.Ints; | |
| import java.lang.annotation.Retention; | |
| import java.lang.annotation.RetentionPolicy; | |
| /** Class to provide magnification capabilities. */ | |
| public final class MagnificationCapabilities { | |
| private static final String KEY_CAPABILITY = | |
| Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CAPABILITY; | |
| /** | |
| * Annotation for supported magnification mode. | |
| * | |
| * @see Settings.Secure#ACCESSIBILITY_MAGNIFICATION_CAPABILITY | |
| */ | |
| @Retention(RetentionPolicy.SOURCE) | |
| @IntDef({ | |
| MagnificationMode.NONE, | |
| MagnificationMode.FULLSCREEN, | |
| MagnificationMode.WINDOW, | |
| MagnificationMode.ALL, | |
| }) | |
| public @interface MagnificationMode { | |
| int NONE = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_NONE; | |
| int FULLSCREEN = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; | |
| int WINDOW = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; | |
| int ALL = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL; | |
| } | |
| /** | |
| * Gets the summary for the given {@code capabilities}. | |
| * | |
| * @param context A {@link Context}. | |
| * @param capabilities Magnification capabilities {@link MagnificationMode} | |
| * @return The summary text represents the given capabilities | |
| */ | |
| public static String getSummary(Context context, @MagnificationMode int capabilities) { | |
| final String[] summaries = context.getResources().getStringArray( | |
| R.array.magnification_mode_summaries); | |
| final int[] values = context.getResources().getIntArray( | |
| R.array.magnification_mode_values); | |
| final int idx = Ints.indexOf(values, capabilities); | |
| return summaries[idx == /* no index exist */ -1 ? 0 : idx]; | |
| } | |
| /** | |
| * Sets the magnification capabilities {@link MagnificationMode} to settings key. This | |
| * overwrites any existing capabilities. | |
| * | |
| * @param context A {@link Context}. | |
| * @param capabilities Magnification capabilities {@link MagnificationMode} | |
| */ | |
| public static void setCapabilities(Context context, @MagnificationMode int capabilities) { | |
| final ContentResolver contentResolver = context.getContentResolver(); | |
| Settings.Secure.putIntForUser(contentResolver, KEY_CAPABILITY, capabilities, | |
| contentResolver.getUserId()); | |
| } | |
| /** | |
| * Returns the magnification capabilities {@link MagnificationMode} from setting's key. May be | |
| * default value {@link MagnificationMode#FULLSCREEN} if not set. | |
| * | |
| * @param context A {@link Context}. | |
| * @return The magnification capabilities {@link MagnificationMode} | |
| */ | |
| @MagnificationMode | |
| public static int getCapabilities(Context context) { | |
| final ContentResolver contentResolver = context.getContentResolver(); | |
| return Settings.Secure.getIntForUser(contentResolver, KEY_CAPABILITY, | |
| MagnificationMode.FULLSCREEN, contentResolver.getUserId()); | |
| } | |
| /** | |
| * Register an observer class that gets callbacks when magnification capabilities changes. | |
| * | |
| * @param context A {@link Context}. | |
| * @param contentObserver The object that receives callbacks when changes occur. | |
| */ | |
| public static void registerObserver(Context context, ContentObserver contentObserver) { | |
| context.getContentResolver().registerContentObserver( | |
| Settings.Secure.getUriFor(KEY_CAPABILITY), | |
| /* notifyForDescendants= */ false, | |
| contentObserver); | |
| } | |
| /** | |
| * Unregisters a magnification capabilities change observer. | |
| * | |
| * @param context A {@link Context}. | |
| * @param contentObserver The previously registered observer that is no longer needed. | |
| */ | |
| public static void unregisterObserver(Context context, ContentObserver contentObserver) { | |
| context.getContentResolver().unregisterContentObserver(contentObserver); | |
| } | |
| private MagnificationCapabilities() {} | |
| } |