From e29cca58eb8cec207cf65bc740b5266ea66a27dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=B4=D0=BE=D0=BD=D0=B0=D0=B9=20=D0=AD=D0=BB=D0=BE?= =?UTF-8?q?=D1=85=D0=B8=D0=BC?= Date: Sun, 3 Apr 2016 14:39:51 +0300 Subject: [PATCH] Fix sliding in man page view fragment --- .../com/adonai/manman/ManPageDialogFragment.java | 14 ++++++++------ .../adonai/manman/views/PassiveSlidingPane.java | 11 +++++++++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/adonai/manman/ManPageDialogFragment.java b/app/src/main/java/com/adonai/manman/ManPageDialogFragment.java index 5cf8909..06230e5 100644 --- a/app/src/main/java/com/adonai/manman/ManPageDialogFragment.java +++ b/app/src/main/java/com/adonai/manman/ManPageDialogFragment.java @@ -41,6 +41,7 @@ import com.adonai.manman.entities.ManPage; import com.adonai.manman.misc.AbstractNetworkAsyncLoader; import com.adonai.manman.parser.Man2Html; +import com.adonai.manman.views.PassiveSlidingPane; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; @@ -79,7 +80,7 @@ public class ManPageDialogFragment extends Fragment { private String mCommandName; private LinearLayout mLinkContainer; - private SlidingPaneLayout mSlider; + private PassiveSlidingPane mSlider; private ViewFlipper mFlipper; private WebView mContent; @@ -116,22 +117,23 @@ public void onCreate(Bundle savedInstanceState) { @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { setHasOptionsMenu(true); - + View root = inflater.inflate(R.layout.fragment_man_page_show, container, false); mLinkContainer = (LinearLayout) root.findViewById(R.id.link_list); - mSlider = (SlidingPaneLayout) root.findViewById(R.id.sliding_pane); mFlipper = (ViewFlipper) root.findViewById(R.id.flipper); mContent = (WebView) root.findViewById(R.id.man_content_web); mContent.setWebViewClient(new ManPageChromeClient()); mContent.getSettings().setJavaScriptEnabled(true); - + mSlider = (PassiveSlidingPane) root.findViewById(R.id.sliding_pane); + mSlider.setTrackedView(mContent); + // search-specific mSearchContainer = (LinearLayout) root.findViewById(R.id.search_bar_layout); mSearchEdit = (EditText) mSearchContainer.findViewById(R.id.search_edit); mCloseSearchBar = (ImageView) mSearchContainer.findViewById(R.id.close_search_bar); mFindNext = (ImageView) mSearchContainer.findViewById(R.id.find_next_occurrence); mFindPrevious = (ImageView) mSearchContainer.findViewById(R.id.find_previous_occurrence); - + mCloseSearchBar.setOnClickListener(new SearchBarCloser()); mSearchEdit.addTextChangedListener(new SearchExecutor()); mFindNext.setOnClickListener(new SearchFurtherExecutor(true)); @@ -152,7 +154,7 @@ public void onResume() { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mContent.getWindowToken(), 0); } - + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); diff --git a/app/src/main/java/com/adonai/manman/views/PassiveSlidingPane.java b/app/src/main/java/com/adonai/manman/views/PassiveSlidingPane.java index eb6eaa3..93d5522 100644 --- a/app/src/main/java/com/adonai/manman/views/PassiveSlidingPane.java +++ b/app/src/main/java/com/adonai/manman/views/PassiveSlidingPane.java @@ -4,6 +4,7 @@ import android.support.v4.widget.SlidingPaneLayout; import android.util.AttributeSet; import android.view.MotionEvent; +import android.view.View; /** * Extension for sliding pane layout class @@ -15,6 +16,8 @@ public class PassiveSlidingPane extends SlidingPaneLayout { private static final int LEFT = -1; + private View mTrackedView; + public PassiveSlidingPane(Context context) { super(context); init(); @@ -33,12 +36,16 @@ public PassiveSlidingPane(Context context, AttributeSet attrs, int defStyle) { private void init() { } + public void setTrackedView(View v) { + mTrackedView = v; + } + @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if(isOpen()) // we're open, do whatever we want return super.onInterceptTouchEvent(ev); - else if(getChildCount() > 1) { - if (getChildAt(1).canScrollHorizontally(LEFT)) { // if we can scroll left in child, don't even try to open pane! + else if(mTrackedView != null) { + if (mTrackedView.canScrollHorizontally(LEFT)) { // if we can scroll left in child, don't even try to open pane! return false; } }