# HG changeset patch # User Carl Byington # Date 1548789717 28800 # Node ID 105815cce1464cec48abc9dfcbb875df94bcfd83 # Parent b00031b2d6ac06235469852ee75c37d6159ae79f minimum version android 5, target and compile version api 28 diff -r b00031b2d6ac -r 105815cce146 Makefile --- a/Makefile Sat Nov 10 12:18:05 2018 -0800 +++ b/Makefile Tue Jan 29 11:21:57 2019 -0800 @@ -24,15 +24,17 @@ hg pull; hg update make builder -builder: prep - rm -rf app/build/* - echo -e "$(version)" >app/src/main/res/values/version.xml - cat app/src/main/res/values/version.xml +builder: clean prep ANDROID_HOME=/home/carl/Android/Sdk ANDROID_NDK_HOME=/home/carl/Android/Sdk/ndk-bundle ./gradlew $(task) mv app/build/outputs/apk/arm/$(style)/app-arm-$(style).apk $(apk) ls -al app/build/outputs/apk +clean: + rm -rf app/build/* + rm -rf app/.externalNativeBuild || true + prep: + echo -e "$(version)" >app/src/main/res/values/version.xml (cd help; make) genkey: diff -r b00031b2d6ac -r 105815cce146 app/build.gradle --- a/app/build.gradle Sat Nov 10 12:18:05 2018 -0800 +++ b/app/build.gradle Tue Jan 29 11:21:57 2019 -0800 @@ -1,23 +1,3 @@ -task copyDebugLibTask(type: Copy) { - from 'build/intermediates/binaries/debug/arm/lib/armeabi' - into 'src/main/jniLibs/armeabi' -} -task copyReleaseLibTask(type: Copy) { - from 'build/intermediates/binaries/release/arm/lib/armeabi' - into 'src/main/jniLibs/armeabi' -} - -tasks.whenTaskAdded { task -> - if (task.name.contains("merge") && task.name.contains("JniLibFolders")) { - if (task.name.contains("ArmDebug")) { - task.dependsOn copyDebugLibTask - } - if (task.name.contains("ArmRelease")) { - task.dependsOn copyReleaseLibTask - } - } -} - apply plugin: 'com.android.application' @@ -36,11 +16,11 @@ keyAlias = "510Connectbot" } } - compileSdkVersion = 16 + compileSdkVersion = 28 buildTypes { release { minifyEnabled = false - signingConfig = signingConfigs.release + signingConfig = android.signingConfigs.release ndk { debuggable = false abiFilters 'armeabi-v7a' @@ -73,10 +53,11 @@ defaultConfig { applicationId = "com.five_ten_sg.connectbot" - minSdkVersion = 8 - targetSdkVersion = 26 + minSdkVersion = 21 + targetSdkVersion = 28 ndk { moduleName = "com_google_ase_Exec" + abiFilters 'armeabi-v7a' } } diff -r b00031b2d6ac -r 105815cce146 app/src/main/AndroidManifest.xml --- a/app/src/main/AndroidManifest.xml Sat Nov 10 12:18:05 2018 -0800 +++ b/app/src/main/AndroidManifest.xml Tue Jan 29 11:21:57 2019 -0800 @@ -17,8 +17,8 @@ --> diff -r b00031b2d6ac -r 105815cce146 app/src/main/java/com/five_ten_sg/connectbot/ConsoleActivity.java --- a/app/src/main/java/com/five_ten_sg/connectbot/ConsoleActivity.java Sat Nov 10 12:18:05 2018 -0800 +++ b/app/src/main/java/com/five_ten_sg/connectbot/ConsoleActivity.java Tue Jan 29 11:21:57 2019 -0800 @@ -52,7 +52,6 @@ import android.text.InputType; import android.text.method.PasswordTransformationMethod; import android.text.method.SingleLineTransformationMethod; -import android.util.FloatMath; import android.util.Log; import android.view.GestureDetector; import android.view.KeyEvent; @@ -689,8 +688,8 @@ public boolean onTouch(View v, MotionEvent event) { // when copying, highlight the area if (copySource != null && copySource.isSelectingForCopy()) { - int row = (int)FloatMath.floor(event.getY() / copySource.charHeight); - int col = (int)FloatMath.floor(event.getX() / copySource.charWidth); + int row = (int)Math.floor(event.getY() / copySource.charHeight); + int col = (int)Math.floor(event.getX() / copySource.charWidth); SelectionArea area = copySource.getSelectionArea(); switch (event.getAction()) { diff -r b00031b2d6ac -r 105815cce146 app/src/main/java/com/five_ten_sg/connectbot/HostListActivity.java --- a/app/src/main/java/com/five_ten_sg/connectbot/HostListActivity.java Sat Nov 10 12:18:05 2018 -0800 +++ b/app/src/main/java/com/five_ten_sg/connectbot/HostListActivity.java Tue Jan 29 11:21:57 2019 -0800 @@ -508,7 +508,7 @@ (new File(fn)).delete(); } catch (Exception e) { - Log.d(TAG, "Deployment scan failed.", e); + Log.d(TAG, "Deployment scan failed."); } } diff -r b00031b2d6ac -r 105815cce146 app/src/main/java/com/five_ten_sg/connectbot/TerminalView.java --- a/app/src/main/java/com/five_ten_sg/connectbot/TerminalView.java Sat Nov 10 12:18:05 2018 -0800 +++ b/app/src/main/java/com/five_ten_sg/connectbot/TerminalView.java Tue Jan 29 11:21:57 2019 -0800 @@ -32,15 +32,17 @@ import android.content.pm.ResolveInfo; import android.database.Cursor; import android.graphics.Canvas; +import android.graphics.ColorMatrix; +import android.graphics.ColorMatrixColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; -import android.graphics.PixelXorXfermode; import android.graphics.RectF; import android.net.Uri; import android.os.AsyncTask; import android.util.Log; import android.view.KeyEvent; +import android.view.ScaleGestureDetector; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.view.accessibility.AccessibilityEvent; @@ -48,7 +50,6 @@ import android.view.inputmethod.BaseInputConnection; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; -import android.view.ScaleGestureDetector; import android.widget.Toast; import de.mud.terminal.VDUBuffer; @@ -97,6 +98,15 @@ public ScaleGestureDetector mScaleDetector; + private ColorMatrix getColorMatrix() { + return new ColorMatrix(new float[] { + -1, 0, 0, 0, 255, + 0, -1, 0, 0, 255, + 0, 0, -1, 0, 255, + 0, 0, 0, 1, 0 + }); + } + public TerminalView(Context context, TerminalBridge bridge) { super(context); this.context = context; @@ -107,7 +117,8 @@ setFocusableInTouchMode(true); cursorPaint = new Paint(); cursorPaint.setColor(bridge.color[bridge.defaultFg]); - cursorPaint.setXfermode(new PixelXorXfermode(bridge.color[bridge.defaultBg])); + cursorPaint.setColorFilter(new ColorMatrixColorFilter(getColorMatrix())); + //cursorPaint.setXfermode(new PixelXorXfermode(bridge.color[bridge.defaultBg])); cursorPaint.setAntiAlias(true); cursorStrokePaint = new Paint(cursorPaint); cursorStrokePaint.setStrokeWidth(0.1f); @@ -223,14 +234,13 @@ else if ((metaState & TerminalKeyListener.META_CTRL_LOCK) != 0) canvas.drawPath(ctrlCursor, cursorPaint); - // Restore previous clip region - canvas.restore(); + canvas.restore(); // Restore previous clip region } // draw any highlighted area if (bridge.isSelectingForCopy()) { SelectionArea area = bridge.getSelectionArea(); - canvas.save(Canvas.CLIP_SAVE_FLAG); + canvas.save(); canvas.clipRect( area.getLeft() * bridge.charWidth, area.getTop() * bridge.charHeight, diff -r b00031b2d6ac -r 105815cce146 app/src/main/java/com/five_ten_sg/connectbot/service/ConnectionNotifier.java --- a/app/src/main/java/com/five_ten_sg/connectbot/service/ConnectionNotifier.java Sat Nov 10 12:18:05 2018 -0800 +++ b/app/src/main/java/com/five_ten_sg/connectbot/service/ConnectionNotifier.java Tue Jan 29 11:21:57 2019 -0800 @@ -29,6 +29,7 @@ import android.content.Intent; import android.content.res.Resources; import android.graphics.Color; +import android.graphics.BitmapFactory; /** * @author Kenny Root @@ -43,56 +44,48 @@ return (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); } - protected Notification newNotification(Context context) { - Notification notification = new Notification(); - notification.icon = R.drawable.notification_icon; - notification.when = System.currentTimeMillis(); - return notification; - } - protected Notification newActivityNotification(Context context, HostBean host) { - Notification notification = newNotification(context); + int rgb; + if (HostDatabase.COLOR_RED.equals(host.getColor())) + rgb = Color.RED; + else if (HostDatabase.COLOR_GREEN.equals(host.getColor())) + rgb = Color.GREEN; + else if (HostDatabase.COLOR_BLUE.equals(host.getColor())) + rgb = Color.BLUE; + else + rgb = Color.WHITE; Resources res = context.getResources(); - String contentText = res.getString( - R.string.notification_text, host.getNickname()); Intent notificationIntent = new Intent(context, ConsoleActivity.class); - notificationIntent.setAction(Intent.ACTION_VIEW); - notificationIntent.setData(host.getUri()); - PendingIntent contentIntent = PendingIntent.getActivity(context, 0, - notificationIntent, 0); - notification.setLatestEventInfo(context, res.getString(R.string.app_name), contentText, contentIntent); - notification.flags = Notification.FLAG_AUTO_CANCEL; - notification.flags |= Notification.DEFAULT_LIGHTS; - - if (HostDatabase.COLOR_RED.equals(host.getColor())) - notification.ledARGB = Color.RED; - else if (HostDatabase.COLOR_GREEN.equals(host.getColor())) - notification.ledARGB = Color.GREEN; - else if (HostDatabase.COLOR_BLUE.equals(host.getColor())) - notification.ledARGB = Color.BLUE; - else - notification.ledARGB = Color.WHITE; - - notification.ledOnMS = 300; - notification.ledOffMS = 1000; - notification.flags |= Notification.FLAG_SHOW_LIGHTS; + PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); + Notification notification = new Notification.Builder(context) + .setContentTitle(res.getString(R.string.app_name)) + .setContentText(res.getString(R.string.notification_text, host.getNickname())) + .setContentIntent(contentIntent) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.notification_icon) + .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.notification_icon)) + .setLights(rgb, 300, 1000) + .build(); + notification.flags |= Notification.FLAG_AUTO_CANCEL; return notification; } protected Notification newRunningNotification(Context context) { - Notification notification = newNotification(context); - notification.flags = Notification.FLAG_ONGOING_EVENT - | Notification.FLAG_NO_CLEAR; - notification.when = 0; - notification.contentIntent = PendingIntent.getActivity(context, - ONLINE_NOTIFICATION, - new Intent(context, ConsoleActivity.class), 0); Resources res = context.getResources(); - notification.setLatestEventInfo(context, - res.getString(R.string.app_name), - res.getString(R.string.app_is_running), - notification.contentIntent); + Intent notificationIntent = new Intent(context, ConsoleActivity.class); + PendingIntent contentIntent = PendingIntent.getActivity(context, ONLINE_NOTIFICATION, notificationIntent, 0); + Notification notification = new Notification.Builder(context) + .setContentTitle(res.getString(R.string.app_name)) + .setContentText(res.getString(R.string.app_is_running)) + .setContentIntent(contentIntent) + .setWhen(0) + .setOngoing(true) + .setSmallIcon(R.drawable.notification_icon) + .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.notification_icon)) + .build(); + notification.flags |= Notification.FLAG_NO_CLEAR; return notification; + } public void showActivityNotification(Service context, HostBean host) { diff -r b00031b2d6ac -r 105815cce146 app/src/main/java/com/five_ten_sg/connectbot/service/TerminalBridge.java --- a/app/src/main/java/com/five_ten_sg/connectbot/service/TerminalBridge.java Sat Nov 10 12:18:05 2018 -0800 +++ b/app/src/main/java/com/five_ten_sg/connectbot/service/TerminalBridge.java Tue Jan 29 11:21:57 2019 -0800 @@ -55,7 +55,6 @@ import android.text.ClipboardManager; import android.text.Editable; import android.text.method.CharacterPickerDialog; -import android.util.FloatMath; import android.util.Log; import android.view.KeyEvent; import android.view.View; @@ -450,11 +449,11 @@ fontSize = size; // read new metrics to get exact pixel dimensions FontMetrics fm = defaultPaint.getFontMetrics(); - charTop = (int)FloatMath.ceil(fm.top); + charTop = (int)Math.ceil(fm.top); float[] widths = new float[1]; defaultPaint.getTextWidths("X", widths); - charWidth = (int)FloatMath.ceil(widths[0]); - charHeight = (int)FloatMath.ceil(fm.descent - fm.top); + charWidth = (int)Math.ceil(widths[0]); + charHeight = (int)Math.ceil(fm.descent - fm.top); // refresh any bitmap with new font size if (parent != null) parentChanged(parent); @@ -691,7 +690,7 @@ } // Save the current clip region - canvas.save(Canvas.CLIP_SAVE_FLAG); + canvas.save(); // clear this dirty area with background color defaultPaint.setColor(bg); @@ -800,7 +799,7 @@ float[] widths = new float[1]; defaultPaint.getTextWidths("X", widths); int termWidth = (int)widths[0] * cols; - int termHeight = (int)FloatMath.ceil(fm.descent - fm.top) * rows; + int termHeight = (int)Math.ceil(fm.descent - fm.top) * rows; Log.d("fontsize", String.format("font size %f resulted in %d x %d", size, termWidth, termHeight)); // Check to see if it fits in resolution specified. diff -r b00031b2d6ac -r 105815cce146 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 Sat Nov 10 12:18:05 2018 -0800 +++ b/app/src/main/java/com/five_ten_sg/connectbot/service/TerminalMonitor.java Tue Jan 29 11:21:57 2019 -0800 @@ -26,7 +26,7 @@ public class TerminalMonitor { - public final static String TAG = "ConnectBot.TerminalMonitor"; + public final static String TAG = "ConnectBot.TermMonitor"; public static final char MONITOR_CMD_INIT = 0; public static final char MONITOR_CMD_ACTIVATE = 1; @@ -281,6 +281,7 @@ keymap.put(0x87, vt320.KEY_F24); // vk_f24 // bind to the monitor service Intent intent = new Intent("com.five_ten_sg.connectbot.monitor.MonitorService"); + intent.setPackage("com.five_ten_sg.connectbot.monitor"); parent.bindService(intent, monitor_connection, Context.BIND_AUTO_CREATE); Log.i(TAG, "constructor"); } diff -r b00031b2d6ac -r 105815cce146 app/src/main/java/com/five_ten_sg/connectbot/util/UberColorPickerDialog.java --- a/app/src/main/java/com/five_ten_sg/connectbot/util/UberColorPickerDialog.java Sat Nov 10 12:18:05 2018 -0800 +++ b/app/src/main/java/com/five_ten_sg/connectbot/util/UberColorPickerDialog.java Tue Jan 29 11:21:57 2019 -0800 @@ -52,7 +52,6 @@ import android.graphics.drawable.GradientDrawable.Orientation; import android.os.Bundle; import android.util.DisplayMetrics; -import android.util.FloatMath; import android.view.MotionEvent; import android.view.View; @@ -492,8 +491,8 @@ setVerValSlider(); float angle = 2 * PI - mHSV[0] / (180 / 3.1415927f); float radius = mHSV[1] * PALETTE_RADIUS; - mCoord[0] = (int)(FloatMath.cos(angle) * radius); - mCoord[1] = (int)(FloatMath.sin(angle) * radius); + mCoord[0] = (int)(Math.cos(angle) * radius); + mCoord[1] = (int)(Math.sin(angle) * radius); mCoord[2] = PALETTE_DIM - (int)(mHSV[2] * PALETTE_DIM); } @@ -731,7 +730,7 @@ else if (mCoord[1] > PALETTE_RADIUS) mCoord[1] = PALETTE_RADIUS; - float radius = FloatMath.sqrt(mCoord[0] * mCoord[0] + mCoord[1] * mCoord[1]); + float radius = (float)Math.sqrt(mCoord[0] * mCoord[0] + mCoord[1] * mCoord[1]); if (radius > PALETTE_RADIUS) radius = PALETTE_RADIUS; @@ -744,8 +743,8 @@ unit += 1; } - mCoord[0] = round(FloatMath.cos(angle) * radius); - mCoord[1] = round(FloatMath.sin(angle) * radius); + mCoord[0] = round(Math.cos(angle) * radius); + mCoord[1] = round(Math.sin(angle) * radius); int c = interpColor(mSpectrumColorsRev, unit); float[] hsv = new float[3]; Color.colorToHSV(c, hsv); @@ -850,7 +849,7 @@ boolean inSwatchOld = ptInRect(round(x), round(y), mOldSwatchRect); boolean inSwatchNew = ptInRect(round(x), round(y), mNewSwatchRect); //Get the event's distance from the center of the main 2D palette - float radius = FloatMath.sqrt(circlePinnedX * circlePinnedX + circlePinnedY * circlePinnedY); + float radius = (float)Math.sqrt(circlePinnedX * circlePinnedX + circlePinnedY * circlePinnedY); //Is the event in a circle-pinned 2D palette? boolean inOvalPalette = radius <= PALETTE_RADIUS; @@ -896,8 +895,8 @@ unit += 1; } - mCoord[0] = round(FloatMath.cos(angle) * radius); - mCoord[1] = round(FloatMath.sin(angle) * radius); + mCoord[0] = round(Math.cos(angle) * radius); + mCoord[1] = round(Math.sin(angle) * radius); int c = interpColor(mSpectrumColorsRev, unit); float[] hsv = new float[3]; Color.colorToHSV(c, hsv); diff -r b00031b2d6ac -r 105815cce146 app/src/main/jni/Exec/com_google_ase_Exec.cpp --- a/app/src/main/jni/Exec/com_google_ase_Exec.cpp Sat Nov 10 12:18:05 2018 -0800 +++ b/app/src/main/jni/Exec/com_google_ase_Exec.cpp Tue Jan 29 11:21:57 2019 -0800 @@ -24,6 +24,7 @@ #include #include #include +#include #include "android/log.h" diff -r b00031b2d6ac -r 105815cce146 build.gradle --- a/build.gradle Sat Nov 10 12:18:05 2018 -0800 +++ b/build.gradle Tue Jan 29 11:21:57 2019 -0800 @@ -6,7 +6,7 @@ google() } dependencies { - classpath 'com.android.tools.build:gradle:3.2.1' + classpath 'com.android.tools.build:gradle:3.3.0' } }