diff --git a/app/src/main/java/com/checkin/app/checkin/home/epoxy/CityLocationModelHolder.kt b/app/src/main/java/com/checkin/app/checkin/home/epoxy/CityLocationModelHolder.kt index ec5e90cd..813f5487 100644 --- a/app/src/main/java/com/checkin/app/checkin/home/epoxy/CityLocationModelHolder.kt +++ b/app/src/main/java/com/checkin/app/checkin/home/epoxy/CityLocationModelHolder.kt @@ -6,28 +6,26 @@ import com.airbnb.epoxy.EpoxyAttribute import com.airbnb.epoxy.EpoxyModelClass import com.airbnb.epoxy.EpoxyModelWithHolder import com.checkin.app.checkin.R +import com.checkin.app.checkin.home.listeners.LocationSelectedListener import com.checkin.app.checkin.home.model.CityLocationModel -import com.checkin.app.checkin.menu.listeners.LocationSelectedListener import com.checkin.app.checkin.misc.epoxy.BaseEpoxyHolder @EpoxyModelClass(layout = R.layout.item_user_location_city) abstract class CityLocationModelHolder : EpoxyModelWithHolder() { - @EpoxyAttribute internal lateinit var data: CityLocationModel - @EpoxyAttribute - internal lateinit var locationSelected: LocationSelectedListener + @EpoxyAttribute(EpoxyAttribute.Option.DoNotHash) + internal lateinit var locationSelectedListener: LocationSelectedListener + + override fun createNewHolder() = Holder(locationSelectedListener) override fun bind(holder: Holder) { holder.bindData(data) - holder.itemView.setOnClickListener { - locationSelected.onSelectedLocation() - } } - class Holder : BaseEpoxyHolder() { + class Holder(val locationSelectedListener: LocationSelectedListener) : BaseEpoxyHolder() { @BindView(R.id.tv_user_location_city) internal lateinit var tvCityLocation: TextView @@ -39,6 +37,11 @@ abstract class CityLocationModelHolder : EpoxyModelWithHolder() { - @EpoxyAttribute - internal lateinit var locationSelected: LocationSelectedListener + internal lateinit var locationSelectedListener: LocationSelectedListener + + override fun createNewHolder() = Holder(locationSelectedListener) override fun bind(holder: Holder) { - if (::locationSelected.isInitialized) - holder.itemView.setOnClickListener { - locationSelected.onSelectedLocation() - } + holder.bindData("Current Location") } - class Holder : BaseEpoxyHolder() { + class Holder(val locationSelectedListener: LocationSelectedListener) : BaseEpoxyHolder() { + override fun bindData(data: String) { + locationSelectedListener.onLocationSelected(null) } } diff --git a/app/src/main/java/com/checkin/app/checkin/home/fragments/UserLocationFragment.kt b/app/src/main/java/com/checkin/app/checkin/home/fragments/UserLocationFragment.kt index db9b7d49..09c9198e 100644 --- a/app/src/main/java/com/checkin/app/checkin/home/fragments/UserLocationFragment.kt +++ b/app/src/main/java/com/checkin/app/checkin/home/fragments/UserLocationFragment.kt @@ -17,15 +17,16 @@ import com.checkin.app.checkin.R import com.checkin.app.checkin.data.resource.Resource import com.checkin.app.checkin.home.epoxy.cityLocationModelHolder import com.checkin.app.checkin.home.epoxy.currentLocationModelHolder +import com.checkin.app.checkin.home.listeners.LocationSelectedListener +import com.checkin.app.checkin.home.model.CityLocationModel import com.checkin.app.checkin.home.viewmodels.HomeViewModel import com.checkin.app.checkin.home.viewmodels.UserLocationViewModel import com.checkin.app.checkin.misc.fragments.BaseFragment import com.checkin.app.checkin.utility.Constants -class UserLocationFragment : BaseFragment() { +class UserLocationFragment : BaseFragment(), LocationSelectedListener { override val rootLayout = R.layout.fragment_user_location_switch - val viewModel: UserLocationViewModel by viewModels() - val homeViewModel: HomeViewModel by activityViewModels() + @BindView(R.id.et_user_location) internal lateinit var etUserLocation: EditText @@ -35,23 +36,15 @@ class UserLocationFragment : BaseFragment() { @BindView(R.id.im_user_location_cross) internal lateinit var imUserCross: ImageView + val viewModel: UserLocationViewModel by viewModels() + val homeViewModel: HomeViewModel by activityViewModels() + @OnTextChanged(R.id.et_user_location, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED) fun onTextChanged(et: Editable?) { - if (et.toString().isEmpty()) { - imUserCross.visibility = View.INVISIBLE - } else { - imUserCross.visibility = View.VISIBLE - } viewModel.searchCities(et.toString()) } - - @OnClick(R.id.im_user_location_cross) - fun onTextCrossed() { - etUserLocation.text.clear() - } - @OnClick(R.id.im_user_location_back) fun onBack() { requireActivity().supportFragmentManager.popBackStack() @@ -62,16 +55,7 @@ class UserLocationFragment : BaseFragment() { if (etUserLocation.text.isEmpty() || viewModel.locationData.value?.inError == true) { currentLocationModelHolder { id("present.location") - locationSelected { - val preferences = requireActivity().getSharedPreferences(Constants.LOCATION_CITY_FILE, Context.MODE_PRIVATE) - with(preferences.edit()) { - putInt(Constants.LOCATION_CITY_ID, 0) - putString(Constants.LOCATION_CITY_NAME, "Current Location") - commit() - } - homeViewModel.setCityId(0) - requireActivity().supportFragmentManager.popBackStack() - } + locationSelectedListener(this@UserLocationFragment) } } @@ -80,16 +64,7 @@ class UserLocationFragment : BaseFragment() { cityLocationModelHolder { id(model.id) data(model) - locationSelected { - val preferences = requireActivity().getSharedPreferences(Constants.LOCATION_CITY_FILE, Context.MODE_PRIVATE) - with(preferences.edit()) { - putInt(Constants.LOCATION_CITY_ID, model.id) - putString(Constants.LOCATION_CITY_NAME, model.name) - commit() - } - homeViewModel.setCityId(model.id) - requireActivity().supportFragmentManager.popBackStack() - } + locationSelectedListener(this@UserLocationFragment) } } } @@ -111,4 +86,24 @@ class UserLocationFragment : BaseFragment() { val TAG = UserLocationFragment::class.simpleName } + override fun onLocationSelected(data: CityLocationModel?) { + var id = 0 + var name = "Current Location" + + if (data != null) { + id = data.id + name = data.name + } + + val preferences = requireContext().getSharedPreferences(Constants.LOCATION_CITY_FILE, Context.MODE_PRIVATE) + with(preferences.edit()) { + putInt(Constants.LOCATION_CITY_ID, id) + putString(Constants.LOCATION_CITY_NAME, name) + commit() + } + + homeViewModel.setCityId(id) + requireActivity().supportFragmentManager.popBackStack() + } + } \ No newline at end of file diff --git a/app/src/main/java/com/checkin/app/checkin/home/listeners/LocationSelectedListener.kt b/app/src/main/java/com/checkin/app/checkin/home/listeners/LocationSelectedListener.kt new file mode 100644 index 00000000..31abcdc8 --- /dev/null +++ b/app/src/main/java/com/checkin/app/checkin/home/listeners/LocationSelectedListener.kt @@ -0,0 +1,7 @@ +package com.checkin.app.checkin.home.listeners + +import com.checkin.app.checkin.home.model.CityLocationModel + +interface LocationSelectedListener { + fun onLocationSelected(data: CityLocationModel?) +} \ No newline at end of file diff --git a/app/src/main/java/com/checkin/app/checkin/menu/listeners/LocationSelectedListener.java b/app/src/main/java/com/checkin/app/checkin/menu/listeners/LocationSelectedListener.java deleted file mode 100644 index db715ca3..00000000 --- a/app/src/main/java/com/checkin/app/checkin/menu/listeners/LocationSelectedListener.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.checkin.app.checkin.menu.listeners; - -public interface LocationSelectedListener { - void onSelectedLocation(); -}