diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index f390308b1..e745e5b91 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -626,6 +626,20 @@ public final class MainActivity extends StageActivity } } + public void setDrawerGestureBlocker(DrawerLayout.GestureBlocker gestureBlocker) { + if (mDrawerLayout != null) { + mDrawerLayout.setGestureBlocker(gestureBlocker); + } + } + + public boolean isDrawersVisible() { + if (mDrawerLayout != null) { + return mDrawerLayout.isDrawersVisible(); + } else { + return false; + } + } + public void setNavCheckedItem(@IdRes int resId) { mNavCheckedItem = resId; if (mNavView != null) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java index c2443a537..841f2deec 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java @@ -26,13 +26,13 @@ import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.annotation.StyleRes; import android.support.v4.app.FragmentActivity; -import android.support.v4.widget.DrawerLayout; import android.util.SparseArray; import android.view.ContextThemeWrapper; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import com.hippo.drawerlayout.DrawerLayout; import com.hippo.ehviewer.Analytics; import com.hippo.ehviewer.ui.MainActivity; import com.hippo.scene.SceneFragment; @@ -111,6 +111,22 @@ public abstract class BaseScene extends SceneFragment { } } + public void setDrawerGestureBlocker(DrawerLayout.GestureBlocker gestureBlocker) { + FragmentActivity activity = getActivity(); + if (activity instanceof MainActivity) { + ((MainActivity) activity).setDrawerGestureBlocker(gestureBlocker); + } + } + + public boolean isDrawersVisible() { + FragmentActivity activity = getActivity(); + if (activity instanceof MainActivity) { + return ((MainActivity) activity).isDrawersVisible(); + } else { + return false; + } + } + /** * @param resId 0 for clear */ diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index 6c669b264..b6a5db191 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -44,8 +44,10 @@ import android.util.Pair; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MenuItem; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewParent; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ImageView; @@ -56,6 +58,7 @@ import android.widget.TextView; import com.hippo.android.resource.AttrResources; import com.hippo.beerbelly.BeerBelly; import com.hippo.drawable.RoundSideRectDrawable; +import com.hippo.drawerlayout.DrawerLayout; import com.hippo.ehviewer.AppConfig; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.EhDB; @@ -355,11 +358,6 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene } } - @Override - public boolean needShowLeftDrawer() { - return false; - } - @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -429,6 +427,35 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene Context context = getContext2(); AssertUtils.assertNotNull(context); + View actionsScrollView = ViewUtils.$$(view, R.id.actions_scroll_view); + setDrawerGestureBlocker(new DrawerLayout.GestureBlocker() { + private void transformPointToViewLocal(int[] point, View child) { + ViewParent viewParent = child.getParent(); + + while (viewParent instanceof View) { + View view = (View) viewParent; + point[0] += view.getScrollX() - child.getLeft(); + point[1] += view.getScrollY() - child.getTop(); + + if (view instanceof DrawerLayout) { + break; + } + + child = view; + viewParent = child.getParent(); + } + } + + @Override + public boolean shouldBlockGesture(MotionEvent ev) { + int[] point = new int[] {(int) ev.getX(), (int) ev.getY()}; + transformPointToViewLocal(point, actionsScrollView); + return !isDrawersVisible() + && point[0] > 0 && point[0] < actionsScrollView.getWidth() + && point[1] > 0 && point[1] < actionsScrollView.getHeight(); + } + }); + Drawable drawable = DrawableManager.getVectorDrawable(context, R.drawable.big_sad_pandroid); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); mTip.setCompoundDrawables(null, drawable, null, null); @@ -550,6 +577,8 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene AssertUtils.assertNotNull(context); EhApplication.getDownloadManager(context).removeDownloadInfoListener(this); + setDrawerGestureBlocker(null); + mTip = null; mViewTransition = null; diff --git a/app/src/main/res/layout/gallery_detail_actions.xml b/app/src/main/res/layout/gallery_detail_actions.xml index 97ea85731..765498c08 100644 --- a/app/src/main/res/layout/gallery_detail_actions.xml +++ b/app/src/main/res/layout/gallery_detail_actions.xml @@ -25,14 +25,14 @@ android:paddingBottom="@dimen/keyline_margin"> + android:scrollbars="none">