Skip to content

Commit 70d947a

Browse files
committed
build: Improvements:
1. Bumped app version numbers and target api 34 2. Removed 3rd party time picker and accompanist navigation animation 3. Migrated from material2 to material3 4. Fixed progress bar on math screen 5. Code cleanup and fix previews for Math screen and List Screen
1 parent 991d3c8 commit 70d947a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1103
-581
lines changed

.idea/compiler.xml

+1-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/deploymentTargetDropDown.xml

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/kotlinc.xml

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/migrations.xml

+10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

+2-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ An Android alarm app in which you solve math problems of varying difficulty to d
1313
* [ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel) to store and manage UI-related data in a lifecycle conscious way.
1414
* [Navigation Material](https://google.github.io/accompanist/navigation-material) - provides Compose Material support for Jetpack Navigation Compose, features composable bottom sheet destinations.
1515
* [Timber](https://github.com/JakeWharton/timber) - a logger with a small, extensible API which provides utility on top of Android's normal Log class.
16-
* [Material Design](https://material.io/develop/android/docs/getting-started/)
16+
* [Material Design](https://material3.io/develop/android/docs/getting-started/)
1717
* [Coroutines](https://kotlinlang.org/docs/reference/coroutines-overview.html) used to manage the local storage i.e. `writing to and reading from the database`. Coroutines help in managing background threads and reduces the need for callbacks.
1818
* [Room](https://developer.android.com/topic/libraries/architecture/room) persistence library which provides an abstraction layer over SQLite to allow for more robust database access while harnessing the full power of SQLite.
1919
* [Dagger Hilt](https://dagger.dev/hilt/) provides a standard way to incorporate Dagger dependency injection into an Android application.

app/build.gradle.kts

+12-13
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ plugins {
99
}
1010

1111
android {
12+
namespace = "com.timilehinaregbesola.mathalarm"
1213
defaultConfig {
1314
applicationId = "com.timilehinaregbesola.mathalarm"
14-
versionCode = 17
15-
versionName = "2.1.0"
16-
minSdk = Integer.parseInt(libs.versions.android.min.sdk.get())
17-
targetSdk = Integer.parseInt(libs.versions.android.target.sdk.get())
18-
compileSdk = Integer.parseInt(libs.versions.android.compile.sdk.get())
15+
versionCode = 18
16+
versionName = "2.2.0"
17+
minSdk = libs.versions.android.min.sdk.get().toInt()
18+
targetSdk = libs.versions.android.target.sdk.get().toInt()
19+
compileSdk = libs.versions.android.compile.sdk.get().toInt()
1920
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2021
}
2122
buildTypes {
@@ -34,25 +35,26 @@ android {
3435
// Flag to enable support for the new language APIs
3536
isCoreLibraryDesugaringEnabled = true
3637

37-
sourceCompatibility = JavaVersion.VERSION_11
38-
targetCompatibility = JavaVersion.VERSION_11
38+
sourceCompatibility = JavaVersion.VERSION_17
39+
targetCompatibility = JavaVersion.VERSION_17
3940
}
4041

4142
kotlinOptions {
4243
allWarningsAsErrors = false
4344
freeCompilerArgs = listOf("-Xopt-in=kotlin.RequiresOptIn", "-Xopt-in=kotlin.Experimental")
44-
jvmTarget = "11"
45+
jvmTarget = "17"
4546
}
4647
lint {
4748
disable += setOf("LogNotTimber", "StringFormatInTimber", "ThrowableNotAtBeginning", "BinaryOperationInTimber", "TimberArgCount", "TimberArgTypes", "TimberTagLength", "TimberExceptionLogging")
4849
}
4950

5051
buildFeatures {
5152
compose = true
53+
buildConfig = true
5254
}
5355

5456
composeOptions {
55-
kotlinCompilerExtensionVersion = libs.versions.androidx.compose.compiler.get()
57+
kotlinCompilerExtensionVersion = "1.5.3"
5658
}
5759

5860
packagingOptions {
@@ -102,16 +104,13 @@ dependencies {
102104

103105
implementation(libs.androidx.activity.compose)
104106
implementation(libs.accompanist.navigation.material)
105-
implementation(libs.accompanist.navigation.animation)
106107
implementation(libs.androidx.hilt.navigation.compose)
107108

108109
implementation(libs.timber)
109110

110111
implementation(libs.hilt.android)
111112
kapt(libs.hilt.android.compiler)
112113

113-
implementation(libs.vanpra.material.datetime)
114-
115114
implementation(platform(libs.firebase.bom))
116115
implementation(libs.firebase.analytics)
117116
implementation(libs.firebase.crashlytics)
@@ -125,7 +124,7 @@ dependencies {
125124
implementation(composeBom)
126125
androidTestImplementation(composeBom)
127126
implementation(libs.androidx.compose.ui)
128-
implementation(libs.androidx.compose.material)
127+
implementation(libs.androidx.compose.material3)
129128
implementation(libs.androidx.compose.material.icons)
130129
debugImplementation(libs.androidx.compose.ui.tooling)
131130
implementation(libs.androidx.compose.ui.tooling.preview)

app/src/androidTest/java/com/timilehinaregbesola/mathalarm/presentation/alarmlist/components/AlarmListScreenTest.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package com.timilehinaregbesola.mathalarm.presentation.alarmlist.components
22

33
import androidx.compose.animation.ExperimentalAnimationApi
44
import androidx.compose.foundation.ExperimentalFoundationApi
5-
import androidx.compose.material.ExperimentalMaterialApi
5+
import androidx.compose.material3.ExperimentalMaterial3Api
66
import androidx.compose.ui.ExperimentalComposeUiApi
77
import androidx.compose.ui.test.junit4.createAndroidComposeRule
88
import androidx.navigation.compose.NavHost
9-
import com.google.accompanist.navigation.animation.composable
10-
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
9+
import androidx.navigation.compose.composable
10+
import androidx.navigation.compose.rememberNavController
1111
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
1212
import com.timilehinaregbesola.mathalarm.presentation.MainActivity
1313
import com.timilehinaregbesola.mathalarm.presentation.ui.MathAlarmTheme
@@ -22,7 +22,7 @@ import org.junit.Rule
2222
@ExperimentalAnimationApi
2323
@InternalCoroutinesApi
2424
@ExperimentalComposeUiApi
25-
@ExperimentalMaterialApi
25+
@ExperimentalMaterial3Api
2626
@ExperimentalFoundationApi
2727
@HiltAndroidTest
2828
// @UninstallModules(AppModule::class)
@@ -38,7 +38,7 @@ class AlarmListScreenTest {
3838
hiltRule.inject()
3939
composeRule.setContent {
4040
MathAlarmTheme {
41-
val navController = rememberAnimatedNavController()
41+
val navController = rememberNavController()
4242
NavHost(navController = navController, startDestination = Navigation.NAV_ALARM_LIST) {
4343
composable(Navigation.NAV_ALARM_LIST) {
4444
ListDisplayScreen(

app/src/main/java/com/timilehinaregbesola/mathalarm/framework/app/di/AppModule.kt

+26-10
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,45 @@ import android.app.Application
44
import android.content.Context
55
import androidx.compose.animation.ExperimentalAnimationApi
66
import androidx.compose.foundation.ExperimentalFoundationApi
7-
import androidx.compose.material.ExperimentalMaterialApi
7+
import androidx.compose.material3.ExperimentalMaterial3Api
88
import androidx.compose.ui.ExperimentalComposeUiApi
99
import androidx.room.Room
10-
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
1110
import com.timilehinaregbesola.mathalarm.data.AlarmRepository
1211
import com.timilehinaregbesola.mathalarm.framework.RoomAlarmDataSource
1312
import com.timilehinaregbesola.mathalarm.framework.Usecases
1413
import com.timilehinaregbesola.mathalarm.framework.app.permission.AlarmPermission
1514
import com.timilehinaregbesola.mathalarm.framework.app.permission.AndroidVersion
1615
import com.timilehinaregbesola.mathalarm.framework.app.permission.AndroidVersionImpl
17-
import com.timilehinaregbesola.mathalarm.framework.database.*
18-
import com.timilehinaregbesola.mathalarm.interactors.*
16+
import com.timilehinaregbesola.mathalarm.framework.database.AlarmDao
17+
import com.timilehinaregbesola.mathalarm.framework.database.AlarmDatabase
18+
import com.timilehinaregbesola.mathalarm.framework.database.AlarmMapper
19+
import com.timilehinaregbesola.mathalarm.framework.database.MIGRATION_2_3
20+
import com.timilehinaregbesola.mathalarm.framework.database.MIGRATION_3_4
21+
import com.timilehinaregbesola.mathalarm.interactors.AlarmInteractor
22+
import com.timilehinaregbesola.mathalarm.interactors.AlarmInteractorImpl
23+
import com.timilehinaregbesola.mathalarm.interactors.AudioPlayer
24+
import com.timilehinaregbesola.mathalarm.interactors.NotificationInteractor
1925
import com.timilehinaregbesola.mathalarm.interactors.NotificationInteractorImpl
26+
import com.timilehinaregbesola.mathalarm.interactors.PlayerWrapper
2027
import com.timilehinaregbesola.mathalarm.notification.AlarmNotificationScheduler
2128
import com.timilehinaregbesola.mathalarm.notification.MathAlarmNotification
2229
import com.timilehinaregbesola.mathalarm.notification.MathAlarmNotificationChannel
2330
import com.timilehinaregbesola.mathalarm.presentation.appsettings.AppThemeOptionsMapper
2431
import com.timilehinaregbesola.mathalarm.provider.CalendarProvider
2532
import com.timilehinaregbesola.mathalarm.provider.CalendarProviderImpl
26-
import com.timilehinaregbesola.mathalarm.usecases.*
33+
import com.timilehinaregbesola.mathalarm.usecases.AddAlarm
34+
import com.timilehinaregbesola.mathalarm.usecases.CancelAlarm
35+
import com.timilehinaregbesola.mathalarm.usecases.ClearAlarms
36+
import com.timilehinaregbesola.mathalarm.usecases.CompleteAlarm
37+
import com.timilehinaregbesola.mathalarm.usecases.DeleteAlarm
38+
import com.timilehinaregbesola.mathalarm.usecases.FindAlarm
39+
import com.timilehinaregbesola.mathalarm.usecases.GetSavedAlarms
40+
import com.timilehinaregbesola.mathalarm.usecases.RescheduleFutureAlarms
41+
import com.timilehinaregbesola.mathalarm.usecases.ScheduleAlarm
42+
import com.timilehinaregbesola.mathalarm.usecases.ScheduleNextAlarm
43+
import com.timilehinaregbesola.mathalarm.usecases.ShowAlarm
44+
import com.timilehinaregbesola.mathalarm.usecases.SnoozeAlarm
45+
import com.timilehinaregbesola.mathalarm.usecases.UpdateAlarm
2746
import com.timilehinaregbesola.mathalarm.utils.getAlarmManager
2847
import dagger.Module
2948
import dagger.Provides
@@ -34,11 +53,9 @@ import kotlinx.coroutines.InternalCoroutinesApi
3453
import javax.inject.Singleton
3554

3655
@ExperimentalFoundationApi
37-
@ExperimentalMaterialApi
3856
@ExperimentalComposeUiApi
3957
@InternalCoroutinesApi
4058
@ExperimentalAnimationApi
41-
@ExperimentalMaterialNavigationApi
4259
@Module
4360
@InstallIn(SingletonComponent::class)
4461
object AppModule {
@@ -126,6 +143,7 @@ object AppModule {
126143
)
127144
}
128145

146+
@OptIn(ExperimentalMaterial3Api::class)
129147
@Provides
130148
@Singleton
131149
fun provideAlarmNotification(
@@ -149,12 +167,10 @@ object AppModule {
149167
}
150168

151169
@OptIn(
152-
ExperimentalMaterialNavigationApi::class,
153170
ExperimentalAnimationApi::class,
154171
InternalCoroutinesApi::class,
155172
ExperimentalComposeUiApi::class,
156-
ExperimentalMaterialApi::class,
157-
ExperimentalFoundationApi::class
173+
ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class
158174
)
159175
@Provides
160176
@Singleton

app/src/main/java/com/timilehinaregbesola/mathalarm/framework/database/AlarmDao.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import kotlinx.coroutines.flow.Flow
66
@Dao
77
interface AlarmDao {
88
@Insert(onConflict = OnConflictStrategy.REPLACE)
9-
suspend fun addAlarm(alarm: AlarmEntity?): Long
9+
suspend fun addAlarm(alarm: AlarmEntity): Long
1010

1111
@Update
12-
suspend fun updateAlarm(alarm: AlarmEntity?)
12+
suspend fun updateAlarm(alarm: AlarmEntity)
1313

1414
@Delete
15-
suspend fun deleteAlarm(alarm: AlarmEntity?)
15+
suspend fun deleteAlarm(alarm: AlarmEntity)
1616

1717
@Query("DELETE FROM alarms WHERE alarmid = :id")
1818
suspend fun deleteAlarmWithId(id: Long?)

app/src/main/java/com/timilehinaregbesola/mathalarm/interactors/AudioPlayer.kt

+8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import android.net.Uri
77
import timber.log.Timber
88

99
interface AudioPlayer {
10+
11+
val currentPosition: Int
12+
val duration: Int
13+
1014
fun init()
1115
fun startAlarmAudio()
1216

@@ -34,6 +38,10 @@ class PlayerWrapper(
3438

3539
private var player: MediaPlayer? = null
3640
private set
41+
override val currentPosition: Int
42+
get() = player?.currentPosition?: 0
43+
override val duration: Int
44+
get() = player?.duration?: 0
3745

3846
override fun init() {
3947
player = MediaPlayer().apply {

app/src/main/java/com/timilehinaregbesola/mathalarm/interactors/NotificationInteractorImpl.kt

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,18 @@ package com.timilehinaregbesola.mathalarm.interactors
22

33
import androidx.compose.animation.ExperimentalAnimationApi
44
import androidx.compose.foundation.ExperimentalFoundationApi
5-
import androidx.compose.material.ExperimentalMaterialApi
5+
import androidx.compose.material3.ExperimentalMaterial3Api
66
import androidx.compose.ui.ExperimentalComposeUiApi
7-
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
87
import com.timilehinaregbesola.mathalarm.domain.model.Alarm
98
import com.timilehinaregbesola.mathalarm.notification.MathAlarmNotification
109
import kotlinx.coroutines.InternalCoroutinesApi
1110
import timber.log.Timber
1211

1312
@ExperimentalFoundationApi
14-
@ExperimentalMaterialApi
13+
@ExperimentalMaterial3Api
1514
@ExperimentalComposeUiApi
1615
@InternalCoroutinesApi
1716
@ExperimentalAnimationApi
18-
@ExperimentalMaterialNavigationApi
1917
internal class NotificationInteractorImpl(
2018
private val alarmNotification: MathAlarmNotification,
2119
) : NotificationInteractor {

app/src/main/java/com/timilehinaregbesola/mathalarm/navigation/NavGraph.kt

+11-10
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@ import androidx.compose.animation.ExperimentalAnimationApi
55
import androidx.compose.animation.core.tween
66
import androidx.compose.foundation.ExperimentalFoundationApi
77
import androidx.compose.foundation.shape.RoundedCornerShape
8-
import androidx.compose.material.ExperimentalMaterialApi
9-
import androidx.compose.material.MaterialTheme
10-
import androidx.compose.material.Surface
8+
import androidx.compose.material3.ExperimentalMaterial3Api
9+
import androidx.compose.material3.MaterialTheme
10+
import androidx.compose.material3.Surface
1111
import androidx.compose.runtime.Composable
1212
import androidx.compose.ui.ExperimentalComposeUiApi
1313
import androidx.compose.ui.unit.dp
14+
import androidx.navigation.compose.NavHost
15+
import androidx.navigation.compose.composable
16+
import androidx.navigation.compose.rememberNavController
1417
import androidx.navigation.navDeepLink
15-
import com.google.accompanist.navigation.animation.AnimatedNavHost
16-
import com.google.accompanist.navigation.animation.composable
17-
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
1818
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
1919
import com.google.accompanist.navigation.material.ModalBottomSheetLayout
2020
import com.google.accompanist.navigation.material.bottomSheet
@@ -37,22 +37,23 @@ import com.timilehinaregbesola.mathalarm.utils.Navigation.NAV_SETTINGS_SHEET
3737
import com.timilehinaregbesola.mathalarm.utils.Navigation.NAV_SETTINGS_SHEET_ARGUMENT
3838
import kotlinx.coroutines.InternalCoroutinesApi
3939

40+
@OptIn(ExperimentalMaterialNavigationApi::class)
4041
@ExperimentalMaterialNavigationApi
4142
@ExperimentalAnimationApi
4243
@InternalCoroutinesApi
4344
@ExperimentalComposeUiApi
44-
@ExperimentalMaterialApi
45+
@ExperimentalMaterial3Api
4546
@ExperimentalFoundationApi
4647
@Composable
4748
fun NavGraph(preferences: AlarmPreferencesImpl) {
4849
val bottomSheetNavigator = rememberBottomSheetNavigator()
49-
val navController = rememberAnimatedNavController(bottomSheetNavigator)
50-
Surface(color = MaterialTheme.colors.background) {
50+
val navController = rememberNavController(bottomSheetNavigator)
51+
Surface(color = MaterialTheme.colorScheme.background) {
5152
ModalBottomSheetLayout(
5253
bottomSheetNavigator = bottomSheetNavigator,
5354
sheetShape = RoundedCornerShape(topStart = 40.dp, topEnd = 40.dp),
5455
) {
55-
AnimatedNavHost(navController = navController, startDestination = NAV_ALARM_LIST) {
56+
NavHost(navController = navController, startDestination = NAV_ALARM_LIST) {
5657
composable(
5758
route = NAV_ALARM_LIST,
5859
enterTransition = {

0 commit comments

Comments
 (0)