Skip to content

Commit

Permalink
refactor: Code cleanup and improvements
Browse files Browse the repository at this point in the history
Improved code readability and maintainability:

- Optimized imports and code arrangement for better organization.
- Removed unused imports and resources to streamline the project.
- Added explicit name calls and variable types for enhanced code clarity.
- Updated some code structures for improved maintainability.
  • Loading branch information
Mihai-Cristian Condrea committed Dec 29, 2024
1 parent 19299ac commit 60aabf8
Show file tree
Hide file tree
Showing 31 changed files with 322 additions and 343 deletions.
2 changes: 1 addition & 1 deletion .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.d4rk.cartcalculator.data.database.migrations.MIGRATION_2_3
import com.d4rk.cartcalculator.data.datastore.DataStore
import com.d4rk.cartcalculator.utils.error.ErrorHandler.handleInitializationFailure
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
Expand Down Expand Up @@ -51,8 +52,8 @@ class AppCoreManager : MultiDexApplication() , Application.ActivityLifecycleCall
}

private suspend fun initializeApp() = supervisorScope {
val dataBase = async { initializeDatabase() }
val dataStore = async { initializeDataStore() }
val dataBase : Deferred<Unit> = async { initializeDatabase() }
val dataStore : Deferred<Unit> = async { initializeDataStore() }

dataBase.await()
dataStore.await()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package com.d4rk.cartcalculator.data.database.migrations
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase

val MIGRATION_2_3 = object : Migration(2 , 3) {
val MIGRATION_2_3 : Migration = object : Migration(startVersion = 2 , endVersion = 3) {
override fun migrate(db: SupportSQLiteDatabase) {
db.execSQL("ALTER TABLE ShoppingCartItemsTable ADD COLUMN isChecked INTEGER NOT NULL DEFAULT 0")
db.execSQL(sql = "ALTER TABLE ShoppingCartItemsTable ADD COLUMN isChecked INTEGER NOT NULL DEFAULT 0")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.d4rk.cartcalculator.data.model.ui.screens

import com.d4rk.cartcalculator.data.model.ui.navigation.NavigationDrawerItem

data class UiMainScreen(
val navigationDrawerItems : List<NavigationDrawerItem> = listOf() ,
)
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ import com.google.android.play.core.install.model.UpdateAvailability
* @property context The application context used for notification management.
*/
class AppUpdateNotificationsManager(private val context: Context) {
private val updateChannelId = "update_channel"
private val updateNotificationId = 0
private val updateChannelId : String = "update_channel"
private val updateNotificationId : Int = 0

/**
* Checks for available app updates and sends a notification if an update is available.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import java.util.concurrent.TimeUnit
* @property context The application context used for scheduling app usage checks.
*/
class AppUsageNotificationsManager(private val context: Context) {
private val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
private val notificationIntent =
private val alarmManager : AlarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
private val notificationIntent : PendingIntent =
Intent(context, AppUsageNotificationReceiver::class.java).let { intent ->
PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
}
Expand All @@ -30,7 +30,7 @@ class AppUsageNotificationsManager(private val context: Context) {
* an instance of the AppUsageNotificationWorker to handle the app usage check.
*/
fun scheduleAppUsageCheck() {
val triggerTime = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(3)
val triggerTime : Long = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(3)
alarmManager.setRepeating(
AlarmManager.RTC_WAKEUP, triggerTime, TimeUnit.DAYS.toMillis(3), notificationIntent
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ package com.d4rk.cartcalculator.notifications.receivers
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import androidx.work.OneTimeWorkRequest
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import com.d4rk.cartcalculator.notifications.workers.AppUsageNotificationWorker

class AppUsageNotificationReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent?) {
val workRequest = OneTimeWorkRequestBuilder<AppUsageNotificationWorker>().build()
val workRequest : OneTimeWorkRequest = OneTimeWorkRequestBuilder<AppUsageNotificationWorker>().build()
WorkManager.getInstance(context).enqueue(workRequest)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ import kotlinx.coroutines.runBlocking
*/
class AppUsageNotificationWorker(context: Context, workerParams: WorkerParameters) :
Worker(context, workerParams) {
private val dataStore = AppCoreManager.dataStore
private val appUsageChannelId = "app_usage_channel"
private val appUsageNotificationId = 0
private val dataStore : DataStore = AppCoreManager.dataStore
private val appUsageChannelId : String = "app_usage_channel"
private val appUsageNotificationId : Int = 0

/**
* Performs the background work for app usage notification checks.
Expand All @@ -41,13 +41,13 @@ class AppUsageNotificationWorker(context: Context, workerParams: WorkerParameter
*/
@RequiresApi(Build.VERSION_CODES.O)
override fun doWork(): Result {
val currentTimestamp = System.currentTimeMillis()
val notificationThreshold = 3 * 24 * 60 * 60 * 1000
val lastUsedTimestamp = runBlocking { dataStore.lastUsed.first() }
val currentTimestamp : Long = System.currentTimeMillis()
val notificationThreshold : Int = 3 * 24 * 60 * 60 * 1000
val lastUsedTimestamp : Long = runBlocking { dataStore.lastUsed.first() }
if (currentTimestamp - lastUsedTimestamp > notificationThreshold) {
val notificationManager =
val notificationManager : NotificationManager =
applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val appUsageChannel = NotificationChannel(
val appUsageChannel : NotificationChannel = NotificationChannel(
appUsageChannelId,
applicationContext.getString(R.string.app_usage_notifications),
NotificationManager.IMPORTANCE_HIGH
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,20 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidView
import com.d4rk.cartcalculator.data.core.AppCoreManager
import com.d4rk.cartcalculator.utils.constants.ads.AdsConstants
import com.d4rk.cartcalculator.data.datastore.DataStore
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView

@Composable
fun AdBanner(
modifier: Modifier = Modifier, dataStore: DataStore
modifier : Modifier = Modifier
) {
val showAds: Boolean by dataStore.ads.collectAsState(initial = true)
val showAds : Boolean by AppCoreManager.dataStore.ads.collectAsState(initial = true)

if (showAds) {
AndroidView(modifier = modifier.fillMaxWidth(), factory = { context ->
AndroidView(modifier = modifier.fillMaxWidth() , factory = { context ->
AdView(context).apply {
setAdSize(AdSize.BANNER)
adUnitId = AdsConstants.BANNER_AD_UNIT_ID
Expand All @@ -29,14 +29,31 @@ fun AdBanner(
}
}

@Composable
fun AdBannerFull(
modifier : Modifier = Modifier
) {
val showAds : Boolean by AppCoreManager.dataStore.ads.collectAsState(initial = true)

if (showAds) {
AndroidView(modifier = modifier.fillMaxWidth() , factory = { context ->
AdView(context).apply {
setAdSize(AdSize.FULL_BANNER)
adUnitId = AdsConstants.BANNER_AD_UNIT_ID
loadAd(AdRequest.Builder().build())
}
})
}
}

@Composable
fun LargeBannerAdsComposable(
modifier: Modifier = Modifier, dataStore: DataStore
modifier : Modifier = Modifier
) {
val showAds: Boolean by dataStore.ads.collectAsState(initial = true)
val showAds : Boolean by AppCoreManager.dataStore.ads.collectAsState(initial = true)

if (showAds) {
AndroidView(modifier = modifier.fillMaxWidth(), factory = { context ->
AndroidView(modifier = modifier.fillMaxWidth() , factory = { context ->
AdView(context).apply {
setAdSize(AdSize.LARGE_BANNER)
adUnitId = AdsConstants.BANNER_AD_UNIT_ID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,32 +30,33 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.d4rk.cartcalculator.R
import com.d4rk.cartcalculator.data.datastore.DataStore
import com.d4rk.cartcalculator.ui.components.spacers.MediumVerticalSpacer
import kotlinx.coroutines.flow.firstOrNull

@Composable
fun SelectLanguageAlertDialog(
dataStore: DataStore, onDismiss: () -> Unit, onLanguageSelected: (String) -> Unit
dataStore : DataStore , onDismiss : () -> Unit , onLanguageSelected : (String) -> Unit
) {
val selectedLanguage: MutableState<String> = remember { mutableStateOf(value = "") }
val languageEntries: List<String> =
stringArrayResource(R.array.preference_language_entries).toList()
val languageValues: List<String> =
stringArrayResource(R.array.preference_language_values).toList()
val selectedLanguage : MutableState<String> = remember { mutableStateOf(value = "") }
val languageEntries : List<String> =
stringArrayResource(id = R.array.preference_language_entries).toList()
val languageValues : List<String> =
stringArrayResource(id = R.array.preference_language_values).toList()

AlertDialog(onDismissRequest = onDismiss, text = {
AlertDialog(onDismissRequest = onDismiss , text = {
SelectLanguageAlertDialogContent(
selectedLanguage, dataStore, languageEntries, languageValues
selectedLanguage , dataStore , languageEntries , languageValues
)
}, icon = {
Icon(Icons.Outlined.Language, contentDescription = null)
}, confirmButton = {
} , icon = {
Icon(Icons.Outlined.Language , contentDescription = null)
} , confirmButton = {
TextButton(onClick = {
onLanguageSelected(selectedLanguage.value)
onDismiss()
}) {
Text(text = stringResource(id = android.R.string.ok))
}
}, dismissButton = {
} , dismissButton = {
TextButton(onClick = onDismiss) {
Text(text = stringResource(id = android.R.string.cancel))
}
Expand All @@ -64,49 +65,50 @@ fun SelectLanguageAlertDialog(

@Composable
fun SelectLanguageAlertDialogContent(
selectedLanguage: MutableState<String>,
dataStore: DataStore,
languageEntries: List<String>,
languageValues: List<String>
selectedLanguage : MutableState<String> ,
dataStore : DataStore ,
languageEntries : List<String> ,
languageValues : List<String>
) {
LaunchedEffect(Unit) {
LaunchedEffect(key1 = Unit) {
selectedLanguage.value = dataStore.getLanguage().firstOrNull() ?: ""
}

Column {
Text(text = stringResource(id = R.string.dialog_language_subtitle))
Box(
modifier = Modifier
.fillMaxWidth()
.weight(1f)
.fillMaxWidth()
.weight(weight = 1f)
) {
LazyColumn {
items(languageEntries.size) { index ->
Row(
Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
Modifier.fillMaxWidth() ,
verticalAlignment = Alignment.CenterVertically ,
horizontalArrangement = Arrangement.Start
) {
RadioButton(selected = selectedLanguage.value == languageValues[index],
RadioButton(
selected = selectedLanguage.value == languageValues[index] ,
onClick = {
selectedLanguage.value = languageValues[index]
})
Text(
modifier = Modifier.padding(start = 8.dp),
text = languageEntries[index],
modifier = Modifier.padding(start = 8.dp) ,
text = languageEntries[index] ,
style = MaterialTheme.typography.bodyMedium.merge()
)
}
}
}
}
Spacer(modifier = Modifier.height(24.dp))
Icon(imageVector = Icons.Outlined.Info, contentDescription = null)
Spacer(modifier = Modifier.height(12.dp))
Spacer(modifier = Modifier.height(height = 24.dp))
Icon(imageVector = Icons.Outlined.Info , contentDescription = null)
MediumVerticalSpacer()
Text(text = stringResource(id = R.string.dialog_info_language))
}

LaunchedEffect(selectedLanguage.value) {
dataStore.saveLanguage(selectedLanguage.value)
LaunchedEffect(key1 = selectedLanguage.value) {
dataStore.saveLanguage(language = selectedLanguage.value)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,8 @@ import android.content.Context
import android.graphics.drawable.Drawable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
Expand All @@ -21,6 +18,8 @@ import coil.ImageLoader
import coil.compose.AsyncImage
import com.d4rk.cartcalculator.BuildConfig
import com.d4rk.cartcalculator.R
import com.d4rk.cartcalculator.ui.components.spacers.LargeHorizontalSpacer
import com.d4rk.cartcalculator.ui.components.spacers.LargeVerticalSpacer

@Composable
fun VersionInfoAlertDialog(onDismiss : () -> Unit) {
Expand All @@ -47,17 +46,17 @@ fun VersionInfoAlertDialogContent() {
modifier = Modifier.size(48.dp) ,
imageLoader = imageLoader
)
Spacer(modifier = Modifier.width(16.dp))
LargeHorizontalSpacer()
Column {
Text(
text = context.getString(R.string.app_full_name) ,
text = context.getString(R.string.app_name) ,
style = MaterialTheme.typography.titleLarge
)
Text(
text = stringResource(id = R.string.version , BuildConfig.VERSION_NAME) ,
style = MaterialTheme.typography.bodyMedium
)
Spacer(modifier = Modifier.height(16.dp))
LargeVerticalSpacer()
Text(
text = copyright , style = MaterialTheme.typography.bodyMedium
)
Expand Down
Loading

0 comments on commit 60aabf8

Please sign in to comment.