feat: Samsung lock screen face widget, voice assistant services, PiP mode and gitignore installers

Add Samsung proprietary Face Widget (lock screen/AOD) with terminal status display.
Add voice interaction services (AgentVoiceInteractionService, RecognitionService) for
digital assistant registration. Add PiP mode with voice/expand actions. Add session-state
proxy, voice transcript routes, window controls component. Ignore installers/ directory.
This commit is contained in:
2026-02-23 20:52:11 -06:00
parent e1aa8b1bdb
commit 65303df96a
35 changed files with 2640 additions and 484 deletions

View File

@@ -45,8 +45,9 @@ android {
}
}
getByName("release") {
manifestPlaceholders["usesCleartextTraffic"] = "true"
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
isMinifyEnabled = false
proguardFiles(
*fileTree(".") { include("**/*.pro") }
.plus(getDefaultProguardFile("proguard-android-optimize.txt"))
@@ -80,7 +81,8 @@ dependencies {
apply(from = "tauri.build.gradle.kts")
// Copy APK to src-tauri/installers after build
// Copy APK after build: local installers/ + network backup
// Only the universal signed variant gets copied as agent-ui.apk
android.applicationVariants.all {
val variant = this
variant.outputs.all {
@@ -88,9 +90,36 @@ android.applicationVariants.all {
variant.assembleProvider.get().doLast {
val src = output.outputFile
if (src.exists()) {
val dest = file("../../../../installers/AgentUI-${variant.versionName}-${variant.name}.apk")
src.copyTo(dest, overwrite = true)
println(">> Copied APK to ${dest.absolutePath}")
val localDir = file("../../../../installers")
localDir.mkdirs()
// Always save versioned copy per variant
val localVersioned = File(localDir, "AgentUI-${variant.versionName}-${variant.name}.apk")
src.copyTo(localVersioned, overwrite = true)
println(">> Copied APK to ${localVersioned.absolutePath}")
// agent-ui.apk = only the universal signed build
val isUniversal = variant.name.contains("universal", ignoreCase = true)
val isSigned = variant.signingConfig != null
if (isUniversal && isSigned) {
val localFixed = File(localDir, "agent-ui.apk")
src.copyTo(localFixed, overwrite = true)
println(">> Copied universal signed APK to ${localFixed.absolutePath}")
// Network backup
val networkDir = File("\\\\Memoria-1\\ActiveBackupforBusiness\\Nucleo v3\\agent-ui-apk")
try {
if (networkDir.exists() || networkDir.mkdirs()) {
val networkFile = File(networkDir, "agent-ui.apk")
src.copyTo(networkFile, overwrite = true)
println(">> Copied APK to network: ${networkFile.absolutePath}")
} else {
println(">> WARNING: Network path not available: $networkDir")
}
} catch (e: Exception) {
println(">> WARNING: Failed to copy to network: ${e.message}")
}
}
}
}
}