Hi guys, anyone know why my this function is not d...
# compose
k
Hi guys, anyone know why my this function is not doing recomposition after button click.
Copy code
package com.vivek.permission

import android.Manifest
import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.rememberMultiplePermissionsState
import com.vivek.permission.ui.theme.PermissionTheme

class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            PermissionTheme {
                // A surface container using the 'background' color from the theme
                Column(
                    modifier = Modifier
                        .fillMaxSize()
                        .background(MaterialTheme.colorScheme.background)
                ) {
                    ExampleScreenWithAccompanist()
                }
            }
        }
    }
}

val permissionsList = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    listOf(
        Manifest.permission.BLUETOOTH,
        Manifest.permission.BLUETOOTH_ADMIN,
        Manifest.permission.BLUETOOTH_SCAN,
        Manifest.permission.BLUETOOTH_CONNECT,
        Manifest.permission.ACCESS_COARSE_LOCATION,
        Manifest.permission.ACCESS_FINE_LOCATION
    )
} else {
    listOf(
        Manifest.permission.BLUETOOTH,
        Manifest.permission.BLUETOOTH_ADMIN,
        Manifest.permission.ACCESS_COARSE_LOCATION,
    )
}

@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun ExampleScreenWithAccompanist() {
    val multiplePermissionsState = rememberMultiplePermissionsState(permissions = permissionsList)
    Text(text = "we need your permission", color = Color.White)
    when {
        multiplePermissionsState.allPermissionsGranted -> {
            Text(text = " Permission Granted", color = Color.White)
        }
        multiplePermissionsState.shouldShowRationale -> {
            Text(text = " Permission ShouldShowRationale", color = Color.White)
        }
    }
    Button(onClick = {
        multiplePermissionsState.launchMultiplePermissionRequest()
    }) {
        Text(text = "Give permission", color = Color.White)
    }
}
z
Your click handler calls
multiplePermissionsState.launchMultiplePermissionRequest
- what does that method do? It’s not obvious from this code snippet that it should trigger recomposition.
k
when button click I want to check the state of
multiplePermissionsState
a
Compose and Accompanist can’t do anything special with regards to permissions, so the overall Android permission behavior applies: https://developer.android.com/guide/topics/permissions/overview In particular, there are cases where there is no state update depending on the user’s response to a permission request, so no state update (and therefore no recomposition) is expected. If you want to do something (like show a snackbar) when the user responds (either positively or negatively), there is a
onPermissionsResult
lambda that you can pass to
rememberMultiplePermissionsState
k
Is there any example of onPermissionResult should I get ?