QR code Full Screen added

This commit is contained in:
chandrashekhar reddy
2024-10-18 14:54:04 +05:30
parent 39c6124165
commit 86447958ad
9 changed files with 93 additions and 56 deletions

View File

@@ -4,6 +4,14 @@
<selectionStates> <selectionStates>
<SelectionState runConfigName="app"> <SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" /> <option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2024-10-18T08:33:17.054668Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="LocalEmulator" identifier="path=/Users/chandrashekharreddy/.android/avd/Pixel_5_API_33.avd" />
</handle>
</Target>
</DropdownSelection>
<DialogSelection />
</SelectionState> </SelectionState>
</selectionStates> </selectionStates>
</component> </component>

11
.idea/other.xml generated
View File

@@ -256,6 +256,17 @@
<option name="screenX" value="1812" /> <option name="screenX" value="1812" />
<option name="screenY" value="2176" /> <option name="screenY" value="2176" />
</PersistentDeviceSelectionData> </PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="q6q" />
<option name="id" value="q6q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-F956B" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1856" />
<option name="screenY" value="2160" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData> <PersistentDeviceSelectionData>
<option name="api" value="30" /> <option name="api" value="30" />
<option name="brand" value="google" /> <option name="brand" value="google" />

View File

@@ -5,13 +5,6 @@ import android.view.WindowManager
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.smi_attendance_admin.ui.theme.SMIAdminAttendanceTheme import `in`.sminnovations.smi_attendance_admin.ui.theme.SMIAdminAttendanceTheme

View File

