Skip to content

Commit a149563

Browse files
committed
estudando
1 parent 9eb8bb9 commit a149563

File tree

11 files changed

+121
-24
lines changed

11 files changed

+121
-24
lines changed

samples-for-presentation/mobile-data/funmobdatascience/app/src/main/java/com/br/experience/funmobdatascience/features/portfolio/models/Portfolio.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ import kotlinx.parcelize.Parcelize
88
* Carteira de portfolio de um usuário
99
*/
1010
@Parcelize
11-
class Portfolio(@SerializedName("shares") val shares: List<ShareDetails>): Parcelable
11+
class Portfolio(@SerializedName("shares") val shares: List<PortfolioAsset>): Parcelable
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import com.google.gson.annotations.SerializedName
66
import kotlinx.parcelize.Parcelize
77

88
@Parcelize
9-
data class ShareDetails(
9+
data class PortfolioAsset(
1010
@SerializedName("shared") val share: Share,
1111
@SerializedName("sharePurchaseVolume") val sharePurchaseVolume: Double,
1212
@SerializedName("currentValue") val currentValue: Double,

samples-for-presentation/mobile-data/funmobdatascience/app/src/main/java/com/br/experience/funmobdatascience/features/portfolio/repositories/PortfolioRepository.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import com.br.experience.funmobdatascience.features.portfolio.models.Portfolio
44
import com.br.experience.funmobdatascience.features.shares.http.InvestmentAssetApi
55
import com.br.experience.funmobdatascience.utils.network.ExecuteSafeOperation
66
import com.br.experience.funmobdatascience.utils.viewmodel.Operation
7+
import kotlinx.coroutines.Dispatchers
78
import kotlinx.coroutines.flow.Flow
89
import kotlinx.coroutines.flow.flow
10+
import kotlinx.coroutines.flow.flowOn
911

1012
class PortfolioRepository(private val api: InvestmentAssetApi) {
1113

@@ -18,5 +20,5 @@ class PortfolioRepository(private val api: InvestmentAssetApi) {
1820
"${response.errorBody()}"
1921
}
2022
emit(result)
21-
}
23+
}.flowOn(Dispatchers.IO)
2224
}

samples-for-presentation/mobile-data/funmobdatascience/app/src/main/java/com/br/experience/funmobdatascience/features/portfolio/views/PortfolioActivity.kt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,27 @@ import androidx.lifecycle.Lifecycle
66
import androidx.lifecycle.lifecycleScope
77
import androidx.lifecycle.repeatOnLifecycle
88
import com.br.experience.funmobdatascience.databinding.ActivityPortfolioBinding
9-
import com.br.experience.funmobdatascience.features.portfolio.models.ShareDetails
9+
import com.br.experience.funmobdatascience.features.portfolio.models.PortfolioAsset
1010
import com.br.experience.funmobdatascience.features.portfolio.viewmodel.PortfolioViewModel
11-
import com.br.experience.funmobdatascience.features.shares.views.list.adapter.PortfolioBinderAdapter
11+
import com.br.experience.funmobdatascience.features.portfolio.views.list.BuildPortfolioAssetViewHolder
12+
import com.br.experience.funmobdatascience.features.portfolio.views.list.ProvidePortfolioAssetViewType
1213
import com.br.experience.funmobdatascience.utils.viewmodel.MapperViewModelFactory
1314
import com.br.experience.funmobdatascience.utils.viewmodel.ProviderViewModel.createViewModel
1415
import com.br.experience.funmobdatascience.views.list.action.ActionItemViewHolder
16+
import com.br.experience.funmobdatascience.views.list.action.GenericBinderAdapterToViewHolder
1517
import com.br.experience.funmobdatascience.views.list.adapter.GeneralRecyclerViewAdapter
1618

