Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ jobs:
id: updateSecrets
run: |
echo "Updating Secrets.kt"
echo '${{ secrets.SECRETS }}' > app/src/main/java/com/am/stbus/common/Secrets.kt
echo '${{ secrets.SECRETS }}' > app/src/main/java/com/am/stbus/common/Secrets.kt
echo '${{ secrets.GRADLE_LOCAL_PROPERTIES }}' > local.properties

- name: Build with Gradle
run: ./gradlew buildRelease
3 changes: 2 additions & 1 deletion .github/workflows/upload.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ jobs:
id: updateSecrets
run: |
echo "Updating Secrets.kt"
echo '${{ secrets.SECRETS }}' > app/src/main/java/com/am/stbus/common/Secrets.kt
echo '${{ secrets.SECRETS }}' > app/src/main/java/com/am/stbus/common/Secrets.kt
echo '${{ secrets.GRADLE_LOCAL_PROPERTIES }}' > local.properties

- name: Build Release AAB
id: buildRelease
Expand Down
27 changes: 19 additions & 8 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ plugins {
alias(libs.plugins.ksp)
alias(libs.plugins.google.services)
alias(libs.plugins.crashlytics)
alias(libs.plugins.google.maps.secrets)
}

android {
Expand All @@ -16,8 +17,8 @@ android {
applicationId = "com.am.stbus"
minSdk = 23
targetSdk = 36
versionCode = 84
versionName = "4.0.3"
versionCode = 85
versionName = "4.1.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
Expand All @@ -30,21 +31,26 @@ android {
}
release {
isMinifyEnabled = true
firebaseCrashlytics {
mappingFileUploadEnabled = true
}
isShrinkResources = true
proguardFiles(
// Default file with automatically generated optimization rules.
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)

firebaseCrashlytics {
mappingFileUploadEnabled = true
}
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
kotlin {
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11)
}
}
buildFeatures {
buildConfig = true
Expand All @@ -53,11 +59,13 @@ android {
}

dependencies {
implementation(libs.gson)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.fonts)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)
Expand All @@ -75,6 +83,9 @@ dependencies {
implementation(libs.firebase.crashlytics)
implementation(libs.firebase.analytics)

implementation(libs.maps.compose)
implementation(libs.microsoft.signal)

implementation(platform(libs.koin.bom))
implementation(libs.koin.android)
implementation(libs.koin.compose)
Expand Down Expand Up @@ -113,4 +124,4 @@ dependencies {
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
testImplementation(kotlin("test"))
}
}
4 changes: 3 additions & 1 deletion app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,6 @@
-keep class **.R$*

-keepattributes SourceFile,LineNumberTable # Keep file names and line numbers.
-keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.
-keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.

-dontwarn org.slf4j.impl.StaticLoggerBinder
9 changes: 4 additions & 5 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,13 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.SplitBus"
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning"
tools:targetApi="m">
tools:ignore="GoogleAppIndexingWarning">

<!--
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/api_key" />
android:value="${MAPS_API_KEY}" />

<!--
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" /> &lt;!&ndash; Fixes crash for Android 9+ users &ndash;&gt;
Expand Down
Binary file added app/src/main/ic_launcher-playstore.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed app/src/main/ic_launcher-web.png
Binary file not shown.
6 changes: 3 additions & 3 deletions app/src/main/java/com/am/stbus/common/Constants.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ package com.am.stbus.common

object Constants {

const val DB_VERSION = 1
const val DB_VERSION = 2

const val PROMET_URL = "http://www.promet-split.hr"
const val PROMET_URL = "https://www.promet-split.hr"
const val PROMET_NOVOSTI_URL = "http://www.promet-split.hr/obavijesti"
const val PROMET_API_URL = "https://api.promet-split.hr/Fleet/api/v1/"
const val PROMET_ALL_LINES_URL = "$PROMET_URL/vozni-red/sve-linije/"
Expand Down Expand Up @@ -98,4 +98,4 @@ object InformationConstants {
"&amp;maponly=1&amp;language=hr&amp;redirect_signup=https://secure.nextbike.net/gt/hr/split/registrirajse/\" " +
"width=\"100%\" height=\"400\" frameborder=\"0\"></iframe>"

}
}
30 changes: 26 additions & 4 deletions app/src/main/java/com/am/stbus/common/di/AppModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,12 @@
package com.am.stbus.common.di

import androidx.room.Room
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.am.stbus.common.room.AppDatabase
import com.am.stbus.data.ApiService
import com.am.stbus.data.room.FavouriteItemDao
import com.am.stbus.data.services.ApiService
import com.am.stbus.data.services.room.FavouriteItemDao
import com.am.stbus.data.services.room.TimetableDetailDataCachedDao
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module
import retrofit2.Retrofit
Expand All @@ -38,16 +41,35 @@ val appModule = module {
get<Retrofit>().create(ApiService::class.java)
}

val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
"CREATE TABLE IF NOT EXISTS `TimetableDetailDataCached` (" +
"`websiteTitle` TEXT NOT NULL, " +
"`timetableDetailData` TEXT NOT NULL, " +
"`storedAt` TEXT NOT NULL, " +
"PRIMARY KEY(`websiteTitle`))"
)
}
}

