From 31654795bc6b72da71c2c9d4fd7d6162f5afb53b Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 18 Apr 2022 17:32:26 +0200 Subject: [PATCH] Fixed focus pinned nav menu --- .../eu/faircode/email/DrawerLayoutEx.java | 21 +++++++++++++++++++ app/src/main/res/layout/include_nav.xml | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/faircode/email/DrawerLayoutEx.java b/app/src/main/java/eu/faircode/email/DrawerLayoutEx.java index da5e0d1e51..feaac6587e 100644 --- a/app/src/main/java/eu/faircode/email/DrawerLayoutEx.java +++ b/app/src/main/java/eu/faircode/email/DrawerLayoutEx.java @@ -25,11 +25,16 @@ import android.util.AttributeSet; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; +import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.view.GravityCompat; +import androidx.core.view.ViewCompat; import androidx.drawerlayout.widget.DrawerLayout; +import java.util.ArrayList; + public class DrawerLayoutEx extends DrawerLayout { public DrawerLayoutEx(@NonNull Context context) { super(context); @@ -89,4 +94,20 @@ public class DrawerLayoutEx extends DrawerLayout { return super.dispatchGenericMotionEvent(ev); } + + @Override + public void addFocusables(ArrayList views, int direction, int focusableMode) { + if (getDrawerLockMode(Gravity.LEFT) == LOCK_MODE_LOCKED_OPEN) { + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (child.getVisibility() == View.VISIBLE && isContentView(child)) + child.addFocusables(views, direction, focusableMode); + } + } else + super.addFocusables(views, direction, focusableMode); + } + + boolean isContentView(View child) { + return ((LayoutParams) child.getLayoutParams()).gravity == Gravity.NO_GRAVITY; + } } diff --git a/app/src/main/res/layout/include_nav.xml b/app/src/main/res/layout/include_nav.xml index c23717693f..53329c6f0a 100644 --- a/app/src/main/res/layout/include_nav.xml +++ b/app/src/main/res/layout/include_nav.xml @@ -4,7 +4,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:animateLayoutChanges="false" - android:descendantFocusability="blocksDescendants" + android:descendantFocusability="beforeDescendants" android:focusable="true" android:focusableInTouchMode="true">