diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java index 4891ab63a..6e9eed650 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -23,7 +23,6 @@ import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Color; -import android.graphics.PorterDuff; import android.net.Uri; import android.os.Build; import android.os.Bundle; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ListAwareSwipeRefreshLayout.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ListAwareSwipeRefreshLayout.java index f7d44d2cf..818d92390 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ListAwareSwipeRefreshLayout.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ListAwareSwipeRefreshLayout.java @@ -20,6 +20,12 @@ package org.sufficientlysecure.keychain.ui.widget; import android.content.Context; import android.support.v4.widget.NoScrollableSwipeRefreshLayout; import android.util.AttributeSet; +import android.view.InputDevice; +import android.view.InputDevice.MotionRange; +import android.view.MotionEvent; + +import org.sufficientlysecure.keychain.Constants; +import org.sufficientlysecure.keychain.util.Log; import se.emilsjolander.stickylistheaders.StickyListHeadersListView; @@ -71,4 +77,24 @@ public class ListAwareSwipeRefreshLayout extends NoScrollableSwipeRefreshLayout ) ); } + + /** Called on a touch event, this method exempts a small area in the upper right from pull to + * refresh handling. + * + * If the touch event happens somewhere in the upper right corner of the screen, we return false + * to indicate that the event was not handled. This ensures events in that area are always + * handed through to the list scrollbar handle. For all other cases, we pass the message through + * to the pull to refresh handler. + */ + @Override + public boolean onTouchEvent(MotionEvent event) { + float ratioX = event.getX() / event.getDevice().getMotionRange(MotionEvent.AXIS_X).getMax(); + float ratioY = event.getY() / event.getDevice().getMotionRange(MotionEvent.AXIS_Y).getMax(); + // if this is the upper right corner, don't handle as pull to refresh event + if (ratioX > 0.85f && ratioY < 0.15f) { + return false; + } + return super.onTouchEvent(event); + } + } \ No newline at end of file