11package br.com.sec4you.authfy.app
22
3+ import android.Manifest
4+ import android.content.pm.PackageManager
35import android.app.Activity
46import android.content.Context
57import android.net.Uri
68import android.util.Base64
79import android.util.Log
10+ import android.widget.Toast
811import androidx.activity.compose.rememberLauncherForActivityResult
912import androidx.activity.result.ActivityResult
1013import androidx.activity.result.contract.ActivityResultContracts
@@ -37,6 +40,7 @@ import androidx.compose.material3.Scaffold
3740import androidx.compose.material3.Surface
3841import androidx.compose.material3.Text
3942import androidx.compose.runtime.Composable
43+ import androidx.compose.runtime.LaunchedEffect
4044import androidx.compose.runtime.getValue
4145import androidx.compose.runtime.mutableStateOf
4246import androidx.compose.runtime.remember
@@ -50,6 +54,7 @@ import androidx.compose.ui.text.font.FontWeight
5054import androidx.compose.ui.tooling.preview.Preview
5155import androidx.compose.ui.unit.dp
5256import androidx.compose.ui.unit.sp
57+ import androidx.core.content.ContextCompat
5358import androidx.navigation.NavController
5459import androidx.navigation.compose.rememberNavController
5560import br.com.sec4you.authfy.app.ui.theme.AuthfySampleTheme
@@ -84,6 +89,71 @@ fun AuthScreen(
8489 val authService = remember { AuthorizationService (context) }
8590 var errorMessage by remember { mutableStateOf<String ?>(null ) }
8691
92+
93+ /* LOCATION */
94+
95+ // State to track if location permission is granted
96+ val isLocationPermissionGranted = remember { mutableStateOf(false ) }
97+
98+ // Function to get location (you'll implement this - same as in Activity example)
99+ fun getLocation (context : android.content.Context ) {
100+ // Implement your location retrieval logic here using FusedLocationProviderClient etc.
101+ // Make sure to use the 'context' passed to this function
102+ Toast .makeText(context, " Getting Location... (AuthScreen)" , Toast .LENGTH_SHORT ).show()
103+ // ... Location retrieval code (FusedLocationProviderClient) ...
104+ // ... Remember to handle permission check *again* within getLocation() if necessary in more complex scenarios
105+ }
106+
107+ // Launcher for requesting location permission
108+ val locationPermissionLauncher = rememberLauncherForActivityResult(
109+ ActivityResultContracts .RequestPermission ()
110+ ) { isGranted: Boolean ->
111+ if (isGranted) {
112+ isLocationPermissionGranted.value = true
113+ Toast .makeText(context, " Location permission granted in AuthScreen" , Toast .LENGTH_SHORT ).show()
114+ getLocation(context) // Call function to get location after permission is granted
115+ } else {
116+ isLocationPermissionGranted.value = false
117+ Toast .makeText(context, " Location permission denied in AuthScreen" , Toast .LENGTH_SHORT ).show()
118+ // Handle permission denial scenario - maybe explain why location is needed for some features
119+ }
120+ }
121+
122+ // Function to check location permission
123+ fun checkLocationPermission () {
124+ if (ContextCompat .checkSelfPermission(
125+ context,
126+ Manifest .permission.ACCESS_FINE_LOCATION
127+ ) == PackageManager .PERMISSION_GRANTED
128+ ) {
129+ isLocationPermissionGranted.value = true
130+ Toast .makeText(context, " Location permission already granted in AuthScreen" , Toast .LENGTH_SHORT ).show()
131+ getLocation(context) // Permission already granted, get location directly
132+ } else {
133+ isLocationPermissionGranted.value = false // Not strictly needed, but for clarity
134+ }
135+ }
136+
137+ // Function to request location permission
138+ fun requestLocationPermission () {
139+ locationPermissionLauncher.launch(Manifest .permission.ACCESS_FINE_LOCATION )
140+ }
141+
142+ // LaunchedEffect to run code when the Composable is launched (similar to onCreate in Activity)
143+ LaunchedEffect (Unit ) { // Unit means it runs only once on initial composition
144+ checkLocationPermission() // Check permission when AuthScreen is displayed
145+ if (! isLocationPermissionGranted.value) {
146+ requestLocationPermission() // Request permission if not already granted
147+ }
148+ // ... other initialization logic for AuthScreen if needed ...
149+ }
150+
151+
152+ /* LOCATION */
153+
154+
155+
156+
87157 if (authenticated) {
88158 navController.navigate(Screen .StartScreen .route)
89159 return
0 commit comments