Skip to content
This repository was archived by the owner on Dec 16, 2023. It is now read-only.

Commit e20fea4

Browse files
committed
Move signout button from overflow to profile activity
1 parent b88c6ff commit e20fea4

6 files changed

Lines changed: 50 additions & 37 deletions

File tree

app/src/main/java/com/marknkamau/justjava/di/Modules.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ val viewModelModule = module {
6868
viewModel { SignInViewModel(get(), get(), get()) }
6969
viewModel { CompleteSignUpViewModel(get(), get()) }
7070
viewModel { SignUpViewModel(get(), get(), get()) }
71-
viewModel { ProfileViewModel(get()) }
71+
viewModel { ProfileViewModel(get(), get()) }
7272
viewModel { AddressBookViewModel(get()) }
7373
viewModel { CheckoutViewModel(get(), get(), get(), get()) }
7474
viewModel { OrdersViewModel(get()) }

app/src/main/java/com/marknkamau/justjava/ui/BaseActivity.kt

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,17 @@ import android.content.Intent
44
import android.view.Menu
55
import android.view.MenuItem
66
import androidx.appcompat.app.AppCompatActivity
7-
import com.google.android.gms.auth.api.signin.GoogleSignInClient
87
import com.marknjunge.core.data.local.PreferencesRepository
9-
import com.marknjunge.core.data.model.Resource
10-
import com.marknjunge.core.data.repository.AuthRepository
118
import com.marknkamau.justjava.R
129
import com.marknkamau.justjava.ui.about.AboutActivity
1310
import com.marknkamau.justjava.ui.cart.CartActivity
1411
import com.marknkamau.justjava.ui.login.SignInActivity
1512
import com.marknkamau.justjava.ui.profile.ProfileActivity
16-
import com.marknkamau.justjava.utils.toast
17-
import kotlinx.coroutines.CoroutineScope
18-
import kotlinx.coroutines.Dispatchers
19-
import kotlinx.coroutines.launch
2013
import org.koin.android.ext.android.inject
2114

2215
abstract class BaseActivity : AppCompatActivity() {
2316

24-
private val authRepository: AuthRepository by inject()
2517
private val preferencesRepository: PreferencesRepository by inject()
26-
private val coroutineScope by lazy { CoroutineScope(Dispatchers.Main) }
2718

2819
override fun onCreateOptionsMenu(menu: Menu): Boolean {
2920
val inflater = menuInflater
@@ -40,7 +31,6 @@ abstract class BaseActivity : AppCompatActivity() {
4031
menu?.findItem(R.id.menu_profile)?.isVisible = false
4132
}
4233

43-
menu?.findItem(R.id.menu_logout)?.isVisible = preferencesRepository.isSignedIn
4434
return true
4535
}
4636

@@ -58,10 +48,6 @@ abstract class BaseActivity : AppCompatActivity() {
5848
}
5949
return true
6050
}
61-
R.id.menu_logout -> {
62-
logout()
63-
return true
64-
}
6551
R.id.menu_about -> {
6652
startActivity(Intent(this, AboutActivity::class.java))
6753
return true
@@ -70,20 +56,4 @@ abstract class BaseActivity : AppCompatActivity() {
7056
}
7157
}
7258

73-
private fun logout() {
74-
coroutineScope.launch {
75-
when (val resource = authRepository.signOut()) {
76-
is Resource.Success -> {
77-
// If this is ProfileActivity, leave it
78-
(this@BaseActivity as? ProfileActivity)?.finish()
79-
toast("Logged out")
80-
81-
invalidateOptionsMenu()
82-
}
83-
is Resource.Failure -> toast(resource.message)
84-
}
85-
86-
}
87-
}
88-
8959
}

app/src/main/java/com/marknkamau/justjava/ui/profile/ProfileActivity.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ class ProfileActivity : BaseActivity() {
5252
llOrders.setOnClickListener {
5353
startActivity(Intent(this, OrdersActivity::class.java))
5454
}
55+
btnLogout.setOnClickListener {
56+
signOut()
57+
}
5558
btnDeleteAccount.setOnClickListener {
5659
AlertDialog.Builder(this)
5760
.setTitle("Delete account")
@@ -123,6 +126,20 @@ class ProfileActivity : BaseActivity() {
123126
})
124127
}
125128

