Merge branch 'appbarlayout-workaround' into 'master'
Use a workaround for AppBarLayout bug to make app details screen responsive See merge request fdroid/fdroidclient!745
This commit is contained in:
		
						commit
						dd56dc6bca
					
				@ -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);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -14,7 +14,8 @@
 | 
				
			|||||||
        android:layout_width="match_parent"
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
        android:layout_height="@dimen/app_bar_height"
 | 
					        android:layout_height="@dimen/app_bar_height"
 | 
				
			||||||
        android:fitsSystemWindows="true"
 | 
					        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.support.design.widget.CollapsingToolbarLayout
 | 
				
			||||||
            android:layout_width="match_parent"
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user