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

Commit 7da541f

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 76bd993 + cec34bb commit 7da541f

23 files changed

Lines changed: 147 additions & 170 deletions

app/build.gradle

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ dependencies {
5656
implementation deps.picasso
5757
implementation deps.timber
5858
implementation deps.crashlytics
59-
debugImplementation deps.leakCanary
60-
releaseImplementation deps.leakCanaryNoOp
6159

6260
// Test libraries
6361
testImplementation deps.junit

app/src/main/java/com/marknkamau/justjava/JustJavaApp.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import com.marknjunge.core.di.authModule
1111
import com.marknjunge.core.di.databaseModule
1212
import com.marknjunge.core.di.mpesaModule
1313
import com.marknkamau.justjava.di.appModule
14-
import com.squareup.leakcanary.LeakCanary
1514
import org.koin.android.ext.android.inject
1615
import org.koin.android.ext.koin.androidContext
1716
import org.koin.core.context.startKoin
@@ -23,8 +22,6 @@ class JustJavaApp : Application() {
2322
override fun onCreate() {
2423
super.onCreate()
2524

26-
LeakCanary.install(this)
27-
2825
if (BuildConfig.DEBUG) {
2926
Timber.plant(object : Timber.DebugTree() {
3027
override fun createStackElementTag(element: StackTraceElement): String {

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,24 @@ import androidx.room.Room
55
import com.marknkamau.justjava.data.local.CartDatabase
66
import com.marknkamau.justjava.data.local.PreferencesRepository
77
import com.marknkamau.justjava.data.local.PreferencesRepositoryImpl
8+
import com.marknkamau.justjava.ui.cart.CartPresenter
9+
import com.marknkamau.justjava.ui.cart.CartView
10+
import com.marknkamau.justjava.ui.checkout.CheckoutPresenter
11+
import com.marknkamau.justjava.ui.checkout.CheckoutView
12+
import com.marknkamau.justjava.ui.drinkdetails.DrinkDetailsPresenter
13+
import com.marknkamau.justjava.ui.drinkdetails.DrinkDetailsView
14+
import com.marknkamau.justjava.ui.login.LogInPresenter
15+
import com.marknkamau.justjava.ui.login.LogInView
16+
import com.marknkamau.justjava.ui.main.MainPresenter
17+
import com.marknkamau.justjava.ui.main.MainView
18+
import com.marknkamau.justjava.ui.previousOrder.PreviousOrderPresenter
19+
import com.marknkamau.justjava.ui.previousOrder.PreviousOrderView
20+
import com.marknkamau.justjava.ui.profile.ProfilePresenter
21+
import com.marknkamau.justjava.ui.profile.ProfileView
22+
import com.marknkamau.justjava.ui.signup.SignUpPresenter
23+
import com.marknkamau.justjava.ui.signup.SignUpView
824
import com.marknkamau.justjava.utils.NotificationHelper
25+
import kotlinx.coroutines.Dispatchers
926
import org.koin.android.ext.koin.androidContext
1027
import org.koin.dsl.module
1128

@@ -14,4 +31,12 @@ val appModule = module {
1431
single { Room.databaseBuilder(androidContext(), CartDatabase::class.java, "cart-db").build() }
1532
single { get<CartDatabase>().cartDao() }
1633
single { NotificationHelper(androidContext()) }
34+
factory { (view: LogInView) -> LogInPresenter(view, get(), get(), get(), Dispatchers.Main) }
35+
factory { (view: SignUpView) -> SignUpPresenter(view, get(), get(), get(), Dispatchers.Main) }
36+
factory { (view: MainView) -> MainPresenter(view, Dispatchers.Main) }
37+
factory { (view: DrinkDetailsView) -> DrinkDetailsPresenter(view, get(), Dispatchers.Main) }
38+
factory { (view: CartView) -> CartPresenter(view, get(), Dispatchers.Main) }
39+
factory { (view: CheckoutView) -> CheckoutPresenter(view, get(), get(), get(), get(), Dispatchers.Main) }
40+
factory { (view: PreviousOrderView) -> PreviousOrderPresenter(view, get(), get(), get(), Dispatchers.Main) }
41+
factory { (view: ProfileView) -> ProfilePresenter(view, get(), get(), get(), Dispatchers.Main) }
1742
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ package com.marknkamau.justjava.ui
33
import kotlinx.coroutines.CoroutineDispatcher
44
import kotlinx.coroutines.CoroutineScope
55
import kotlinx.coroutines.Job
6+
import kotlinx.coroutines.SupervisorJob
67

78
abstract class BasePresenter(mainDispatcher: CoroutineDispatcher) {
8-
private val job = Job()
9+
private val job = SupervisorJob()
910
protected val uiScope = CoroutineScope(job + mainDispatcher)
1011

11-
fun unSubscribe() {
12+
fun cancel() {
1213
job.cancel()
1314
}
1415
}

app/src/main/java/com/marknkamau/justjava/ui/cart/CartActivity.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import android.widget.Toast
88
import androidx.recyclerview.widget.DividerItemDecoration
99
import androidx.recyclerview.widget.LinearLayoutManager
1010
import androidx.recyclerview.widget.RecyclerView
11-
import com.marknkamau.justjava.JustJavaApp
1211
import com.marknkamau.justjava.R
1312
import com.marknkamau.justjava.data.local.CartDao
1413
import com.marknkamau.justjava.data.models.CartItem
@@ -17,17 +16,16 @@ import com.marknkamau.justjava.ui.checkout.CheckoutActivity
1716
import kotlinx.android.synthetic.main.activity_cart.*
1817
import kotlinx.coroutines.Dispatchers
1918
import org.koin.android.ext.android.inject
19+
import org.koin.core.parameter.parametersOf
2020

2121
class CartActivity : BaseActivity(), CartView {
22-
private lateinit var presenter: CartPresenter
22+
private val presenter: CartPresenter by inject { parametersOf(this) }
2323
private lateinit var adapter: CartAdapter
24-
private val cartDao: CartDao by inject()
2524

2625
override fun onCreate(savedInstanceState: Bundle?) {
2726
super.onCreate(savedInstanceState)
2827
setContentView(R.layout.activity_cart)
2928

30-
presenter = CartPresenter(this, cartDao, Dispatchers.Main)
3129
presenter.loadItems()
3230

3331
val editCartDialog = EditCartDialog().apply {
@@ -62,7 +60,7 @@ class CartActivity : BaseActivity(), CartView {
6260

6361
override fun onStop() {
6462
super.onStop()
65-
presenter.unSubscribe()
63+
presenter.cancel()
6664
}
6765

6866
override fun displayCart(orderItems: MutableList<CartItem>) {

app/src/main/java/com/marknkamau/justjava/ui/cart/CartPresenter.kt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,40 +8,42 @@ import kotlinx.coroutines.CoroutineDispatcher
88
import kotlinx.coroutines.launch
99
import timber.log.Timber
1010

11-
internal class CartPresenter(private val activityView: CartView, private val cart: CartDao, mainDispatcher: CoroutineDispatcher)
12-
: BasePresenter(mainDispatcher) {
11+
internal class CartPresenter(private val view: CartView,
12+
private val cart: CartDao,
13+
mainDispatcher: CoroutineDispatcher
14+
) : BasePresenter(mainDispatcher) {
1315

1416
fun loadItems() {
1517
uiScope.launch {
1618
try {
1719
val items = cart.getAll()
1820
if (items.size > 0) {
19-
activityView.displayCart(items)
21+
view.displayCart(items)
2022
var total = 0
2123
items.forEach { item -> total += item.itemPrice }
22-
activityView.displayCartTotal(total)
24+
view.displayCartTotal(total)
2325
} else {
24-
activityView.displayEmptyCart()
26+
view.displayEmptyCart()
2527
}
2628
} catch (e: Exception) {
2729
Timber.e(e)
28-
activityView.displayMessage(e.message)
30+
view.displayMessage(e.message)
2931
}
3032
}
3133
}
3234

3335
fun clearCart() {
3436
uiScope.launch {
3537
cart.deleteAll()
36-
activityView.displayEmptyCart()
38+
view.displayEmptyCart()
3739
}
3840
}
3941

4042
@SuppressLint("CheckResult")
4143
fun deleteItem(item: CartItem) {
4244
uiScope.launch {
4345
cart.deleteItem(item)
44-
activityView.displayMessage("Item deleted")
46+
view.displayMessage("Item deleted")
4547
loadItems()
4648
}
4749
}
@@ -50,7 +52,7 @@ internal class CartPresenter(private val activityView: CartView, private val car
5052
fun updateItem(item: CartItem) {
5153
uiScope.launch {
5254
cart.updateItem(item)
53-
activityView.displayMessage("Cart updated")
55+
view.displayMessage("Cart updated")
5456
loadItems()
5557
}
5658
}

app/src/main/java/com/marknkamau/justjava/ui/checkout/CheckoutActivity.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import android.widget.RadioButton
1111
import android.widget.Toast
1212
import com.marknjunge.core.auth.AuthService
1313
import com.marknjunge.core.data.firebase.ClientDatabaseService
14-
import com.marknkamau.justjava.JustJavaApp
1514
import com.marknkamau.justjava.R
1615
import com.marknjunge.core.model.Order
1716
import com.marknjunge.core.model.UserDetails
@@ -25,19 +24,16 @@ import com.marknkamau.justjava.utils.trimmedText
2524
import kotlinx.android.synthetic.main.activity_checkout.*
2625
import kotlinx.coroutines.Dispatchers
2726
import org.koin.android.ext.android.inject
27+
import org.koin.core.parameter.parametersOf
2828
import java.util.*
2929

3030
class CheckoutActivity : BaseActivity(), CheckoutView {
3131
private lateinit var name: String
3232
private lateinit var phone: String
3333
private lateinit var address: String
3434
private lateinit var comments: String
35-
private lateinit var presenter: CheckoutPresenter
3635

37-
private val preferencesRepository: PreferencesRepository by inject()
38-
private val authService: AuthService by inject()
39-
private val databaseService: ClientDatabaseService by inject()
40-
private val cartDao: CartDao by inject()
36+
private val presenter: CheckoutPresenter by inject { parametersOf(this) }
4137

4238
private var payCash = true
4339
private val orderId = UUID.randomUUID().toString().replace("-", "").subSequence(0, 10).toString()
@@ -47,8 +43,6 @@ class CheckoutActivity : BaseActivity(), CheckoutView {
4743
setContentView(R.layout.activity_checkout)
4844
supportActionBar?.title = "Checkout"
4945

50-
presenter = CheckoutPresenter(this, authService, preferencesRepository, databaseService, cartDao, Dispatchers.Main)
51-
5246
rgPayment.setOnCheckedChangeListener { _, checkedId ->
5347
val text = findViewById<RadioButton>(checkedId).text
5448
payCash = text == getString(R.string.cash_on_delivery)
@@ -71,7 +65,7 @@ class CheckoutActivity : BaseActivity(), CheckoutView {
7165

7266
override fun onStop() {
7367
super.onStop()
74-
presenter.unSubscribe()
68+
presenter.cancel()
7569
}
7670

7771
private fun placeOder() {

app/src/main/java/com/marknkamau/justjava/ui/checkout/CheckoutPresenter.kt

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,26 @@ import com.marknkamau.justjava.ui.BasePresenter
1212
import kotlinx.coroutines.CoroutineDispatcher
1313
import kotlinx.coroutines.launch
1414

15-
internal class CheckoutPresenter(private val activityView: CheckoutView,
15+
internal class CheckoutPresenter(private val view: CheckoutView,
1616
private val auth: AuthService,
1717
private val preferences: PreferencesRepository,
1818
private val database: ClientDatabaseService,
1919
private val cart: CartDao,
20-
mainDispatcher: CoroutineDispatcher) : BasePresenter(mainDispatcher) {
20+
mainDispatcher: CoroutineDispatcher
21+
) : BasePresenter(mainDispatcher) {
22+
2123
fun getSignInStatus() {
2224
if (auth.isSignedIn()) {
23-
activityView.setDisplayToLoggedIn(preferences.getUserDetails())
25+
view.setDisplayToLoggedIn(preferences.getUserDetails())
2426
} else {
25-
activityView.setDisplayToLoggedOut()
27+
view.setDisplayToLoggedOut()
2628
}
2729
}
2830

2931
fun placeOrder(orderId: String, address: String, comments: String, payCash: Boolean) {
3032
val paymentMethod = if (payCash) "cash" else "mpesa"
3133
val order = Order(orderId, auth.getCurrentUser().userId, 0, 0, address, comments, paymentMethod = paymentMethod)
32-
activityView.showUploadBar()
34+
view.showUploadBar()
3335

3436
uiScope.launch {
3537
val items = cart.getAll()
@@ -54,15 +56,15 @@ internal class CheckoutPresenter(private val activityView: CheckoutView,
5456
override fun onSuccess() {
5557
uiScope.launch {
5658
cart.deleteAll()
57-
activityView.hideUploadBar()
58-
activityView.displayMessage("Order placed")
59-
activityView.finishActivity(order)
59+
view.hideUploadBar()
60+
view.displayMessage("Order placed")
61+
view.finishActivity(order)
6062
}
6163
}
6264

6365
override fun onError(reason: String) {
64-
activityView.hideUploadBar()
65-
activityView.displayMessage(reason)
66+
view.hideUploadBar()
67+
view.displayMessage(reason)
6668
}
6769
})
6870

app/src/main/java/com/marknkamau/justjava/ui/drinkdetails/DrinkDetailsActivity.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.marknkamau.justjava.ui.drinkdetails
33
import android.os.Bundle
44
import android.view.View
55
import android.widget.Toast
6-
import com.marknkamau.justjava.JustJavaApp
76

87
import com.marknkamau.justjava.R
98
import com.marknjunge.core.model.CoffeeDrink
@@ -16,6 +15,7 @@ import kotlinx.android.synthetic.main.activity_drink_details.*
1615
import kotlinx.android.synthetic.main.content_drink_details.*
1716
import kotlinx.coroutines.Dispatchers
1817
import org.koin.android.ext.android.inject
18+
import org.koin.core.parameter.parametersOf
1919

2020
class DrinkDetailsActivity : BaseActivity(), DrinkDetailsView, View.OnClickListener {
2121

@@ -25,15 +25,12 @@ class DrinkDetailsActivity : BaseActivity(), DrinkDetailsView, View.OnClickListe
2525

2626
private lateinit var drink: CoffeeDrink
2727
private var quantity: Int = 0
28-
private lateinit var presenter: DrinkDetailsPresenter
29-
private val cartDao: CartDao by inject()
28+
private val presenter: DrinkDetailsPresenter by inject { parametersOf(this) }
3029

3130
override fun onCreate(savedInstanceState: Bundle?) {
3231
super.onCreate(savedInstanceState)
3332
setContentView(R.layout.activity_drink_details)
3433

35-
presenter = DrinkDetailsPresenter(this, cartDao, Dispatchers.Main)
36-
3734
drink = intent.extras.getParcelable(DRINK_KEY) as CoffeeDrink
3835

3936
tvDrinkName.text = drink.drinkName
@@ -58,7 +55,7 @@ class DrinkDetailsActivity : BaseActivity(), DrinkDetailsView, View.OnClickListe
5855

5956
override fun onStop() {
6057
super.onStop()
61-
presenter.unSubscribe()
58+
presenter.cancel()
6259
}
6360

6461
override fun onClick(view: View) {

app/src/main/java/com/marknkamau/justjava/ui/drinkdetails/DrinkDetailsPresenter.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,20 @@ import kotlinx.coroutines.CoroutineDispatcher
77
import kotlinx.coroutines.launch
88
import timber.log.Timber
99

10-
internal class DrinkDetailsPresenter(private val activityView: DrinkDetailsView,
10+
internal class DrinkDetailsPresenter(private val view: DrinkDetailsView,
1111
private val cart: CartDao,
12-
mainDispatcher: CoroutineDispatcher)
13-
: BasePresenter(mainDispatcher) {
12+
mainDispatcher: CoroutineDispatcher
13+
) : BasePresenter(mainDispatcher) {
1414

1515
fun addToCart(item: CartItem) {
1616
uiScope.launch {
1717
try {
1818
cart.addItem(item)
19-
activityView.displayMessage("Item added to cart")
20-
activityView.finishActivity()
19+
view.displayMessage("Item added to cart")
20+
view.finishActivity()
2121
} catch (e: Exception) {
2222
Timber.e(e)
23-
activityView.displayMessage(e.message)
23+
view.displayMessage(e.message)
2424
}
2525
}
2626
}

0 commit comments

Comments
 (0)