Fix bug 6886990: cling accessibility
Clings should block interaction with elements
below when Talkback is enabled
Change-Id: Ifdcd109351fd3c2d6dc97ad75ea3ab6eea48b582
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index fedf324..64e382a 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -300,6 +300,9 @@
private BubbleTextView mWaitingForResume;
+ private HideFromAccessibilityHelper mHideFromAccessibilityHelper
+ = new HideFromAccessibilityHelper();
+
private Runnable mBuildLayersRunnable = new Runnable() {
public void run() {
if (mWorkspace != null) {
@@ -3662,8 +3665,9 @@
return true;
}
+
private Cling initCling(int clingId, int[] positionData, boolean animate, int delay) {
- Cling cling = (Cling) findViewById(clingId);
+ final Cling cling = (Cling) findViewById(clingId);
if (cling != null) {
cling.init(this, positionData);
cling.setVisibility(View.VISIBLE);
@@ -3680,11 +3684,21 @@
} else {
cling.setAlpha(1f);
}
+ cling.setFocusableInTouchMode(true);
+ cling.post(new Runnable() {
+ public void run() {
+ cling.setFocusable(true);
+ cling.requestFocus();
+ }
+ });
+ mHideFromAccessibilityHelper.setImportantForAccessibilityToNo(
+ mDragLayer, clingId == R.id.all_apps_cling);
}
return cling;
}
+
private void dismissCling(final Cling cling, final String flag, int duration) {
- if (cling != null) {
+ if (cling != null && cling.getVisibility() == View.VISIBLE) {
ObjectAnimator anim = LauncherAnimUtils.ofFloat(cling, "alpha", 0f);
anim.setDuration(duration);
anim.addListener(new AnimatorListenerAdapter() {
@@ -3702,8 +3716,10 @@
};
});
anim.start();
+ mHideFromAccessibilityHelper.restoreImportantForAccessibility(mDragLayer);
}
}
+
private void removeCling(int id) {
final View cling = findViewById(id);
if (cling != null) {
@@ -3714,6 +3730,7 @@
parent.removeView(cling);
}
});
+ mHideFromAccessibilityHelper.restoreImportantForAccessibility(mDragLayer);
}
}