-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathProfileActivity.kt
More file actions
99 lines (80 loc) · 2.81 KB
/
ProfileActivity.kt
File metadata and controls
99 lines (80 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package com.flatstack.android.profile
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
import com.bumptech.glide.Glide
import com.flatstack.android.R
import com.flatstack.android.Router
import com.flatstack.android.util.observeBy
import com.flatstack.android.util.provideViewModel
import kotlinx.android.synthetic.main.activity_profile.*
import org.kodein.di.Kodein
import org.kodein.di.KodeinAware
import org.kodein.di.android.kodein
import org.kodein.di.generic.instance
class ProfileActivity : AppCompatActivity(), KodeinAware, OnRefreshListener {
override val kodein: Kodein by kodein()
private val viewModel: ProfileViewModel by provideViewModel()
private val refreshLayout: SwipeRefreshLayout by lazy { swipe_layout }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_profile)
refreshLayout.setOnRefreshListener(this)
viewModel.profileResponse.observeBy(
this,
onNext = {
showProfile()
showFirstName(it.firstName)
showLastName(it.lastName)
showAvatar(it.avatarUrl)
},
onError = ::showError,
onLoading = ::visibleProgress)
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_profile, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
R.id.action_logout -> {
logout()
true
}
else -> super.onOptionsItemSelected(item)
}
override fun onRefresh() {
viewModel.updateProfile()
}
private fun showFirstName(firstName: String) {
tv_first_name.text = firstName
}
private fun showLastName(lastName: String) {
tv_last_name.text = lastName
}
private fun showAvatar(avatarUrl: String) {
Glide.with(this)
.load(avatarUrl)
.into(iv_avatar)
}
private fun logout() {
viewModel.logout()
val router by kodein.instance<Router>()
router.login(context = this, shouldClearStack = true)
}
private fun visibleProgress(show: Boolean) {
refreshLayout.isRefreshing = show
}
private fun showProfile() {
cl_main.visibility = View.VISIBLE
}
private fun showError(errorText: String?) {
errorText?.let {
Toast.makeText(this, errorText, Toast.LENGTH_LONG).show()
}
}
}