From 3ab8e558fde8f0279e18e4690951f3bf7aace818 Mon Sep 17 00:00:00 2001 From: Tamim Hossain <132823494+CodeWithTamim@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:19:59 +0600 Subject: [PATCH] Migrate History Page To Compose --- app/build.gradle.kts | 17 +++ .../steelmind/compose/ui/component/AppBar.kt | 48 ++++++++ .../compose/ui/component/DeleteDialog.kt | 74 ++++++++++++ .../compose/ui/component/HistoryItem.kt | 83 ++++++++++++++ .../compose/ui/screen/AboutScreen.kt | 9 ++ .../compose/ui/screen/DebugLogsScreen.kt | 10 ++ .../compose/ui/screen/HistoryScreen.kt | 105 ++++++++++++++++++ .../steelmind/compose/ui/screen/MainScreen.kt | 9 ++ .../steelmind/compose/ui/theme/Color.kt | 11 ++ .../steelmind/compose/ui/theme/Theme.kt | 57 ++++++++++ .../steelmind/compose/ui/theme/Type.kt | 34 ++++++ .../steelmind/ui/HistoryActivity.kt | 12 ++ app/src/main/res/drawable/main.png | Bin 6434 -> 0 bytes app/src/main/res/layout/activity_about.xml | 1 - app/src/main/res/layout/activity_history.xml | 5 + app/src/main/res/layout/item_history.xml | 1 - build.gradle.kts | 1 + gradle/libs.versions.toml | 1 + 18 files changed, 476 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/nasahacker/steelmind/compose/ui/component/AppBar.kt create mode 100644 app/src/main/java/com/nasahacker/steelmind/compose/ui/component/DeleteDialog.kt create mode 100644 app/src/main/java/com/nasahacker/steelmind/compose/ui/component/HistoryItem.kt create mode 100644 app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/AboutScreen.kt create mode 100644 app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/DebugLogsScreen.kt create mode 100644 app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/HistoryScreen.kt create mode 100644 app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/MainScreen.kt create mode 100644 app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Color.kt create mode 100644 app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Theme.kt create mode 100644 app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Type.kt delete mode 100644 app/src/main/res/drawable/main.png diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ecf0039..aa31940 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -2,6 +2,7 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.about.libraries) + alias(libs.plugins.compose.compiler) } android { @@ -38,6 +39,10 @@ android { buildFeatures { viewBinding = true buildConfig = true + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = "1.3.2" } } @@ -64,4 +69,16 @@ dependencies { implementation(libs.aboutlibraries.core) implementation(libs.aboutlibraries) + val composeBom = platform("androidx.compose:compose-bom:2024.12.01") + implementation(composeBom) + androidTestImplementation(composeBom) + + implementation ("androidx.compose.runtime:runtime") + implementation ("androidx.compose.ui:ui") + implementation ("androidx.compose.foundation:foundation") + implementation ("androidx.compose.foundation:foundation-layout") + implementation ("androidx.compose.material3:material3") + implementation ("androidx.compose.runtime:runtime-livedata") + implementation ("androidx.compose.ui:ui-tooling") + } diff --git a/app/src/main/java/com/nasahacker/steelmind/compose/ui/component/AppBar.kt b/app/src/main/java/com/nasahacker/steelmind/compose/ui/component/AppBar.kt new file mode 100644 index 0000000..5f1b706 --- /dev/null +++ b/app/src/main/java/com/nasahacker/steelmind/compose/ui/component/AppBar.kt @@ -0,0 +1,48 @@ +package com.nasahacker.steelmind.compose.ui.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.filled.Delete +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun AppBar( + title: String, + onNavigationClick: () -> Unit, + actions: @Composable RowScope.() -> Unit = {} +) { + TopAppBar( + title = { Text(text = title, style = MaterialTheme.typography.titleLarge) }, + navigationIcon = { + IconButton(onClick = onNavigationClick) { + Icon( + imageVector = Icons.AutoMirrored.Filled.ArrowBack, + contentDescription = "Back" + ) + } + }, + actions = actions, + colors = TopAppBarDefaults.topAppBarColors() + ) +} + +@Preview(showBackground = true, showSystemUi = true) +@Composable +fun PreviewAppBar() { + AppBar( + title = "Sample App Bar", + onNavigationClick = {}, + actions = { + IconButton(onClick = {}) { + Icon( + imageVector = Icons.Filled.Delete, + contentDescription = "Action" + ) + } + } + ) +} diff --git a/app/src/main/java/com/nasahacker/steelmind/compose/ui/component/DeleteDialog.kt b/app/src/main/java/com/nasahacker/steelmind/compose/ui/component/DeleteDialog.kt new file mode 100644 index 0000000..dd90d17 --- /dev/null +++ b/app/src/main/java/com/nasahacker/steelmind/compose/ui/component/DeleteDialog.kt @@ -0,0 +1,74 @@ +package com.nasahacker.steelmind.compose.ui.component + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Delete +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +@Composable +fun DeleteDialog( + onDismissRequest: () -> Unit, + onConfirmation: () -> Unit, + dialogTitle: String, + dialogText: String, + icon: ImageVector, +) { + AlertDialog( + icon = { + Icon(icon, contentDescription = null) + }, + title = { + Text(text = dialogTitle) + }, + text = { + Text( + text = dialogText, + textAlign = TextAlign.Center, + modifier = Modifier.fillMaxWidth() + ) + }, + onDismissRequest = { + onDismissRequest() + }, + confirmButton = { + TextButton( + onClick = { + onConfirmation() + } + ) { + Text("Confirm") + } + }, + dismissButton = { + TextButton( + onClick = { + onDismissRequest() + } + ) { + Text("Dismiss") + } + } + ) +} + +@Preview(showBackground = true, showSystemUi = true) +@Composable +fun PreviewDeleteDialog(modifier: Modifier = Modifier) { + DeleteDialog( + onDismissRequest = {}, + onConfirmation = { }, + dialogTitle = "Delete All?", + dialogText = "This action will delete all the history data, confirm to go ahead.", + icon = Icons.Filled.Delete + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/nasahacker/steelmind/compose/ui/component/HistoryItem.kt b/app/src/main/java/com/nasahacker/steelmind/compose/ui/component/HistoryItem.kt new file mode 100644 index 0000000..e0ab52a --- /dev/null +++ b/app/src/main/java/com/nasahacker/steelmind/compose/ui/component/HistoryItem.kt @@ -0,0 +1,83 @@ +package com.nasahacker.steelmind.compose.ui.component + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background +import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.layout.* +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun HistoryItem( + action: String, + remarks: String = "No Remarks", + time: String, + onClick: () -> Unit, + onLongPress: () -> Unit, +) { + Column( + modifier = Modifier + .fillMaxWidth() + .background(MaterialTheme.colorScheme.surfaceVariant) + .padding(4.dp) + .combinedClickable( + onClick = { onClick() }, + onLongClick = { onLongPress() } + ), + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + Text( + text = action, + style = MaterialTheme.typography.titleMedium.copy( + color = MaterialTheme.colorScheme.primary, + fontWeight = FontWeight.Bold + ), + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + Text( + text = remarks, + style = MaterialTheme.typography.bodyMedium.copy( + color = MaterialTheme.colorScheme.onSurfaceVariant + ), + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + Text( + text = time, + style = MaterialTheme.typography.bodySmall.copy( + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f) + ), + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + HorizontalDivider( + modifier = Modifier.padding(top = 8.dp), + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.12f), + thickness = 1.dp + ) + } + +} + +@Preview(showBackground = true, showSystemUi = true) +@Composable +fun PreviewHistoryItem() { + MaterialTheme { + HistoryItem( + action = "Started Workout", + remarks = "Completed first set of exercises", + time = "12/10/2025 10:00 PM", + onClick = {}, + onLongPress = {} + ) + } +} diff --git a/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/AboutScreen.kt b/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/AboutScreen.kt new file mode 100644 index 0000000..19dec3c --- /dev/null +++ b/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/AboutScreen.kt @@ -0,0 +1,9 @@ +package com.nasahacker.steelmind.compose.ui.screen + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +fun AboutScreen(modifier: Modifier = Modifier) { + +} \ No newline at end of file diff --git a/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/DebugLogsScreen.kt b/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/DebugLogsScreen.kt new file mode 100644 index 0000000..e07aa32 --- /dev/null +++ b/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/DebugLogsScreen.kt @@ -0,0 +1,10 @@ +package com.nasahacker.steelmind.compose.ui.screen + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + + +@Composable +fun DebugLogsScreen(modifier: Modifier = Modifier) { + +} \ No newline at end of file diff --git a/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/HistoryScreen.kt b/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/HistoryScreen.kt new file mode 100644 index 0000000..3e8f108 --- /dev/null +++ b/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/HistoryScreen.kt @@ -0,0 +1,105 @@ +package com.nasahacker.steelmind.compose.ui.screen + +import android.widget.Toast +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Delete +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.tooling.preview.Preview +import com.nasahacker.steelmind.compose.ui.component.AppBar +import com.nasahacker.steelmind.compose.ui.component.DeleteDialog +import com.nasahacker.steelmind.compose.ui.component.HistoryItem +import com.nasahacker.steelmind.dto.History +import com.nasahacker.steelmind.util.MmkvManager + +@Composable +fun HistoryScreen(onNavigationClick: () -> Unit) { + // States + var historyList by remember { mutableStateOf(MmkvManager.getHistory()) } + var isDeleteAllDialogVisible by remember { mutableStateOf(false) } + var isDeleteItemDialogVisible by remember { mutableStateOf(false) } + var selectedHistory: History? by remember { mutableStateOf(null) } + val context = LocalContext.current + + Column(modifier = Modifier.fillMaxSize()) { + // Top AppBar + AppBar( + title = "History", + onNavigationClick = onNavigationClick, + actions = { + IconButton(onClick = { isDeleteAllDialogVisible = true }) { + Icon( + imageVector = Icons.Outlined.Delete, + contentDescription = "Delete All History" + ) + } + } + ) + + // History List + LazyColumn { + items(historyList) { history -> + HistoryItem( + action = history.action, + remarks = history.remarks, + time = history.time, + onClick = { + // Handle click event if needed + }, + onLongPress = { + selectedHistory = history + isDeleteItemDialogVisible = true + } + ) + } + } + + // Delete All Dialog + if (isDeleteAllDialogVisible) { + DeleteDialog( + onDismissRequest = { isDeleteAllDialogVisible = false }, + onConfirmation = { + MmkvManager.clearAllHistory() + historyList = MmkvManager.getHistory() + isDeleteAllDialogVisible = false + Toast.makeText(context, "All history deleted successfully.", Toast.LENGTH_SHORT).show() + }, + dialogTitle = "Delete All?", + dialogText = "This action will delete all the history data. Confirm to proceed.", + icon = Icons.Filled.Delete + ) + } + + // Delete Item Dialog + if (isDeleteItemDialogVisible) { + selectedHistory?.let { history -> + DeleteDialog( + onDismissRequest = { isDeleteItemDialogVisible = false }, + onConfirmation = { + MmkvManager.deleteHistory(history) + historyList = MmkvManager.getHistory() + isDeleteItemDialogVisible = false + Toast.makeText(context, "Item deleted successfully.", Toast.LENGTH_SHORT).show() + }, + dialogTitle = "Delete Item?", + dialogText = "This action will delete the selected item. Confirm to proceed.", + icon = Icons.Filled.Delete + ) + } + } + } +} + +@Preview(showSystemUi = true, showBackground = true) +@Composable +fun PreviewHistoryScreen() { + HistoryScreen(onNavigationClick = {}) +} diff --git a/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/MainScreen.kt b/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/MainScreen.kt new file mode 100644 index 0000000..4376853 --- /dev/null +++ b/app/src/main/java/com/nasahacker/steelmind/compose/ui/screen/MainScreen.kt @@ -0,0 +1,9 @@ +package com.nasahacker.steelmind.compose.ui.screen + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +fun MainScreen(modifier: Modifier = Modifier) { + +} \ No newline at end of file diff --git a/app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Color.kt b/app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Color.kt new file mode 100644 index 0000000..62d007d --- /dev/null +++ b/app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Color.kt @@ -0,0 +1,11 @@ +package com.nasahacker.steelmind.compose.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Purple40 = Color(0xFF6650a4) +val PurpleGrey40 = Color(0xFF625b71) +val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Theme.kt b/app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Theme.kt new file mode 100644 index 0000000..19edf8b --- /dev/null +++ b/app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Theme.kt @@ -0,0 +1,57 @@ +package com.nasahacker.steelmind.compose.ui.theme + +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40 + + /* Other default colors to override + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + */ +) + +@Composable +fun TodoAppTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Type.kt b/app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Type.kt new file mode 100644 index 0000000..1ea5ceb --- /dev/null +++ b/app/src/main/java/com/nasahacker/steelmind/compose/ui/theme/Type.kt @@ -0,0 +1,34 @@ +package com.nasahacker.steelmind.compose.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/app/src/main/java/com/nasahacker/steelmind/ui/HistoryActivity.kt b/app/src/main/java/com/nasahacker/steelmind/ui/HistoryActivity.kt index 8c5e36d..219d834 100644 --- a/app/src/main/java/com/nasahacker/steelmind/ui/HistoryActivity.kt +++ b/app/src/main/java/com/nasahacker/steelmind/ui/HistoryActivity.kt @@ -30,6 +30,18 @@ class HistoryActivity : AppCompatActivity(), OnClickListener { setupWindowInsets() setupRecyclerView() setupToolbar() + + //use when using compose + + /* + binding.composeView.setContent { + MaterialTheme { + HistoryScreen { + onBackPressedDispatcher.onBackPressed() + } + } + } + */ } private fun setupWindowInsets() { diff --git a/app/src/main/res/drawable/main.png b/app/src/main/res/drawable/main.png deleted file mode 100644 index 4b969a8574d0220dc2968ba1a42b29765f2e9d5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6434 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 + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_history.xml b/app/src/main/res/layout/item_history.xml index a101a2f..7cffabf 100644 --- a/app/src/main/res/layout/item_history.xml +++ b/app/src/main/res/layout/item_history.xml @@ -34,7 +34,6 @@ android:layout_height="wrap_content" android:layout_marginBottom="@dimen/_8sdp" android:fontFamily="@font/roboto" - android:text="12:23:11 PM 10/11/24" android:textSize="@dimen/_10ssp" tools:text="12:23:11 PM 10/11/24" /> diff --git a/build.gradle.kts b/build.gradle.kts index b5f36b3..5b600a4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,4 +3,5 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.about.libraries) apply false + alias(libs.plugins.compose.compiler) apply false } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a294960..715904d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -46,4 +46,5 @@ ssp-android = { module = "com.intuit.ssp:ssp-android", version.ref = "sspAndroid android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } about-libraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutLibraries" } +compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }