Register ttyd service dynamically
Bug: 376793781
Test: run the terminal
Change-Id: I82992337c3fb056dfec97d076373b4102c813a38
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
index 5e039d9..8a3bdd7 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
@@ -233,7 +233,10 @@
view: WebView?,
request: WebResourceRequest?,
): Boolean {
- return false
+ val intent = Intent(Intent.ACTION_VIEW, request?.url)
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ startActivity(intent)
+ return true
}
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
@@ -318,6 +321,8 @@
info,
executorService,
object : NsdManager.ServiceInfoCallback {
+ var loaded: Boolean = false
+
override fun onServiceInfoCallbackRegistrationFailed(errorCode: Int) {}
override fun onServiceInfoCallbackUnregistered() {}
@@ -325,13 +330,15 @@
override fun onServiceLost() {}
override fun onServiceUpdated(info: NsdServiceInfo) {
- nsdManager.unregisterServiceInfoCallback(this)
-
Log.i(TAG, "Service found: $info")
val ipAddress = info.hostAddresses[0].hostAddress
val port = info.port
val url = getTerminalServiceUrl(ipAddress, port)
- runOnUiThread(Runnable { terminalView.loadUrl(url.toString()) })
+ if (!loaded) {
+ loaded = true
+ nsdManager.unregisterServiceInfoCallback(this)
+ runOnUiThread(Runnable { terminalView.loadUrl(url.toString()) })
+ }
}
},
)
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
index 8c0368d..ffb5d86 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
@@ -149,6 +149,8 @@
info,
executorService!!,
object : NsdManager.ServiceInfoCallback {
+ var started: Boolean = false
+
override fun onServiceInfoCallbackRegistrationFailed(errorCode: Int) {}
override fun onServiceInfoCallbackUnregistered() {}
@@ -156,9 +158,12 @@
override fun onServiceLost() {}
override fun onServiceUpdated(info: NsdServiceInfo) {
- nsdManager.unregisterServiceInfoCallback(this)
Log.i(TAG, "Service found: $info")
- startDebianServer(info.hostAddresses[0].hostAddress)
+ if (!started) {
+ started = true
+ nsdManager.unregisterServiceInfoCallback(this)
+ startDebianServer(info.hostAddresses[0].hostAddress)
+ }
}
},
)
diff --git a/build/debian/fai_config/files/etc/avahi/services/ttyd.service/AVF b/build/debian/fai_config/files/etc/avahi/services/ttyd.service/AVF
deleted file mode 100644
index 64f9d0a..0000000
--- a/build/debian/fai_config/files/etc/avahi/services/ttyd.service/AVF
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
-<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
-
-<service-group>
-
- <name>ttyd</name>
-
- <service protocol="ipv4">
- <type>_http._tcp</type>
- <port>7681</port>
- </service>
-
-</service-group>
diff --git a/build/debian/fai_config/files/etc/systemd/system/ttyd.service/AVF b/build/debian/fai_config/files/etc/systemd/system/ttyd.service/AVF
index 4a32f2b..d86bab0 100644
--- a/build/debian/fai_config/files/etc/systemd/system/ttyd.service/AVF
+++ b/build/debian/fai_config/files/etc/systemd/system/ttyd.service/AVF
@@ -3,11 +3,14 @@
After=syslog.target
After=network.target
After=virtiofs_internal.service
+
[Service]
ExecStart=/usr/local/bin/ttyd --ssl --ssl-cert /etc/ttyd/server.crt --ssl-key /etc/ttyd/server.key --ssl-ca /mnt/internal/ca.crt -t disableLeaveAlert=true -W login -f droid
+ExecStartPost=/usr/bin/avahi-publish-service ttyd _http._tcp 7681
Type=simple
Restart=always
User=root
Group=root
+
[Install]
WantedBy=multi-user.target