single<AppDatabase> {
Room.databaseBuilder(
androidContext(),
AppDatabase::class.java, "split-bus-db"
).fallbackToDestructiveMigration(true).build()
)
.addMigrations(MIGRATION_1_2)
.fallbackToDestructiveMigration(dropAllTables = true)
.build()
}

single<FavouriteItemDao> {
get<AppDatabase>().favouriteItemDao()
}

single<TimetableDetailDataCachedDao> {
get<AppDatabase>().timetableDetailDataCachedDao()
}


}
}
15 changes: 15 additions & 0 deletions app/src/main/java/com/am/stbus/common/di/NetworkModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package com.am.stbus.common.di

import com.am.stbus.common.Constants.PROMET_API_URL
import com.am.stbus.common.PROMET_KEY
import com.microsoft.signalr.GsonHubProtocol
import com.microsoft.signalr.HubConnectionBuilder
import kotlinx.serialization.json.Json
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
Expand Down Expand Up @@ -53,4 +55,17 @@ val networkModule = module {
.build()
}


single {

val gsonProtocol = GsonHubProtocol()

HubConnectionBuilder
.create("https://api.promet-split.hr/Fleet/hub/spatial")
.withHubProtocol(gsonProtocol)
.shouldSkipNegotiate(false)
.build()
}


}
4 changes: 3 additions & 1 deletion app/src/main/java/com/am/stbus/common/di/RepositoryModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ val repositoryModule = module {
}

single {
TimetablesRepository()
TimetablesRepository(
timetableDetailDataCachedDao = get()
)
}

}
29 changes: 25 additions & 4 deletions app/src/main/java/com/am/stbus/common/di/UseCaseModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,26 +26,47 @@ package com.am.stbus.common.di

import com.am.stbus.domain.usecases.FavouritesRoomDbUseCase
import com.am.stbus.domain.usecases.GetBusStopArrivalsUseCase
import com.am.stbus.domain.usecases.GetTimetableDetailDataUseCase
import com.am.stbus.domain.usecases.gmaps.GetLiveVehiclesFromHubConnection
import com.am.stbus.domain.usecases.gmaps.GetLiveVehiclesUseCase
import com.am.stbus.domain.usecases.timetables.GetLocalTimetableDetailDataUseCase
import com.am.stbus.domain.usecases.timetables.GetRemoteTimetableDetailDataUseCase
import org.koin.dsl.module

val useCaseModule = module {

single {
FavouritesRoomDbUseCase(
favouriteItemDao = get()
)
}

single {
GetBusStopArrivalsUseCase(
prometApiRepository = get()
)
}

single {
GetTimetableDetailDataUseCase(
GetLiveVehiclesUseCase(
prometApiRepository = get()
)
}

single {
GetLiveVehiclesFromHubConnection(
hubConnection = get()
)
}

single {
GetLocalTimetableDetailDataUseCase(
timetablesRepository = get()
)
}

single {
FavouritesRoomDbUseCase(
favouriteItemDao = get()
GetRemoteTimetableDetailDataUseCase(
timetablesRepository = get()
)
}

Expand Down
16 changes: 15 additions & 1 deletion app/src/main/java/com/am/stbus/common/di/ViewModelModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
package com.am.stbus.common.di

import com.am.stbus.presentation.MainViewModel
import com.am.stbus.presentation.screens.info.InfoScreenViewModel
import com.am.stbus.presentation.screens.info.maps.GmapsScreenViewModel
import com.am.stbus.presentation.screens.stops.detail.BusStopArrivalsDetailViewModel
import com.am.stbus.presentation.screens.timetables.detail.TimetablesDetailViewModel
import org.koin.core.module.dsl.viewModel
Expand All @@ -46,7 +48,19 @@ val viewModelModule = module {

viewModel {
TimetablesDetailViewModel(
getTimetableDetailDataUseCase = get()
getLocalTimetableDetailDataUseCase = get(),
getRemoteTimetableDetailDataUseCase = get()
)
}

viewModel {
GmapsScreenViewModel(
getLiveVehiclesUseCase = get(),
getLiveVehiclesFromHubConnection = get()
)
}

viewModel {
InfoScreenViewModel()
}
}
11 changes: 8 additions & 3 deletions app/src/main/java/com/am/stbus/common/room/AppDatabase.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,16 @@ package com.am.stbus.common.room

import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.am.stbus.common.Constants.DB_VERSION
import com.am.stbus.data.models.FavouriteItem
import com.am.stbus.data.room.FavouriteItemDao
import com.am.stbus.data.models.roomdb.FavouriteItem
import com.am.stbus.data.models.roomdb.TimetableDetailDataCached
import com.am.stbus.data.services.room.FavouriteItemDao
import com.am.stbus.data.services.room.TimetableDetailDataCachedDao

@Database(entities = [FavouriteItem::class], version = DB_VERSION)
@Database(entities = [FavouriteItem::class, TimetableDetailDataCached::class], version = DB_VERSION)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun favouriteItemDao(): FavouriteItemDao
abstract fun timetableDetailDataCachedDao(): TimetableDetailDataCachedDao
}
Loading
Loading