From 0b1de8d696ed7abf64766fefe5700e750cd1f30e Mon Sep 17 00:00:00 2001 From: Ryan Hansberry Date: Wed, 14 Oct 2015 13:34:46 -0700 Subject: Made TerminalTextViewOverlay a child view of TerminalView. --- .../main/java/org/connectbot/ConsoleActivity.java | 7 +--- app/src/main/java/org/connectbot/TerminalView.java | 23 ++++++---- .../connectbot/util/TerminalTextViewOverlay.java | 49 ++++++++-------------- app/src/main/res/layout-v11/item_terminal.xml | 49 ---------------------- 4 files changed, 32 insertions(+), 96 deletions(-) delete mode 100644 app/src/main/res/layout-v11/item_terminal.xml (limited to 'app/src') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index 711c89c..7241e0e 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -28,7 +28,6 @@ import org.connectbot.service.TerminalBridge; import org.connectbot.service.TerminalKeyListener; import org.connectbot.service.TerminalManager; import org.connectbot.util.PreferenceConstants; -import org.connectbot.util.TerminalTextViewOverlay; import org.connectbot.util.TerminalViewPager; import android.annotation.TargetApi; @@ -1216,12 +1215,8 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne TextView terminalNameOverlay = (TextView) view.findViewById(R.id.terminal_name_overlay); terminalNameOverlay.setText(bridge.host.getNickname()); - TerminalTextViewOverlay terminalTextViewOverlay = - (TerminalTextViewOverlay) view.findViewById(R.id.terminal_text_overlay); - // and add our terminal view control, using index to place behind overlay - final TerminalView terminal = new TerminalView( - container.getContext(), bridge, terminalTextViewOverlay, pager); + final TerminalView terminal = new TerminalView(container.getContext(), bridge, pager); terminal.setId(R.id.terminal_view); view.addView(terminal, 0); diff --git a/app/src/main/java/org/connectbot/TerminalView.java b/app/src/main/java/org/connectbot/TerminalView.java index aec3bc5..c1e41ea 100644 --- a/app/src/main/java/org/connectbot/TerminalView.java +++ b/app/src/main/java/org/connectbot/TerminalView.java @@ -53,12 +53,13 @@ import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; -import android.view.ViewGroup.LayoutParams; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; import android.view.inputmethod.BaseInputConnection; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; +import android.widget.FrameLayout; +import android.widget.RelativeLayout; import android.widget.Toast; import de.mud.terminal.VDUBuffer; import de.mud.terminal.vt320; @@ -70,7 +71,7 @@ import de.mud.terminal.vt320; * * @author jsharkey */ -public class TerminalView extends View implements FontSizeChangedListener { +public class TerminalView extends FrameLayout implements FontSizeChangedListener { private final Context context; public final TerminalBridge bridge; @@ -113,12 +114,13 @@ public class TerminalView extends View 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, final TerminalTextViewOverlay terminalTextViewOverlay, TerminalViewPager pager) { + public TerminalView(Context context, TerminalBridge bridge, TerminalViewPager pager) { super(context); + setWillNotDraw(false); + this.context = context; this.bridge = bridge; - this.terminalTextViewOverlay = terminalTextViewOverlay; this.viewPager = pager; setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); @@ -175,8 +177,11 @@ public class TerminalView extends View implements FontSizeChangedListener { // connect our view up to the bridge setOnKeyListener(bridge.getKeyHandler()); - if (terminalTextViewOverlay != null) { - terminalTextViewOverlay.parent = this; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + terminalTextViewOverlay = new TerminalTextViewOverlay(context, this); + terminalTextViewOverlay.setLayoutParams( + new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + addView(terminalTextViewOverlay, 0); // Once terminalTextViewOverlay is active, allow it to handle key events instead. terminalTextViewOverlay.setOnKeyListener(bridge.getKeyHandler()); @@ -253,7 +258,9 @@ public class TerminalView extends View implements FontSizeChangedListener { } public void copyCurrentSelectionToClipboard() { - terminalTextViewOverlay.copyCurrentSelectionToClipboard(); + if (terminalTextViewOverlay != null) { + terminalTextViewOverlay.copyCurrentSelectionToClipboard(); + } } @Override @@ -474,8 +481,6 @@ public class TerminalView extends View implements FontSizeChangedListener { canvas.restore(); } } - - super.onDraw(canvas); } public void notifyUser(String message) { diff --git a/app/src/main/java/org/connectbot/util/TerminalTextViewOverlay.java b/app/src/main/java/org/connectbot/util/TerminalTextViewOverlay.java index be37524..a00ab47 100644 --- a/app/src/main/java/org/connectbot/util/TerminalTextViewOverlay.java +++ b/app/src/main/java/org/connectbot/util/TerminalTextViewOverlay.java @@ -26,10 +26,8 @@ import android.content.Context; import android.graphics.Color; import android.graphics.Typeface; import android.os.Build; -import android.support.annotation.Nullable; import android.support.v4.view.MotionEventCompat; import android.text.ClipboardManager; -import android.util.AttributeSet; import android.view.ActionMode; import android.view.InputDevice; import android.view.KeyEvent; @@ -50,7 +48,7 @@ import de.mud.terminal.vt320; */ @TargetApi(11) public class TerminalTextViewOverlay extends TextView { - public TerminalView parent; + public TerminalView terminalView; // ryan: this name sucks private String currentSelection = ""; private ActionMode selectionActionMode; private ClipboardManager clipboard; @@ -58,33 +56,20 @@ public class TerminalTextViewOverlay extends TextView { private int oldBufferHeight = 0; private int oldScrollY = -1; - public TerminalTextViewOverlay(Context context) { + public TerminalTextViewOverlay(Context context, TerminalView terminalView) { super(context); - init(); - } - - public TerminalTextViewOverlay(Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - init(); - } - @TargetApi(21) - public TerminalTextViewOverlay(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } + this.terminalView = terminalView; + clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); - private void init() { setTextColor(Color.TRANSPARENT); setTypeface(Typeface.MONOSPACE); setTextIsSelectable(true); setCustomSelectionActionModeCallback(new TextSelectionActionModeCallback()); - - clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); } public void refreshTextFromBuffer() { - VDUBuffer vb = parent.bridge.getVDUBuffer(); + VDUBuffer vb = terminalView.bridge.getVDUBuffer(); int numRows = vb.getBufferSize(); int numCols = vb.getColumns() - 1; oldBufferHeight = numRows; @@ -111,7 +96,7 @@ public class TerminalTextViewOverlay extends TextView { * rest of the buffer. */ public void onBufferChanged() { - VDUBuffer vb = parent.bridge.getVDUBuffer(); + VDUBuffer vb = terminalView.bridge.getVDUBuffer(); int numRows = vb.getBufferSize(); int numNewRows = numRows - oldBufferHeight; @@ -161,7 +146,7 @@ public class TerminalTextViewOverlay extends TextView { if (clipboard.hasText()) { clip = clipboard.getText().toString(); } - parent.bridge.injectString(clip); + terminalView.bridge.injectString(clip); } @Override @@ -176,7 +161,7 @@ public class TerminalTextViewOverlay extends TextView { public void scrollTo(int x, int y) { int lineMultiple = y / getLineHeight(); - TerminalBridge bridge = parent.bridge; + TerminalBridge bridge = terminalView.bridge; bridge.buffer.setWindowBase(lineMultiple); super.scrollTo(0, lineMultiple * getLineHeight()); @@ -192,12 +177,12 @@ public class TerminalTextViewOverlay extends TextView { // Mouse input is treated differently: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH && MotionEventCompat.getSource(event) == InputDevice.SOURCE_MOUSE) { - if (onMouseEvent(event, parent.bridge)) { + if (onMouseEvent(event, terminalView.bridge)) { return true; } - parent.viewPager.setPagingEnabled(true); + terminalView.viewPager.setPagingEnabled(true); } else { - parent.onTouchEvent(event); + terminalView.onTouchEvent(event); } super.onTouchEvent(event); @@ -214,11 +199,11 @@ public class TerminalTextViewOverlay extends TextView { // Process scroll wheel movement: float yDistance = MotionEventCompat.getAxisValue(event, MotionEvent.AXIS_VSCROLL); - vt320 vtBuffer = (vt320) parent.bridge.buffer; + vt320 vtBuffer = (vt320) terminalView.bridge.buffer; boolean mouseReport = vtBuffer.isMouseReportEnabled(); if (mouseReport) { - int row = (int) Math.floor(event.getY() / parent.bridge.charHeight); - int col = (int) Math.floor(event.getX() / parent.bridge.charWidth); + int row = (int) Math.floor(event.getY() / terminalView.bridge.charHeight); + int col = (int) Math.floor(event.getX() / terminalView.bridge.charWidth); vtBuffer.mouseWheel( yDistance > 0, @@ -282,12 +267,12 @@ public class TerminalTextViewOverlay extends TextView { currentSelection = getText().toString().substring(selectionStart, selectionEnd); } } else if (event.getAction() == MotionEvent.ACTION_DOWN) { - parent.viewPager.setPagingEnabled(false); + terminalView.viewPager.setPagingEnabled(false); vtBuffer.mousePressed( col, row, mouseEventToJavaModifiers(event)); return true; } else if (event.getAction() == MotionEvent.ACTION_UP) { - parent.viewPager.setPagingEnabled(true); + terminalView.viewPager.setPagingEnabled(true); vtBuffer.mouseReleased(col, row); return true; } else if (event.getAction() == MotionEvent.ACTION_MOVE) { @@ -349,7 +334,7 @@ public class TerminalTextViewOverlay extends TextView { @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { - return parent.onCreateInputConnection(outAttrs); + return terminalView.onCreateInputConnection(outAttrs); } private class TextSelectionActionModeCallback implements ActionMode.Callback { diff --git a/app/src/main/res/layout-v11/item_terminal.xml b/app/src/main/res/layout-v11/item_terminal.xml deleted file mode 100644 index 25c3c1c..0000000 --- a/app/src/main/res/layout-v11/item_terminal.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - -- cgit v1.2.3