From de837284ba06ca39cc9d5126dcb6d2aa929863dd Mon Sep 17 00:00:00 2001
From: wsdfhjxc <wsdfhjxc@protonmail.com>
Date: Sun, 2 Sep 2018 13:08:28 +0200
Subject: [PATCH] Use a workaround for AppBarLayout bug to make app details
screen responsive
---
.../fdroid/views/FixAppBarLayoutBehavior.java | 64 +++++++++++++++++++
app/src/main/res/layout/app_details2.xml | 3 +-
2 files changed, 66 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/java/org/fdroid/fdroid/views/FixAppBarLayoutBehavior.java
diff --git a/app/src/main/java/org/fdroid/fdroid/views/FixAppBarLayoutBehavior.java b/app/src/main/java/org/fdroid/fdroid/views/FixAppBarLayoutBehavior.java
new file mode 100644
index 000000000..6103dc930
--- /dev/null
+++ b/app/src/main/java/org/fdroid/fdroid/views/FixAppBarLayoutBehavior.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.fdroid.fdroid.views;
+
+import android.content.Context;
+import android.support.design.widget.AppBarLayout;
+import android.support.design.widget.CoordinatorLayout;
+import android.support.v4.view.ViewCompat;
+import android.util.AttributeSet;
+import android.view.View;
+
+/**
+ * Workaround AppBarLayout.Behavior for https://issuetracker.google.com/66996774
+ * Source: https://gist.github.com/chrisbanes/8391b5adb9ee42180893300850ed02f2
+ */
+public class FixAppBarLayoutBehavior extends AppBarLayout.Behavior {
+
+ public FixAppBarLayoutBehavior() {
+ super();
+ }
+
+ public FixAppBarLayoutBehavior(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target,
+ int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
+ super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed,
+ dxUnconsumed, dyUnconsumed, type);
+ stopNestedScrollIfNeeded(dyUnconsumed, child, target, type);
+ }
+
+ @Override
+ public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child,
+ View target, int dx, int dy, int[] consumed, int type) {
+ super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
+ stopNestedScrollIfNeeded(dy, child, target, type);
+ }
+
+ private void stopNestedScrollIfNeeded(int dy, AppBarLayout child, View target, int type) {
+ if (type == ViewCompat.TYPE_NON_TOUCH) {
+ final int currOffset = getTopAndBottomOffset();
+ if ((dy < 0 && currOffset == 0)
+ || (dy > 0 && currOffset == -child.getTotalScrollRange())) {
+ ViewCompat.stopNestedScroll(target, ViewCompat.TYPE_NON_TOUCH);
+ }
+ }
+ }
+}
diff --git a/app/src/main/res/layout/app_details2.xml b/app/src/main/res/layout/app_details2.xml
index c7428d958..86ca16e44 100644
--- a/app/src/main/res/layout/app_details2.xml
+++ b/app/src/main/res/layout/app_details2.xml
@@ -14,7 +14,8 @@
android:layout_width="match_parent"
android:layout_height="@dimen/app_bar_height"
android:fitsSystemWindows="true"
- android:theme="@style/AppThemeLight.AppBarOverlay">
+ android:theme="@style/AppThemeLight.AppBarOverlay"
+ app:layout_behavior="org.fdroid.fdroid.views.FixAppBarLayoutBehavior">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"