Add Dismiss action in Talkback Local Context Menu

- Add dismiss action for cards that can be dismissed.
- Remove importantForAccessibility from sliceView so Talkback can
recognise this view in order to generate Local Context Menu.

Fixes: 146910157
Test: Enable Talkback -> Move focus to removeable contextual card -> use
up-right gesture -> see Local Context Menu

Change-Id: I75a7394e94e6939d48cc379f62eab66f7903fd98
This commit is contained in:
Yi-Ling Chuang
2020-04-13 19:37:32 +08:00
parent 2c9d412ba2
commit 5a554ccbfa
3 changed files with 32 additions and 7 deletions

View File

@@ -21,6 +21,7 @@ import static android.app.slice.Slice.HINT_ERROR;
import android.content.ContentResolver;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
@@ -29,6 +30,9 @@ import android.widget.Button;
import androidx.annotation.LayoutRes;
import androidx.annotation.VisibleForTesting;
import androidx.core.view.AccessibilityDelegateCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
@@ -167,6 +171,27 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, Life
resetCardView(holder);
mSliceLiveDataMap.get(card.getSliceUri()).removeObservers(mLifecycleOwner);
});
ViewCompat.setAccessibilityDelegate(getInitialView(holder),
new AccessibilityDelegateCompat() {
@Override
public void onInitializeAccessibilityNodeInfo(View host,
AccessibilityNodeInfoCompat info) {
super.onInitializeAccessibilityNodeInfo(host, info);
info.addAction(AccessibilityNodeInfoCompat.ACTION_DISMISS);
info.setDismissable(true);
}
@Override
public boolean performAccessibilityAction(View host, int action, Bundle args) {
if (action == AccessibilityNodeInfoCompat.ACTION_DISMISS) {
mControllerRendererPool.getController(mContext,
card.getCardType()).onDismissed(card);
}
return super.performAccessibilityAction(host, action, args);
}
});
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)