Skip to content

Kotlin

Installation

Add this dependency to your build.gradle.kts:

implementation("ai.latta.recorder")

Quick start

  1. Create new Latta object:

    val latta = Latta("YOUR_API_KEY")
  2. Debug required permissions

    latta.getRequiredPermissions()
  3. Make sure you permit all required permissions

  4. If you use “OkHttpClient” append latta interceptor

    val client = OkHttpClient.Builder().addInterceptor(latta.getInterceptor()).build()
  5. Start recording!

    latta.checkForPermissions(/* ACTIVITY */ ) // Check for required permissions at runtime
    latta.isRecording() // Check if latta already recording
    latta.startRecording(/* ACTIVITY */) // Start recording
    latta.stopRecording() // Stop recording

Example

There is working example of Android kotlin application:

class MainActivity : ComponentActivity() {
// Latta client
private lateinit var latta: Latta
// Recording state
private var recording by mutableStateOf(false)
// Latta permission launcher
private lateinit var permissionLauncher: ActivityResultLauncher<Array<String>>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
latta = Latta("YOUR_API_KEY")
// Initialize the permission launcher
permissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
val allGranted = permissions.entries.all { it.value }
if (!allGranted) {
// Handle the case when permissions are not granted
println("Some permissions were not granted")
}
}
setContent {
MainContent()
}
}
private fun toggleRecording() {
// Check if permissions are granted
if (!latta.checkForPermissions(this)) {
// Request permissions using the launcher
permissionLauncher.launch(latta.getRequiredPermissions())
} else {
// Start recording if not already
if (latta.isRecording())
latta.stopRecording()
else
latta.startRecording(this@MainActivity)
recording = latta.isRecording()
}
}
@Composable
fun MainContent() {
var t by remember { mutableIntStateOf(0) }
// Update value each second to demonstrate recording (video)
LaunchedEffect(Unit) {
while (true) {
delay(1.seconds)
t++
}
}
Surface(modifier = Modifier.fillMaxSize()) {
Column(modifier = Modifier.padding(10.dp)) {
RecordingControls()
Spacer(modifier = Modifier.height(100.dp))
Text(text = "Ticks: $t")
}
}
}
@Composable
fun RecordingControls() {
Row {
Text(
"Recording:",
modifier = Modifier
.padding(end = 10.dp)
.align(Alignment.CenterVertically)
)
Button(onClick = { toggleRecording() }) {
Text(text = if (recording) "Stop recording" else "Start recording")
}
}
}
}