m530-command-android/apply_front_preview_v2.ps1

157 lines
No EOL
6.2 KiB
PowerShell

$cameraPath = 'app\src\main\kotlin\com\bodycamera\twentyfoulabs\camera\M530CameraActivity.kt'
$mainPath = 'app\src\main\kotlin\com\bodycamera\twentyfoulabs\MainActivity.kt'
$camera = Get-Content $cameraPath -Raw
$main = Get-Content $mainPath -Raw
# ============================================================
# M530CameraActivity.kt
# ============================================================
# 1. Agregar modo FRONT_PREVIEW
$camera = [regex]::Replace(
$camera,
'const val MODE_VIDEO = "video"',
'const val MODE_VIDEO = "video"' + [Environment]::NewLine +
' const val MODE_FRONT_PREVIEW = "front_preview"',
1
)
# 2. Texto superior
$camera = $camera.Replace(
'text = if (mode == MODE_VIDEO) "VIDEO" else "FOTO"',
'text = when (mode) {' + [Environment]::NewLine +
' MODE_VIDEO -> "VIDEO"' + [Environment]::NewLine +
' MODE_FRONT_PREVIEW -> "CAMARA FRONTAL"' + [Environment]::NewLine +
' else -> "FOTO"' + [Environment]::NewLine +
' }'
)
# 3. Ocultar botón de captura cuando sea preview frontal
$camera = $camera.Replace(
'text = if (mode == MODE_VIDEO) "REC" else "FOTO"',
'text = if (mode == MODE_VIDEO) "REC" else "FOTO"' + [Environment]::NewLine +
' visibility = if (mode == MODE_FRONT_PREVIEW) View.GONE else View.VISIBLE'
)
# 4. Texto inferior
$camera = $camera.Replace(
'text = if (mode == MODE_VIDEO) "F5 VIDEO" else "F2 FOTO"',
'text = when (mode) {' + [Environment]::NewLine +
' MODE_VIDEO -> "F5 VIDEO"' + [Environment]::NewLine +
' MODE_FRONT_PREVIEW -> "VISTA EN VIVO"' + [Environment]::NewLine +
' else -> "F2 FOTO"' + [Environment]::NewLine +
' }'
)
# 5. Estado inicial
$camera = [regex]::Replace(
$camera,
'text = if \(mode == MODE_VIDEO\) "Preparando video\.\.\." else ".*?"',
'text = when (mode) {' + [Environment]::NewLine +
' MODE_VIDEO -> "Preparando video..."' + [Environment]::NewLine +
' MODE_FRONT_PREVIEW -> "Preparando camara frontal..."' + [Environment]::NewLine +
' else -> "Preparando camara..."' + [Environment]::NewLine +
' }',
1
)
# 6. Evitar acciones de foto/video en preview frontal
$camera = [regex]::Replace(
$camera,
'if \(mode == MODE_VIDEO\) \{\s*toggleVideoRecording\(\)\s*\} else \{\s*takePhoto\(\)\s*\}',
'when (mode) {' + [Environment]::NewLine +
' MODE_VIDEO -> toggleVideoRecording()' + [Environment]::NewLine +
' MODE_FRONT_PREVIEW -> Unit' + [Environment]::NewLine +
' else -> takePhoto()' + [Environment]::NewLine +
' }',
1
)
# 7. Usar cámara frontal solo en FRONT_PREVIEW
$camera = [regex]::Replace(
$camera,
'(\s*provider\.unbindAll\(\)\s*)if \(mode == MODE_VIDEO\) \{',
'$1if (mode == MODE_FRONT_PREVIEW) {' + [Environment]::NewLine +
' imageCapture = null' + [Environment]::NewLine +
' videoCapture = null' + [Environment]::NewLine +
'' + [Environment]::NewLine +
' provider.bindToLifecycle(' + [Environment]::NewLine +
' this,' + [Environment]::NewLine +
' CameraSelector.DEFAULT_FRONT_CAMERA,' + [Environment]::NewLine +
' preview' + [Environment]::NewLine +
' )' + [Environment]::NewLine +
'' + [Environment]::NewLine +
' stateText.text = "Camara frontal lista"' + [Environment]::NewLine +
' captureButton.isEnabled = false' + [Environment]::NewLine +
' } else if (mode == MODE_VIDEO) {',
1
)
# ============================================================
# MainActivity.kt
# ============================================================
# 8. Variable para abrir la cámara frontal una sola vez por inicio
$main = $main.Replace(
'@Volatile private var isAuthenticated = false',
'@Volatile private var isAuthenticated = false' + [Environment]::NewLine +
' private var frontPreviewOpened = false'
)
# 9. Al detectar sesión válida, abrir preview frontal
$main = [regex]::Replace(
$main,
'authSessionStore\.token\.collect \{ token -> isAuthenticated = !token\.isNullOrBlank\(\) \}',
'authSessionStore.token.collect { token ->' + [Environment]::NewLine +
' isAuthenticated = !token.isNullOrBlank()' + [Environment]::NewLine +
'' + [Environment]::NewLine +
' if (isAuthenticated && !frontPreviewOpened) {' + [Environment]::NewLine +
' frontPreviewOpened = true' + [Environment]::NewLine +
' runOnUiThread {' + [Environment]::NewLine +
' openFrontPreview()' + [Environment]::NewLine +
' }' + [Environment]::NewLine +
' }' + [Environment]::NewLine +
' }',
1
)
# 10. Función para abrir la cámara frontal
$frontFunction = @'
private fun openFrontPreview() {
if (!isAuthenticated) return
startActivity(
android.content.Intent(
this,
com.bodycamera.twentyfoulabs.camera.M530CameraActivity::class.java
).putExtra(
com.bodycamera.twentyfoulabs.camera.M530CameraActivity.EXTRA_MODE,
com.bodycamera.twentyfoulabs.camera.M530CameraActivity.MODE_FRONT_PREVIEW
).addFlags(android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP)
)
}
'@
$main = $main.Replace(
' private fun handlePhotoButton() {',
$frontFunction + ' private fun handlePhotoButton() {'
)
# ============================================================
# Guardar cambios
# ============================================================
Set-Content -Path $cameraPath -Value $camera -Encoding UTF8
Set-Content -Path $mainPath -Value $main -Encoding UTF8
Write-Host ''
Write-Host '=========================================='
Write-Host 'FRONT PREVIEW V2 APLICADO'
Write-Host '=========================================='
Write-Host 'MODE_FRONT_PREVIEW agregado'
Write-Host 'Camara frontal configurada'
Write-Host 'F2 y F5 mantienen camara trasera'
Write-Host ''