From 516148418af7a24c2fdb3e7ee83c646dc8da5af3 Mon Sep 17 00:00:00 2001 From: liveHarshit Date: Wed, 6 Feb 2019 16:48:39 +0530 Subject: [PATCH] feat: Remove all explicit intents and use safe args for search date (#997) (#998) (#1047) --- app/build.gradle | 1 + .../openevent/general/MainActivity.kt | 12 ------ .../openevent/general/event/EventsFragment.kt | 9 ++--- .../general/event/EventsViewModel.kt | 9 +++-- .../general/order/OrderCompletedFragment.kt | 21 +++------- .../general/order/OrdersUnderUserFragment.kt | 1 - .../general/search/SearchFragment.kt | 10 ++--- .../general/search/SearchLocationFragment.kt | 14 ++----- .../general/search/SearchResultsFragment.kt | 9 +---- .../general/search/SearchTimeFragment.kt | 39 +++++++------------ .../general/search/SearchTimeViewModel.kt | 5 --- .../general/search/SearchViewModel.kt | 16 ++++---- .../main/res/navigation/navigation_graph.xml | 6 ++- app/src/main/res/values/strings.xml | 1 + build.gradle | 1 + 15 files changed, 53 insertions(+), 101 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4d3b7761d2..2c891d4bbc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,6 +6,7 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' +apply plugin: 'androidx.navigation.safeargs' def STRIPE_API_TOKEN = System.getenv('STRIPE_API_TOKEN') ?: "YOUR_API_KEY" diff --git a/app/src/main/java/org/fossasia/openevent/general/MainActivity.kt b/app/src/main/java/org/fossasia/openevent/general/MainActivity.kt index f01f2716e5..c702386a78 100644 --- a/app/src/main/java/org/fossasia/openevent/general/MainActivity.kt +++ b/app/src/main/java/org/fossasia/openevent/general/MainActivity.kt @@ -11,13 +11,10 @@ import kotlinx.android.synthetic.main.activity_main.navigation import kotlinx.android.synthetic.main.activity_main.navigationAuth import kotlinx.android.synthetic.main.activity_main.mainFragmentCoordinatorLayout import org.fossasia.openevent.general.data.Preference -import org.fossasia.openevent.general.order.LAUNCH_TICKETS -import org.fossasia.openevent.general.order.TICKETS import org.fossasia.openevent.general.search.RC_CREDENTIALS_READ import org.fossasia.openevent.general.search.RC_CREDENTIALS_SAVE import org.fossasia.openevent.general.search.SAVED_LOCATION import org.fossasia.openevent.general.search.SmartAuthViewModel -import org.fossasia.openevent.general.search.TO_SEARCH import org.fossasia.openevent.general.utils.Utils.navAnimGone import org.fossasia.openevent.general.utils.Utils.navAnimVisible @@ -39,15 +36,6 @@ class MainActivity : AppCompatActivity() { if (preference.getString(SAVED_LOCATION).isNullOrEmpty()) navController.navigate(R.id.welcomeFragment) - val bundle = if (savedInstanceState == null) intent.extras else null - if (bundle != null) { - if (bundle.getBoolean(TO_SEARCH)) - navController.navigate(R.id.searchFragment) - - if (bundle.getBoolean(TICKETS) || bundle.getBoolean(LAUNCH_TICKETS)) - navController.navigate(R.id.orderUnderUserFragment) - } - navController.addOnDestinationChangedListener { _, destination, _ -> currentFragmentId = destination.id handleNavigationVisibility(currentFragmentId) diff --git a/app/src/main/java/org/fossasia/openevent/general/event/EventsFragment.kt b/app/src/main/java/org/fossasia/openevent/general/event/EventsFragment.kt index aa9bf089a9..05949a1d73 100644 --- a/app/src/main/java/org/fossasia/openevent/general/event/EventsFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/event/EventsFragment.kt @@ -115,12 +115,9 @@ class EventsFragment : Fragment() { rootView.swiperefresh.isRefreshing = it }) - if (eventsViewModel.savedLocation != null) { - rootView.locationTextView.text = eventsViewModel.savedLocation - eventsViewModel.loadLocationEvents() - } else { - rootView.locationTextView.text = "where?" - } + eventsViewModel.loadLocation() + rootView.locationTextView.text = eventsViewModel.savedLocation + eventsViewModel.loadLocationEvents() rootView.locationTextView.setOnClickListener { findNavController(rootView).navigate(R.id.searchLocationFragment, null, getAnimSlide()) diff --git a/app/src/main/java/org/fossasia/openevent/general/event/EventsViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/event/EventsViewModel.kt index 48f80d4c42..02d08e93b1 100644 --- a/app/src/main/java/org/fossasia/openevent/general/event/EventsViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/event/EventsViewModel.kt @@ -7,13 +7,13 @@ import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.schedulers.Schedulers import org.fossasia.openevent.general.data.Preference +import org.fossasia.openevent.general.search.SAVED_LOCATION import timber.log.Timber class EventsViewModel(private val eventService: EventService, private val preference: Preference) : ViewModel() { private val compositeDisposable = CompositeDisposable() - private val tokenKey = "LOCATION" private val mutableProgress = MutableLiveData() val progress: LiveData = mutableProgress @@ -24,10 +24,13 @@ class EventsViewModel(private val eventService: EventService, private val prefer private val mutableShowShimmerEvents = MutableLiveData() val showShimmerEvents: LiveData = mutableShowShimmerEvents - val savedLocation by lazy { preference.getString(tokenKey) } + var savedLocation: String? = null + + fun loadLocation() { + savedLocation = preference.getString(SAVED_LOCATION) + } fun loadLocationEvents() { - preference.putString(tokenKey, savedLocation) val query = "[{\"name\":\"location-name\",\"op\":\"ilike\",\"val\":\"%$savedLocation%\"}]" compositeDisposable.add(eventService.getEventsByLocation(query) diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedFragment.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedFragment.kt index ce166f4df1..3da3ff11fc 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedFragment.kt @@ -11,8 +11,9 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentManager import androidx.lifecycle.Observer +import androidx.navigation.NavOptions +import androidx.navigation.Navigation import androidx.navigation.Navigation.findNavController import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.fragment_order.view.orderCoordinatorLayout @@ -21,17 +22,13 @@ import kotlinx.android.synthetic.main.fragment_order.view.name import kotlinx.android.synthetic.main.fragment_order.view.share import kotlinx.android.synthetic.main.fragment_order.view.time import kotlinx.android.synthetic.main.fragment_order.view.view -import org.fossasia.openevent.general.MainActivity import org.fossasia.openevent.general.R import org.fossasia.openevent.general.event.Event import org.fossasia.openevent.general.event.EventUtils import org.fossasia.openevent.general.ticket.EVENT_ID -import org.fossasia.openevent.general.utils.Utils.getAnimSlide import org.fossasia.openevent.general.utils.extensions.nonNull import org.koin.androidx.viewmodel.ext.android.viewModel -const val TICKETS: String = "OpenMyTickets" - class OrderCompletedFragment : Fragment() { private lateinit var rootView: View @@ -118,22 +115,16 @@ class OrderCompletedFragment : Fragment() { } private fun redirectToEventsFragment() { - findNavController(rootView).navigate(R.id.eventsFragment, null, getAnimSlide()) + findNavController(rootView).popBackStack(R.id.eventsFragment, false) } private fun openEventDetails() { - findNavController(rootView).navigate(R.id.eventDetailsFragment, null, getAnimSlide() ) + findNavController(rootView).popBackStack(R.id.eventDetailsFragment, false) } private fun openTicketDetails() { - val searchBundle = Bundle() - searchBundle.putBoolean(TICKETS, true) - activity?.supportFragmentManager?.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) - val intent = Intent(activity, MainActivity::class.java) - intent.putExtras(searchBundle) - startActivity(intent) - activity?.overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right) - activity?.finish() + val navOptions = NavOptions.Builder().setPopUpTo(R.id.eventsFragment, false).build() + Navigation.findNavController(rootView).navigate(R.id.orderUnderUserFragment, null, navOptions) } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserFragment.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserFragment.kt index 5101f43bd6..c312a8e71d 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserFragment.kt @@ -28,7 +28,6 @@ import org.koin.androidx.viewmodel.ext.android.viewModel import timber.log.Timber const val ORDERS: String = "orders" -const val LAUNCH_TICKETS: String = "LAUNCH_TICKETS" class OrdersUnderUserFragment : Fragment() { diff --git a/app/src/main/java/org/fossasia/openevent/general/search/SearchFragment.kt b/app/src/main/java/org/fossasia/openevent/general/search/SearchFragment.kt index af54247732..c3630fba8a 100644 --- a/app/src/main/java/org/fossasia/openevent/general/search/SearchFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/search/SearchFragment.kt @@ -52,13 +52,13 @@ class SearchFragment : Fragment() { Navigation.findNavController(rootView).navigate(R.id.searchTimeFragment, bundle, getAnimSlide()) } - if (searchViewModel.savedDate != null) { - rootView.timeTextView.text = searchViewModel.savedDate + val time = arguments?.let { + SearchFragmentArgs.fromBundle(it).stringSavedDate } + rootView.timeTextView.text = time ?: "Anytime" - if (searchViewModel.savedLocation != null) { - rootView.locationTextView.text = searchViewModel.savedLocation - } + searchViewModel.loadSavedLocation() + rootView.locationTextView.text = searchViewModel.savedLocation rootView.locationTextView.setOnClickListener { val bundle = Bundle() diff --git a/app/src/main/java/org/fossasia/openevent/general/search/SearchLocationFragment.kt b/app/src/main/java/org/fossasia/openevent/general/search/SearchLocationFragment.kt index 3d04a8f44b..b6a6645b91 100644 --- a/app/src/main/java/org/fossasia/openevent/general/search/SearchLocationFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/search/SearchLocationFragment.kt @@ -1,7 +1,6 @@ package org.fossasia.openevent.general.search import android.Manifest -import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle import android.view.LayoutInflater @@ -13,12 +12,12 @@ import androidx.appcompat.widget.SearchView import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.lifecycle.Observer +import androidx.navigation.Navigation import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.fragment_search_location.search import kotlinx.android.synthetic.main.fragment_search_location.view.locationProgressBar import kotlinx.android.synthetic.main.fragment_search_location.view.search import kotlinx.android.synthetic.main.fragment_search_location.view.currentLocation -import org.fossasia.openevent.general.MainActivity import org.fossasia.openevent.general.R import org.fossasia.openevent.general.utils.Utils import org.koin.androidx.viewmodel.ext.android.viewModel @@ -94,15 +93,8 @@ class SearchLocationFragment : Fragment() { } private fun redirectToMain() { - val startMainActivity = Intent(activity, MainActivity::class.java).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - if (fromSearchFragment) { - val searchBundle = Bundle() - searchBundle.putBoolean(TO_SEARCH, true) - startMainActivity.putExtras(searchBundle) - } - activity?.startActivity(startMainActivity) - activity?.overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right) - activity?.finish() + val fragmentId = if (fromSearchFragment) R.id.searchFragment else R.id.eventsFragment + Navigation.findNavController(rootView).popBackStack(fragmentId, false) } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { diff --git a/app/src/main/java/org/fossasia/openevent/general/search/SearchResultsFragment.kt b/app/src/main/java/org/fossasia/openevent/general/search/SearchResultsFragment.kt index f380a73384..eeefdce503 100644 --- a/app/src/main/java/org/fossasia/openevent/general/search/SearchResultsFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/search/SearchResultsFragment.kt @@ -1,7 +1,6 @@ package org.fossasia.openevent.general.search import android.os.Bundle -import android.text.TextUtils import android.view.LayoutInflater import android.view.MenuItem import android.view.View @@ -26,7 +25,6 @@ import org.fossasia.openevent.general.event.RecyclerViewClickListener import org.fossasia.openevent.general.favorite.FavoriteEventsRecyclerAdapter import org.fossasia.openevent.general.utils.Utils.getAnimFade import org.fossasia.openevent.general.utils.extensions.nonNull -import org.fossasia.openevent.general.utils.nullToEmpty import org.koin.androidx.viewmodel.ext.android.viewModel import timber.log.Timber @@ -117,12 +115,7 @@ class SearchResultsFragment : Fragment() { val location = bundle?.getString(LOCATION) val date = bundle?.getString(DATE) searchViewModel.searchEvent = query - if (searchViewModel.savedLocation != null && TextUtils.isEmpty(location) && date == "Anytime") - searchViewModel.loadEvents( - searchViewModel.savedLocation.nullToEmpty(), - searchViewModel.savedDate.nullToEmpty()) - else - searchViewModel.loadEvents(location.toString(), date.toString()) + searchViewModel.loadEvents(location.toString(), date.toString()) } private fun showNoSearchResults(events: List) { diff --git a/app/src/main/java/org/fossasia/openevent/general/search/SearchTimeFragment.kt b/app/src/main/java/org/fossasia/openevent/general/search/SearchTimeFragment.kt index c78f8ec76e..8ba48d887f 100644 --- a/app/src/main/java/org/fossasia/openevent/general/search/SearchTimeFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/search/SearchTimeFragment.kt @@ -1,7 +1,6 @@ package org.fossasia.openevent.general.search import android.app.DatePickerDialog -import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.MenuItem @@ -9,13 +8,14 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment +import androidx.navigation.NavOptions +import androidx.navigation.Navigation import kotlinx.android.synthetic.main.fragment_search_time.view.anytimeTextView import kotlinx.android.synthetic.main.fragment_search_time.view.todayTextView import kotlinx.android.synthetic.main.fragment_search_time.view.tomorrowTextView import kotlinx.android.synthetic.main.fragment_search_time.view.thisWeekendTextView import kotlinx.android.synthetic.main.fragment_search_time.view.nextMonthTextView import kotlinx.android.synthetic.main.fragment_search_time.view.timeTextView -import org.fossasia.openevent.general.MainActivity import org.fossasia.openevent.general.R import org.fossasia.openevent.general.event.EventUtils.getSimpleFormattedDate import org.koin.androidx.viewmodel.ext.android.viewModel @@ -26,7 +26,6 @@ const val TODAY = "Today" const val TOMORROW = "Tomorrow" const val THIS_WEEKEND = "This Weekend" const val NEXT_MONTH = "In the next month" -const val TO_SEARCH = "ToSearchFragment" class SearchTimeFragment : Fragment() { private val searchTimeViewModel by viewModel() @@ -49,24 +48,19 @@ class SearchTimeFragment : Fragment() { calendar.set(Calendar.YEAR, year) calendar.set(Calendar.MONTH, monthOfYear) calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth) - - searchTimeViewModel.saveDate(getSimpleFormattedDate(calendar.time)) calendar.add(Calendar.DATE, 1) searchTimeViewModel.saveNextDate(getSimpleFormattedDate(calendar.time)) - redirectToSearch() + redirectToSearch(getSimpleFormattedDate(calendar.time)) } rootView.anytimeTextView.setOnClickListener { - searchTimeViewModel.saveDate(ANYTIME) - redirectToSearch() + redirectToSearch(ANYTIME) } rootView.todayTextView.setOnClickListener { - searchTimeViewModel.saveDate(getSimpleFormattedDate(calendar.time)) calendar.add(Calendar.DATE, 1) searchTimeViewModel.saveNextDate(getSimpleFormattedDate(calendar.time)) - searchTimeViewModel.saveDate(TODAY) - redirectToSearch() + redirectToSearch(TODAY) } rootView.tomorrowTextView.setOnClickListener { @@ -74,8 +68,7 @@ class SearchTimeFragment : Fragment() { searchTimeViewModel.saveNextDate(getSimpleFormattedDate(calendar.time)) calendar.add(Calendar.DATE, 1) searchTimeViewModel.saveNextToNextDate(getSimpleFormattedDate(calendar.time)) - searchTimeViewModel.saveDate(TOMORROW) - redirectToSearch() + redirectToSearch(TOMORROW) } rootView.thisWeekendTextView.setOnClickListener { @@ -87,8 +80,7 @@ class SearchTimeFragment : Fragment() { searchTimeViewModel.saveWeekendDate(getSimpleFormattedDate(calendar.time)) calendar.add(Calendar.DATE, 1) searchTimeViewModel.saveNextToWeekendDate(getSimpleFormattedDate(calendar.time)) - searchTimeViewModel.saveDate(THIS_WEEKEND) - redirectToSearch() + redirectToSearch(THIS_WEEKEND) } rootView.nextMonthTextView.setOnClickListener { @@ -98,12 +90,11 @@ class SearchTimeFragment : Fragment() { searchTimeViewModel.saveNextMonth(getSimpleFormattedDate(calendar.time)) calendar.add(Calendar.MONTH, 1) searchTimeViewModel.saveNextToNextMonth(getSimpleFormattedDate(calendar.time)) - searchTimeViewModel.saveDate(NEXT_MONTH) - redirectToSearch() + redirectToSearch(NEXT_MONTH) } rootView.timeTextView.setOnClickListener { - DatePickerDialog(context, date, calendar + DatePickerDialog(requireContext(), date, calendar .get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show() } @@ -111,14 +102,10 @@ class SearchTimeFragment : Fragment() { return rootView } - private fun redirectToSearch() { - val intent = Intent(context, MainActivity::class.java).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - val bundle = Bundle() - bundle.putBoolean(TO_SEARCH, true) - intent.putExtras(bundle) - startActivity(intent) - activity?.overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right) - activity?.finish() + private fun redirectToSearch(time: String) { + val args = SearchFragmentArgs.Builder(time).build().toBundle() + val navOptions = NavOptions.Builder().setPopUpTo(R.id.eventsFragment, false).build() + Navigation.findNavController(rootView).navigate(R.id.searchFragment, args, navOptions) } override fun onOptionsItemSelected(item: MenuItem): Boolean { diff --git a/app/src/main/java/org/fossasia/openevent/general/search/SearchTimeViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/search/SearchTimeViewModel.kt index d67b58d0a7..33238d276f 100644 --- a/app/src/main/java/org/fossasia/openevent/general/search/SearchTimeViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/search/SearchTimeViewModel.kt @@ -5,7 +5,6 @@ import org.fossasia.openevent.general.data.Preference class SearchTimeViewModel(private val preference: Preference) : ViewModel() { companion object { - val tokenKeyDate = "DATE" val tokenKeyNextDate = "NEXT_DATE" val tokenKeyNextToNextDate = "NEXT_TO_NEXT_DATE" val tokenKeyWeekendDate = "WEEKEND" @@ -14,10 +13,6 @@ class SearchTimeViewModel(private val preference: Preference) : ViewModel() { val tokenKeyNextToNextMonth = "NEXT_TO_NEXT_MONTH" } - fun saveDate(time: String) { - preference.putString(tokenKeyDate, time) - } - fun saveNextDate(time: String) { preference.putString(tokenKeyNextDate, time) } diff --git a/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt index 09672d6d2a..5e9c6652ef 100644 --- a/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt @@ -20,7 +20,6 @@ class SearchViewModel( ) : ViewModel() { private val compositeDisposable = CompositeDisposable() - private val tokenKey = "LOCATION" private val mutableShowShimmerResults = MutableLiveData() val showShimmerResults: LiveData = mutableShowShimmerResults @@ -31,8 +30,7 @@ class SearchViewModel( private val mutableShowNoInternetError = MutableLiveData() val showNoInternetError: LiveData = mutableShowNoInternetError var searchEvent: String? = null - val savedLocation by lazy { preference.getString(tokenKey) } - val savedDate by lazy { preference.getString(SearchTimeViewModel.tokenKeyDate) } + var savedLocation: String? = null private val savedNextDate by lazy { preference.getString(SearchTimeViewModel.tokenKeyNextDate) } private val savedNextToNextDate by lazy { preference.getString(SearchTimeViewModel.tokenKeyNextToNextDate) } private val savedWeekendDate by lazy { preference.getString(SearchTimeViewModel.tokenKeyWeekendDate) } @@ -40,9 +38,13 @@ class SearchViewModel( private val savedNextMonth by lazy { preference.getString(SearchTimeViewModel.tokenKeyNextMonth) } private val savedNextToNextMonth by lazy { preference.getString(SearchTimeViewModel.tokenKeyNextToNextMonth) } + fun loadSavedLocation() { + savedLocation = preference.getString(SAVED_LOCATION) + } + fun loadEvents(location: String, time: String) { if (!isConnected()) return - preference.putString(tokenKey, location) + preference.putString(SAVED_LOCATION, location) val query: String = when { TextUtils.isEmpty(location) -> """[{ | 'name':'name', @@ -72,7 +74,7 @@ class SearchViewModel( | }, { | 'name':'starts-at', | 'op':'ge', - | 'val':'$savedDate%' + | 'val':'$time%' | }, { | 'name':'starts-at', | 'op':'lt', @@ -148,7 +150,7 @@ class SearchViewModel( | }, { | 'name':'starts-at', | 'op':'ge', - | 'val':'$savedDate%' + | 'val':'$time%' | }, { | 'name':'starts-at', | 'op':'lt', @@ -171,8 +173,6 @@ class SearchViewModel( mutableError.value = "Error fetching events" }) ) - - preference.remove(SearchTimeViewModel.tokenKeyDate) preference.remove(SearchTimeViewModel.tokenKeyNextDate) } diff --git a/app/src/main/res/navigation/navigation_graph.xml b/app/src/main/res/navigation/navigation_graph.xml index d2c8581206..e500d87991 100644 --- a/app/src/main/res/navigation/navigation_graph.xml +++ b/app/src/main/res/navigation/navigation_graph.xml @@ -24,7 +24,11 @@ android:id="@+id/searchFragment" android:name="org.fossasia.openevent.general.search.SearchFragment" android:label="SearchFragment" - tools:layout="@layout/fragment_search" /> + tools:layout="@layout/fragment_search" > + + Events Profile Likes + savedDate Event Date : diff --git a/build.gradle b/build.gradle index aa2cb222eb..44ef7da4ac 100644 --- a/build.gradle +++ b/build.gradle @@ -11,6 +11,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha11' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files