QR code Full Screen added
This commit is contained in:
8
.idea/deploymentTargetSelector.xml
generated
8
.idea/deploymentTargetSelector.xml
generated
@@ -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
11
.idea/other.xml
generated
@@ -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" />
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
Reference in New Issue
Block a user