Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sending firebase token on the login call #225

Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ import com.google.gson.annotations.Expose
class User(
@field:Expose var user: String,
@field:Expose var password: String,
@field:Expose var uniqueId: String
@field:Expose var fcmToken: String,
@field:Expose var channelName: String = "Firebase"
)
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,6 @@ class Repository : KoinComponent {
private var syncInProgress = false
fun login(user: User): Observable<LoginResponse> = loginInterface.login(user)

fun registerForNotification(token: String): Observable<ResponseBody> =
loginInterface.registerForNotification(token)

fun getCounties(): Single<List<County>> {
val observableApi = apiInterface.getCounties()
val observableDb = db.countyDao().getAll().take(1).single(emptyList())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ import ro.code4.monitorizarevot.data.model.User
import ro.code4.monitorizarevot.data.model.response.LoginResponse

interface LoginInterface {
@POST("access/authorize")
@POST("/api/v2/access/authorize")
fun login(@Body user: User): Observable<LoginResponse>

@POST("notification/register")
fun registerForNotification(@Query("Token") token: String, @Query("ChannelName") channelName: String = "Firebase"): Observable<ResponseBody>
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package ro.code4.monitorizarevot.ui.login

import android.content.SharedPreferences
import android.util.Log
import androidx.lifecycle.LiveData
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.iid.FirebaseInstanceId
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import org.koin.android.ext.android.inject
import org.koin.core.inject
import ro.code4.monitorizarevot.BuildConfig
import ro.code4.monitorizarevot.analytics.Event
Expand All @@ -34,19 +32,16 @@ class LoginViewModel : BaseViewModel() {
getFirebaseToken(phone, password)
}

private fun onSuccessfulLogin(loginResponse: LoginResponse, firebaseToken: String) {
private fun onSuccessfulLogin(loginResponse: LoginResponse) {
logD("onSuccessfulLogin")
sharedPreferences.saveToken(loginResponse.accessToken)
registerForNotification(firebaseToken)
}

private fun onSuccessfulRegisteredForNotification() {
logD("onSuccessfulRegisteredForNotification")
if (sharedPreferences.hasCompletedOnboarding()) {
loginLiveData.postValue(Result.Success(PollingStationActivity::class.java))
} else {
loginLiveData.postValue(Result.Success(OnboardingActivity::class.java))
val nextActivity = when (sharedPreferences.hasCompletedOnboarding()) {
true -> PollingStationActivity::class.java
false -> OnboardingActivity::class.java
}
loginLiveData.postValue(Result.Success(nextActivity))
}

private fun getFirebaseToken(phone: String, password: String) {
Expand All @@ -73,35 +68,17 @@ class LoginViewModel : BaseViewModel() {

fun login(phone: String, password: String, firebaseToken: String) {
logD("login: $phone : $password -> $firebaseToken")
disposables.add(
loginRepository.login(User(phone, password, firebaseToken))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ loginResponse ->
logD("Login successful! Token received!")
onSuccessfulLogin(loginResponse, firebaseToken)
}, { throwable ->
loginRepository.login(User(phone, password, firebaseToken))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ loginResponse -> onSuccessfulLogin(loginResponse) },
{ throwable ->
firebaseAnalytics.logEvent(Event.LOGIN_FAILED.title, null)
logE("Login failed!", throwable)
onError(throwable)
})
)
}

private fun registerForNotification(firebaseToken: String) {
logD("registerForNotification with $firebaseToken")
disposables.add(
loginRepository.registerForNotification(firebaseToken)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
logD("Registered for notifications on firebase!")
onSuccessfulRegisteredForNotification()
}, { throwable ->
logE("Register for notification failed!", throwable)
onError(throwable)
})
)
.run { disposables.add(this) }
}

override fun onError(throwable: Throwable) {
Expand Down