Kotlin
Installation
Add this dependency to your build.gradle.kts:
implementation("ai.latta.recorder")Quick start
-
Create new Latta object:
val latta = Latta("YOUR_API_KEY") -
Debug required permissions
latta.getRequiredPermissions() -
Make sure you permit all required permissions
-
If you use “OkHttpClient” append latta interceptor
val client = OkHttpClient.Builder().addInterceptor(latta.getInterceptor()).build() -
Start recording!
latta.checkForPermissions(/* ACTIVITY */ ) // Check for required permissions at runtimelatta.isRecording() // Check if latta already recordinglatta.startRecording(/* ACTIVITY */) // Start recordinglatta.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") } } }}