Advertisement
Guest User

Untitled

a guest
Feb 27th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. inline fun <T> dependantLiveData(
  2. vararg dependencies: LiveData<*>,
  3. crossinline mapper: () -> T?
  4. ) = MediatorLiveData<T>().also { mediatorLiveData ->
  5. val observer = Observer<Any> { mediatorLiveData.value = mapper() }
  6. dependencies.forEach { dependencyLiveData ->
  7. mediatorLiveData.addSource(dependencyLiveData, observer)
  8. }
  9. }
  10.  
  11. sealed class LoginUiStates
  12. data class LoginUiStateSuccessfulLogin(val user: FirebaseUser) : LoginUiStates()
  13. data class LoginUiStateSuccessfulRegister(val dataOkDialog: DataOkDialog) : LoginUiStates()
  14. data class LoginUiStateError(val dataOkDialog: DataOkDialog) : LoginUiStates()
  15.  
  16. open class LoginViewModel @Inject constructor(private val dataManager: DataManager) :
  17. RxAwareViewModel() {
  18.  
  19. val liveUiStates = MutableLiveData<LoginUiStates>()
  20. val liveSnackbar = SingleLiveEvent<String>()
  21. val liveOkDialog = SingleLiveEvent<DataOkDialog>()
  22.  
  23. val liveEmail = MutableLiveData<String>()
  24. val livePass = MutableLiveData<String>()
  25. val displayName = dependantLiveData(liveEmail) {
  26. liveEmail.value ?: "null"
  27. }
  28.  
  29. open fun login(
  30. email: String,
  31. password: String
  32. ) {
  33. disposables.add(dataManager.loginUser(email, password)
  34. .subscribeOn(Schedulers.io())
  35. .observeOn(AndroidSchedulers.mainThread())
  36. .subscribe({
  37. Logger.i("Kullanıcı girişi başarılı.")
  38. liveSnackbar.value = "${it?.email} ile oturum açıldı."
  39. liveUiStates.value = LoginUiStateSuccessfulLogin(it)
  40. }, {
  41. it.printStackTrace()
  42. val dialog = DataOkDialog("SweetLoc", it?.message ?: "") {}
  43. liveUiStates.value = LoginUiStateError(dialog)
  44. })
  45. )
  46. }
  47.  
  48. fun register(
  49. email: String,
  50. password: String
  51. ) {
  52. disposables.add(dataManager.registerUser(email, password)
  53. .subscribeOn(Schedulers.io())
  54. .observeOn(AndroidSchedulers.mainThread())
  55. .subscribe({
  56. Logger.i("Kullanıcı kaydı başarılı.")
  57. liveSnackbar.value = "${it?.email} ile kayıt olundu."
  58. liveUiStates.value = LoginUiStateSuccessfulLogin(it)
  59. }, {
  60. it.printStackTrace()
  61. val dialog = DataOkDialog("SweetLoc", it?.message ?: "") {}
  62. liveUiStates.value = LoginUiStateError(dialog)
  63. })
  64. )
  65. }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement