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"