Skip to content

Commit f548a39

Browse files
add Toolbar menu to HomeFragment
1 parent 91044de commit f548a39

15 files changed

Lines changed: 126 additions & 29 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.smarttoolfactory.propertyfindar
2+
3+
const val ORDER_BY_NONE = com.smarttoolfactory.data.constant.ORDER_BY_NONE
4+
const val ORDER_BY_PRICE_ASCENDING = com.smarttoolfactory.data.constant.ORDER_BY_PRICE_ASCENDING
5+
const val ORDER_BY_PRICE_DESCENDING = com.smarttoolfactory.data.constant.ORDER_BY_PRICE_DESCENDING
6+
const val ORDER_BY_BEDS_ASCENDING = com.smarttoolfactory.data.constant.ORDER_BY_BEDS_ASCENDING
7+
const val ORDER_BY_DES_DESCENDING = com.smarttoolfactory.data.constant.ORDER_BY_DES_DESCENDING

features/home/src/main/java/com/smarttoolfactory/home/HomeFragment.kt

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.smarttoolfactory.home
22

3-
import android.os.Bundle
4-
import android.view.View
3+
import android.widget.Toast
54
import androidx.fragment.app.Fragment
65
import androidx.fragment.app.activityViewModels
76
import androidx.lifecycle.Observer
@@ -40,8 +39,7 @@ class HomeFragment : DynamicNavigationFragment<FragmentHomeBinding>() {
4039

4140
private val navControllerViewModel by activityViewModels<NavControllerViewModel>()
4241

43-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
44-
super.onViewCreated(view, savedInstanceState)
42+
override fun bindViews() {
4543

4644
// ViewPager2
4745
val viewPager = dataBinding!!.viewPager
@@ -59,6 +57,17 @@ class HomeFragment : DynamicNavigationFragment<FragmentHomeBinding>() {
5957
viewPager.adapter =
6058
HomeViewPager2FragmentStateAdapter(childFragmentManager, viewLifecycleOwner.lifecycle)
6159

60+
dataBinding!!.toolbar.inflateMenu(R.menu.menu_home)
61+
62+
dataBinding!!.toolbar.setOnMenuItemClickListener {
63+
if (it.itemId == R.id.menu_item_sort) {
64+
Toast.makeText(requireContext(), "Toast", Toast.LENGTH_SHORT).show()
65+
true
66+
}
67+
68+
false
69+
}
70+
6271
// Bind tabs and viewpager
6372
TabLayoutMediator(tabLayout, viewPager, tabConfigurationStrategy).attach()
6473

@@ -101,14 +110,18 @@ class HomeFragment : DynamicNavigationFragment<FragmentHomeBinding>() {
101110
it.adapter = null
102111
}
103112

113+
// Remove menu item click listener
114+
dataBinding!!.toolbar.setOnMenuItemClickListener(null)
115+
104116
super.onDestroyView()
105117
}
106118

107119
private val tabConfigurationStrategy =
108120
TabLayoutMediator.TabConfigurationStrategy { tab, position ->
109121
when (position) {
110-
0 -> tab.text = "Properties With Flow"
111-
else -> tab.text = "Properties With RxJava3"
122+
0 -> tab.text = "Flow"
123+
1 -> tab.text = "RxJava3"
124+
else -> tab.text = "Flow+Pagination"
112125
}
113126
}
114127
}

features/home/src/main/java/com/smarttoolfactory/home/propertylist/PropertyListFlowFragment.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ class PropertyListFlowFragment : DynamicNavigationFragment<FragmentPropertyListB
3737

3838
// Set RecyclerViewAdapter
3939
this.adapter =
40-
PropertyItemListAdapter(R.layout.row_property, viewModel::onClick)
40+
PropertyItemListAdapter(
41+
R.layout.row_property,
42+
viewModel::onClick,
43+
viewModel::onLikeButtonClick
44+
45+
)
4146
}
4247

4348
val swipeRefreshLayout = dataBinding.swipeRefreshLayout

features/home/src/main/java/com/smarttoolfactory/home/propertylist/PropertyListRxjava3Fragment.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ class PropertyListRxjava3Fragment : DynamicNavigationFragment<FragmentPropertyLi
3737

3838
// Set RecyclerViewAdapter
3939
this.adapter =
40-
PropertyItemListAdapter(R.layout.row_property, viewModel::onClick)
40+
PropertyItemListAdapter(
41+
R.layout.row_property,
42+
viewModel::onClick,
43+
viewModel::onLikeButtonClick
44+
45+
)
4146
}
4247

4348
val swipeRefreshLayout = dataBinding.swipeRefreshLayout

