Making overview panel accessible via Tab
Keyboard navigation of AllAppsContainerView is broken in TOT; disabling focusing there is necessary for Recents. Bug: 72222505 Test: Manual Change-Id: I85d544f7c8dbdaf12e49de51c6626bbc3dc32917
This commit is contained in:
parent
8417a7b514
commit
f1507a6a64
|
@ -13,9 +13,11 @@
|
|||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<com.android.quickstep.views.TaskView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<com.android.quickstep.views.TaskView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:focusable="false"
|
||||
android:elevation="4dp">
|
||||
|
||||
<com.android.quickstep.views.TaskThumbnailView
|
||||
|
@ -29,5 +31,6 @@
|
|||
android:layout_width="@dimen/task_thumbnail_icon_size"
|
||||
android:layout_height="@dimen/task_thumbnail_icon_size"
|
||||
android:importantForAccessibility="no"
|
||||
android:focusable="false"
|
||||
android:layout_gravity="top|center_horizontal" />
|
||||
</com.android.quickstep.views.TaskView>
|
|
@ -19,6 +19,7 @@ package com.android.quickstep.views;
|
|||
import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.AttributeSet;
|
||||
|
@ -43,4 +44,12 @@ public class ClearAllButton extends Button {
|
|||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
|
||||
super.onFocusChanged(focused, direction, previouslyFocusedRect);
|
||||
if (focused) {
|
||||
mRecentsView.revealClearAllButton();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ import android.graphics.drawable.Drawable;
|
|||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.UserHandle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.Layout;
|
||||
import android.text.StaticLayout;
|
||||
import android.text.TextPaint;
|
||||
|
@ -967,6 +968,13 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
|||
if (event.getAction() == KeyEvent.ACTION_DOWN) {
|
||||
switch (event.getKeyCode()) {
|
||||
case KeyEvent.KEYCODE_TAB:
|
||||
if (!event.isAltPressed() &&
|
||||
getNextPage() ==
|
||||
(event.isShiftPressed() ? 0 : getChildCount() - 1)) {
|
||||
// If not Alt-Tab navigation, don't loop forever in the carousel and leave
|
||||
// it once we reached the end.
|
||||
return false;
|
||||
}
|
||||
snapToPageRelative(event.isShiftPressed() ? -1 : 1);
|
||||
return true;
|
||||
case KeyEvent.KEYCODE_DPAD_RIGHT:
|
||||
|
@ -992,6 +1000,22 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
|||
return super.dispatchKeyEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFocusChanged(boolean gainFocus, int direction,
|
||||
@Nullable Rect previouslyFocusedRect) {
|
||||
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
|
||||
if (gainFocus && getChildCount() > 0) {
|
||||
switch (direction) {
|
||||
case FOCUS_FORWARD:
|
||||
setCurrentPage(0);
|
||||
break;
|
||||
case FOCUS_BACKWARD:
|
||||
setCurrentPage(getChildCount() - 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void snapToTaskAfterNext() {
|
||||
snapToPageRelative(1);
|
||||
}
|
||||
|
@ -1303,6 +1327,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
|||
}
|
||||
|
||||
public void revealClearAllButton() {
|
||||
setCurrentPage(getChildCount() - 1); // Loads tasks info if needed.
|
||||
scrollTo(mIsRtl ? 0 : computeMaxScrollX(), 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -25,10 +25,13 @@ import android.util.AttributeSet;
|
|||
import android.util.FloatProperty;
|
||||
import android.view.Gravity;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
||||
import com.android.launcher3.InsettableFrameLayout;
|
||||
import com.android.launcher3.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class RecentsViewContainer extends InsettableFrameLayout {
|
||||
public static final FloatProperty<RecentsViewContainer> CONTENT_ALPHA =
|
||||
new FloatProperty<RecentsViewContainer>("contentAlpha") {
|
||||
|
@ -104,4 +107,11 @@ public class RecentsViewContainer extends InsettableFrameLayout {
|
|||
mRecentsView.setContentAlpha(alpha);
|
||||
setVisibility(alpha > 0 ? VISIBLE : GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addFocusables(ArrayList<View> views, int direction, int focusableMode) {
|
||||
// Carousel is first in tab order.
|
||||
views.add(mRecentsView);
|
||||
views.add(mClearAllButton);
|
||||
}
|
||||
}
|
|
@ -23,8 +23,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:clipChildren="true"
|
||||
android:clipToPadding="false"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
android:focusable="false"
|
||||
android:saveEnabled="false" >
|
||||
|
||||
<include layout="@layout/all_apps_rv_layout" />
|
||||
|
|
|
@ -118,6 +118,7 @@ public class ScrimView extends View implements Insettable, OnChangeListener,
|
|||
ViewCompat.setAccessibilityDelegate(this, mAccessibilityHelper);
|
||||
|
||||
mAM = (AccessibilityManager) context.getSystemService(ACCESSIBILITY_SERVICE);
|
||||
setFocusable(false);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
|
Loading…
Reference in New Issue