From 3d440c282b7f5286a79a87b0a6bae2158e331230 Mon Sep 17 00:00:00 2001 From: Ryan Hansberry Date: Mon, 5 Oct 2015 12:31:04 -0700 Subject: Disable ViewPager paging when mouse is dragging. --- .../main/java/org/connectbot/ConsoleActivity.java | 8 ++-- app/src/main/java/org/connectbot/TerminalView.java | 27 ++++++----- .../org/connectbot/util/TerminalViewPager.java | 54 ++++++++++++++++++++++ 3 files changed, 73 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/org/connectbot/util/TerminalViewPager.java (limited to 'app/src/main/java/org/connectbot') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index fd91ad0..ba97f45 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -29,6 +29,7 @@ import org.connectbot.service.TerminalBridge; import org.connectbot.service.TerminalKeyListener; import org.connectbot.service.TerminalManager; import org.connectbot.util.PreferenceConstants; +import org.connectbot.util.TerminalViewPager; import android.app.AlertDialog; import android.app.Dialog; @@ -53,7 +54,6 @@ import android.support.design.widget.TabLayout; import android.support.v4.app.ActivityCompat; import android.support.v4.view.MenuItemCompat; import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; @@ -99,7 +99,7 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne private static final int KEYBOARD_REPEAT = 100; private static final String STATE_SELECTED_URI = "selectedUri"; - protected ViewPager pager = null; + protected TerminalViewPager pager = null; protected TabLayout tabs = null; protected Toolbar toolbar = null; @Nullable @@ -490,10 +490,10 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne toolbar = (Toolbar) findViewById(R.id.toolbar); - pager = (ViewPager) findViewById(R.id.console_flip); + pager = (TerminalViewPager) findViewById(R.id.console_flip); pager.addOnPageChangeListener( - new ViewPager.SimpleOnPageChangeListener() { + new TerminalViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { setTitle(adapter.getPageTitle(position)); diff --git a/app/src/main/java/org/connectbot/TerminalView.java b/app/src/main/java/org/connectbot/TerminalView.java index 42ab843..0c9ec54 100644 --- a/app/src/main/java/org/connectbot/TerminalView.java +++ b/app/src/main/java/org/connectbot/TerminalView.java @@ -25,6 +25,7 @@ import org.connectbot.bean.SelectionArea; import org.connectbot.service.FontSizeChangedListener; import org.connectbot.service.TerminalBridge; import org.connectbot.service.TerminalKeyListener; +import org.connectbot.util.TerminalViewPager; import android.annotation.SuppressLint; import android.annotation.TargetApi; @@ -44,7 +45,6 @@ import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.support.v4.view.MotionEventCompat; -import android.support.v4.view.ViewPager; import android.text.ClipboardManager; import android.view.ActionMode; import android.view.GestureDetector; @@ -77,7 +77,7 @@ public class TerminalView extends TextView implements FontSizeChangedListener { private final Context context; public final TerminalBridge bridge; - private final ViewPager viewPager; + private final TerminalViewPager viewPager; private GestureDetector gestureDetector; private ClipboardManager clipboard; @@ -114,7 +114,7 @@ public class TerminalView extends TextView implements FontSizeChangedListener { private static final String SCREENREADER_INTENT_ACTION = "android.accessibilityservice.AccessibilityService"; private static final String SCREENREADER_INTENT_CATEGORY = "android.accessibilityservice.category.FEEDBACK_SPOKEN"; - public TerminalView(Context context, TerminalBridge bridge, ViewPager pager) { + public TerminalView(Context context, TerminalBridge bridge, TerminalViewPager pager) { super(context); this.context = context; @@ -292,6 +292,7 @@ public class TerminalView extends TextView implements FontSizeChangedListener { if (onMouseEvent(event, bridge)) { return true; } + viewPager.setPagingEnabled(true); } super.onTouchEvent(event); @@ -327,24 +328,26 @@ public class TerminalView extends TextView implements FontSizeChangedListener { } } } else if (event.getAction() == MotionEvent.ACTION_DOWN) { + viewPager.setPagingEnabled(false); ((vt320) bridge.buffer).mousePressed( - col, row, mouseEventToJavaModifiers(event)); + col, row, mouseEventToJavaModifiers(event)); return true; } else if (event.getAction() == MotionEvent.ACTION_UP) { + viewPager.setPagingEnabled(true); ((vt320) bridge.buffer).mouseReleased(col, row); return true; } else if (event.getAction() == MotionEvent.ACTION_MOVE) { int buttonState = event.getButtonState(); int button = (buttonState & MotionEvent.BUTTON_PRIMARY) != 0 ? 0 : - (buttonState & MotionEvent.BUTTON_SECONDARY) != 0 ? 1 : - (buttonState & MotionEvent.BUTTON_TERTIARY) != 0 ? 2 : 3; + (buttonState & MotionEvent.BUTTON_SECONDARY) != 0 ? 1 : + (buttonState & MotionEvent.BUTTON_TERTIARY) != 0 ? 2 : 3; ((vt320) bridge.buffer).mouseMoved( - button, - col, - row, - (meta & KeyEvent.META_CTRL_ON) != 0, - (meta & KeyEvent.META_SHIFT_ON) != 0, - (meta & KeyEvent.META_META_ON) != 0); + button, + col, + row, + (meta & KeyEvent.META_CTRL_ON) != 0, + (meta & KeyEvent.META_SHIFT_ON) != 0, + (meta & KeyEvent.META_META_ON) != 0); return true; } diff --git a/app/src/main/java/org/connectbot/util/TerminalViewPager.java b/app/src/main/java/org/connectbot/util/TerminalViewPager.java new file mode 100644 index 0000000..b3b63b7 --- /dev/null +++ b/app/src/main/java/org/connectbot/util/TerminalViewPager.java @@ -0,0 +1,54 @@ +/* + * ConnectBot: simple, powerful, open-source SSH client for Android + * Copyright 2015 Kenny Root, Jeffrey Sharkey + * + * 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.connectbot.util; + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.view.MotionEvent; + +public class TerminalViewPager extends ViewPager { + private boolean enabled; + + public TerminalViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + this.enabled = true; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (this.enabled) { + return super.onTouchEvent(event); + } + + return false; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + if (this.enabled) { + return super.onInterceptTouchEvent(event); + } + + return false; + } + + public void setPagingEnabled(boolean enabled) { + this.enabled = enabled; + } +} -- cgit v1.2.3