features/home/src/main/java/com/smarttoolfactory/home/viewbindings/ViewBindings.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ fun View.visibilityBasedOn(condition: Boolean) {
6464
@BindingAdapter("favoriteImageSrc")
6565
fun ImageButton.setFavoriteImageSrc(favorite: Boolean) {
6666

67-
val imageResource = if (favorite) R.drawable.ic_baseline_favorite_24
68-
else R.drawable.ic_baseline_favorite_border_24
67+
val imageResource = if (favorite) R.drawable.ic_baseline_favorite_30
68+
else R.drawable.ic_baseline_favorite_border_30
6969

7070
setImageResource(imageResource)
7171
}

features/home/src/main/java/com/smarttoolfactory/home/viewmodel/AbstractPropertyListVM.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,6 @@ abstract class AbstractPropertyListVM : ViewModel() {
1414
companion object {
1515
const val PROPERTY_LIST = "PROPERTY_LIST"
1616
const val PROPERTY_DETAIL = "PROPERTY_DETAIL"
17-
18-
const val ORDER_BY_NONE = ""
19-
const val ORDER_BY_PRICE_ASCENDING = "pa"
20-
const val ORDER_BY_PRICE_DESCENDING = "pd"
21-
const val ORDER_BY_BEDS_ASCENDING = "ba"
22-
const val ORDER_BY_DES_DESCENDING = "bd"
2317
}
2418

2519
abstract val goToDetailScreen: LiveData<Event<PropertyItem>>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.smarttoolfactory.home.viewmodel
2+
3+
import androidx.hilt.lifecycle.ViewModelInject
4+
import androidx.lifecycle.MutableLiveData
5+
import androidx.lifecycle.ViewModel
6+
import com.smarttoolfactory.core.util.Event
7+
8+
class HomeToolbarVM @ViewModelInject constructor() : ViewModel() {
9+
10+
val setFilter = MutableLiveData<Event<String>>()
11+
}

features/home/src/main/java/com/smarttoolfactory/home/viewmodel/PropertyListViewModelFlow.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.smarttoolfactory.core.viewstate.Status
99
import com.smarttoolfactory.core.viewstate.ViewState
1010
import com.smarttoolfactory.domain.model.PropertyItem
1111
import com.smarttoolfactory.domain.usecase.GetPropertiesUseCaseFlow
12+
import com.smarttoolfactory.propertyfindar.ORDER_BY_NONE
1213
import kotlinx.coroutines.CoroutineScope
1314
import kotlinx.coroutines.flow.launchIn
1415
import kotlinx.coroutines.flow.onEach
@@ -42,7 +43,7 @@ class PropertyListViewModelFlow @ViewModelInject constructor(
4243
*/
4344
override fun getPropertyList() {
4445

45-
getPropertiesUseCase.getPropertiesOfflineFirst("")
46+
getPropertiesUseCase.getPropertiesOfflineFirst(orderBy = ORDER_BY_NONE)
4647
.convertToFlowViewState()
4748
.onStart {
4849
_propertyViewState.value = ViewState(status = Status.LOADING)
@@ -68,4 +69,8 @@ class PropertyListViewModelFlow @ViewModelInject constructor(
6869
override fun onClick(item: PropertyItem) {
6970
_goToDetailScreen.value = Event(item)
7071
}
72+
73+
fun onLikeButtonClick(item: PropertyItem) {
74+
println("🔥 Like: $item")
75+
}
7176
}

features/home/src/main/java/com/smarttoolfactory/home/viewmodel/PropertyListViewModelRxJava3.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.smarttoolfactory.core.viewstate.Status
99
import com.smarttoolfactory.core.viewstate.ViewState
1010
import com.smarttoolfactory.domain.model.PropertyItem
1111
import com.smarttoolfactory.domain.usecase.GetPropertiesUseCaseRxJava3
12+
import com.smarttoolfactory.propertyfindar.ORDER_BY_NONE
1213
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
1314

1415
class PropertyListViewModelRxJava3 @ViewModelInject constructor(
@@ -26,7 +27,7 @@ class PropertyListViewModelRxJava3 @ViewModelInject constructor(
2627
get() = _propertyListViewState
2728

2829
override fun getPropertyList() {
29-
getPropertiesUseCase.getPropertiesOfflineFirst(ORDER_BY_NONE)
30+
getPropertiesUseCase.getPropertiesOfflineFirst((ORDER_BY_NONE))
3031
.convertFromSingleToObservableViewStateWithLoading()
3132
.observeOn(AndroidSchedulers.mainThread())
3233
.subscribe(
@@ -56,4 +57,8 @@ class PropertyListViewModelRxJava3 @ViewModelInject constructor(
5657
override fun onClick(item: PropertyItem) {
5758
_goToDetailScreen.value = Event(item)
5859
}
60+
61+
fun onLikeButtonClick(item: PropertyItem) {
62+
println("🔥 Like: $item")
63+
}
5964
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<vector android:height="30dp" android:tint="?attr/colorControlNormal"
2+
android:viewportHeight="24" android:viewportWidth="24"
3+
android:width="30dp" xmlns:android="http://schemas.android.com/apk/res/android">
4+
<path android:fillColor="@android:color/white" android:pathData="M12,21.35l-1.45,-1.32C5.4,15.36 2,12.28 2,8.5 2,5.42 4.42,3 7.5,3c1.74,0 3.41,0.81 4.5,2.09C13.09,3.81 14.76,3 16.5,3 19.58,3 22,5.42 22,8.5c0,3.78 -3.4,6.86 -8.55,11.54L12,21.35z"/>
5+
</vector>

0 commit comments

Comments
 (0)