Skip to content

Commit fcbf066

Browse files
fix: retain time and type values
1 parent ad8f47a commit fcbf066

File tree

8 files changed

+64
-30
lines changed

8 files changed

+64
-30
lines changed

app/src/main/java/org/fossasia/openevent/general/di/Modules.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import org.fossasia.openevent.general.paypal.Paypal
5959
import org.fossasia.openevent.general.paypal.PaypalApi
6060
import org.fossasia.openevent.general.search.GeoLocationViewModel
6161
import org.fossasia.openevent.general.search.SearchLocationViewModel
62+
import org.fossasia.openevent.general.search.SearchTimeViewModel
6263
import org.fossasia.openevent.general.search.SearchViewModel
6364
import org.fossasia.openevent.general.search.LocationService
6465
import org.fossasia.openevent.general.search.SearchTypeViewModel
@@ -146,7 +147,8 @@ val viewModelModule = module {
146147
viewModel { SearchViewModel(get(), get(), get(), get()) }
147148
viewModel { AttendeeViewModel(get(), get(), get(), get(), get(), get(), get()) }
148149
viewModel { SearchLocationViewModel(get()) }
149-
viewModel { SearchTypeViewModel(get()) }
150+
viewModel { SearchTimeViewModel(get()) }
151+
viewModel { SearchTypeViewModel(get(), get()) }
150152
viewModel { TicketsViewModel(get(), get(), get(), get()) }
151153
viewModel { AboutEventViewModel(get(), get()) }
152154
viewModel { SocialLinksViewModel(get(), get()) }

app/src/main/java/org/fossasia/openevent/general/search/SearchFragment.kt

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,6 @@ import org.fossasia.openevent.general.utils.Utils.setToolbar
3131

3232
class SearchFragment : Fragment() {
3333
private val searchViewModel by viewModel<SearchViewModel>()
34-
private val safeArgs: SearchFragmentArgs? by lazy {
35-
// When search fragment is opened using BottomNav, then fragment arguments are null
36-
// navArgs delegate throws an IllegalStateException when arguments are null, so we construct SearchFragmentArgs
37-
// from the arguments bundle
38-
arguments?.let { SearchFragmentArgs.fromBundle(it) }
39-
}
4034
private lateinit var rootView: View
4135
private lateinit var searchView: SearchView
4236

@@ -59,8 +53,8 @@ class SearchFragment : Fragment() {
5953
Navigation.findNavController(rootView).navigate(R.id.searchTimeFragment, bundle, getAnimSlide())
6054
}
6155
}
62-
63-
val time = safeArgs?.stringSavedDate
56+
searchViewModel.loadSavedTime()
57+
val time = searchViewModel.savedTime
6458
if (time.isNullOrBlank()) rootView.timeTextView.text = getString(R.string.anytime)
6559
else {
6660
try {
@@ -74,7 +68,8 @@ class SearchFragment : Fragment() {
7468
rootView.timeTextView.text = time
7569
}
7670
}
77-
val type = safeArgs?.stringSavedType
71+
searchViewModel.loadSavedType()
72+
val type = searchViewModel.savedType
7873
rootView.eventTypeTextView.text = if (type.isNullOrBlank()) getString(R.string.anything) else type
7974

8075
searchViewModel.loadSavedLocation()
@@ -129,8 +124,8 @@ class SearchFragment : Fragment() {
129124
SearchResultsFragmentArgs.Builder()
130125
.setQuery(query)
131126
.setLocation(rootView.locationTextView.text.toString().nullToEmpty())
132-
.setDate((safeArgs?.stringSavedDate ?: getString(R.string.anytime)).nullToEmpty())
133-
.setType((safeArgs?.stringSavedType ?: getString(R.string.anything)).nullToEmpty())
127+
.setDate((searchViewModel.savedTime ?: getString(R.string.anytime)).nullToEmpty())
128+
.setType((searchViewModel.savedType ?: getString(R.string.anything)).nullToEmpty())
134129
.build()
135130
.toBundle()
136131
.also { bundle ->

app/src/main/java/org/fossasia/openevent/general/search/SearchTimeFragment.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.fossasia.openevent.general.R
2020
import org.fossasia.openevent.general.event.EventUtils.getSimpleFormattedDate
2121
import java.util.Calendar
2222
import org.fossasia.openevent.general.utils.Utils.setToolbar
23+
import org.koin.androidx.viewmodel.ext.android.viewModel
2324

2425
const val ANYTIME = "Anytime"
2526
const val TODAY = "Today"
@@ -29,6 +30,8 @@ const val NEXT_MONTH = "In the next month"
2930

3031
class SearchTimeFragment : Fragment() {
3132
private val safeArgs: SearchTimeFragmentArgs by navArgs()
33+
private val searchTimeViewModel by viewModel<SearchTimeViewModel>()
34+
3235
private lateinit var rootView: View
3336

3437
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@@ -78,9 +81,9 @@ class SearchTimeFragment : Fragment() {
7881
}
7982

8083
private fun redirectToSearch(time: String) {
81-
val args = SearchFragmentArgs.Builder().setStringSavedDate(time).build().toBundle()
84+
searchTimeViewModel.saveTime(time)
8285
val navOptions = NavOptions.Builder().setPopUpTo(R.id.eventsFragment, false).build()
83-
Navigation.findNavController(rootView).navigate(R.id.searchFragment, args, navOptions)
86+
Navigation.findNavController(rootView).navigate(R.id.searchFragment, null, navOptions)
8487
}
8588

8689
override fun onOptionsItemSelected(item: MenuItem): Boolean {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.fossasia.openevent.general.search
2+
3+
import androidx.lifecycle.ViewModel
4+
import org.fossasia.openevent.general.data.Preference
5+
6+
const val SAVED_TIME = "TIME"
7+
8+
class SearchTimeViewModel(private val preference: Preference) : ViewModel() {
9+
10+
fun saveTime(query: String) {
11+
preference.putString(SAVED_TIME, query)
12+
}
13+
}

app/src/main/java/org/fossasia/openevent/general/search/SearchTypeFragment.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class SearchTypeFragment : Fragment() {
3535
val adapter = ArrayAdapter(context, R.layout.event_type_list, eventTypesList)
3636
rootView.eventTypesLv.adapter = adapter
3737

38-
searchTypeViewModel.eventLocations
38+
searchTypeViewModel.eventTypes
3939
.nonNull()
4040
.observe(this, Observer { list ->
4141
list.forEach {
@@ -50,8 +50,8 @@ class SearchTypeFragment : Fragment() {
5050
}
5151

5252
private fun redirectToSearch(type: String) {
53-
val args = SearchFragmentArgs.Builder().setStringSavedType(type).build().toBundle()
53+
searchTypeViewModel.saveType(type)
5454
val navOptions = NavOptions.Builder().setPopUpTo(R.id.eventsFragment, false).build()
55-
Navigation.findNavController(rootView).navigate(R.id.searchFragment, args, navOptions)
55+
Navigation.findNavController(rootView).navigate(R.id.searchFragment, null, navOptions)
5656
}
5757
}

app/src/main/java/org/fossasia/openevent/general/search/SearchTypeViewModel.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,38 @@ import androidx.lifecycle.ViewModel
66
import io.reactivex.android.schedulers.AndroidSchedulers
77
import io.reactivex.disposables.CompositeDisposable
88
import io.reactivex.schedulers.Schedulers
9+
import org.fossasia.openevent.general.data.Preference
910
import org.fossasia.openevent.general.event.EventService
1011
import org.fossasia.openevent.general.event.types.EventType
1112
import timber.log.Timber
1213

14+
const val SAVED_TYPE = "TYPE"
15+
1316
class SearchTypeViewModel(
17+
private val preference: Preference,
1418
private val eventService: EventService
1519
) : ViewModel() {
1620

1721
private val compositeDisposable = CompositeDisposable()
18-
private val mutableEventLocations = MutableLiveData<List<EventType>>()
19-
val eventLocations: LiveData<List<EventType>> = mutableEventLocations
22+
private val mutableEventTypes = MutableLiveData<List<EventType>>()
23+
val eventTypes: LiveData<List<EventType>> = mutableEventTypes
2024

2125
fun loadEventTypes() {
2226
compositeDisposable.add(eventService.getEventTypes()
2327
.subscribeOn(Schedulers.io())
2428
.observeOn(AndroidSchedulers.mainThread())
2529
.subscribe({
26-
mutableEventLocations.value = it
30+
mutableEventTypes.value = it
2731
}, {
2832
Timber.e(it, "Error fetching events types")
2933
})
3034
)
3135
}
3236

37+
fun saveType(query: String) {
38+
preference.putString(SAVED_TYPE, query)
39+
}
40+
3341
override fun onCleared() {
3442
super.onCleared()
3543
compositeDisposable.clear()

app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import org.fossasia.openevent.general.data.Preference
1414
import org.fossasia.openevent.general.data.Resource
1515
import org.fossasia.openevent.general.event.Event
1616
import org.fossasia.openevent.general.event.EventService
17+
import org.fossasia.openevent.general.event.types.EventType
1718
import org.fossasia.openevent.general.utils.DateTimeUtils.getNextDate
1819
import org.fossasia.openevent.general.utils.DateTimeUtils.getNextMonth
1920
import org.fossasia.openevent.general.utils.DateTimeUtils.getNextToNextDate
@@ -43,16 +44,38 @@ class SearchViewModel(
4344
val chipClickable: LiveData<Boolean> = mutableChipClickable
4445
var searchEvent: String? = null
4546
var savedLocation: String? = null
47+
var savedType: String? = null
48+
var savedTime: String? = null
4649
private val savedNextDate = getNextDate()
4750
private val savedNextToNextDate = getNextToNextDate()
4851
private val savedWeekendDate = getWeekendDate()
4952
private val savedWeekendNextDate = getNextToWeekendDate()
5053
private val savedNextMonth = getNextMonth()
5154
private val savedNextToNextMonth = getNextToNextMonth()
55+
private val mutableEventTypes = MutableLiveData<List<EventType>>()
56+
val eventTypes: LiveData<List<EventType>> = mutableEventTypes
57+
58+
fun loadEventTypes() {
59+
compositeDisposable.add(eventService.getEventTypes()
60+
.subscribeOn(Schedulers.io())
61+
.observeOn(AndroidSchedulers.mainThread())
62+
.subscribe({
63+
mutableEventTypes.value = it
64+
}, {
65+
Timber.e(it, "Error fetching events types")
66+
})
67+
)
68+
}
5269

5370
fun loadSavedLocation() {
5471
savedLocation = preference.getString(SAVED_LOCATION)
5572
}
73+
fun loadSavedType() {
74+
savedType = preference.getString(SAVED_TYPE)
75+
}
76+
fun loadSavedTime() {
77+
savedTime = preference.getString(SAVED_TIME)
78+
}
5679

5780
fun loadEvents(location: String, time: String, type: String) {
5881
if (mutableEvents.value != null) {

app/src/main/res/navigation/navigation_graph.xml

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,6 @@
4242
android:name="org.fossasia.openevent.general.search.SearchFragment"
4343
android:label="SearchFragment"
4444
tools:layout="@layout/fragment_search" >
45-
<argument
46-
android:name="@string/saved_date"
47-
app:argType="string"
48-
android:defaultValue="@null"
49-
app:nullable="true"/>
50-
<argument
51-
android:name="@string/savedType"
52-
app:argType="string"
53-
android:defaultValue="@null"
54-
app:nullable="true"/>
5545
</fragment>
5646
<fragment
5747
android:id="@+id/searchLocationFragment"

0 commit comments

Comments
 (0)