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>
<SelectionState runConfigName="app">
<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>
</selectionStates>
</component>

11
.idea/other.xml generated
View File

@@ -256,6 +256,17 @@
<option name="screenX" value="1812" />
<option name="screenY" value="2176" />
</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>
<option name="api" value="30" />
<option name="brand" value="google" />

View File

@@ -5,13 +5,6 @@ import android.view.WindowManager
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
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 `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.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import `in`.sminnovations.smi_attendance_admin.navigation.BottomNavigationBar
import `in`.sminnovations.smi_attendance_admin.navigation.Navigation
@@ -20,13 +22,18 @@ fun MainScreen(
Scaffold(
bottomBar = {
BottomNavigationBar(navController, navItems)
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = navBackStackEntry?.destination?.route
// Show BottomNavigationBar only on certain screens
if (currentRoute != "FullScreenQRCode") {
BottomNavigationBar(navController, navItems)
}
},
content = { padding ->
Box(modifier = Modifier.padding(padding)) {
Navigation(navController = navController, navItems,mainNavHostController =mainNavHostController)
Navigation(navController = navController, navItems, mainNavHostController = mainNavHostController)
}
},
)
}

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.settings.SettingsScreen
import `in`.sminnovations.smi_attendance_admin.navigation.data.BottomNavItem
import `in`.sminnovations.smi_attendance_admin.screens.home.ui.FullScreenQRCodeScreen
@Composable
@@ -18,11 +19,14 @@ fun Navigation(
) {
NavHost(navController, startDestination = items[0].route) {
composable(items[0].route) {
HomeScreen()
HomeScreen(navController)
}
composable(items[1].route) {
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.Paint
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
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.size
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@@ -26,24 +23,19 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavController
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState
import com.google.zxing.BarcodeFormat
import com.journeyapps.barcodescanner.BarcodeEncoder
import `in`.sminnovations.smi_attendance_admin.screens.home.viewModel.HomeViewModel
@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
val isScanning by viewModel.isScanning.collectAsState()
val qrCodeValue by viewModel.qrCodeValue.collectAsState()
fun HomeScreen(navController: NavController) {
val cameraPermissionState = rememberPermissionState(Manifest.permission.CAMERA)
val locationPermissionState = rememberPermissionState(Manifest.permission.ACCESS_FINE_LOCATION)
@@ -56,14 +48,13 @@ fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
Box(modifier = Modifier.fillMaxSize()) {
QRCodeGeneratorScreen()
QRCodeGeneratorScreen(navController = navController)
}
}
@Composable
fun QRCodeGeneratorScreen() {
fun QRCodeGeneratorScreen(navController: NavController) {
var qrCodeBitmap by remember { mutableStateOf<Bitmap?>(null) }
var isButtonVisible by remember { mutableStateOf(true) }
var isFullScreen by remember { mutableStateOf(false) }
Column(
modifier = Modifier
@@ -76,7 +67,7 @@ fun QRCodeGeneratorScreen() {
if (isButtonVisible) {
Button(
onClick = {
val qrData = ""
val qrData = "SMI"
qrCodeBitmap = generateQRCode(qrData)
isButtonVisible = false // Hide the button once QR is generated
},
@@ -95,35 +86,11 @@ fun QRCodeGeneratorScreen() {
.size(250.dp)
.padding(16.dp)
.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

View File

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

View File

@@ -5,7 +5,6 @@ import android.content.Context
import android.widget.Toast
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedCard
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.components.settingsComponents.ClickableCard
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
@@ -56,9 +54,10 @@ fun AboutSettings(context: Context,)
OutlinedCard{
ClickableCard(
title = "Version",
subtitle = "1.0.04",
subtitle = context.packageManager
.getPackageInfo(context.packageName, 0).versionName,
onClick = {
clickCount++
// clickCount++
},
icon = ImageVector.vectorResource(id = R.drawable.round_info_24)