Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2fe301db authored by Adam Powell's avatar Adam Powell Committed by Ned Burns
Browse files

Focus behavior for scroll containers in watch mode

Change default scrolling containers not to request a reveal (parent
scroll) on focus, and to be focusable in touch mode. This helps watch
devices with other input mechanisms that rely on view focus.

Since there's no attribute for the reveal on focus hint, set that in
code. Set focusable in touch mode on the default styles for
ScrollView/HorizontalScrollView. AbsListView already sets this
historically anyway.

Change-Id: I74760f6d523874127da6f6134f0461cc59ce189a
parent b8e74df8
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.annotation.DrawableRes;
import android.annotation.NonNull;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -857,6 +858,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
                R.styleable.AbsListView_fastScrollAlwaysVisible, false));

        a.recycle();

        if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) {
            setRevealOnFocusHint(false);
        }
    }

    private void initAbsListView() {
+12 −5
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.widget;

import android.annotation.NonNull;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -165,6 +166,10 @@ public class HorizontalScrollView extends FrameLayout {
        setFillViewport(a.getBoolean(android.R.styleable.HorizontalScrollView_fillViewport, false));

        a.recycle();

        if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) {
            setRevealOnFocusHint(false);
        }
    }

    @Override
@@ -1430,12 +1435,14 @@ public class HorizontalScrollView extends FrameLayout {

    @Override
    public void requestChildFocus(View child, View focused) {
        if (focused.getRevealOnFocusHint()) {
            if (!mIsLayoutDirty) {
                scrollToChild(focused);
            } else {
                // The child may not be laid out yet, we can't compute the scroll yet
                mChildToScrollTo = focused;
            }
        }
        super.requestChildFocus(child, focused);
    }

+12 −5
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.widget;

import android.annotation.NonNull;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Build.VERSION_CODES;
import android.os.Parcel;
@@ -186,6 +187,10 @@ public class ScrollView extends FrameLayout {
        setFillViewport(a.getBoolean(R.styleable.ScrollView_fillViewport, false));

        a.recycle();

        if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) {
            setRevealOnFocusHint(false);
        }
    }

    @Override
@@ -1455,12 +1460,14 @@ public class ScrollView extends FrameLayout {

    @Override
    public void requestChildFocus(View child, View focused) {
        if (focused.getRevealOnFocusHint()) {
            if (!mIsLayoutDirty) {
                scrollToChild(focused);
            } else {
                // The child may not be laid out yet, we can't compute the scroll yet
                mChildToScrollTo = focused;
            }
        }
        super.requestChildFocus(child, focused);
    }

+5 −0
Original line number Diff line number Diff line
@@ -57,4 +57,9 @@

    <!-- Use a custom transition for RemoteViews. -->
    <bool name="config_overrideRemoteViewsActivityTransition">true</bool>

    <!-- Default value for android:focusableInTouchMode for some framework scrolling containers.
         ListView/GridView are notably absent since this is their default anyway.
         Set to true for watch devices. -->
    <bool name="config_focusScrollContainersInTouchMode">true</bool>
</resources>
+5 −0
Original line number Diff line number Diff line
@@ -2567,6 +2567,11 @@
    <string-array translatable="false" name="config_defaultFirstUserRestrictions">
    </string-array>

    <!-- Default value for android:focusableInTouchMode for some framework scrolling containers.
         ListView/GridView are notably absent since this is their default anyway.
         Set to true for watch devices. -->
    <bool name="config_focusScrollContainersInTouchMode">false</bool>

    <string name="config_networkOverLimitComponent" translatable="false">com.android.systemui/com.android.systemui.net.NetworkOverLimitActivity</string>
    <string name="config_dataUsageSummaryComponent" translatable="false">com.android.settings/com.android.settings.Settings$DataUsageSummaryActivity</string>

Loading