# HG changeset patch # User Carl Byington # Date 1668625529 25200 # Node ID b8cc360e15505f83cb69856db68241cbfe32063d # Parent bd87ca9eb4b822eef09a2796851bc00ed617bcb6 allow multiple screen watch areas diff -r bd87ca9eb4b8 -r b8cc360e1550 app/src/main/AndroidManifest.xml --- a/app/src/main/AndroidManifest.xml Sun Jun 26 12:35:37 2022 -0700 +++ b/app/src/main/AndroidManifest.xml Wed Nov 16 12:05:29 2022 -0700 @@ -17,10 +17,10 @@ --> - + diff -r bd87ca9eb4b8 -r b8cc360e1550 app/src/main/java/com/five_ten_sg/connectbot/service/TerminalMonitor.java --- a/app/src/main/java/com/five_ten_sg/connectbot/service/TerminalMonitor.java Sun Jun 26 12:35:37 2022 -0700 +++ b/app/src/main/java/com/five_ten_sg/connectbot/service/TerminalMonitor.java Wed Nov 16 12:05:29 2022 -0700 @@ -26,7 +26,6 @@ import com.five_ten_sg.connectbot.ConsoleActivity; import com.five_ten_sg.connectbot.bean.HostBean; - public class TerminalMonitor { public final static String TAG = "ConnectBot.TermMonitor"; @@ -84,10 +83,7 @@ private int port = 0; private String target = null; private String init = null; - private int start_line = 0; // monitor part of the screen for changes - private int end_line = 500; // "" - private int start_column = 0; // "" - private int end_column = 500; // "" + private Watch[] watches = null; private boolean modified = false; // used to delay screen change notifications private boolean moved = false; // used to delay cursor moved notifications private int to_line = 0; // "" @@ -101,6 +97,28 @@ private BlockingQueue pending_commands = new ArrayBlockingQueue(100); private MyServiceConnection monitor_connection = new MyServiceConnection(); + + private class Watch { + // monitor part of the screen for changes + private int start_line; + private int end_line; + private int start_column; + private int end_column; + public Watch(int l, int c, int len) { + Log.i(TAG, String.format("screenWatch(line %d, col %d, len %d)", l, c, len)); + this.start_line = l; + this.end_line = l; + this.start_column = c; + this.end_column = c + len - 1; + } + public boolean screenChanged(int llow, int lhigh, int clow, int chigh) { + return ((start_line <= lhigh) && + (llow <= end_line) && + (start_column <= chigh) && + (clow <= end_column)); + } + } + class MyReader extends Thread { private InputStream monitor_in; private byte[] b; @@ -155,9 +173,14 @@ break; case MONITOR_CMD_SCREENWATCH: - if (packet.length == 4) - screenWatch(packet[1], packet[2], packet[3]); - + if (packet.length >= 4) { + int n = (packet.length - 1) / 3; + watches = new Watch[n]; + for (int i=0; i