Skip to content

Commit

Permalink
✨ Using Kotpref and Dagger-Hilt
Browse files Browse the repository at this point in the history
  • Loading branch information
anugrahdev committed Jul 11, 2020
1 parent e63109e commit e2b074b
Show file tree
Hide file tree
Showing 27 changed files with 225 additions and 208 deletions.
48 changes: 34 additions & 14 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: "androidx.navigation.safeargs"
apply plugin: 'dagger.hilt.android.plugin'

android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
Expand Down Expand Up @@ -49,7 +51,7 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0'
implementation 'androidx.core:core-ktx:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
Expand All @@ -59,19 +61,20 @@ dependencies {
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

implementation 'androidx.navigation:navigation-fragment-ktx:2.2.2'
implementation 'androidx.navigation:navigation-ui-ktx:2.2.2'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.0'

//New Material Design
implementation "com.google.android.material:material:1.1.0"

//Retrofit and GSON
implementation 'com.squareup.retrofit2:retrofit:2.7.1'
implementation 'com.squareup.retrofit2:converter-gson:2.7.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation "com.squareup.okhttp3:logging-interceptor:4.7.2"

//Kotlin Coroutines
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.5"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.5"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.6"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.6"

// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
Expand All @@ -83,8 +86,7 @@ dependencies {
implementation "org.kodein.di:kodein-di-generic-jvm:6.5.5"
implementation "org.kodein.di:kodein-di-framework-android-x:6.5.5"


//Android Room
//Android Room
implementation "androidx.room:room-runtime:2.2.5"
implementation "androidx.room:room-ktx:2.2.5"
kapt "androidx.room:room-compiler:2.2.5"
Expand All @@ -100,23 +102,41 @@ dependencies {
//barcode scanner
implementation 'com.journeyapps:zxing-android-embedded:4.1.0'

//time
implementation 'com.jakewharton.threetenabp:threetenabp:1.2.1'

//Material dialog
implementation 'com.afollestad.material-dialogs:core:3.3.0'
implementation 'com.afollestad.material-dialogs:input:3.3.0'

//Stetho
implementation 'com.facebook.stetho:stetho:1.5.1'
implementation 'com.facebook.stetho:stetho-okhttp3:1.5.1'


implementation 'com.karumi:dexter:6.1.2'
//Spark like button
implementation 'com.github.varunest:sparkbutton:1.0.6'

//Time Library
implementation 'org.ocpsoft.prettytime:prettytime:4.0.4.Final'
implementation 'com.jakewharton.threetenabp:threetenabp:1.2.4'

//Logging Timber
implementation 'com.jakewharton.timber:timber:4.7.1'

implementation 'com.github.jrvansuita:MaterialAbout:+'

//Image Slider
implementation 'com.github.smarteist:autoimageslider:1.3.5'

//SSP-SDP
implementation 'com.intuit.sdp:sdp-android:1.0.6'
implementation 'com.intuit.ssp:ssp-android:1.0.6'

//kotpref
implementation 'com.chibatching.kotpref:kotpref:2.11.0'

//Dagger-Hilt
implementation "com.google.dagger:hilt-android:2.28-alpha"
implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01'
kapt "com.google.dagger:hilt-android-compiler:2.28-alpha"
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'


}
20 changes: 6 additions & 14 deletions app/src/main/java/com/anugrahdev/app/klikPaket/MyApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import com.anugrahdev.app.klikPaket.data.network.ApiService
import com.anugrahdev.app.klikPaket.data.network.NetworkInterceptor
import com.anugrahdev.app.klikPaket.data.repositories.CostRepository
import com.anugrahdev.app.klikPaket.data.repositories.WaybillRepository
import com.anugrahdev.app.klikPaket.preferences.PreferenceProvider
import com.anugrahdev.app.klikPaket.ui.shipmentcost.CostViewModelFactory
import com.anugrahdev.app.klikPaket.ui.trackwaybill.WaybillViewModelFactory
import com.chibatching.kotpref.Kotpref
import com.facebook.stetho.Stetho
import com.jakewharton.threetenabp.AndroidThreeTen
import dagger.hilt.android.HiltAndroidApp
import org.kodein.di.Kodein
import org.kodein.di.KodeinAware
import org.kodein.di.android.x.androidXModule
Expand All @@ -20,24 +21,15 @@ import org.kodein.di.generic.provider
import org.kodein.di.generic.singleton
import timber.log.Timber

class MyApplication: Application(), KodeinAware {
override val kodein = Kodein.lazy {
import(androidXModule(this@MyApplication))
bind() from singleton { NetworkInterceptor(instance()) }
bind() from singleton { ApiService(instance()) }
bind() from singleton { PreferenceProvider(instance()) }
bind() from singleton { AppDatabase(instance()) }
bind() from singleton { CostRepository(instance()) }
bind() from singleton { WaybillRepository(instance(),instance()) }
bind() from provider { CostViewModelFactory(instance()) }
bind() from provider { WaybillViewModelFactory(instance()) }

}
@HiltAndroidApp
class MyApplication: Application() {

override fun onCreate() {
super.onCreate()
AndroidThreeTen.init(this)
Stetho.initializeWithDefaults(this)
Kotpref.init(this)

if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,4 @@ import com.anugrahdev.app.klikPaket.data.models.waybill.WaybillData
abstract class AppDatabase:RoomDatabase() {
abstract fun getWaybillDao():WaybillDataDao

companion object{
@Volatile
private var instance:AppDatabase?=null
private val LOCK=Any()

operator fun invoke(context: Context) = instance ?: synchronized(LOCK){
instance ?: createDatabase(context)
}

private fun createDatabase (context: Context)=
Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"ikurir_db.db"
).build()
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -48,28 +48,4 @@ interface ApiService {

): Response<WaybillResponse>




companion object {
operator fun invoke(connectivityInterceptor: NetworkInterceptor) : ApiService{

val okHttpClient = OkHttpClient.Builder()
.addInterceptor(connectivityInterceptor)
.connectTimeout(1, TimeUnit.MINUTES) // connect timeout
.writeTimeout(1, TimeUnit.MINUTES) // write timeout
.readTimeout(1, TimeUnit.MINUTES) // read timeout
.build()

return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(base_url)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)


}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ import com.anugrahdev.app.klikPaket.data.models.shippingcost.ShippingCostResult
import com.anugrahdev.app.klikPaket.data.network.ApiService
import com.anugrahdev.app.klikPaket.data.network.Resource
import com.anugrahdev.app.klikPaket.data.network.SafeApiRequest
import javax.inject.Inject

class CostRepository(private val api:ApiService):
class CostRepository @Inject constructor(val api: ApiService) :
SafeApiRequest() {

suspend fun getCities(query: String) = apiRequest { api.getCities(query) }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,34 +1,36 @@
package com.anugrahdev.app.klikPaket.data.repositories

import com.anugrahdev.app.klikPaket.data.db.AppDatabase
import com.anugrahdev.app.klikPaket.data.db.dao.WaybillDataDao
import com.anugrahdev.app.klikPaket.data.models.waybill.WaybillData
import com.anugrahdev.app.klikPaket.data.network.ApiService
import com.anugrahdev.app.klikPaket.data.network.Resource
import com.anugrahdev.app.klikPaket.data.network.SafeApiRequest
import javax.inject.Inject

class WaybillRepository (private val api:ApiService, private val db:AppDatabase):
class WaybillRepository @Inject constructor (val api:ApiService, val db:WaybillDataDao):
SafeApiRequest(){

suspend fun postWaybill(waybill:String,courier:String) = apiRequest { api.postWaybill(waybill, courier) }

suspend fun upsert(waybillData: WaybillData) = db.getWaybillDao().upsert(waybillData)
suspend fun upsert(waybillData: WaybillData) = db.upsert(waybillData)

fun getHistoryWaybill() = db.getWaybillDao().getHistoryWaybill()
fun getHistoryWaybill() = db.getHistoryWaybill()

fun getAllSavedWaybill() = db.getWaybillDao().getAllSavedWaybill()
fun getAllSavedWaybill() = db.getAllSavedWaybill()

fun getSavedWaybill(status:String) = db.getWaybillDao().getSavedWaybill(status)
fun getSavedWaybill(status:String) = db.getSavedWaybill(status)

suspend fun deleteSavedWaybill(waybillData: WaybillData) = db.getWaybillDao().delete(waybillData)
suspend fun deleteSavedWaybill(waybillData: WaybillData) = db.delete(waybillData)

suspend fun update(waybillData: WaybillData) = db.getWaybillDao().update(waybillData)
suspend fun update(waybillData: WaybillData) = db.update(waybillData)

fun getSearchWaybill(waybillNumber:String) = db.getWaybillDao().getSearchWaybill(waybillNumber)
fun getSearchWaybill(waybillNumber:String) = db.getSearchWaybill(waybillNumber)

suspend fun updateSaved(trackTime:String, status:String, saved:Boolean, waybillNumber: String)
= db.getWaybillDao().updateSaved(trackTime, status, saved, waybillNumber)
= db.updateSaved(trackTime, status, saved, waybillNumber)

suspend fun clearHistory() = db.getWaybillDao().clearHistory()
suspend fun clearHistory() = db.clearHistory()


}
34 changes: 34 additions & 0 deletions app/src/main/java/com/anugrahdev/app/klikPaket/di/DbModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.anugrahdev.app.klikPaket.di

import android.content.Context
import androidx.room.Room
import com.anugrahdev.app.klikPaket.data.db.AppDatabase
import com.anugrahdev.app.klikPaket.utils.Constant.Companion.DATABASE_NAME
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ApplicationComponent
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Singleton

@Module
@InstallIn(ApplicationComponent::class)
object DbModule {

@Provides
@Singleton
fun provideAppDatabase(
@ApplicationContext app: Context
) = Room.databaseBuilder(
app,
AppDatabase::class.java,
DATABASE_NAME
).build()

@Provides
@Singleton
fun provideWaybillDataDao(
db: AppDatabase
)= db.getWaybillDao()

}
46 changes: 46 additions & 0 deletions app/src/main/java/com/anugrahdev/app/klikPaket/di/NetworkModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.anugrahdev.app.klikPaket.di

import com.anugrahdev.app.klikPaket.data.network.ApiService
import com.anugrahdev.app.klikPaket.data.network.NetworkInterceptor
import com.anugrahdev.app.klikPaket.utils.Constant
import com.facebook.stetho.Stetho
import com.facebook.stetho.okhttp3.StethoInterceptor
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ApplicationComponent
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
import javax.inject.Singleton

@Module
@InstallIn(ApplicationComponent::class)
object NetworkModule {

@Singleton
@Provides
fun provideApiService(): ApiService {
//Logging HTTP
val logging = HttpLoggingInterceptor()
//Loging level just for debuggig
logging.level = HttpLoggingInterceptor.Level.BODY

val okHttpClient = OkHttpClient.Builder()
.readTimeout(90, TimeUnit.SECONDS)
.addInterceptor(logging)
.addNetworkInterceptor(StethoInterceptor())
.connectTimeout(90, TimeUnit.SECONDS)
.build()

return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(Constant.base_url)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.anugrahdev.app.klikPaket.preferences

import com.chibatching.kotpref.KotprefModel

object SettingsPref: KotprefModel() {

var language by stringPref(default = "Bahasa Indonesia")

}
Loading

0 comments on commit e2b074b

Please sign in to comment.