129+
private fun signOut() {
130+
profileViewModel.signOut().observe(this, Observer { resource ->
131+
when (resource) {
132+
is Resource.Success -> {
133+
invalidateOptionsMenu()
134+
finish()
135+
}
136+
is Resource.Failure -> {
137+
toast(resource.message)
138+
}
139+
}
140+
})
141+
}
142+
126143
private fun deleteAccount() {
127144
profileViewModel.deleteAccount().observe(this, Observer { resource ->
128145
when (resource) {

app/src/main/java/com/marknkamau/justjava/ui/profile/ProfileViewModel.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ import androidx.lifecycle.ViewModel
66
import androidx.lifecycle.viewModelScope
77
import com.marknjunge.core.data.model.Resource
88
import com.marknjunge.core.data.model.User
9+
import com.marknjunge.core.data.repository.AuthRepository
910
import com.marknjunge.core.data.repository.UsersRepository
1011
import kotlinx.coroutines.flow.collect
1112
import kotlinx.coroutines.launch
1213

13-
class ProfileViewModel(private val usersRepository: UsersRepository) : ViewModel() {
14+
class ProfileViewModel(private val usersRepository: UsersRepository,private val authRepository: AuthRepository) : ViewModel() {
1415
private val _loading = MutableLiveData<Boolean>()
1516
val loading: LiveData<Boolean> = _loading
1617

@@ -37,6 +38,18 @@ class ProfileViewModel(private val usersRepository: UsersRepository) : ViewModel
3738
return livedata
3839
}
3940

41+
fun signOut():LiveData<Resource<Unit>>{
42+
val livedata = MutableLiveData<Resource<Unit>>()
43+
44+
viewModelScope.launch {
45+
_loading.value = true
46+
livedata.value = authRepository.signOut()
47+
_loading.value = false
48+
}
49+
50+
return livedata
51+
}
52+
4053
fun deleteAccount():LiveData<Resource<Unit>>{
4154
val livedata = MutableLiveData<Resource<Unit>>()
4255

app/src/main/res/layout/activity_profile.xml

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,15 +241,32 @@
241241
app:layout_constraintStart_toStartOf="parent"
242242
app:layout_constraintTop_toBottomOf="@+id/llOrders" />
243243

244+
<com.google.android.material.button.MaterialButton
245+
android:id="@+id/btnLogout"
246+
style="@style/AppTheme.Button.OutlinedAccent"
247+
android:layout_width="0dp"
248+
android:layout_height="wrap_content"
249+
android:layout_marginStart="16dp"
250+
android:layout_marginTop="16dp"
251+
android:layout_marginEnd="16dp"
252+
android:text="Sign out"
253+
app:layout_constraintEnd_toStartOf="@+id/btnDeleteAccount"
254+
app:layout_constraintHorizontal_bias="0.5"
255+
app:layout_constraintStart_toStartOf="parent"
256+
app:layout_constraintTop_toBottomOf="@+id/view5" />
257+
244258
<com.google.android.material.button.MaterialButton
245259
android:id="@+id/btnDeleteAccount"
246260
style="@style/AppTheme.Button.Danger"
247261
android:layout_width="wrap_content"
248262
android:layout_height="wrap_content"
249263
android:layout_marginStart="16dp"
250264
android:layout_marginTop="16dp"
265+
android:layout_marginEnd="32dp"
251266
android:text="Delete Account"
252-
app:layout_constraintStart_toStartOf="parent"
267+
app:layout_constraintEnd_toEndOf="parent"
268+
app:layout_constraintHorizontal_bias="0.5"
269+
app:layout_constraintStart_toEndOf="@+id/btnLogout"
253270
app:layout_constraintTop_toBottomOf="@+id/view5" />
254271

255272
</androidx.constraintlayout.widget.ConstraintLayout>

app/src/main/res/menu/overflow_menu.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@
1212
android:icon="@drawable/ic_profile_light"
1313
android:title="@string/profile"
1414
app:showAsAction="ifRoom" />
15-
<item
16-
android:id="@+id/menu_logout"
17-
android:title="@string/logout"
18-
app:showAsAction="never" />
1915
<item
2016
android:id="@+id/menu_about"
2117
android:title="@string/about" />

0 commit comments

Comments
 (0)