1 /* 2 * Copyright (C) 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.privatespace; 18 19 import static com.android.settingslib.widget.preference.illustration.R.string.settingslib_action_label_pause; 20 import static com.android.settingslib.widget.preference.illustration.R.string.settingslib_action_label_resume; 21 import static com.android.settingslib.widget.preference.illustration.R.string.settingslib_illustration_content_description; 22 23 import android.content.Context; 24 import android.view.View; 25 import android.view.accessibility.AccessibilityNodeInfo; 26 27 import androidx.core.view.AccessibilityDelegateCompat; 28 import androidx.core.view.ViewCompat; 29 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; 30 31 import com.airbnb.lottie.LottieAnimationView; 32 33 public class PrivateSpaceAccessibilityUtils { 34 updateAccessibilityActionForAnimation(Context context, LottieAnimationView animationView, boolean isAnimationPlaying)35 static void updateAccessibilityActionForAnimation(Context context, 36 LottieAnimationView animationView, boolean isAnimationPlaying) { 37 animationView.setContentDescription( 38 context.getString(settingslib_illustration_content_description)); 39 ViewCompat.setAccessibilityDelegate(animationView, new AccessibilityDelegateCompat() { 40 @Override 41 public void onInitializeAccessibilityNodeInfo( 42 View host, AccessibilityNodeInfoCompat info) { 43 super.onInitializeAccessibilityNodeInfo(host, info); 44 // Clearing the class name to ensure the animation is not called out as "button" 45 // inside the TalkBack flows 46 info.setClassName(""); 47 info.removeAction( 48 AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK); 49 50 final AccessibilityNodeInfoCompat.AccessibilityActionCompat clickAction = 51 new AccessibilityNodeInfoCompat.AccessibilityActionCompat( 52 AccessibilityNodeInfo.ACTION_CLICK, 53 getActionLabelForAnimation(context, isAnimationPlaying)); 54 info.addAction(clickAction); 55 } 56 }); 57 } 58 getActionLabelForAnimation(Context context, boolean isAnimationPlaying)59 private static String getActionLabelForAnimation(Context context, boolean isAnimationPlaying) { 60 if (isAnimationPlaying) { 61 return context.getString(settingslib_action_label_pause); 62 } else { 63 return context.getString(settingslib_action_label_resume); 64 } 65 } 66 } 67