@@ -4,8 +4,10 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import `in`.sminnovations.smi_attendance_admin.navigation.BottomNavigationBar import `in`.sminnovations.smi_attendance_admin.navigation.BottomNavigationBar
import `in`.sminnovations.smi_attendance_admin.navigation.Navigation import `in`.sminnovations.smi_attendance_admin.navigation.Navigation
@@ -20,7 +22,13 @@ fun MainScreen(
Scaffold( Scaffold(
bottomBar = { bottomBar = {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = navBackStackEntry?.destination?.route
// Show BottomNavigationBar only on certain screens
if (currentRoute != "FullScreenQRCode") {
BottomNavigationBar(navController, navItems) BottomNavigationBar(navController, navItems)
}
}, },
content = { padding -> content = { padding ->
Box(modifier = Modifier.padding(padding)) { Box(modifier = Modifier.padding(padding)) {
@@ -29,4 +37,3 @@ fun MainScreen(
}, },
) )
} }

View File

@@ -7,6 +7,7 @@ import androidx.navigation.compose.composable
import `in`.sminnovations.smi_attendance_admin.screens.home.ui.HomeScreen import `in`.sminnovations.smi_attendance_admin.screens.home.ui.HomeScreen
import `in`.sminnovations.smi_attendance_admin.screens.settings.SettingsScreen import `in`.sminnovations.smi_attendance_admin.screens.settings.SettingsScreen
import `in`.sminnovations.smi_attendance_admin.navigation.data.BottomNavItem import `in`.sminnovations.smi_attendance_admin.navigation.data.BottomNavItem
import `in`.sminnovations.smi_attendance_admin.screens.home.ui.FullScreenQRCodeScreen
@Composable @Composable
@@ -18,11 +19,14 @@ fun Navigation(
) { ) {
NavHost(navController, startDestination = items[0].route) { NavHost(navController, startDestination = items[0].route) {
composable(items[0].route) { composable(items[0].route) {
HomeScreen() HomeScreen(navController)
} }
composable(items[1].route) { composable(items[1].route) {
SettingsScreen(mainNavHostController = mainNavHostController) SettingsScreen(mainNavHostController = mainNavHostController)
} }
composable("FullScreenQRCode") {
FullScreenQRCodeScreen(navController)
}
} }
} }

View File

@@ -0,0 +1,48 @@
package `in`.sminnovations.smi_attendance_admin.screens.home.ui
import android.graphics.Bitmap
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.asImageBitmap
import androidx.navigation.NavController
@Composable
fun FullScreenQRCodeScreen(navController: NavController) {
var qrCodeBitmap by remember { mutableStateOf<Bitmap?>(null) }
// Simulate QR code being passed or generated here
qrCodeBitmap = generateQRCode("SMI")
Box(
modifier = Modifier
.fillMaxSize()
.background(color = MaterialTheme.colorScheme.onBackground)
.clickable {
// Navigate back when clicked
//navController.popBackStack()
}
) {
qrCodeBitmap?.let { bitmap ->
Image(
bitmap = bitmap.asImageBitmap(),
contentDescription = "Full Screen QR Code",
modifier = Modifier
.fillMaxSize()
.clickable {
// Navigate back when clicked
//navController.popBackStack()
}
)
}
}
}

View File

@@ -6,7 +6,6 @@ import android.graphics.Canvas
import android.graphics.Color import android.graphics.Color
import android.graphics.Paint import android.graphics.Paint
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@@ -15,10 +14,8 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@@ -26,24 +23,19 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog import androidx.navigation.NavController
import androidx.lifecycle.viewmodel.compose.viewModel
import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.rememberPermissionState
import com.google.zxing.BarcodeFormat import com.google.zxing.BarcodeFormat
import com.journeyapps.barcodescanner.BarcodeEncoder import com.journeyapps.barcodescanner.BarcodeEncoder
import `in`.sminnovations.smi_attendance_admin.screens.home.viewModel.HomeViewModel
@OptIn(ExperimentalPermissionsApi::class) @OptIn(ExperimentalPermissionsApi::class)
@Composable @Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) { fun HomeScreen(navController: NavController) {
val isScanning by viewModel.isScanning.collectAsState()
val qrCodeValue by viewModel.qrCodeValue.collectAsState()
val cameraPermissionState = rememberPermissionState(Manifest.permission.CAMERA) val cameraPermissionState = rememberPermissionState(Manifest.permission.CAMERA)
val locationPermissionState = rememberPermissionState(Manifest.permission.ACCESS_FINE_LOCATION) val locationPermissionState = rememberPermissionState(Manifest.permission.ACCESS_FINE_LOCATION)
@@ -56,14 +48,13 @@ fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
Box(modifier = Modifier.fillMaxSize()) { Box(modifier = Modifier.fillMaxSize()) {
QRCodeGeneratorScreen() QRCodeGeneratorScreen(navController = navController)
} }
} }
@Composable @Composable
fun QRCodeGeneratorScreen() { fun QRCodeGeneratorScreen(navController: NavController) {
var qrCodeBitmap by remember { mutableStateOf<Bitmap?>(null) } var qrCodeBitmap by remember { mutableStateOf<Bitmap?>(null) }
var isButtonVisible by remember { mutableStateOf(true) } var isButtonVisible by remember { mutableStateOf(true) }
var isFullScreen by remember { mutableStateOf(false) }
Column( Column(
modifier = Modifier modifier = Modifier
@@ -76,7 +67,7 @@ fun QRCodeGeneratorScreen() {
if (isButtonVisible) { if (isButtonVisible) {
Button( Button(
onClick = { onClick = {
val qrData = "" val qrData = "SMI"
qrCodeBitmap = generateQRCode(qrData) qrCodeBitmap = generateQRCode(qrData)
isButtonVisible = false // Hide the button once QR is generated isButtonVisible = false // Hide the button once QR is generated
}, },
@@ -95,35 +86,11 @@ fun QRCodeGeneratorScreen() {
.size(250.dp) .size(250.dp)
.padding(16.dp) .padding(16.dp)
.clickable { .clickable {
isFullScreen = true // Open full-screen mode on click navController.navigate("FullScreenQRCode")
} }
) )
} }
} }
// Full-Screen Dialog for QR Code
if (isFullScreen) {
Dialog(onDismissRequest = { isFullScreen = false }) {
Box(
modifier = Modifier
.background(color = MaterialTheme.colorScheme.onBackground, shape = RectangleShape)
.fillMaxSize()
.clickable { isFullScreen = false } // Close full screen when clicked
) {
qrCodeBitmap?.let { bitmap ->
Image(
bitmap = bitmap.asImageBitmap(),
contentDescription = "Full Screen QR Code",
modifier = Modifier
.fillMaxSize() // Make the image fill the entire screen
.clickable {
isFullScreen = false // Close full-screen mode on click
}
)
}
}
}
}
} }
// Function to generate QR Code bitmap with black background and white QR code // Function to generate QR Code bitmap with black background and white QR code

View File

@@ -51,7 +51,7 @@ fun TopComponents(
Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp))
Text( Text(
text = "Sathwik C S", text = "Account Name",
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
fontWeight = FontWeight.Bold, fontWeight = FontWeight.Bold,
fontSize = 20.sp, fontSize = 20.sp,
@@ -70,7 +70,7 @@ fun TopComponents(
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text( Text(
text = "Android Developer", text = "Designation",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.primary, color = MaterialTheme.colorScheme.primary,
fontSize = 16.sp fontSize = 16.sp

View File

@@ -5,7 +5,6 @@ import android.content.Context
import android.widget.Toast import android.widget.Toast
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedCard import androidx.compose.material3.OutlinedCard
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -25,7 +24,6 @@ import `in`.sminnovations.smi_attendance_admin.R
import `in`.sminnovations.smi_attendance_admin.screens.settings.data.SettingsData import `in`.sminnovations.smi_attendance_admin.screens.settings.data.SettingsData
import `in`.sminnovations.smi_attendance_admin.screens.settings.components.settingsComponents.ClickableCard import `in`.sminnovations.smi_attendance_admin.screens.settings.components.settingsComponents.ClickableCard
import `in`.sminnovations.smi_attendance_admin.screens.settings.components.settingsComponents.CombinedClickableCard import `in`.sminnovations.smi_attendance_admin.screens.settings.components.settingsComponents.CombinedClickableCard
import `in`.sminnovations.smi_attendance_admin.screens.settings.viewModel.SettingsViewModel
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -56,9 +54,10 @@ fun AboutSettings(context: Context,)
OutlinedCard{ OutlinedCard{
ClickableCard( ClickableCard(
title = "Version", title = "Version",
subtitle = "1.0.04", subtitle = context.packageManager
.getPackageInfo(context.packageName, 0).versionName,
onClick = { onClick = {
clickCount++ // clickCount++
}, },
icon = ImageVector.vectorResource(id = R.drawable.round_info_24) icon = ImageVector.vectorResource(id = R.drawable.round_info_24)