From 55d225d50e68b3ea629c45a53d6744b52e335134 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Tue, 22 May 2012 15:19:14 -0700 Subject: Cling allows touch explore and accessibility focus search behind it. 1. Touch exploration is performed through hover events and the cling has to consume them to prevent touch exploring content behind it to achieve modal window like behavior. 2. Since the cling should behave as a modal window, the accessibility focus search should not returning items behind the cling, so the focus search should use the cling as its root. bug:6538549 Change-Id: I8545b6ae3ac85a363cc371e1a608d55b9abd5de8 --- src/com/android/launcher2/Cling.java | 33 +++++++++++++++++++++++++++++++++ src/com/android/launcher2/Launcher.java | 1 + 2 files changed, 34 insertions(+) diff --git a/src/com/android/launcher2/Cling.java b/src/com/android/launcher2/Cling.java index d61b9883a..5cde0b447 100644 --- a/src/com/android/launcher2/Cling.java +++ b/src/com/android/launcher2/Cling.java @@ -28,6 +28,10 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.DisplayMetrics; +import android.view.FocusFinder; +import android.view.MotionEvent; +import android.view.View; +import android.view.accessibility.AccessibilityManager; import android.widget.FrameLayout; import com.android.launcher.R; @@ -129,6 +133,35 @@ public class Cling extends FrameLayout { return new int[]{-1, -1}; } + @Override + public View findViewToTakeAccessibilityFocusFromHover(View child, View descendant) { + if (descendant.includeForAccessibility()) { + return descendant; + } + return null; + } + + @Override + public View focusSearch(int direction) { + return this.focusSearch(null, direction); + } + + @Override + public View focusSearch(View focused, int direction) { + return FocusFinder.getInstance().findNextFocus(this, focused, direction); + } + + @Override + public boolean onHoverEvent(MotionEvent event) { + return (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) + || mDrawIdentifier.equals(WORKSPACE_LANDSCAPE) + || mDrawIdentifier.equals(WORKSPACE_LARGE) + || mDrawIdentifier.equals(ALLAPPS_PORTRAIT) + || mDrawIdentifier.equals(ALLAPPS_LANDSCAPE) + || mDrawIdentifier.equals(ALLAPPS_LARGE) + || mDrawIdentifier.equals(WORKSPACE_CUSTOM)); + } + @Override public boolean onTouchEvent(android.view.MotionEvent event) { if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) || diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index e6c25cbdc..87ca4c7c9 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -3466,6 +3466,7 @@ public final class Launcher extends Activity cling.init(this, positionData); cling.setVisibility(View.VISIBLE); cling.setLayerType(View.LAYER_TYPE_HARDWARE, null); + cling.requestAccessibilityFocus(); if (animate) { cling.buildLayer(); cling.setAlpha(0f); -- cgit v1.2.3