This commit is contained in:
+2
-2
@@ -4,11 +4,11 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace 'org.pubvm.a3270'
|
namespace 'haus.nightmare.a3270'
|
||||||
compileSdk 34
|
compileSdk 34
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "org.pubvm.a3270"
|
applicationId "haus.nightmare.a3270"
|
||||||
minSdk 24
|
minSdk 24
|
||||||
targetSdk 34
|
targetSdk 34
|
||||||
versionCode 4
|
versionCode 4
|
||||||
|
|||||||
+12
-12
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270
|
package haus.nightmare.a3270
|
||||||
|
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
@@ -23,18 +23,18 @@ import androidx.lifecycle.Lifecycle
|
|||||||
import androidx.lifecycle.LifecycleEventObserver
|
import androidx.lifecycle.LifecycleEventObserver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.view.KeyCharacterMap
|
import android.view.KeyCharacterMap
|
||||||
import org.lib3270j.protocol.DS3270Constants.*
|
import haus.nightmare.lib3270j.protocol.DS3270Constants.*
|
||||||
import org.pubvm.a3270.service.TerminalService
|
import haus.nightmare.a3270.service.TerminalService
|
||||||
import org.pubvm.a3270.storage.HostStorage
|
import haus.nightmare.a3270.storage.HostStorage
|
||||||
import org.pubvm.a3270.ui.ConnectDialog
|
import haus.nightmare.a3270.ui.ConnectDialog
|
||||||
import org.pubvm.a3270.ui.FileTransferDialog
|
import haus.nightmare.a3270.ui.FileTransferDialog
|
||||||
import org.pubvm.a3270.ui.OiaStatusBar
|
import haus.nightmare.a3270.ui.OiaStatusBar
|
||||||
import org.pubvm.a3270.ui.SettingsDialog
|
import haus.nightmare.a3270.ui.SettingsDialog
|
||||||
import org.pubvm.a3270.ui.TerminalInputView
|
import haus.nightmare.a3270.ui.TerminalInputView
|
||||||
import org.pubvm.a3270.ui.TerminalView
|
import haus.nightmare.a3270.ui.TerminalView
|
||||||
import org.pubvm.a3270.ui.TwoRowKeyBar
|
import haus.nightmare.a3270.ui.TwoRowKeyBar
|
||||||
|
|
||||||
import org.pubvm.a3270.ui.UntrustedCertificateDialog
|
import haus.nightmare.a3270.ui.UntrustedCertificateDialog
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
|
||||||
+17
-17
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270
|
package haus.nightmare.a3270
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import androidx.lifecycle.AndroidViewModel
|
import androidx.lifecycle.AndroidViewModel
|
||||||
@@ -11,19 +11,19 @@ import kotlinx.coroutines.flow.StateFlow
|
|||||||
import kotlinx.coroutines.flow.asStateFlow
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.lib3270j.ConnectionConfig
|
import haus.nightmare.lib3270j.ConnectionConfig
|
||||||
import org.lib3270j.ConnectionState
|
import haus.nightmare.lib3270j.ConnectionState
|
||||||
import org.lib3270j.Telnet3270Client
|
import haus.nightmare.lib3270j.Telnet3270Client
|
||||||
import org.lib3270j.TerminalModel
|
import haus.nightmare.lib3270j.TerminalModel
|
||||||
import org.lib3270j.ft.FTConfig
|
import haus.nightmare.lib3270j.ft.FTConfig
|
||||||
import org.lib3270j.listener.ConnectionListener
|
import haus.nightmare.lib3270j.listener.ConnectionListener
|
||||||
import org.lib3270j.listener.ScreenUpdateListener
|
import haus.nightmare.lib3270j.listener.ScreenUpdateListener
|
||||||
import org.lib3270j.protocol.DS3270Constants.AID_ENTER
|
import haus.nightmare.lib3270j.protocol.DS3270Constants.AID_ENTER
|
||||||
import org.lib3270j.protocol.DS3270Constants.faIsProtected
|
import haus.nightmare.lib3270j.protocol.DS3270Constants.faIsProtected
|
||||||
import org.lib3270j.screen.ScreenBuffer
|
import haus.nightmare.lib3270j.screen.ScreenBuffer
|
||||||
import org.pubvm.a3270.ft.FileTransfer
|
import haus.nightmare.a3270.ft.FileTransfer
|
||||||
import org.pubvm.a3270.service.TerminalService
|
import haus.nightmare.a3270.service.TerminalService
|
||||||
import org.pubvm.a3270.storage.AppSettings
|
import haus.nightmare.a3270.storage.AppSettings
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
import java.util.logging.Logger
|
import java.util.logging.Logger
|
||||||
@@ -325,7 +325,7 @@ class TerminalViewModel(application: Application) : AndroidViewModel(application
|
|||||||
val effectiveTn3270e = tn3270e && parsedConfig.isTn3270eEnabled
|
val effectiveTn3270e = tn3270e && parsedConfig.isTn3270eEnabled
|
||||||
val globalVerify = AppSettings.isVerifyCertsEnabled(getApplication())
|
val globalVerify = AppSettings.isVerifyCertsEnabled(getApplication())
|
||||||
val effectiveVerify = tlsVerifyCert && globalVerify
|
val effectiveVerify = tlsVerifyCert && globalVerify
|
||||||
val gMode = org.lib3270j.graphics.GraphicsMode.fromString(graphicsModeStr)
|
val gMode = haus.nightmare.lib3270j.graphics.GraphicsMode.fromString(graphicsModeStr)
|
||||||
|
|
||||||
_isTlsActive.value = effectiveTls
|
_isTlsActive.value = effectiveTls
|
||||||
_isTlsVerified.value = effectiveVerify
|
_isTlsVerified.value = effectiveVerify
|
||||||
@@ -341,7 +341,7 @@ class TerminalViewModel(application: Application) : AndroidViewModel(application
|
|||||||
graphicsMode = gMode
|
graphicsMode = gMode
|
||||||
}
|
}
|
||||||
|
|
||||||
config.certificateVerifier = org.lib3270j.tls.TlsCertificateVerifier { chain, _, exception ->
|
config.certificateVerifier = haus.nightmare.lib3270j.tls.TlsCertificateVerifier { chain, _, exception ->
|
||||||
if (!AppSettings.isVerifyCertsEnabled(getApplication())) {
|
if (!AppSettings.isVerifyCertsEnabled(getApplication())) {
|
||||||
log.info("Certificate verification bypassed via global AppSettings")
|
log.info("Certificate verification bypassed via global AppSettings")
|
||||||
return@TlsCertificateVerifier true
|
return@TlsCertificateVerifier true
|
||||||
@@ -642,7 +642,7 @@ class TerminalViewModel(application: Application) : AndroidViewModel(application
|
|||||||
inputChannel.trySend(TerminalInputAction.LightPenSelect(baddr))
|
inputChannel.trySend(TerminalInputAction.LightPenSelect(baddr))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getGocaDecoder(): org.lib3270j.graphics.GocaDecoder? = client?.gocaDecoder
|
fun getGocaDecoder(): haus.nightmare.lib3270j.graphics.GocaDecoder? = client?.gocaDecoder
|
||||||
|
|
||||||
fun handleGraphicTouch(px: Int, py: Int, button: Int = 1, shift: Boolean = false, ctrl: Boolean = false) {
|
fun handleGraphicTouch(px: Int, py: Int, button: Int = 1, shift: Boolean = false, ctrl: Boolean = false) {
|
||||||
val c = client ?: return
|
val c = client ?: return
|
||||||
+6
-6
@@ -1,12 +1,12 @@
|
|||||||
package org.pubvm.a3270.ft
|
package haus.nightmare.a3270.ft
|
||||||
|
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import org.lib3270j.Telnet3270Client
|
import haus.nightmare.lib3270j.Telnet3270Client
|
||||||
import org.lib3270j.ft.FTConfig
|
import haus.nightmare.lib3270j.ft.FTConfig
|
||||||
import org.lib3270j.ft.FTConstants.FTState
|
import haus.nightmare.lib3270j.ft.FTConstants.FTState
|
||||||
import org.lib3270j.ft.FTCut
|
import haus.nightmare.lib3270j.ft.FTCut
|
||||||
import org.lib3270j.ft.FTDft
|
import haus.nightmare.lib3270j.ft.FTDft
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.util.Timer
|
import java.util.Timer
|
||||||
+3
-3
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270.service
|
package haus.nightmare.a3270.service
|
||||||
|
|
||||||
import android.app.Notification
|
import android.app.Notification
|
||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
@@ -10,8 +10,8 @@ import android.content.Intent
|
|||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import org.pubvm.a3270.MainActivity
|
import haus.nightmare.a3270.MainActivity
|
||||||
import org.pubvm.a3270.R
|
import haus.nightmare.a3270.R
|
||||||
|
|
||||||
class TerminalService : Service() {
|
class TerminalService : Service() {
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270.storage
|
package haus.nightmare.a3270.storage
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270.storage
|
package haus.nightmare.a3270.storage
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
+3
-3
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270.ui
|
package haus.nightmare.a3270.ui
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
@@ -26,8 +26,8 @@ import androidx.compose.ui.unit.dp
|
|||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import androidx.compose.ui.window.DialogProperties
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import org.pubvm.a3270.storage.HostStorage
|
import haus.nightmare.a3270.storage.HostStorage
|
||||||
import org.pubvm.a3270.storage.SavedHost
|
import haus.nightmare.a3270.storage.SavedHost
|
||||||
|
|
||||||
private val TerminalKeyboardOptions = KeyboardOptions(
|
private val TerminalKeyboardOptions = KeyboardOptions(
|
||||||
capitalization = KeyboardCapitalization.None,
|
capitalization = KeyboardCapitalization.None,
|
||||||
+3
-3
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270.ui
|
package haus.nightmare.a3270.ui
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
@@ -15,8 +15,8 @@ import androidx.compose.ui.text.input.KeyboardCapitalization
|
|||||||
import androidx.compose.ui.text.input.KeyboardType
|
import androidx.compose.ui.text.input.KeyboardType
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import org.lib3270j.ft.FTConfig
|
import haus.nightmare.lib3270j.ft.FTConfig
|
||||||
import org.pubvm.a3270.FTProgressState
|
import haus.nightmare.a3270.FTProgressState
|
||||||
|
|
||||||
private val TerminalKeyboardOptions = KeyboardOptions(
|
private val TerminalKeyboardOptions = KeyboardOptions(
|
||||||
capitalization = KeyboardCapitalization.None,
|
capitalization = KeyboardCapitalization.None,
|
||||||
+3
-3
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270.ui
|
package haus.nightmare.a3270.ui
|
||||||
|
|
||||||
import android.view.HapticFeedbackConstants
|
import android.view.HapticFeedbackConstants
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
@@ -15,8 +15,8 @@ import androidx.compose.ui.text.font.FontFamily
|
|||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import org.lib3270j.ConnectionState
|
import haus.nightmare.lib3270j.ConnectionState
|
||||||
import org.lib3270j.protocol.DS3270Constants.*
|
import haus.nightmare.lib3270j.protocol.DS3270Constants.*
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun TwoRowKeyBar(
|
fun TwoRowKeyBar(
|
||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270.ui
|
package haus.nightmare.a3270.ui
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
@@ -13,7 +13,7 @@ import androidx.compose.ui.text.font.FontFamily
|
|||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import org.lib3270j.ConnectionState
|
import haus.nightmare.lib3270j.ConnectionState
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun OiaStatusBar(
|
fun OiaStatusBar(
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270.ui
|
package haus.nightmare.a3270.ui
|
||||||
|
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270.ui
|
package haus.nightmare.a3270.ui
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.text.InputType
|
import android.text.InputType
|
||||||
@@ -8,7 +8,7 @@ import android.view.inputmethod.BaseInputConnection
|
|||||||
import android.view.inputmethod.EditorInfo
|
import android.view.inputmethod.EditorInfo
|
||||||
import android.view.inputmethod.InputConnection
|
import android.view.inputmethod.InputConnection
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
import org.lib3270j.protocol.DS3270Constants.AID_ENTER
|
import haus.nightmare.lib3270j.protocol.DS3270Constants.AID_ENTER
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom InputConnection for Termux-style terminal keyboard interaction.
|
* Custom InputConnection for Termux-style terminal keyboard interaction.
|
||||||
+7
-7
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270.ui
|
package haus.nightmare.a3270.ui
|
||||||
|
|
||||||
import android.graphics.Paint
|
import android.graphics.Paint
|
||||||
import android.graphics.Typeface
|
import android.graphics.Typeface
|
||||||
@@ -25,9 +25,9 @@ import androidx.compose.ui.text.AnnotatedString
|
|||||||
import androidx.compose.ui.unit.DpOffset
|
import androidx.compose.ui.unit.DpOffset
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import org.lib3270j.protocol.DS3270Constants.*
|
import haus.nightmare.lib3270j.protocol.DS3270Constants.*
|
||||||
import org.lib3270j.screen.ExtendedAttribute
|
import haus.nightmare.lib3270j.screen.ExtendedAttribute
|
||||||
import org.lib3270j.screen.ScreenBuffer
|
import haus.nightmare.lib3270j.screen.ScreenBuffer
|
||||||
|
|
||||||
// Standard 3279 Host Colors (16-color palette)
|
// Standard 3279 Host Colors (16-color palette)
|
||||||
private val HOST_COLORS = arrayOf(
|
private val HOST_COLORS = arrayOf(
|
||||||
@@ -58,9 +58,9 @@ fun TerminalView(
|
|||||||
cols: Int,
|
cols: Int,
|
||||||
cursorAddr: Int,
|
cursorAddr: Int,
|
||||||
screenVersion: Long,
|
screenVersion: Long,
|
||||||
programSymbolManager: org.lib3270j.graphics.ProgramSymbolManager? = null,
|
programSymbolManager: haus.nightmare.lib3270j.graphics.ProgramSymbolManager? = null,
|
||||||
graphicsPlane: org.lib3270j.graphics.GraphicsPlane? = null,
|
graphicsPlane: haus.nightmare.lib3270j.graphics.GraphicsPlane? = null,
|
||||||
gocaDecoder: org.lib3270j.graphics.GocaDecoder? = null,
|
gocaDecoder: haus.nightmare.lib3270j.graphics.GocaDecoder? = null,
|
||||||
isLightPenMode: Boolean = false,
|
isLightPenMode: Boolean = false,
|
||||||
maskHiddenFields: Boolean = true,
|
maskHiddenFields: Boolean = true,
|
||||||
blinkCursor: Boolean = true,
|
blinkCursor: Boolean = true,
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package org.pubvm.a3270.ui
|
package haus.nightmare.a3270.ui
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
+7
-7
@@ -1,13 +1,13 @@
|
|||||||
package org.pubvm.a3270
|
package haus.nightmare.a3270
|
||||||
|
|
||||||
import org.junit.Assert.*
|
import org.junit.Assert.*
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.lib3270j.TerminalModel
|
import haus.nightmare.lib3270j.TerminalModel
|
||||||
import org.lib3270j.charset.EbcdicTranslator
|
import haus.nightmare.lib3270j.charset.EbcdicTranslator
|
||||||
import org.lib3270j.input.InputProcessor
|
import haus.nightmare.lib3270j.input.InputProcessor
|
||||||
import org.lib3270j.protocol.DS3270Constants.*
|
import haus.nightmare.lib3270j.protocol.DS3270Constants.*
|
||||||
import org.lib3270j.screen.ScreenBuffer
|
import haus.nightmare.lib3270j.screen.ScreenBuffer
|
||||||
|
|
||||||
class HardwareKeyboardInputTest {
|
class HardwareKeyboardInputTest {
|
||||||
|
|
||||||
@@ -171,7 +171,7 @@ class HardwareKeyboardInputTest {
|
|||||||
// Field 1 at pos 0: Selectable Unprotected (FA_INT_HIGH)
|
// Field 1 at pos 0: Selectable Unprotected (FA_INT_HIGH)
|
||||||
// Designator at pos 1: '?' (EBCDIC 0x6F)
|
// Designator at pos 1: '?' (EBCDIC 0x6F)
|
||||||
val fa = (FA_PRINTABLE or FA_INT_HIGH_SEL).toByte()
|
val fa = (FA_PRINTABLE or FA_INT_HIGH_SEL).toByte()
|
||||||
assertTrue(org.lib3270j.protocol.DS3270Constants.faIsSelectable(fa.toInt() and 0xFF))
|
assertTrue(haus.nightmare.lib3270j.protocol.DS3270Constants.faIsSelectable(fa.toInt() and 0xFF))
|
||||||
|
|
||||||
screenBuffer.setCellFA(0, fa)
|
screenBuffer.setCellFA(0, fa)
|
||||||
screenBuffer.getCell(1).ucs4 = '?'
|
screenBuffer.getCell(1).ucs4 = '?'
|
||||||
Reference in New Issue
Block a user