17-
class PortfolioActivity : AppCompatActivity(), ActionItemViewHolder<ShareDetails> {
19+
class PortfolioActivity : AppCompatActivity(), ActionItemViewHolder<PortfolioAsset> {
1820

1921
private val binding: ActivityPortfolioBinding by lazy { ActivityPortfolioBinding.inflate(layoutInflater) }
20-
private val portfolioAssets: MutableList<ShareDetails> = mutableListOf()
21-
22-
private val binder = PortfolioBinderAdapter(this)
23-
private val adapter: GeneralRecyclerViewAdapter<ShareDetails> = GeneralRecyclerViewAdapter(portfolioAssets, binder)
22+
private val portfolioAssets: MutableList<PortfolioAsset> = mutableListOf()
23+
24+
private val binder = GenericBinderAdapterToViewHolder(
25+
this,
26+
ProvidePortfolioAssetViewType(),
27+
BuildPortfolioAssetViewHolder()
28+
)
29+
private val adapter: GeneralRecyclerViewAdapter<PortfolioAsset> = GeneralRecyclerViewAdapter(portfolioAssets, binder)
2430
private val factoryViewModel: MapperViewModelFactory by lazy { MapperViewModelFactory() }
2531

2632
private val viewModel: PortfolioViewModel by lazy {
@@ -34,7 +40,7 @@ class PortfolioActivity : AppCompatActivity(), ActionItemViewHolder<ShareDetails
3440
initViewModel()
3541
}
3642

37-
override fun onInteract(data: ShareDetails) {
43+
override fun onInteract(data: PortfolioAsset) {
3844
}
3945

4046
private fun initViewModel() {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.br.experience.funmobdatascience.features.portfolio.views.list
2+
3+
import androidx.recyclerview.widget.RecyclerView
4+
import com.br.experience.funmobdatascience.R
5+
import com.br.experience.funmobdatascience.features.portfolio.models.PortfolioAsset
6+
import com.br.experience.funmobdatascience.features.shares.views.list.viewholder.CardAssetViewHolder
7+
import com.br.experience.funmobdatascience.views.list.action.GenericBuildViewHolder
8+
import java.text.DecimalFormat
9+
10+
class BuildPortfolioAssetViewHolder : GenericBuildViewHolder<PortfolioAsset> {
11+
12+
private val decimalFormat = DecimalFormat("###,##0.00")
13+
14+
override fun build(viewHolder: RecyclerView.ViewHolder, data: PortfolioAsset) {
15+
if (viewHolder is CardAssetViewHolder) {
16+
with(viewHolder.binding.layoutItemInvestment) {
17+
with(data.share) {
18+
tvLabelAbbreviationNameAsset.text = name
19+
tvLabelProductPrice.text = root.context.getString(
20+
R.string.brazilian_price_placeholder,
21+
decimalFormat.format(close)
22+
)
23+
}
24+
}
25+
}
26+
}
27+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.br.experience.funmobdatascience.features.portfolio.views.list
2+
3+
import com.br.experience.funmobdatascience.features.portfolio.models.PortfolioAsset
4+
import com.br.experience.funmobdatascience.views.list.action.ProvideItemViewType
5+
import com.br.experience.funmobdatascience.views.list.viewholder.builder.BuilderViewHolder
6+
7+
class ProvidePortfolioAssetViewType : ProvideItemViewType<PortfolioAsset> {
8+
9+
override fun provide(data: PortfolioAsset?): Int {
10+
return if (data != null) {
11+
BuilderViewHolder.ALTERNATIVE_VIEW_HOLDER
12+
} else {
13+
BuilderViewHolder.ALTERNATIVE_VIEW_HOLDER
14+
}
15+
}
16+
}

samples-for-presentation/mobile-data/funmobdatascience/app/src/main/java/com/br/experience/funmobdatascience/features/shares/views/list/adapter/InvestmentAssetBinderAdapter.kt

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package com.br.experience.funmobdatascience.features.shares.views.list.adapter
33
import android.view.ViewGroup
44
import androidx.recyclerview.widget.RecyclerView
55
import com.br.experience.funmobdatascience.R
6-
import com.br.experience.funmobdatascience.features.portfolio.models.ShareDetails
6+
import com.br.experience.funmobdatascience.features.portfolio.models.PortfolioAsset
77
import com.br.experience.funmobdatascience.features.shares.models.Share
8+
import com.br.experience.funmobdatascience.features.shares.views.list.viewholder.CardAssetViewHolder
89
import com.br.experience.funmobdatascience.views.list.action.ActionItemViewHolder
910
import com.br.experience.funmobdatascience.views.list.action.BinderAdapterToViewHolder
10-
import com.br.experience.funmobdatascience.features.shares.views.list.viewholder.CardAssetViewHolder
1111
import com.br.experience.funmobdatascience.views.list.viewholder.builder.BuilderViewHolder
1212
import java.text.DecimalFormat
1313

@@ -49,12 +49,11 @@ class InvestmentAssetBinderAdapter(private val action: ActionItemViewHolder<Shar
4949
BuilderViewHolder.build(viewType, viewRoot) { CardAssetViewHolder(viewRoot) }
5050
}
5151

52-
53-
class PortfolioBinderAdapter(private val action: ActionItemViewHolder<ShareDetails>) : BinderAdapterToViewHolder<ShareDetails> {
52+
class PortfolioBinderAdapter(private val action: ActionItemViewHolder<PortfolioAsset>) : BinderAdapterToViewHolder<PortfolioAsset> {
5453

5554
private val decimalFormat = DecimalFormat("###,##0.00")
5655

57-
override fun onClick(viewHolder: RecyclerView.ViewHolder, data: List<ShareDetails>) {
56+
override fun onClick(viewHolder: RecyclerView.ViewHolder, data: List<PortfolioAsset>) {
5857
if (data.isNotEmpty()) {
5958
with(viewHolder) {
6059
itemView.setOnClickListener {
@@ -64,22 +63,24 @@ class PortfolioBinderAdapter(private val action: ActionItemViewHolder<ShareDetai
6463
}
6564
}
6665

67-
override fun getItemViewType(data: ShareDetails?): Int {
66+
override fun getItemViewType(data: PortfolioAsset?): Int {
6867
return if (data != null) {
6968
BuilderViewHolder.ALTERNATIVE_VIEW_HOLDER
7069
} else {
7170
BuilderViewHolder.ALTERNATIVE_VIEW_HOLDER
7271
}
7372
}
7473

75-
override fun fillFieldsInViewHolder(viewHolder: RecyclerView.ViewHolder, portfolio: ShareDetails) {
74+
override fun fillFieldsInViewHolder(viewHolder: RecyclerView.ViewHolder, portfolio: PortfolioAsset) {
7675
if (viewHolder is CardAssetViewHolder) {
7776
with(viewHolder.binding.layoutItemInvestment) {
78-
tvLabelAbbreviationNameAsset.text = portfolio.share.name
79-
tvLabelProductPrice.text = root.context.getString(
80-
R.string.brazilian_price_placeholder,
81-
decimalFormat.format(portfolio.share.close)
82-
)
77+
with(portfolio.share) {
78+
tvLabelAbbreviationNameAsset.text = name
79+
tvLabelProductPrice.text = root.context.getString(
80+
R.string.brazilian_price_placeholder,
81+
decimalFormat.format(close)
82+
)
83+
}
8384
}
8485
}
8586
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.br.experience.funmobdatascience.views.list.action
2+
3+
import android.view.ViewGroup
4+
import androidx.recyclerview.widget.RecyclerView
5+
import com.br.experience.funmobdatascience.views.list.viewholder.builder.BuilderViewHolder
6+
7+
class GenericBinderAdapterToViewHolder<T>(
8+
private val action: ActionItemViewHolder<T>,
9+
private val createViewType: ProvideItemViewType<T>,
10+
private val buildViewHolder: GenericBuildViewHolder<T>
11+
) : BinderAdapterToViewHolder<T> {
12+
override fun onClick(viewHolder: RecyclerView.ViewHolder, data: List<T>) {
13+
if (data.isNotEmpty()) {
14+
with(viewHolder) {
15+
itemView.setOnClickListener {
16+
action.onInteract(data[adapterPosition])
17+
}
18+
}
19+
}
20+
}
21+
22+
override fun getItemViewType(data: T?): Int = createViewType.provide(data)
23+
24+
override fun fillFieldsInViewHolder(viewHolder: RecyclerView.ViewHolder, data: T) {
25+
buildViewHolder.build(viewHolder, data)
26+
}
27+
28+
override fun getViewHolder(viewType: Int, viewRoot: ViewGroup): RecyclerView.ViewHolder =
29+
BuilderViewHolder.build(viewType, viewRoot)
30+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.br.experience.funmobdatascience.views.list.action
2+
3+
import androidx.recyclerview.widget.RecyclerView
4+
5+
interface GenericBuildViewHolder<T> {
6+
fun build(viewHolder: RecyclerView.ViewHolder, data: T)
7+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.br.experience.funmobdatascience.views.list.action
2+
3+
interface ProvideItemViewType<T> {
4+
fun provide(data: T?): Int
5+
}

0 commit comments

Comments
 (0)