From d43c3879fbd92d0daea00701bf881f16d5782630 Mon Sep 17 00:00:00 2001 From: Mino Date: Wed, 2 Mar 2022 17:05:52 +0900 Subject: [PATCH 1/9] =?UTF-8?q?=EA=B0=80=EA=B2=8C=EB=A6=AC=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EA=B4=91=EA=B3=A0=20=EC=9E=91=EC=97=85=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/v2/response/PopupsResponse.kt | 7 +- .../model/v2/response/store/StoreInfo.kt | 5 +- .../ui/category/StoreByMenuActivity.kt | 44 ++++++++++- .../category/adapter/SearchByAdViewHolder.kt | 39 ++++++++++ .../SearchByDistanceRecyclerAdapter.kt | 73 +++++++++++++++--- .../adapter/SearchByRatingRecyclerAdapter.kt | 62 +++++++++++++-- .../drawable/rect_ff5c43_opacity_radius16.xml | 8 ++ .../res/layout/activity_store_by_menu.xml | 14 ++++ .../main/res/layout/item_store_list_ad.xml | 77 +++++++++++++++++++ app/src/main/res/values/colors.xml | 2 + 10 files changed, 307 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt create mode 100644 app/src/main/res/drawable/rect_ff5c43_opacity_radius16.xml create mode 100644 app/src/main/res/layout/item_store_list_ad.xml diff --git a/app/src/main/java/com/zion830/threedollars/repository/model/v2/response/PopupsResponse.kt b/app/src/main/java/com/zion830/threedollars/repository/model/v2/response/PopupsResponse.kt index 75ce24bd..91d30d4d 100644 --- a/app/src/main/java/com/zion830/threedollars/repository/model/v2/response/PopupsResponse.kt +++ b/app/src/main/java/com/zion830/threedollars/repository/model/v2/response/PopupsResponse.kt @@ -2,6 +2,7 @@ package com.zion830.threedollars.repository.model.v2.response import com.google.gson.annotations.SerializedName +interface AdAndStoreItem data class PopupsResponse( @SerializedName("data") @@ -14,9 +15,9 @@ data class PopupsResponse( data class Popups( @SerializedName("bgColor") - val bgColor: String = "", + val bgColor: String? = "", @SerializedName("fontColor") - val fontColor: String = "", + val fontColor: String? = "", @SerializedName("imageUrl") val imageUrl: String = "", @SerializedName("linkUrl") @@ -25,4 +26,4 @@ data class Popups( val subTitle: String = "", @SerializedName("title") val title: String = "" -) \ No newline at end of file +) : AdAndStoreItem \ No newline at end of file diff --git a/app/src/main/java/com/zion830/threedollars/repository/model/v2/response/store/StoreInfo.kt b/app/src/main/java/com/zion830/threedollars/repository/model/v2/response/store/StoreInfo.kt index bc6c8c4f..174d0c0a 100644 --- a/app/src/main/java/com/zion830/threedollars/repository/model/v2/response/store/StoreInfo.kt +++ b/app/src/main/java/com/zion830/threedollars/repository/model/v2/response/store/StoreInfo.kt @@ -1,6 +1,9 @@ package com.zion830.threedollars.repository.model.v2.response.store import com.google.gson.annotations.SerializedName +import com.zion830.threedollars.repository.model.v2.response.AdAndStoreItem + +interface StoreByMenuItem data class StoreInfo( @SerializedName("categories") @@ -25,4 +28,4 @@ data class StoreInfo( val visitHistory: VisitHistory = VisitHistory(), @SerializedName("isDeleted") val isDeleted: Boolean = false -) \ No newline at end of file +) : AdAndStoreItem \ No newline at end of file diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt index c10a000e..d65782ef 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt @@ -2,14 +2,20 @@ package com.zion830.threedollars.ui.category import android.content.Context import android.content.Intent +import android.graphics.Color +import android.net.Uri import androidx.activity.viewModels +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.google.android.gms.ads.AdRequest +import com.google.firebase.analytics.ktx.logEvent import com.zion830.threedollars.R import com.zion830.threedollars.databinding.ActivityStoreByMenuBinding import com.zion830.threedollars.repository.model.v2.response.store.CategoryInfo import com.zion830.threedollars.repository.model.v2.response.store.StoreInfo import com.zion830.threedollars.ui.category.adapter.SearchByDistanceRecyclerAdapter import com.zion830.threedollars.ui.category.adapter.SearchByRatingRecyclerAdapter +import com.zion830.threedollars.ui.popup.PopupViewModel import com.zion830.threedollars.ui.store_detail.StoreDetailActivity import com.zion830.threedollars.ui.store_detail.map.StoreByMenuNaverMapFragment import com.zion830.threedollars.ui.store_detail.vm.StoreByMenuViewModel @@ -18,10 +24,13 @@ import zion830.com.common.base.BaseActivity import zion830.com.common.listener.OnItemClickListener class StoreByMenuActivity : - BaseActivity(R.layout.activity_store_by_menu), OnMapTouchListener { + BaseActivity(R.layout.activity_store_by_menu), + OnMapTouchListener { override val viewModel: StoreByMenuViewModel by viewModels() + private val popupViewModel: PopupViewModel by viewModels() + private lateinit var menuType: CategoryInfo private val listener = object : OnItemClickListener { @@ -73,6 +82,37 @@ class StoreByMenuActivity : viewModel.changeSortType(SortType.RATING, currentPosition) } } + popupViewModel.popups.observe(this, { popups -> + if (popups.isNotEmpty()) { + binding.itemStoreListAd.run { + tvAdTitle.text = popups[0].title + if (!popups[0].fontColor.isNullOrEmpty()) { + tvAdTitle.setTextColor(Color.parseColor(popups[0].fontColor)) + tvAdBody.setTextColor(Color.parseColor(popups[0].fontColor)) + } + tvAdBody.text = popups[0].subTitle + + if (!popups[0].bgColor.isNullOrEmpty()) { + layoutItem.setBackgroundColor(Color.parseColor(popups[0].bgColor)) + } + + Glide.with(ivAdImage) + .load(popups[0].imageUrl) + .transition(DrawableTransitionOptions.withCrossFade()) + .into(ivAdImage) + + tvDetail.setOnClickListener { + startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(popups[0].linkUrl))) + } + } + if (storeByDistanceAdapters.itemCount != 0) { + storeByDistanceAdapters.submitAdList(popups) + } + if (storeByRatingAdapters.itemCount != 0) { + storeByRatingAdapters.submitAdList(popups) + } + } + }) viewModel.storeByRating.observe(this) { val storeInfoList = if (binding.cbCertification.isChecked) { it.filter { storeInfo -> storeInfo.visitHistory.isCertified } @@ -80,6 +120,7 @@ class StoreByMenuActivity : it } storeByRatingAdapters.submitList(storeInfoList) + popupViewModel.getPopups("STORE_CATEGORY_LIST") } viewModel.storeByDistance.observe(this) { val storeInfoList = if (binding.cbCertification.isChecked) { @@ -88,6 +129,7 @@ class StoreByMenuActivity : it } storeByDistanceAdapters.submitList(storeInfoList) + popupViewModel.getPopups("STORE_CATEGORY_LIST") } binding.btnBack.setOnClickListener { finish() diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt new file mode 100644 index 00000000..c3558294 --- /dev/null +++ b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt @@ -0,0 +1,39 @@ +package com.zion830.threedollars.ui.category.adapter + +import android.annotation.SuppressLint +import android.graphics.Color +import android.view.ViewGroup +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions +import com.zion830.threedollars.R +import com.zion830.threedollars.databinding.ItemStoreListAdBinding +import com.zion830.threedollars.repository.model.v2.response.Popups +import zion830.com.common.base.BaseViewHolder +import zion830.com.common.listener.OnItemClickListener + +class SearchByAdViewHolder(parent: ViewGroup) : + BaseViewHolder(R.layout.item_store_list_ad, parent) { + + @SuppressLint("Range") + override fun bind(item: Popups, listener: OnItemClickListener?) { + super.bind(item, listener) + binding.tvAdTitle.text = item.title + if (!item.fontColor.isNullOrEmpty()) { + binding.tvAdTitle.setTextColor(Color.parseColor(item.fontColor)) + binding.tvAdBody.setTextColor(Color.parseColor(item.fontColor)) + } + binding.tvAdBody.text = item.subTitle + + if (!item.bgColor.isNullOrEmpty()) { + binding.layoutItem.setBackgroundColor(Color.parseColor(item.bgColor)) + } + + Glide.with(binding.ivAdImage) + .load(item.imageUrl) + .transition(DrawableTransitionOptions.withCrossFade()) + .into(binding.ivAdImage) + + binding.tvDetail.setOnClickListener { + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt index 2bb2a368..234d6bf0 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt @@ -1,9 +1,12 @@ package com.zion830.threedollars.ui.category.adapter +import android.util.Log import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.zion830.threedollars.R import com.zion830.threedollars.databinding.ItemStoreByDistanceBinding +import com.zion830.threedollars.repository.model.v2.response.AdAndStoreItem +import com.zion830.threedollars.repository.model.v2.response.Popups import com.zion830.threedollars.repository.model.v2.response.store.StoreInfo import com.zion830.threedollars.utils.SharedPrefUtils import zion830.com.common.base.BaseViewHolder @@ -12,35 +15,83 @@ import zion830.com.common.listener.OnItemClickListener class SearchByDistanceRecyclerAdapter( private val listener: OnItemClickListener -) : RecyclerView.Adapter() { - private val items = arrayListOf() +) : RecyclerView.Adapter() { + private val items = arrayListOf() - override fun getItemCount(): Int = items.size + override fun getItemCount(): Int { + return items.size + } + + override fun getItemViewType(position: Int): Int { + return when (items[position]) { + is Popups -> { + VIEW_TYPE_AD + } + is StoreInfo -> { + VIEW_TYPE_STORE + } + else -> { + throw IllegalStateException("Not Found ViewHolder Type") + } + } + } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchByDistanceViewHolder { - return SearchByDistanceViewHolder(parent) + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) { + VIEW_TYPE_AD -> { + SearchByAdViewHolder(parent) + } + VIEW_TYPE_STORE -> { + SearchByDistanceViewHolder(parent) + } + else -> { + throw IllegalStateException("Not Found ViewHolder Type $viewType") + } } - override fun onBindViewHolder(holder: SearchByDistanceViewHolder, position: Int) { - holder.bind(items[position], listener) + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + is SearchByDistanceViewHolder -> { + holder.bind(items[position] as StoreInfo, listener) + } + is SearchByAdViewHolder -> { + holder.bind(items[position] as Popups, null) + } + } } - fun submitList(newItems: List) { + fun submitList(newItems: List) { items.clear() items.addAll(newItems) notifyDataSetChanged() } + + fun submitAdList(newItems: List) { + val list = items.filterIsInstance() + items.clear() + items.addAll(list) + items.add(1, newItems[0]) + notifyDataSetChanged() + } + + + companion object { + private const val VIEW_TYPE_AD = 1 + private const val VIEW_TYPE_STORE = 2 + } } -class SearchByDistanceViewHolder(parent: ViewGroup) : BaseViewHolder(R.layout.item_store_by_distance, parent) { + +class SearchByDistanceViewHolder(parent: ViewGroup) : + BaseViewHolder(R.layout.item_store_by_distance, parent) { override fun bind(item: StoreInfo, listener: OnItemClickListener?) { super.bind(item, listener) val categoryInfo = SharedPrefUtils.getCategories() - val categories = item.categories.joinToString(" ") { "#${categoryInfo.find { categoryInfo -> categoryInfo.category == it }?.name}" } + val categories = + item.categories.joinToString(" ") { "#${categoryInfo.find { categoryInfo -> categoryInfo.category == it }?.name}" } val distanceString = "${item.distance.toString().toFormattedNumber()}m" binding.tvCategory.text = categories binding.tvDistance.text = distanceString } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt index a2b223f3..ee43488a 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt @@ -4,6 +4,8 @@ import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.zion830.threedollars.R import com.zion830.threedollars.databinding.ItemStoreByRatingBinding +import com.zion830.threedollars.repository.model.v2.response.AdAndStoreItem +import com.zion830.threedollars.repository.model.v2.response.Popups import com.zion830.threedollars.repository.model.v2.response.store.StoreInfo import com.zion830.threedollars.utils.SharedPrefUtils import zion830.com.common.base.BaseViewHolder @@ -11,17 +13,46 @@ import zion830.com.common.listener.OnItemClickListener class SearchByRatingRecyclerAdapter( private val listener: OnItemClickListener -) : RecyclerView.Adapter() { - private val items = arrayListOf() +) : RecyclerView.Adapter() { + private val items = arrayListOf() override fun getItemCount(): Int = items.size - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchByRatingViewHolder { - return SearchByRatingViewHolder(parent) + override fun getItemViewType(position: Int): Int { + return when (items[position]) { + is Popups -> { + VIEW_TYPE_AD + } + is StoreInfo -> { + VIEW_TYPE_STORE + } + else -> { + throw IllegalStateException("Not Found ViewHolder Type") + } + } } - override fun onBindViewHolder(holder: SearchByRatingViewHolder, position: Int) { - holder.bind(items[position], listener) + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) { + VIEW_TYPE_AD -> { + SearchByAdViewHolder(parent) + } + VIEW_TYPE_STORE -> { + SearchByRatingViewHolder(parent) + } + else -> { + throw IllegalStateException("Not Found ViewHolder Type $viewType") + } + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + is SearchByRatingViewHolder -> { + holder.bind(items[position] as StoreInfo, listener) + } + is SearchByAdViewHolder -> { + holder.bind(items[position] as Popups, null) + } + } } fun submitList(newItems: List) { @@ -29,15 +60,30 @@ class SearchByRatingRecyclerAdapter( items.addAll(newItems) notifyDataSetChanged() } + + fun submitAdList(newItems: List) { + val list = items.filterIsInstance() + items.clear() + items.addAll(list) + items.add(1, newItems[0]) + notifyDataSetChanged() + } + + companion object { + private const val VIEW_TYPE_AD = 1 + private const val VIEW_TYPE_STORE = 2 + } } -class SearchByRatingViewHolder(parent: ViewGroup) : BaseViewHolder(R.layout.item_store_by_rating, parent) { +class SearchByRatingViewHolder(parent: ViewGroup) : + BaseViewHolder(R.layout.item_store_by_rating, parent) { override fun bind(item: StoreInfo, listener: OnItemClickListener?) { super.bind(item, listener) val categoryInfo = SharedPrefUtils.getCategories() - val categories = item.categories.joinToString(" ") { "#${categoryInfo.find { categoryInfo -> categoryInfo.category == it }?.name}" } + val categories = + item.categories.joinToString(" ") { "#${categoryInfo.find { categoryInfo -> categoryInfo.category == it }?.name}" } binding.tvCategory.text = categories } } \ No newline at end of file diff --git a/app/src/main/res/drawable/rect_ff5c43_opacity_radius16.xml b/app/src/main/res/drawable/rect_ff5c43_opacity_radius16.xml new file mode 100644 index 00000000..4f7eeaa3 --- /dev/null +++ b/app/src/main/res/drawable/rect_ff5c43_opacity_radius16.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_store_by_menu.xml b/app/src/main/res/layout/activity_store_by_menu.xml index cdde8594..1387ba71 100644 --- a/app/src/main/res/layout/activity_store_by_menu.xml +++ b/app/src/main/res/layout/activity_store_by_menu.xml @@ -9,6 +9,10 @@ name="viewModel" type="com.zion830.threedollars.ui.store_detail.vm.StoreByMenuViewModel" /> + + @@ -216,6 +220,16 @@ android:textColor="@color/color_gray1" android:visibility="gone" /> + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 524e5ae2..7f5f301a 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -30,6 +30,8 @@ #999999 #99FFFFFF #FFA1AA + #FF5C43 + #33FF5C43 #4f4f4f #E2E2E2 From 81e7eca485294d40c28bbf6da03c2503c77c88b4 Mon Sep 17 00:00:00 2001 From: Mino Date: Thu, 3 Mar 2022 01:10:03 +0900 Subject: [PATCH 2/9] =?UTF-8?q?=ED=99=88=20=ED=99=94=EB=A9=B4=20=EA=B4=91?= =?UTF-8?q?=EA=B3=A0=20=EC=9E=91=EC=97=85=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2/response/HomeStoreEmptyResponse.kt | 9 ++ .../view/NearStoreNaverMapFragment.kt | 2 +- .../SearchByDistanceRecyclerAdapter.kt | 1 - .../threedollars/ui/home/HomeFragment.kt | 14 +- .../threedollars/ui/home/HomeViewModel.kt | 27 +++- .../ui/home/SearchAddressFragment.kt | 2 +- .../home/adapter/NearStoreRecyclerAdapter.kt | 120 ++++++++++++++++-- app/src/main/res/layout/fragment_home.xml | 42 ------ app/src/main/res/layout/item_home_empty.xml | 62 +++++++++ .../main/res/layout/item_near_store_ad.xml | 77 +++++++++++ .../main/res/layout/item_store_list_ad.xml | 4 +- .../main/res/layout/item_store_location.xml | 39 ------ app/src/main/res/values/strings.xml | 6 +- 13 files changed, 298 insertions(+), 107 deletions(-) create mode 100644 app/src/main/java/com/zion830/threedollars/repository/model/v2/response/HomeStoreEmptyResponse.kt create mode 100644 app/src/main/res/layout/item_home_empty.xml create mode 100644 app/src/main/res/layout/item_near_store_ad.xml diff --git a/app/src/main/java/com/zion830/threedollars/repository/model/v2/response/HomeStoreEmptyResponse.kt b/app/src/main/java/com/zion830/threedollars/repository/model/v2/response/HomeStoreEmptyResponse.kt new file mode 100644 index 00000000..da27bcc7 --- /dev/null +++ b/app/src/main/java/com/zion830/threedollars/repository/model/v2/response/HomeStoreEmptyResponse.kt @@ -0,0 +1,9 @@ +package com.zion830.threedollars.repository.model.v2.response + +import com.zion830.threedollars.R + +data class HomeStoreEmptyResponse( + val emptyImage: Int = R.drawable.ic_no_store, + val emptyTitle: Int = R.string.empty_store, + val emptyBody: Int = R.string.empty_store_msg +) : AdAndStoreItem \ No newline at end of file diff --git a/app/src/main/java/com/zion830/threedollars/ui/addstore/view/NearStoreNaverMapFragment.kt b/app/src/main/java/com/zion830/threedollars/ui/addstore/view/NearStoreNaverMapFragment.kt index 1f8765db..fa808c8e 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/addstore/view/NearStoreNaverMapFragment.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/addstore/view/NearStoreNaverMapFragment.kt @@ -36,7 +36,7 @@ class NearStoreNaverMapFragment(private val cameraMoved: () -> Unit = {}) : Nave } override fun onMyLocationLoaded(position: LatLng) { - viewModel.requestStoreInfo(position) + viewModel.requestHomeItem(position) viewModel.updateCurrentLocation(position) } diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt index 234d6bf0..d3f7489c 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt @@ -1,6 +1,5 @@ package com.zion830.threedollars.ui.category.adapter -import android.util.Log import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.zion830.threedollars.R diff --git a/app/src/main/java/com/zion830/threedollars/ui/home/HomeFragment.kt b/app/src/main/java/com/zion830/threedollars/ui/home/HomeFragment.kt index ea49fae8..470db8b7 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/home/HomeFragment.kt @@ -2,8 +2,10 @@ package com.zion830.threedollars.ui.home import android.content.Intent import android.net.Uri +import androidx.activity.viewModels import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels +import androidx.fragment.app.viewModels import androidx.recyclerview.widget.LinearSnapHelper import com.naver.maps.geometry.LatLng import com.zion830.threedollars.Constants @@ -12,6 +14,7 @@ import com.zion830.threedollars.databinding.FragmentHomeBinding import com.zion830.threedollars.repository.model.v2.response.store.StoreInfo import com.zion830.threedollars.ui.addstore.view.NearStoreNaverMapFragment import com.zion830.threedollars.ui.home.adapter.NearStoreRecyclerAdapter +import com.zion830.threedollars.ui.popup.PopupViewModel import com.zion830.threedollars.ui.store_detail.StoreDetailActivity import com.zion830.threedollars.utils.getCurrentLocationName import com.zion830.threedollars.utils.showToast @@ -53,7 +56,6 @@ class HomeFragment : BaseFragment(R.layout.f getCurrentLocationName(it) ?: getString(R.string.location_no_address) } viewModel.nearStoreInfo.observe(viewLifecycleOwner) { store -> - binding.layoutEmpty.isVisible = store.isNullOrEmpty() adapter.submitList(store) } binding.layoutAddress.setOnClickListener { @@ -81,7 +83,8 @@ class HomeFragment : BaseFragment(R.layout.f } } viewModel.nearStoreInfo.observe(viewLifecycleOwner) { res -> - naverMapFragment.addStoreMarkers(R.drawable.ic_store_off, res ?: listOf()) { + val list = res?.filterIsInstance() + naverMapFragment.addStoreMarkers(R.drawable.ic_store_off, list ?: listOf()) { onStoreClicked(it) } } @@ -105,13 +108,14 @@ class HomeFragment : BaseFragment(R.layout.f adapter.focusedIndex ) adapter.notifyDataSetChanged() - naverMapFragment.moveCameraWithAnim(adapter.getItemLocation(position)) + adapter.getItemLocation(position) + ?.let { naverMapFragment.moveCameraWithAnim(it) } } } }) ) binding.tvRetrySearch.setOnClickListener { - viewModel.requestStoreInfo(naverMapFragment.getMapCenterLatLng()) + viewModel.requestHomeItem(naverMapFragment.getMapCenterLatLng()) binding.tvRetrySearch.isVisible = false } binding.ibToss.setOnClickListener { @@ -147,6 +151,6 @@ class HomeFragment : BaseFragment(R.layout.f override fun onResume() { super.onResume() - naverMapFragment.getMapCenterLatLng().let { viewModel.requestStoreInfo(it) } + naverMapFragment.getMapCenterLatLng().let { viewModel.requestHomeItem(it) } } } \ No newline at end of file diff --git a/app/src/main/java/com/zion830/threedollars/ui/home/HomeViewModel.kt b/app/src/main/java/com/zion830/threedollars/ui/home/HomeViewModel.kt index 875127c4..ebf0c32d 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/home/HomeViewModel.kt @@ -3,7 +3,10 @@ package com.zion830.threedollars.ui.home import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.naver.maps.geometry.LatLng +import com.zion830.threedollars.repository.PopupRepository import com.zion830.threedollars.repository.StoreRepository +import com.zion830.threedollars.repository.model.v2.response.AdAndStoreItem +import com.zion830.threedollars.repository.model.v2.response.HomeStoreEmptyResponse import com.zion830.threedollars.repository.model.v2.response.store.StoreInfo import com.zion830.threedollars.utils.getCurrentLocationName import kotlinx.coroutines.Dispatchers @@ -13,8 +16,9 @@ import zion830.com.common.base.BaseViewModel class HomeViewModel : BaseViewModel() { private val repository = StoreRepository() + private val popupRepository = PopupRepository() - val nearStoreInfo: MutableLiveData?> = MutableLiveData() + val nearStoreInfo: MutableLiveData?> = MutableLiveData() val searchResultLocation: MutableLiveData = MutableLiveData() @@ -28,12 +32,25 @@ class HomeViewModel : BaseViewModel() { addressText.value = getCurrentLocationName(latlng) ?: "위치를 찾는 중..." } - fun requestStoreInfo(location: LatLng) { + fun requestHomeItem(location: LatLng) { viewModelScope.launch(Dispatchers.IO + coroutineExceptionHandler) { - val data = repository.getAllStore(location.latitude, location.longitude) - if (data.isSuccessful) { - nearStoreInfo.postValue(data.body()?.data) + val storeData = repository.getAllStore(location.latitude, location.longitude) + val adData = popupRepository.getPopups("MAIN_PAGE_CARD").body()?.data + + val resultList: ArrayList = arrayListOf() + storeData.body()?.data?.let { resultList.addAll(it) } + + if (resultList.isNotEmpty()) { + if (adData != null) { + adData.firstOrNull()?.let { resultList.add(1, it) } + } + } else { + resultList.add(HomeStoreEmptyResponse()) + if (adData != null) { + adData.firstOrNull()?.let { resultList.add(1, it) } + } } + nearStoreInfo.postValue(resultList.toList()) } } } \ No newline at end of file diff --git a/app/src/main/java/com/zion830/threedollars/ui/home/SearchAddressFragment.kt b/app/src/main/java/com/zion830/threedollars/ui/home/SearchAddressFragment.kt index bbc7412f..17724345 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/home/SearchAddressFragment.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/home/SearchAddressFragment.kt @@ -28,7 +28,7 @@ class SearchAddressFragment : BaseFragment { override fun onClick(item: Document) { val location = LatLng(item.y.toDouble(), item.x.toDouble()) - viewModel.requestStoreInfo(location) + viewModel.requestHomeItem(location) searchViewModel.updateLatLng(location) activity?.supportFragmentManager?.popBackStack() searchViewModel.clear() diff --git a/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt b/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt index 1d2514d4..a8b433d0 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt @@ -1,11 +1,25 @@ package com.zion830.threedollars.ui.home.adapter +import android.annotation.SuppressLint +import android.graphics.Color import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.naver.maps.geometry.LatLng import com.zion830.threedollars.R +import com.zion830.threedollars.databinding.ItemHomeEmptyBinding +import com.zion830.threedollars.databinding.ItemNearStoreAdBinding +import com.zion830.threedollars.databinding.ItemStoreListAdBinding import com.zion830.threedollars.databinding.ItemStoreLocationBinding +import com.zion830.threedollars.repository.model.v2.response.AdAndStoreItem +import com.zion830.threedollars.repository.model.v2.response.HomeStoreEmptyResponse +import com.zion830.threedollars.repository.model.v2.response.Popups import com.zion830.threedollars.repository.model.v2.response.store.StoreInfo +import com.zion830.threedollars.ui.category.adapter.SearchByAdViewHolder +import com.zion830.threedollars.ui.category.adapter.SearchByDistanceRecyclerAdapter +import com.zion830.threedollars.ui.category.adapter.SearchByDistanceViewHolder import com.zion830.threedollars.ui.mypage.adapter.bindMenuIcons import com.zion830.threedollars.utils.SharedPrefUtils import zion830.com.common.base.BaseDiffUtilCallback @@ -15,21 +29,109 @@ import zion830.com.common.listener.OnItemClickListener class NearStoreRecyclerAdapter( private val clickListener: OnItemClickListener, private val certificationClick: (StoreInfo?) -> Unit -) : ListAdapter(BaseDiffUtilCallback()) { +) : ListAdapter(BaseDiffUtilCallback()) { var focusedIndex = 0 - fun getItemLocation(position: Int) = - LatLng(getItem(position)?.latitude ?: 0.0, getItem(position)?.longitude ?: 0.0) + fun getItemLocation(position: Int) = when (getItem(position)) { + is StoreInfo -> { + LatLng( + (getItem(position) as StoreInfo).latitude, + (getItem(position) as StoreInfo).longitude + ) + } + else -> { + null + } + } - fun getItemPosition(item: StoreInfo) = currentList.indexOfFirst { it?.storeId == item.storeId } + fun getItemPosition(item: StoreInfo) = + currentList.indexOfFirst { + if (it is StoreInfo) { + it.storeId == item.storeId + } else { + false + } + } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NearStoreViewHolder { - return NearStoreViewHolder(parent, certificationClick) + override fun getItemViewType(position: Int): Int = when (getItem(position)) { + is StoreInfo -> { + VIEW_TYPE_STORE + } + is Popups -> { + VIEW_TYPE_AD + } + else -> { + VIEW_TYPE_EMPTY + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) { + VIEW_TYPE_AD -> { + NearStoreAdViewHolder(parent) + } + VIEW_TYPE_STORE -> { + NearStoreViewHolder(parent, certificationClick) + } + else -> { + NearStoreEmptyViewHolder(parent) + } + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + is NearStoreViewHolder -> { + holder.bind(getItem(position) as StoreInfo, listener = clickListener) + holder.bindPosition(focusedIndex == position) + } + is NearStoreAdViewHolder -> { + holder.bind(getItem(position) as Popups, null) + } + is NearStoreEmptyViewHolder -> { + holder.bind(getItem(position) as HomeStoreEmptyResponse, null) + } + } } - override fun onBindViewHolder(holder: NearStoreViewHolder, position: Int) { - holder.bind(getItem(position), listener = clickListener) - holder.bindPosition(focusedIndex == position) + companion object { + private const val VIEW_TYPE_EMPTY = 0 + private const val VIEW_TYPE_AD = 1 + private const val VIEW_TYPE_STORE = 2 + } +} + +class NearStoreEmptyViewHolder(parent: ViewGroup) : + BaseViewHolder(R.layout.item_home_empty, parent) { + + @SuppressLint("Range") + override fun bind( + item: HomeStoreEmptyResponse, + listener: OnItemClickListener? + ) { + super.bind(item, listener) + } +} + +class NearStoreAdViewHolder(parent: ViewGroup) : + BaseViewHolder(R.layout.item_near_store_ad, parent) { + + @SuppressLint("Range") + override fun bind(item: Popups, listener: OnItemClickListener?) { + super.bind(item, listener) + binding.tvAdTitle.text = item.title + if (!item.fontColor.isNullOrEmpty()) { + binding.tvAdTitle.setTextColor(Color.parseColor(item.fontColor)) + binding.tvAdBody.setTextColor(Color.parseColor(item.fontColor)) + } + binding.tvAdBody.text = item.subTitle + + if (!item.bgColor.isNullOrEmpty()) { + binding.layoutItem.setBackgroundColor(Color.parseColor(item.bgColor)) + } + + Glide.with(binding.ivAdImage) + .load(item.imageUrl) + .transition(DrawableTransitionOptions.withCrossFade()) + .into(binding.ivAdImage) } } diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index c0ee39ae..d6f2f04a 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -110,47 +110,5 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_empty.xml b/app/src/main/res/layout/item_home_empty.xml new file mode 100644 index 00000000..8e9ca8af --- /dev/null +++ b/app/src/main/res/layout/item_home_empty.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + > + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_near_store_ad.xml b/app/src/main/res/layout/item_near_store_ad.xml new file mode 100644 index 00000000..28dde119 --- /dev/null +++ b/app/src/main/res/layout/item_near_store_ad.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_store_list_ad.xml b/app/src/main/res/layout/item_store_list_ad.xml index 22ada8bd..3900859e 100644 --- a/app/src/main/res/layout/item_store_list_ad.xml +++ b/app/src/main/res/layout/item_store_list_ad.xml @@ -22,7 +22,7 @@ android:background="@drawable/rect_ff5c43_opacity_radius16" android:paddingHorizontal="12dp" android:paddingVertical="4dp" - android:text="광고" + android:text="@string/ad" android:textColor="@color/color_FF5C43" android:textSize="12sp" app:layout_constraintStart_toStartOf="parent" @@ -34,7 +34,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" - android:text="자세히 보기 >" + android:text="@string/detail" android:textColor="@color/color_FFA1AA" android:textSize="12sp" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/item_store_location.xml b/app/src/main/res/layout/item_store_location.xml index 1dd2701a..2881a799 100644 --- a/app/src/main/res/layout/item_store_location.xml +++ b/app/src/main/res/layout/item_store_location.xml @@ -141,44 +141,5 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/ll_distance_rating" /> - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 68386485..0f9b331f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -192,8 +192,8 @@ 4점 이상 가게형태 - 주변 2km 이내에 가게가 없어요 - 다른 주소로 검색하거나 직접 제보해보세요! + 2km 이내에 가게가 없어요 + 다른 주소로 검색하거나\n직접 제보해보세요! 아직 등록된 정보가 없어요. 검색 결과가 없어요. 출몰시기 @@ -267,4 +267,6 @@ 10m이내에 이미 제보된\n가게가 있어요! 중복된 가게 제보인지 확인해 주세요 이 위치가 맞아요! + 광고 + ]]> From d23a8625dcc0d9d8ba7ba2a23a0cd4280350b494 Mon Sep 17 00:00:00 2001 From: Mino Date: Thu, 3 Mar 2022 01:22:01 +0900 Subject: [PATCH 3/9] =?UTF-8?q?=EA=B4=91=EA=B3=A0=EC=97=90=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EB=A6=AC=EC=8A=A4=EB=84=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/category/StoreByMenuActivity.kt | 10 ++++++++-- .../ui/category/adapter/SearchByAdViewHolder.kt | 6 ------ .../adapter/SearchByDistanceRecyclerAdapter.kt | 5 +++-- .../adapter/SearchByRatingRecyclerAdapter.kt | 5 +++-- .../zion830/threedollars/ui/home/HomeFragment.kt | 6 ++++++ .../ui/home/adapter/NearStoreRecyclerAdapter.kt | 5 ++--- app/src/main/res/layout/item_home_empty.xml | 2 +- app/src/main/res/layout/item_near_store_ad.xml | 15 ++++++++++++++- app/src/main/res/layout/item_store_list_ad.xml | 12 ++++++++++++ 9 files changed, 49 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt index d65782ef..8aa32f90 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt @@ -11,6 +11,7 @@ import com.google.android.gms.ads.AdRequest import com.google.firebase.analytics.ktx.logEvent import com.zion830.threedollars.R import com.zion830.threedollars.databinding.ActivityStoreByMenuBinding +import com.zion830.threedollars.repository.model.v2.response.Popups import com.zion830.threedollars.repository.model.v2.response.store.CategoryInfo import com.zion830.threedollars.repository.model.v2.response.store.StoreInfo import com.zion830.threedollars.ui.category.adapter.SearchByDistanceRecyclerAdapter @@ -39,12 +40,17 @@ class StoreByMenuActivity : startActivity(intent) } } + private val adListener = object : OnItemClickListener { + override fun onClick(item: Popups) { + startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(item.linkUrl))) + } + } private val storeByDistanceAdapters by lazy { - SearchByDistanceRecyclerAdapter(listener) + SearchByDistanceRecyclerAdapter(listener,adListener) } private val storeByRatingAdapters by lazy { - SearchByRatingRecyclerAdapter(listener) + SearchByRatingRecyclerAdapter(listener,adListener) } override fun onTouch() { diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt index c3558294..b2806e0b 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt @@ -17,13 +17,10 @@ class SearchByAdViewHolder(parent: ViewGroup) : @SuppressLint("Range") override fun bind(item: Popups, listener: OnItemClickListener?) { super.bind(item, listener) - binding.tvAdTitle.text = item.title if (!item.fontColor.isNullOrEmpty()) { binding.tvAdTitle.setTextColor(Color.parseColor(item.fontColor)) binding.tvAdBody.setTextColor(Color.parseColor(item.fontColor)) } - binding.tvAdBody.text = item.subTitle - if (!item.bgColor.isNullOrEmpty()) { binding.layoutItem.setBackgroundColor(Color.parseColor(item.bgColor)) } @@ -32,8 +29,5 @@ class SearchByAdViewHolder(parent: ViewGroup) : .load(item.imageUrl) .transition(DrawableTransitionOptions.withCrossFade()) .into(binding.ivAdImage) - - binding.tvDetail.setOnClickListener { - } } } \ No newline at end of file diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt index d3f7489c..9fd5421a 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt @@ -13,7 +13,8 @@ import zion830.com.common.ext.toFormattedNumber import zion830.com.common.listener.OnItemClickListener class SearchByDistanceRecyclerAdapter( - private val listener: OnItemClickListener + private val listener: OnItemClickListener, + private val adListener: OnItemClickListener ) : RecyclerView.Adapter() { private val items = arrayListOf() @@ -53,7 +54,7 @@ class SearchByDistanceRecyclerAdapter( holder.bind(items[position] as StoreInfo, listener) } is SearchByAdViewHolder -> { - holder.bind(items[position] as Popups, null) + holder.bind(items[position] as Popups, adListener) } } } diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt index ee43488a..65390b4b 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt @@ -12,7 +12,8 @@ import zion830.com.common.base.BaseViewHolder import zion830.com.common.listener.OnItemClickListener class SearchByRatingRecyclerAdapter( - private val listener: OnItemClickListener + private val listener: OnItemClickListener, + private val adListener : OnItemClickListener ) : RecyclerView.Adapter() { private val items = arrayListOf() @@ -50,7 +51,7 @@ class SearchByRatingRecyclerAdapter( holder.bind(items[position] as StoreInfo, listener) } is SearchByAdViewHolder -> { - holder.bind(items[position] as Popups, null) + holder.bind(items[position] as Popups, adListener) } } } diff --git a/app/src/main/java/com/zion830/threedollars/ui/home/HomeFragment.kt b/app/src/main/java/com/zion830/threedollars/ui/home/HomeFragment.kt index 470db8b7..423a7781 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/home/HomeFragment.kt @@ -11,6 +11,7 @@ import com.naver.maps.geometry.LatLng import com.zion830.threedollars.Constants import com.zion830.threedollars.R import com.zion830.threedollars.databinding.FragmentHomeBinding +import com.zion830.threedollars.repository.model.v2.response.Popups import com.zion830.threedollars.repository.model.v2.response.store.StoreInfo import com.zion830.threedollars.ui.addstore.view.NearStoreNaverMapFragment import com.zion830.threedollars.ui.home.adapter.NearStoreRecyclerAdapter @@ -76,6 +77,11 @@ class HomeFragment : BaseFragment(R.layout.f showToast(R.string.exist_store_error) } } + }, object : OnItemClickListener { + override fun onClick(item: Popups) { + startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(item.linkUrl))) + } + }) { item -> if (item != null) { val intent = StoreDetailActivity.getIntent(requireContext(), item.storeId, true) diff --git a/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt b/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt index a8b433d0..fe463bbe 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt @@ -28,6 +28,7 @@ import zion830.com.common.listener.OnItemClickListener class NearStoreRecyclerAdapter( private val clickListener: OnItemClickListener, + private val adClickListener: OnItemClickListener, private val certificationClick: (StoreInfo?) -> Unit ) : ListAdapter(BaseDiffUtilCallback()) { var focusedIndex = 0 @@ -84,7 +85,7 @@ class NearStoreRecyclerAdapter( holder.bindPosition(focusedIndex == position) } is NearStoreAdViewHolder -> { - holder.bind(getItem(position) as Popups, null) + holder.bind(getItem(position) as Popups, adClickListener) } is NearStoreEmptyViewHolder -> { holder.bind(getItem(position) as HomeStoreEmptyResponse, null) @@ -117,12 +118,10 @@ class NearStoreAdViewHolder(parent: ViewGroup) : @SuppressLint("Range") override fun bind(item: Popups, listener: OnItemClickListener?) { super.bind(item, listener) - binding.tvAdTitle.text = item.title if (!item.fontColor.isNullOrEmpty()) { binding.tvAdTitle.setTextColor(Color.parseColor(item.fontColor)) binding.tvAdBody.setTextColor(Color.parseColor(item.fontColor)) } - binding.tvAdBody.text = item.subTitle if (!item.bgColor.isNullOrEmpty()) { binding.layoutItem.setBackgroundColor(Color.parseColor(item.bgColor)) diff --git a/app/src/main/res/layout/item_home_empty.xml b/app/src/main/res/layout/item_home_empty.xml index 8e9ca8af..b4757e49 100644 --- a/app/src/main/res/layout/item_home_empty.xml +++ b/app/src/main/res/layout/item_home_empty.xml @@ -22,7 +22,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="16dp" - android:layout_marginVertical="26dp" + android:layout_marginVertical="28dp" android:orientation="horizontal"> + + + + + + + + + + + Date: Thu, 3 Mar 2022 01:23:01 +0900 Subject: [PATCH 4/9] 2.4.6 --- common.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common.gradle b/common.gradle index 0dfb9b03..39a46c18 100644 --- a/common.gradle +++ b/common.gradle @@ -16,8 +16,8 @@ android { defaultConfig { minSdkVersion 21 targetSdkVersion 31 - versionCode 33 - versionName "2.4.5" + versionCode 34 + versionName "2.4.6" multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From 41822bc2bc17174de6a911f8e5cf3f1ede0e4080 Mon Sep 17 00:00:00 2001 From: Mino Date: Fri, 4 Mar 2022 15:23:45 +0900 Subject: [PATCH 5/9] =?UTF-8?q?=EB=9D=84=EC=96=B4=EC=93=B0=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zion830/threedollars/ui/category/StoreByMenuActivity.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt index 8aa32f90..17aeb329 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt @@ -8,7 +8,6 @@ import androidx.activity.viewModels import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.google.android.gms.ads.AdRequest -import com.google.firebase.analytics.ktx.logEvent import com.zion830.threedollars.R import com.zion830.threedollars.databinding.ActivityStoreByMenuBinding import com.zion830.threedollars.repository.model.v2.response.Popups @@ -46,11 +45,11 @@ class StoreByMenuActivity : } } private val storeByDistanceAdapters by lazy { - SearchByDistanceRecyclerAdapter(listener,adListener) + SearchByDistanceRecyclerAdapter(listener, adListener) } private val storeByRatingAdapters by lazy { - SearchByRatingRecyclerAdapter(listener,adListener) + SearchByRatingRecyclerAdapter(listener, adListener) } override fun onTouch() { From 0bfc20332a67aada09f9b1c61cc9ada3f48536b9 Mon Sep 17 00:00:00 2001 From: Mino Date: Fri, 4 Mar 2022 15:26:24 +0900 Subject: [PATCH 6/9] =?UTF-8?q?submitAdList=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zion830/threedollars/ui/category/StoreByMenuActivity.kt | 4 ---- .../ui/category/adapter/SearchByDistanceRecyclerAdapter.kt | 3 +++ .../ui/category/adapter/SearchByRatingRecyclerAdapter.kt | 5 ++++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt index 17aeb329..86d33f21 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt @@ -110,12 +110,8 @@ class StoreByMenuActivity : startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(popups[0].linkUrl))) } } - if (storeByDistanceAdapters.itemCount != 0) { storeByDistanceAdapters.submitAdList(popups) - } - if (storeByRatingAdapters.itemCount != 0) { storeByRatingAdapters.submitAdList(popups) - } } }) viewModel.storeByRating.observe(this) { diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt index 9fd5421a..fa490113 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByDistanceRecyclerAdapter.kt @@ -66,6 +66,9 @@ class SearchByDistanceRecyclerAdapter( } fun submitAdList(newItems: List) { + if (items.isEmpty()) { + return + } val list = items.filterIsInstance() items.clear() items.addAll(list) diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt index 65390b4b..e2ad109d 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByRatingRecyclerAdapter.kt @@ -13,7 +13,7 @@ import zion830.com.common.listener.OnItemClickListener class SearchByRatingRecyclerAdapter( private val listener: OnItemClickListener, - private val adListener : OnItemClickListener + private val adListener: OnItemClickListener ) : RecyclerView.Adapter() { private val items = arrayListOf() @@ -63,6 +63,9 @@ class SearchByRatingRecyclerAdapter( } fun submitAdList(newItems: List) { + if (items.isEmpty()) { + return + } val list = items.filterIsInstance() items.clear() items.addAll(list) From 0e7ee5787ca6f451246bcc8529de1464abf7d3bd Mon Sep 17 00:00:00 2001 From: Mino Date: Fri, 4 Mar 2022 15:31:34 +0900 Subject: [PATCH 7/9] toColorInt() --- .../ui/category/SelectCategoryFragment.kt | 9 ++++++--- .../ui/category/StoreByMenuActivity.kt | 16 +++++++--------- .../ui/category/adapter/SearchByAdViewHolder.kt | 8 ++++---- .../ui/home/adapter/NearStoreRecyclerAdapter.kt | 7 ++++--- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/SelectCategoryFragment.kt b/app/src/main/java/com/zion830/threedollars/ui/category/SelectCategoryFragment.kt index 65e1a1cf..eb2206e1 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/SelectCategoryFragment.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/SelectCategoryFragment.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.content.Intent import android.graphics.Color import android.net.Uri +import androidx.core.graphics.toColorInt import androidx.core.text.bold import androidx.core.text.buildSpannedString import androidx.core.view.isVisible @@ -65,12 +66,14 @@ class SelectCategoryFragment : if (popups.isNotEmpty()) { val popup = popups[0] binding.tvAdTitle.text = popup.title - binding.tvAdTitle.setTextColor(Color.parseColor(popup.fontColor)) binding.tvAdBody.text = popup.subTitle - binding.tvAdBody.setTextColor(Color.parseColor(popup.fontColor)) - binding.cdAdCategory.setCardBackgroundColor(Color.parseColor(popup.bgColor)) + popup.fontColor?.let { + binding.tvAdTitle.setTextColor(it.toColorInt()) + binding.tvAdBody.setTextColor(it.toColorInt()) + } + popup.bgColor?.let { binding.cdAdCategory.setCardBackgroundColor(it.toColorInt()) } Glide.with(requireContext()) .load(popup.imageUrl) diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt index 86d33f21..f110ae69 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt @@ -2,9 +2,9 @@ package com.zion830.threedollars.ui.category import android.content.Context import android.content.Intent -import android.graphics.Color import android.net.Uri import androidx.activity.viewModels +import androidx.core.graphics.toColorInt import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.google.android.gms.ads.AdRequest @@ -91,15 +91,13 @@ class StoreByMenuActivity : if (popups.isNotEmpty()) { binding.itemStoreListAd.run { tvAdTitle.text = popups[0].title - if (!popups[0].fontColor.isNullOrEmpty()) { - tvAdTitle.setTextColor(Color.parseColor(popups[0].fontColor)) - tvAdBody.setTextColor(Color.parseColor(popups[0].fontColor)) + popups[0].fontColor?.let { + tvAdTitle.setTextColor(it.toColorInt()) + tvAdBody.setTextColor(it.toColorInt()) } tvAdBody.text = popups[0].subTitle - if (!popups[0].bgColor.isNullOrEmpty()) { - layoutItem.setBackgroundColor(Color.parseColor(popups[0].bgColor)) - } + popups[0].bgColor?.let { layoutItem.setBackgroundColor(it.toColorInt()) } Glide.with(ivAdImage) .load(popups[0].imageUrl) @@ -110,8 +108,8 @@ class StoreByMenuActivity : startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(popups[0].linkUrl))) } } - storeByDistanceAdapters.submitAdList(popups) - storeByRatingAdapters.submitAdList(popups) + storeByDistanceAdapters.submitAdList(popups) + storeByRatingAdapters.submitAdList(popups) } }) viewModel.storeByRating.observe(this) { diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt index b2806e0b..276de1e9 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt @@ -1,8 +1,8 @@ package com.zion830.threedollars.ui.category.adapter import android.annotation.SuppressLint -import android.graphics.Color import android.view.ViewGroup +import androidx.core.graphics.toColorInt import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.zion830.threedollars.R @@ -18,11 +18,11 @@ class SearchByAdViewHolder(parent: ViewGroup) : override fun bind(item: Popups, listener: OnItemClickListener?) { super.bind(item, listener) if (!item.fontColor.isNullOrEmpty()) { - binding.tvAdTitle.setTextColor(Color.parseColor(item.fontColor)) - binding.tvAdBody.setTextColor(Color.parseColor(item.fontColor)) + binding.tvAdTitle.setTextColor(item.fontColor.toColorInt()) + binding.tvAdBody.setTextColor(item.fontColor.toColorInt()) } if (!item.bgColor.isNullOrEmpty()) { - binding.layoutItem.setBackgroundColor(Color.parseColor(item.bgColor)) + binding.layoutItem.setBackgroundColor(item.bgColor.toColorInt()) } Glide.with(binding.ivAdImage) diff --git a/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt b/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt index fe463bbe..938a8eb3 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt @@ -3,6 +3,7 @@ package com.zion830.threedollars.ui.home.adapter import android.annotation.SuppressLint import android.graphics.Color import android.view.ViewGroup +import androidx.core.graphics.toColorInt import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide @@ -119,12 +120,12 @@ class NearStoreAdViewHolder(parent: ViewGroup) : override fun bind(item: Popups, listener: OnItemClickListener?) { super.bind(item, listener) if (!item.fontColor.isNullOrEmpty()) { - binding.tvAdTitle.setTextColor(Color.parseColor(item.fontColor)) - binding.tvAdBody.setTextColor(Color.parseColor(item.fontColor)) + binding.tvAdTitle.setTextColor(item.fontColor.toColorInt()) + binding.tvAdBody.setTextColor(item.fontColor.toColorInt()) } if (!item.bgColor.isNullOrEmpty()) { - binding.layoutItem.setBackgroundColor(Color.parseColor(item.bgColor)) + binding.layoutItem.setBackgroundColor(item.bgColor.toColorInt()) } Glide.with(binding.ivAdImage) From ac8b537d4cd35ec0a70a03e25f51575f42a84484 Mon Sep 17 00:00:00 2001 From: Mino Date: Fri, 4 Mar 2022 15:35:52 +0900 Subject: [PATCH 8/9] =?UTF-8?q?glide=20bindingAdapter=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../threedollars/ui/category/SelectCategoryFragment.kt | 6 ++---- .../threedollars/ui/category/StoreByMenuActivity.kt | 6 ++---- .../ui/category/adapter/SearchByAdViewHolder.kt | 7 ++----- .../ui/home/adapter/NearStoreRecyclerAdapter.kt | 7 ++----- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/SelectCategoryFragment.kt b/app/src/main/java/com/zion830/threedollars/ui/category/SelectCategoryFragment.kt index eb2206e1..7c6ca5d0 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/SelectCategoryFragment.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/SelectCategoryFragment.kt @@ -20,6 +20,7 @@ import com.zion830.threedollars.repository.model.v2.response.store.CategoryInfo import com.zion830.threedollars.ui.category.adapter.SelectCategoryRecyclerAdapter import com.zion830.threedollars.ui.popup.PopupViewModel import zion830.com.common.base.BaseFragment +import zion830.com.common.base.loadUrlImg import zion830.com.common.listener.OnItemClickListener class SelectCategoryFragment : @@ -75,10 +76,7 @@ class SelectCategoryFragment : } popup.bgColor?.let { binding.cdAdCategory.setCardBackgroundColor(it.toColorInt()) } - Glide.with(requireContext()) - .load(popup.imageUrl) - .transition(DrawableTransitionOptions.withCrossFade()) - .into(binding.ivAdImage) + binding.ivAdImage.loadUrlImg(popup.imageUrl) binding.cdAdCategory.setOnClickListener { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(popup.linkUrl))) diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt index f110ae69..0ab7f871 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/StoreByMenuActivity.kt @@ -21,6 +21,7 @@ import com.zion830.threedollars.ui.store_detail.map.StoreByMenuNaverMapFragment import com.zion830.threedollars.ui.store_detail.vm.StoreByMenuViewModel import com.zion830.threedollars.utils.* import zion830.com.common.base.BaseActivity +import zion830.com.common.base.loadUrlImg import zion830.com.common.listener.OnItemClickListener class StoreByMenuActivity : @@ -99,10 +100,7 @@ class StoreByMenuActivity : popups[0].bgColor?.let { layoutItem.setBackgroundColor(it.toColorInt()) } - Glide.with(ivAdImage) - .load(popups[0].imageUrl) - .transition(DrawableTransitionOptions.withCrossFade()) - .into(ivAdImage) + ivAdImage.loadUrlImg(popups[0].imageUrl) tvDetail.setOnClickListener { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(popups[0].linkUrl))) diff --git a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt index 276de1e9..f58a5c52 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/category/adapter/SearchByAdViewHolder.kt @@ -9,6 +9,7 @@ import com.zion830.threedollars.R import com.zion830.threedollars.databinding.ItemStoreListAdBinding import com.zion830.threedollars.repository.model.v2.response.Popups import zion830.com.common.base.BaseViewHolder +import zion830.com.common.base.loadUrlImg import zion830.com.common.listener.OnItemClickListener class SearchByAdViewHolder(parent: ViewGroup) : @@ -24,10 +25,6 @@ class SearchByAdViewHolder(parent: ViewGroup) : if (!item.bgColor.isNullOrEmpty()) { binding.layoutItem.setBackgroundColor(item.bgColor.toColorInt()) } - - Glide.with(binding.ivAdImage) - .load(item.imageUrl) - .transition(DrawableTransitionOptions.withCrossFade()) - .into(binding.ivAdImage) + binding.ivAdImage.loadUrlImg(item.imageUrl) } } \ No newline at end of file diff --git a/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt b/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt index 938a8eb3..10fa00c7 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/home/adapter/NearStoreRecyclerAdapter.kt @@ -25,6 +25,7 @@ import com.zion830.threedollars.ui.mypage.adapter.bindMenuIcons import com.zion830.threedollars.utils.SharedPrefUtils import zion830.com.common.base.BaseDiffUtilCallback import zion830.com.common.base.BaseViewHolder +import zion830.com.common.base.loadUrlImg import zion830.com.common.listener.OnItemClickListener class NearStoreRecyclerAdapter( @@ -127,11 +128,7 @@ class NearStoreAdViewHolder(parent: ViewGroup) : if (!item.bgColor.isNullOrEmpty()) { binding.layoutItem.setBackgroundColor(item.bgColor.toColorInt()) } - - Glide.with(binding.ivAdImage) - .load(item.imageUrl) - .transition(DrawableTransitionOptions.withCrossFade()) - .into(binding.ivAdImage) + binding.ivAdImage.loadUrlImg(item.imageUrl) } } From a21d469a435522af4838d31d49af2979bbfe3c45 Mon Sep 17 00:00:00 2001 From: Mino Date: Fri, 4 Mar 2022 15:38:23 +0900 Subject: [PATCH 9/9] =?UTF-8?q?if=EB=AC=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zion830/threedollars/ui/home/HomeViewModel.kt | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/zion830/threedollars/ui/home/HomeViewModel.kt b/app/src/main/java/com/zion830/threedollars/ui/home/HomeViewModel.kt index ebf0c32d..0f7d60cc 100644 --- a/app/src/main/java/com/zion830/threedollars/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/zion830/threedollars/ui/home/HomeViewModel.kt @@ -7,7 +7,6 @@ import com.zion830.threedollars.repository.PopupRepository import com.zion830.threedollars.repository.StoreRepository import com.zion830.threedollars.repository.model.v2.response.AdAndStoreItem import com.zion830.threedollars.repository.model.v2.response.HomeStoreEmptyResponse -import com.zion830.threedollars.repository.model.v2.response.store.StoreInfo import com.zion830.threedollars.utils.getCurrentLocationName import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -40,15 +39,11 @@ class HomeViewModel : BaseViewModel() { val resultList: ArrayList = arrayListOf() storeData.body()?.data?.let { resultList.addAll(it) } - if (resultList.isNotEmpty()) { - if (adData != null) { - adData.firstOrNull()?.let { resultList.add(1, it) } - } - } else { + if (resultList.isEmpty()) { resultList.add(HomeStoreEmptyResponse()) - if (adData != null) { - adData.firstOrNull()?.let { resultList.add(1, it) } - } + } + if (adData != null) { + adData.firstOrNull()?.let { resultList.add(1, it) } } nearStoreInfo.postValue(resultList.toList()) }