Skip to content

Commit 980742a

Browse files
Merge pull request #40 from rootstrap/enhancement/libraries-updates
Enhancement/libraries updates
2 parents 4c49343 + 0f097a1 commit 980742a

File tree

10 files changed

+115
-74
lines changed

10 files changed

+115
-74
lines changed

app/build.gradle

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ apply plugin: 'kotlin-kapt'
66

77
apply plugin: 'kotlin-android-extensions'
88

9-
apply plugin: 'io.fabric'
9+
apply plugin: 'com.google.gms.google-services'
10+
11+
apply plugin: 'com.google.firebase.crashlytics'
1012

1113
android {
1214
compileSdkVersion 29
@@ -20,6 +22,10 @@ android {
2022
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
2123
}
2224

25+
viewBinding {
26+
enabled = true
27+
}
28+
2329
compileOptions {
2430
sourceCompatibility JavaVersion.VERSION_1_8
2531
targetCompatibility JavaVersion.VERSION_1_8
@@ -121,14 +127,14 @@ android {
121127
dependencies {
122128
implementation fileTree(include: ['*.jar'], dir: 'libs')
123129
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
124-
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2'
130+
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1'
125131
implementation 'androidx.appcompat:appcompat:1.2.0'
126132
implementation 'androidx.core:core-ktx:1.3.2'
127-
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
133+
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
128134
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
129135
implementation "androidx.preference:preference-ktx:1.1.1"
130136
implementation 'com.google.android.material:material:1.2.1'
131-
testImplementation 'junit:junit:4.12'
137+
testImplementation 'junit:junit:4.13.1'
132138
testImplementation 'org.mockito:mockito-core:2.28.2'
133139
androidTestImplementation 'androidx.test:runner:1.3.0'
134140
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
@@ -149,14 +155,15 @@ dependencies {
149155
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
150156

151157
//---- GOOGLE JSON SERIALIZER/DESERIALIZER ----
152-
implementation 'com.google.code.gson:gson:2.8.5'
158+
implementation 'com.google.code.gson:gson:2.8.6'
153159
//---- MixPanel ----
154160
implementation 'com.mixpanel.android:mixpanel-android:5.6.1'
155161
//---- Firebase ----
156-
implementation 'com.google.firebase:firebase-core:18.0.0'
157-
implementation 'com.google.firebase:firebase-analytics:18.0.0'
158-
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
159-
implementation 'org.jetbrains.kotlin:kotlin-reflect:1.3.61'
162+
implementation platform('com.google.firebase:firebase-bom:26.1.0')
163+
implementation 'com.google.firebase:firebase-core:18.0.2'
164+
implementation 'com.google.firebase:firebase-analytics-ktx'
165+
implementation 'com.google.firebase:firebase-crashlytics-ktx'
166+
implementation 'org.jetbrains.kotlin:kotlin-reflect:1.4.10'
160167
//---- Image ----
161168
implementation group: 'com.github.bumptech.glide', name: 'glide', version: '4.10.0'
162169
//---- Network ----
@@ -169,5 +176,3 @@ dependencies {
169176
//---- Linters ----
170177
ktlint "com.pinterest:ktlint:0.35.0"
171178
}
172-
173-
apply plugin: 'com.google.gms.google-services'

app/src/main/java/com/rootstrap/android/ui/activity/main/ProfileActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.rootstrap.android.ui.activity.main
22

33
import android.os.Bundle
4-
import androidx.lifecycle.ViewModelProviders
4+
import androidx.lifecycle.ViewModelProvider
55
import com.rootstrap.android.R
66
import com.rootstrap.android.metrics.Analytics
77
import com.rootstrap.android.metrics.PageEvents
@@ -22,7 +22,7 @@ class ProfileActivity : BaseActivity(), ProfileView {
2222
setContentView(R.layout.activity_profile)
2323

2424
val factory = ProfileActivityViewModelFactory(viewModelListener)
25-
viewModel = ViewModelProviders.of(this, factory)
25+
viewModel = ViewModelProvider(this, factory)
2626
.get(ProfileActivityViewModel::class.java)
2727

2828
Analytics.track(PageEvents.visit(VISIT_PROFILE))

app/src/main/java/com/rootstrap/android/ui/activity/main/ProfileActivityViewModel.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel
44
import androidx.lifecycle.ViewModelProvider
55
import androidx.lifecycle.viewModelScope
66
import com.rootstrap.android.network.managers.IUserManager
7+
import com.rootstrap.android.network.managers.SessionManager
78
import com.rootstrap.android.network.managers.UserManager
89
import com.rootstrap.android.ui.base.BaseViewModel
910
import com.rootstrap.android.util.NetworkState
@@ -23,6 +24,7 @@ open class ProfileActivityViewModel(listener: ViewModelListener?) : BaseViewMode
2324
if (result.isSuccess) {
2425
networkState = NetworkState.idle
2526
state = ProfileState.signOutSuccess
27+
SessionManager.signOut()
2628
} else {
2729
handleError(result.exceptionOrNull())
2830
}

app/src/main/java/com/rootstrap/android/ui/activity/main/SignInActivity.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ package com.rootstrap.android.ui.activity.main
22

33
import android.Manifest
44
import android.os.Bundle
5-
import androidx.lifecycle.ViewModelProviders
5+
import androidx.lifecycle.ViewModelProvider
66
import com.rootstrap.android.R
7+
import com.rootstrap.android.databinding.ActivitySignInBinding
78
import com.rootstrap.android.metrics.Analytics
89
import com.rootstrap.android.metrics.PageEvents
910
import com.rootstrap.android.metrics.VISIT_SIGN_IN
@@ -14,22 +15,24 @@ import com.rootstrap.android.util.ViewModelListener
1415
import com.rootstrap.android.util.extensions.value
1516
import com.rootstrap.android.util.permissions.PermissionActivity
1617
import com.rootstrap.android.util.permissions.PermissionResponse
17-
import kotlinx.android.synthetic.main.activity_sign_in.*
1818

1919
class SignInActivity : PermissionActivity(), AuthView {
2020

2121
private lateinit var viewModel: SignInActivityViewModel
22+
private lateinit var binding: ActivitySignInBinding
2223

2324
override fun onCreate(savedInstanceState: Bundle?) {
2425
super.onCreate(savedInstanceState)
26+
binding = ActivitySignInBinding.inflate(layoutInflater)
27+
2528
setContentView(R.layout.activity_sign_in)
2629
Analytics.track(PageEvents.visit(VISIT_SIGN_IN))
2730

2831
val factory = SignInActivityViewModelFactory(viewModelListener)
29-
viewModel = ViewModelProviders.of(this, factory)
32+
viewModel = ViewModelProvider(this, factory)
3033
.get(SignInActivityViewModel::class.java)
3134

32-
sign_in_button.setOnClickListener { signIn() }
35+
binding.signInButton.setOnClickListener { signIn() }
3336

3437
lifecycle.addObserver(viewModel)
3538

@@ -41,11 +44,13 @@ class SignInActivity : PermissionActivity(), AuthView {
4144
}
4245

4346
private fun signIn() {
44-
val user = User(
45-
email = email_edit_text.value(),
46-
password = password_edit_text.value()
47-
)
48-
viewModel.signIn(user)
47+
with(binding) {
48+
val user = User(
49+
email = emailEditText.value(),
50+
password = passwordEditText.value()
51+
)
52+
viewModel.signIn(user)
53+
}
4954
}
5055

5156
// ViewModelListener
@@ -68,7 +73,7 @@ class SignInActivity : PermissionActivity(), AuthView {
6873
}
6974
}
7075

71-
fun sampleAskForPermission() {
76+
private fun sampleAskForPermission() {
7277
requestPermission(arrayOf(Manifest.permission.CAMERA), object : PermissionResponse {
7378
override fun granted() {
7479
// TODO..

app/src/main/java/com/rootstrap/android/ui/activity/main/SignUpActivity.kt

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ package com.rootstrap.android.ui.activity.main
22

33
import android.content.Intent
44
import android.os.Bundle
5-
import androidx.lifecycle.ViewModelProviders
5+
import androidx.lifecycle.ViewModelProvider
66
import com.rootstrap.android.R
7+
import com.rootstrap.android.databinding.ActivitySignUpBinding
78
import com.rootstrap.android.metrics.Analytics
89
import com.rootstrap.android.metrics.PageEvents
910
import com.rootstrap.android.metrics.VISIT_SIGN_UP
@@ -13,39 +14,48 @@ import com.rootstrap.android.ui.view.AuthView
1314
import com.rootstrap.android.util.NetworkState
1415
import com.rootstrap.android.util.ViewModelListener
1516
import com.rootstrap.android.util.extensions.value
16-
import kotlinx.android.synthetic.main.activity_sign_up.*
1717

1818
class SignUpActivity : BaseActivity(), AuthView {
1919

2020
private lateinit var viewModel: SignUpActivityViewModel
21+
private lateinit var binding: ActivitySignUpBinding
2122

2223
override fun onCreate(savedInstanceState: Bundle?) {
2324
super.onCreate(savedInstanceState)
24-
setContentView(R.layout.activity_sign_up)
25+
binding = ActivitySignUpBinding.inflate(layoutInflater)
26+
27+
setContentView(binding.root)
2528
Analytics.track(PageEvents.visit(VISIT_SIGN_UP))
2629

2730
val factory = SignUpActivityViewModelFactory(viewModelListener)
28-
viewModel = ViewModelProviders.of(this, factory)
31+
viewModel = ViewModelProvider(this, factory)
2932
.get(SignUpActivityViewModel::class.java)
3033

31-
sign_up_button.setOnClickListener { signUp() }
32-
sign_in_text_view.setOnClickListener { startActivity(Intent(this, SignInActivity::class.java)) }
33-
34+
with(binding) {
35+
signUpButton.setOnClickListener { signUp() }
36+
signInTextView.setOnClickListener { signIn() }
37+
}
3438
lifecycle.addObserver(viewModel)
3539
}
3640

3741
override fun showProfile() {
3842
startActivityClearTask(ProfileActivity())
3943
}
4044

45+
private fun signIn() {
46+
startActivity(Intent(this, SignInActivity::class.java))
47+
}
48+
4149
private fun signUp() {
42-
val user = User(
43-
email = email_edit_text.value(),
44-
firstName = first_name_edit_text.value(),
45-
lastName = last_name_edit_text.value(),
46-
password = password_edit_text.value()
47-
)
48-
viewModel.signUp(user)
50+
with(binding) {
51+
val user = User(
52+
email = emailEditText.value(),
53+
firstName = firstNameEditText.value(),
54+
lastName = lastNameEditText.value(),
55+
password = passwordEditText.value()
56+
)
57+
viewModel.signUp(user)
58+
}
4959
}
5060

5161
// ViewModelListener

app/src/main/java/com/rootstrap/android/ui/base/BaseActivity.kt

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,47 +2,23 @@ package com.rootstrap.android.ui.base
22

33
import android.annotation.SuppressLint
44
import android.app.Activity
5-
import android.app.AlertDialog
65
import android.content.Intent
76
import androidx.appcompat.app.AppCompatActivity
8-
import com.rootstrap.android.R
9-
import com.rootstrap.android.ui.custom.LoadingDialog
7+
import com.rootstrap.android.util.LoadingDialogUtil
108

119
@SuppressLint("Registered")
1210
open class BaseActivity : AppCompatActivity(), BaseView {
1311

14-
private var loadingDialog: LoadingDialog? = null
15-
1612
override fun showProgress() {
17-
if (loadingDialog == null) {
18-
loadingDialog = LoadingDialog(this, null)
19-
}
20-
21-
loadingDialog!!.show()
13+
LoadingDialogUtil.showProgress(this)
2214
}
2315

2416
override fun hideProgress() {
25-
if (loadingDialog != null) {
26-
loadingDialog!!.dismiss()
27-
}
17+
LoadingDialogUtil.hideProgress()
2818
}
2919

3020
override fun showError(message: String?) {
31-
val builder = AlertDialog.Builder(this)
32-
builder.setTitle(getString(R.string.error))
33-
34-
when (message) {
35-
"" -> builder.setMessage(getString(R.string.generic_error))
36-
null -> builder.setMessage(getString(R.string.generic_error))
37-
else -> builder.setMessage(message)
38-
}
39-
40-
builder.setPositiveButton(getString(R.string.ok)) { dialog, _ ->
41-
dialog.cancel()
42-
}
43-
44-
val dialog: AlertDialog = builder.create()
45-
dialog.show()
21+
LoadingDialogUtil.showError(message, this)
4622
}
4723

4824
protected fun startActivityClearTask(activity: Activity) {
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
package com.rootstrap.android.ui.base
22

33
import androidx.fragment.app.Fragment
4+
import com.rootstrap.android.util.LoadingDialogUtil
45

56
open class BaseFragment : Fragment(), BaseView {
67

78
override fun showProgress() {
8-
TODO("not implemented") // To change body of created functions use File | Settings | File Templates.
9+
LoadingDialogUtil.showProgress(requireContext())
910
}
1011

1112
override fun hideProgress() {
12-
TODO("not implemented") // To change body of created functions use File | Settings | File Templates.
13+
LoadingDialogUtil.hideProgress()
1314
}
1415

1516
override fun showError(message: String?) {
16-
TODO("not implemented") // To change body of created functions use File | Settings | File Templates.
17+
LoadingDialogUtil.showError(message, requireContext())
1718
}
1819
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.rootstrap.android.util
2+
3+
import android.app.AlertDialog
4+
import android.content.Context
5+
import com.rootstrap.android.R
6+
import com.rootstrap.android.ui.custom.LoadingDialog
7+
8+
object LoadingDialogUtil {
9+
10+
private var loadingDialog: LoadingDialog? = null
11+
12+
fun showProgress(context: Context) {
13+
if (loadingDialog == null) {
14+
loadingDialog = LoadingDialog(context, null)
15+
}
16+
17+
loadingDialog?.show()
18+
}
19+
20+
fun hideProgress() {
21+
loadingDialog?.run { dismiss() }
22+
}
23+
24+
fun showError(message: String?, context: Context) {
25+
val builder = AlertDialog.Builder(context)
26+
with(builder) {
27+
setTitle(context.getString(R.string.error))
28+
29+
val showMessage = if (message.isNullOrEmpty())
30+
context.getString(R.string.generic_error)
31+
else message
32+
33+
setMessage(showMessage)
34+
35+
setPositiveButton(context.getString(R.string.ok)) { dialog, _ ->
36+
dialog.cancel()
37+
}
38+
val dialog: AlertDialog = create()
39+
dialog.show()
40+
}
41+
}
42+
}

build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Top-level build file where you can add configuration options common to all sub-projects/modules.
22

33
buildscript {
4-
ext.kotlin_version = '1.3.61'
4+
ext.kotlin_version = '1.3.72'
55
repositories {
66
google()
77
jcenter()
@@ -11,10 +11,10 @@ buildscript {
1111

1212
}
1313
dependencies {
14-
classpath 'com.android.tools.build:gradle:3.5.3'
14+
classpath 'com.android.tools.build:gradle:4.1.1'
1515
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
16-
classpath 'com.google.gms:google-services:4.3.3'
17-
classpath 'io.fabric.tools:gradle:1.31.2' // Crashlytics plugin
16+
classpath 'com.google.gms:google-services:4.3.4'
17+
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'
1818
// NOTE: Do not place your application dependencies here; they belong
1919
// in the individual module build.gradle files
2020
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Wed Apr 22 13:26:09 UYT 2020
1+
#Mon Jan 18 09:20:52 ART 2021
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.1-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip

0 commit comments

Comments
 (0)