diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 41871c2..4404972 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -5,7 +5,7 @@
diff --git a/app/build.gradle b/app/build.gradle
index 4074a58..576eec3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -4,8 +4,6 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
-apply plugin: 'kotlin-android-extensions'
-
apply plugin: 'dagger.hilt.android.plugin'
apply plugin: 'com.google.gms.google-services'
@@ -13,26 +11,26 @@ apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
android {
- compileSdkVersion 29
- dataBinding.enabled = true
+ compileSdkVersion 31
defaultConfig {
applicationId "com.rootstrap.android"
minSdkVersion 23
- targetSdkVersion 29
+ targetSdkVersion 31
versionCode 42
versionName "1.0"
testInstrumentationRunner 'com.rootstrap.android.CustomTestRunner'
}
- viewBinding {
- enabled = true
- }
-
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
+ buildFeatures {
+ viewBinding true
+ dataBinding true
+ }
+
kotlinOptions {
jvmTarget = '1.8'
}
@@ -58,6 +56,10 @@ android {
}
}
+ kapt {
+ correctErrorTypes true
+ }
+
flavorDimensions "server"
productFlavors {
@@ -137,63 +139,74 @@ android {
}
dependencies {
+ def room_version = "2.3.0"
+ def lifecycle_version = "2.4.0"
+
implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1'
- implementation 'androidx.appcompat:appcompat:1.2.0'
- implementation 'androidx.core:core-ktx:1.3.2'
- implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
+ implementation 'androidx.appcompat:appcompat:1.3.1'
+ implementation 'androidx.core:core-ktx:1.7.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation "androidx.preference:preference-ktx:1.1.1"
- implementation 'com.google.android.material:material:1.2.1'
+ implementation 'com.google.android.material:material:1.4.0'
testImplementation 'junit:junit:4.13.1'
testImplementation 'org.mockito:mockito-core:2.28.2'
- androidTestImplementation 'androidx.test:runner:1.3.0'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
- androidTestImplementation 'androidx.test.espresso:espresso-intents:3.3.0'
- androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+ androidTestImplementation 'androidx.test:runner:1.4.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-intents:3.4.0'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
- androidTestImplementation 'androidx.test:rules:1.3.0'
+ androidTestImplementation 'androidx.test:rules:1.4.0'
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:4.3.1'
- //---- ANDROID ARCH ROOM ----
- implementation 'android.arch.persistence.room:runtime:1.1.1'
- kapt "android.arch.persistence.room:compiler:1.1.1"
- //---- ANDROID ARCH LIFECYCLE ----
- implementation 'android.arch.lifecycle:common-java8:1.1.1'
- kapt "android.arch.lifecycle:compiler:1.1.1"
- implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"
+
+ //---- ROOM ----
+ implementation "androidx.room:room-runtime:$room_version"
+ kapt "androidx.room:room-compiler:$room_version"
+ // Kotlin Extensions and Coroutines support for Room
+ implementation "androidx.room:room-ktx:$room_version"
+
+ //---- LIFECYCLE ----]
+ implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
+ implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
//---- GOOGLE JSON SERIALIZER/DESERIALIZER ----
implementation 'com.google.code.gson:gson:2.8.6'
+
//---- MixPanel ----
implementation 'com.mixpanel.android:mixpanel-android:5.6.1'
+
//---- Firebase ----
- implementation platform('com.google.firebase:firebase-bom:26.1.0')
- implementation 'com.google.firebase:firebase-core:18.0.2'
+ implementation platform('com.google.firebase:firebase-bom:28.4.2')
+ implementation 'com.google.firebase:firebase-core:20.0.0'
implementation 'com.google.firebase:firebase-analytics-ktx'
implementation 'com.google.firebase:firebase-crashlytics-ktx'
- implementation 'org.jetbrains.kotlin:kotlin-reflect:1.4.10'
+ implementation 'org.jetbrains.kotlin:kotlin-reflect:1.5.31'
+
//---- Image ----
implementation group: 'com.github.bumptech.glide', name: 'glide', version: '4.10.0'
+
//---- Network ----
implementation 'com.squareup.retrofit2:retrofit:2.6.2'
- implementation 'com.squareup.moshi:moshi-kotlin:1.9.2'
+ implementation 'com.squareup.moshi:moshi-kotlin:1.12.0'
implementation 'com.squareup.retrofit2:converter-moshi:2.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.3.1'
+
//---- Events ----
implementation 'com.squareup:otto:1.3.8'
+
//---- Linters ----
ktlint "com.pinterest:ktlint:0.35.0"
+
//---- Hilt ----
- implementation "com.google.dagger:hilt-android:2.28-alpha"
- implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02'
- kapt "com.google.dagger:hilt-android-compiler:2.28-alpha"
- kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha02'
- androidTestImplementation 'com.google.dagger:hilt-android-testing:2.28-alpha'
- kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.28-alpha'
+ implementation "com.google.dagger:hilt-android:$hilt_version"
+ kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
+ kapt 'androidx.hilt:hilt-compiler:1.0.0'
+ androidTestImplementation "com.google.dagger:hilt-android-testing:$hilt_version"
+ kaptAndroidTest "com.google.dagger:hilt-android-compiler:$hilt_version"
//security crypto
implementation "androidx.security:security-crypto:1.1.0-alpha03"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b16d794..9f08fae 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -17,7 +17,8 @@
+ android:screenOrientation="portrait"
+ android:exported="true">
diff --git a/app/src/main/java/com/rootstrap/android/network/managers/ManagerModule.kt b/app/src/main/java/com/rootstrap/android/network/managers/ManagerModule.kt
index 6447fec..2da2571 100644
--- a/app/src/main/java/com/rootstrap/android/network/managers/ManagerModule.kt
+++ b/app/src/main/java/com/rootstrap/android/network/managers/ManagerModule.kt
@@ -7,11 +7,11 @@ import com.rootstrap.android.network.managers.user.UserManagerImpl
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ApplicationComponent
+import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
-@InstallIn(ApplicationComponent::class)
+@InstallIn(SingletonComponent::class)
abstract class ManagerModule {
@Binds
diff --git a/app/src/main/java/com/rootstrap/android/network/providers/ServiceProviderModule.kt b/app/src/main/java/com/rootstrap/android/network/providers/ServiceProviderModule.kt
index 8665732..c7bc33c 100644
--- a/app/src/main/java/com/rootstrap/android/network/providers/ServiceProviderModule.kt
+++ b/app/src/main/java/com/rootstrap/android/network/providers/ServiceProviderModule.kt
@@ -8,8 +8,8 @@ import com.squareup.moshi.Moshi
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ApplicationComponent
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
+import dagger.hilt.components.SingletonComponent
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
@@ -17,7 +17,7 @@ import retrofit2.converter.moshi.MoshiConverterFactory
import javax.inject.Singleton
@Module
-@InstallIn(ApplicationComponent::class)
+@InstallIn(SingletonComponent::class)
class ServiceProviderModule {
@Provides
diff --git a/app/src/main/java/com/rootstrap/android/network/services/ApiModule.kt b/app/src/main/java/com/rootstrap/android/network/services/ApiModule.kt
index 53c844a..66b0593 100644
--- a/app/src/main/java/com/rootstrap/android/network/services/ApiModule.kt
+++ b/app/src/main/java/com/rootstrap/android/network/services/ApiModule.kt
@@ -3,11 +3,11 @@ package com.rootstrap.android.network.services
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ApplicationComponent
+import dagger.hilt.components.SingletonComponent
import retrofit2.Retrofit
@Module
-@InstallIn(ApplicationComponent::class)
+@InstallIn(SingletonComponent::class)
class ApiModule {
@Provides
diff --git a/app/src/main/java/com/rootstrap/android/ui/activity/main/ProfileActivity.kt b/app/src/main/java/com/rootstrap/android/ui/activity/main/ProfileActivity.kt
index 7c92979..3999b3b 100644
--- a/app/src/main/java/com/rootstrap/android/ui/activity/main/ProfileActivity.kt
+++ b/app/src/main/java/com/rootstrap/android/ui/activity/main/ProfileActivity.kt
@@ -4,6 +4,7 @@ import android.os.Bundle
import androidx.activity.viewModels
import androidx.lifecycle.Observer
import com.rootstrap.android.R
+import com.rootstrap.android.databinding.ActivityProfileBinding
import com.rootstrap.android.metrics.Analytics
import com.rootstrap.android.metrics.PageEvents
import com.rootstrap.android.metrics.VISIT_PROFILE
@@ -12,7 +13,6 @@ import com.rootstrap.android.ui.base.BaseActivity
import com.rootstrap.android.ui.view.ProfileView
import com.rootstrap.android.util.NetworkState
import dagger.hilt.android.AndroidEntryPoint
-import kotlinx.android.synthetic.main.activity_profile.*
import javax.inject.Inject
@AndroidEntryPoint
@@ -21,15 +21,18 @@ class ProfileActivity : BaseActivity(), ProfileView {
@Inject lateinit var sessionManager: SessionManager
private val viewModel: ProfileActivityViewModel by viewModels()
+ private val binding by lazy { ActivityProfileBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_profile)
Analytics.track(PageEvents.visit(VISIT_PROFILE))
- welcome_text_view.text = getString(R.string.welcome_message, sessionManager.user?.firstName)
- sign_out_button.setOnClickListener { viewModel.signOut() }
+ with(binding) {
+ setContentView(root)
+ welcomeTextView.text = getString(R.string.welcome_message, sessionManager.user?.firstName)
+ signOutButton.setOnClickListener { viewModel.signOut() }
+ }
lifecycle.addObserver(viewModel)
setObservers()
diff --git a/app/src/main/java/com/rootstrap/android/ui/activity/main/ProfileActivityViewModel.kt b/app/src/main/java/com/rootstrap/android/ui/activity/main/ProfileActivityViewModel.kt
index 7fdf3ec..e8a7a04 100644
--- a/app/src/main/java/com/rootstrap/android/ui/activity/main/ProfileActivityViewModel.kt
+++ b/app/src/main/java/com/rootstrap/android/ui/activity/main/ProfileActivityViewModel.kt
@@ -1,6 +1,5 @@
package com.rootstrap.android.ui.activity.main
-import androidx.hilt.lifecycle.ViewModelInject
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
@@ -10,9 +9,12 @@ import com.rootstrap.android.ui.base.BaseViewModel
import com.rootstrap.android.util.NetworkState
import com.rootstrap.android.util.extensions.ApiErrorType
import com.rootstrap.android.util.extensions.ApiException
+import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
+import javax.inject.Inject
-open class ProfileActivityViewModel @ViewModelInject constructor(
+@HiltViewModel
+open class ProfileActivityViewModel @Inject constructor(
private val sessionManager: SessionManager,
private val userManager: UserManager
) : BaseViewModel() {
diff --git a/app/src/main/java/com/rootstrap/android/ui/activity/main/SignInActivity.kt b/app/src/main/java/com/rootstrap/android/ui/activity/main/SignInActivity.kt
index fdf09a0..964581c 100644
--- a/app/src/main/java/com/rootstrap/android/ui/activity/main/SignInActivity.kt
+++ b/app/src/main/java/com/rootstrap/android/ui/activity/main/SignInActivity.kt
@@ -21,11 +21,12 @@ import dagger.hilt.android.AndroidEntryPoint
class SignInActivity : PermissionActivity(), AuthView {
private val viewModel: SignInActivityViewModel by viewModels()
- private lateinit var binding: ActivitySignInBinding
+ private val binding: ActivitySignInBinding by lazy {
+ ActivitySignInBinding.inflate(layoutInflater)
+ }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = ActivitySignInBinding.inflate(layoutInflater)
setContentView(binding.root)
Analytics.track(PageEvents.visit(VISIT_SIGN_IN))
diff --git a/app/src/main/java/com/rootstrap/android/ui/activity/main/SignInActivityViewModel.kt b/app/src/main/java/com/rootstrap/android/ui/activity/main/SignInActivityViewModel.kt
index c3783ac..d8b16a6 100644
--- a/app/src/main/java/com/rootstrap/android/ui/activity/main/SignInActivityViewModel.kt
+++ b/app/src/main/java/com/rootstrap/android/ui/activity/main/SignInActivityViewModel.kt
@@ -1,6 +1,5 @@
package com.rootstrap.android.ui.activity.main
-import androidx.hilt.lifecycle.ViewModelInject
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
@@ -11,9 +10,12 @@ import com.rootstrap.android.ui.base.BaseViewModel
import com.rootstrap.android.util.NetworkState
import com.rootstrap.android.util.extensions.ApiErrorType
import com.rootstrap.android.util.extensions.ApiException
+import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
+import javax.inject.Inject
-open class SignInActivityViewModel @ViewModelInject constructor(
+@HiltViewModel
+open class SignInActivityViewModel @Inject constructor(
private val sessionManager: SessionManager,
private val userManager: UserManager
) : BaseViewModel() {
diff --git a/app/src/main/java/com/rootstrap/android/ui/activity/main/SignUpActivity.kt b/app/src/main/java/com/rootstrap/android/ui/activity/main/SignUpActivity.kt
index 83ef2f4..8f75729 100644
--- a/app/src/main/java/com/rootstrap/android/ui/activity/main/SignUpActivity.kt
+++ b/app/src/main/java/com/rootstrap/android/ui/activity/main/SignUpActivity.kt
@@ -20,11 +20,12 @@ import dagger.hilt.android.AndroidEntryPoint
class SignUpActivity : BaseActivity(), AuthView {
private val viewModel: SignUpActivityViewModel by viewModels()
- private lateinit var binding: ActivitySignUpBinding
+ private val binding: ActivitySignUpBinding by lazy {
+ ActivitySignUpBinding.inflate(layoutInflater)
+ }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = ActivitySignUpBinding.inflate(layoutInflater)
setContentView(binding.root)
Analytics.track(PageEvents.visit(VISIT_SIGN_UP))
diff --git a/app/src/main/java/com/rootstrap/android/ui/activity/main/SignUpActivityViewModel.kt b/app/src/main/java/com/rootstrap/android/ui/activity/main/SignUpActivityViewModel.kt
index 47ae75f..c571d58 100644
--- a/app/src/main/java/com/rootstrap/android/ui/activity/main/SignUpActivityViewModel.kt
+++ b/app/src/main/java/com/rootstrap/android/ui/activity/main/SignUpActivityViewModel.kt
@@ -1,6 +1,5 @@
package com.rootstrap.android.ui.activity.main
-import androidx.hilt.lifecycle.ViewModelInject
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
@@ -11,9 +10,12 @@ import com.rootstrap.android.ui.base.BaseViewModel
import com.rootstrap.android.util.NetworkState
import com.rootstrap.android.util.extensions.ApiErrorType
import com.rootstrap.android.util.extensions.ApiException
+import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
+import javax.inject.Inject
-open class SignUpActivityViewModel @ViewModelInject constructor(
+@HiltViewModel
+open class SignUpActivityViewModel @Inject constructor(
private val sessionManager: SessionManager,
private val userManager: UserManager
) : BaseViewModel() {
diff --git a/app/src/main/java/com/rootstrap/android/util/UtilModule.kt b/app/src/main/java/com/rootstrap/android/util/UtilModule.kt
index 3038e42..39a1245 100644
--- a/app/src/main/java/com/rootstrap/android/util/UtilModule.kt
+++ b/app/src/main/java/com/rootstrap/android/util/UtilModule.kt
@@ -11,12 +11,12 @@ import com.squareup.otto.Bus
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ApplicationComponent
import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
-@InstallIn(ApplicationComponent::class)
+@InstallIn(SingletonComponent::class)
class UtilModule {
@Provides
diff --git a/build.gradle b/build.gradle
index 8f768b0..ea46473 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,8 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = '1.3.72'
+ ext.kotlin_version = '1.5.31'
+ ext.hilt_version = '2.39.1'
repositories {
google()
jcenter()
@@ -11,11 +12,11 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.1.1'
+ classpath 'com.android.tools.build:gradle:4.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- classpath 'com.google.gms:google-services:4.3.4'
- classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'
- classpath "com.google.dagger:hilt-android-gradle-plugin:2.28-alpha"
+ classpath 'com.google.gms:google-services:4.3.10'
+ classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.0'
+ classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}