Skip to content

Commit

Permalink
Merge pull request #291 from Scents-Note/refactor/287-filter
Browse files Browse the repository at this point in the history
3기 첫번째 배포(v1.5.5) - 필터 UI 수정, GA 수정(필터 전체 선택 항목), 루팅 체크 로직 추가
  • Loading branch information
Haeeul authored Jan 23, 2024
2 parents 50500f1 + 6d51f06 commit 7c6bd2c
Show file tree
Hide file tree
Showing 72 changed files with 754 additions and 201 deletions.
3 changes: 3 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -130,4 +130,7 @@ dependencies {

// EncryptedSharedPreferences
implementation Dependencies.encryptedSharedPreferences

// Logger
implementation Dependencies.logger
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.ktx.Firebase
import com.scentsnote.android.data.local.preference.SharedPreferencesManager
import com.scentsnote.android.utils.etc.Log

class ScentsNoteApplication : Application() {

Expand All @@ -26,5 +27,7 @@ class ScentsNoteApplication : Application() {
prefManager = SharedPreferencesManager(applicationContext)
firebaseAnalytics = Firebase.analytics
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)

Log.getInstance()
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.scentsnote.android.data.remote

import android.util.Log
import com.scentsnote.android.data.remote.network.ScentsNoteServiceImpl
import com.scentsnote.android.data.vo.request.*
import com.scentsnote.android.data.vo.response.*
import com.scentsnote.android.utils.etc.Log

class RemoteDataSourceImpl : RemoteDataSource{
val api = ScentsNoteServiceImpl.service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,9 @@ data class BrandInfo(
oldItem == newItem
}
}
}
}

data class BrandTab(
val name: String,
var isSelected: Boolean=false
)
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.scentsnote.android.ui.detail

import android.content.Context
import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.RecyclerView
import com.scentsnote.android.R
import com.scentsnote.android.databinding.RvItemDetailImageBinding
import com.bumptech.glide.Glide
import com.scentsnote.android.utils.etc.Log

class DetailImageAdapter(val context: Context) : RecyclerView.Adapter<DetailImageViewHolder>() {
var data = mutableListOf<String>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,12 @@ import com.scentsnote.android.databinding.ActivityPerfumeDetailBinding
import com.scentsnote.android.ui.detail.info.DetailInfoFragment
import com.scentsnote.android.ui.detail.note.DetailNoteFragment
import com.scentsnote.android.ui.note.NoteActivity
import com.scentsnote.android.utils.*
import com.bumptech.glide.Glide
import com.scentsnote.android.ScentsNoteApplication.Companion.firebaseAnalytics
import com.scentsnote.android.viewmodel.detail.PerfumeDetailViewModel
import com.scentsnote.android.utils.adapter.BindingAdapter.setNoteBtnText
import com.scentsnote.android.utils.extension.changeTabsFont
import com.scentsnote.android.utils.extension.setOnSafeClickListener
import com.scentsnote.android.utils.base.BaseActivity
import com.scentsnote.android.utils.extension.setPageViewEvent
import com.scentsnote.android.utils.extension.toast
import com.scentsnote.android.utils.extension.*
import com.scentsnote.android.utils.listener.TabSelectedListener

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import com.scentsnote.android.ScentsNoteApplication
import com.scentsnote.android.data.vo.response.RecommendPerfumeItem
import com.scentsnote.android.databinding.RvItemDetailSimilarBinding
import com.scentsnote.android.ui.detail.PerfumeDetailActivity
import com.scentsnote.android.utils.createDialog
import com.scentsnote.android.utils.extension.createDialog
import com.scentsnote.android.utils.extension.setOnSafeClickListener

class SimilarListAdapter(private val context: Context, private val fragmentManager: FragmentManager, val clickBtnLike:(Int)->Unit) : RecyclerView.Adapter<SimilarListAdapter.SimilarListViewHolder>() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
package com.scentsnote.android.ui.filter

import android.annotation.SuppressLint
import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.OnBackPressedCallback
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import com.google.android.material.badge.BadgeDrawable
import com.google.firebase.analytics.ktx.logEvent
import com.scentsnote.android.R
import com.scentsnote.android.ScentsNoteApplication.Companion.firebaseAnalytics
import com.scentsnote.android.data.vo.request.FilterInfoP
Expand All @@ -19,6 +18,7 @@ import com.scentsnote.android.databinding.FragmentFilterBinding
import com.scentsnote.android.ui.filter.brand.FilterBrandFragment
import com.scentsnote.android.ui.filter.incense.FilterIncenseSeriesFragment
import com.scentsnote.android.ui.filter.keyword.FilterKeywordFragment
import com.scentsnote.android.utils.etc.Log
import com.scentsnote.android.utils.extension.*
import com.scentsnote.android.utils.extension.closeSelfWithAnimation
import com.scentsnote.android.utils.extension.setOnSafeClickListener
Expand Down Expand Up @@ -62,6 +62,28 @@ class FilterFragment : Fragment() {
initView()
}

override fun onAttach(context: Context) {
super.onAttach(context)

onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
closeSelfWithAnimation()
}
}
requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}

override fun onResume() {
super.onResume()

firebaseAnalytics.setPageViewEvent("Filter", this::class.java.name)
}

override fun onDetach() {
super.onDetach()
onBackPressedCallback.remove()
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
Expand All @@ -70,53 +92,52 @@ class FilterFragment : Fragment() {
private fun initView() {
binding.btnFilterApply.setOnSafeClickListener {
sendFilter()
brandViewModel.setBrandTab()

firebaseAnalytics.setClickEvent("FilterActionButton")

reqFilterGa("apply_filter", seriesViewModel.getSelectedSeries())
reqFilterGa("apply_brand", brandViewModel.getSelectedBrands())
reqFilterGa("apply_bonding", keywordViewModel.getSelectedKeywords())

Log.d("명_계열",seriesViewModel.getSelectedSeries().map { it.name }.toString())
Log.d("명_브랜드",brandViewModel.getSelectedBrands().map { it.name }.toString())
Log.d("명_키워드",keywordViewModel.getSelectedKeywords().map { it.name }.toString())
Log.d("GA 필터 - 계열", seriesViewModel.getSelectedSeries().map { it.name }.toString())
Log.d("GA 필터 - 브랜드", brandViewModel.getSelectedBrands().map { it.name }.toString())
Log.d("GA 필터 - 키워드", keywordViewModel.getSelectedKeywords().map { it.name }.toString())
}
binding.toolbarFilter.toolbarBtn.setOnSafeClickListener {
closeSelfWithAnimation()
brandViewModel.setBrandTab()

firebaseAnalytics.setClickEvent("FilterPauseButton")
}

binding.toolbarFilter.toolbar = R.drawable.icon_btn_cancel
binding.toolbarFilter.toolbartxt = "필터"
}

private fun reqFilterGa(type: String, list : List<FilterInfoP>){
list.forEach {
firebaseAnalytics.setOneParamClickEvent("kind_of_filter", type, it.name)
binding.toolbarFilter.apply {
toolbar = R.drawable.icon_btn_cancel
toolbartxt = "필터"
}
}

override fun onAttach(context: Context) {
super.onAttach(context)

onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
closeSelfWithAnimation()
binding.btnFilterRefresh.setOnSafeClickListener {
binding.btnFilterApply.apply {
text = "적용"
isEnabled = false
}
resetFilter()
}
requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}

override fun onResume() {
super.onResume()

firebaseAnalytics.setPageViewEvent("Filter", this::class.java.name)
private fun reqFilterGa(type: String, list : List<FilterInfoP>){
list.forEach {
firebaseAnalytics.setOneParamClickEvent("kind_of_filter", type, it.name)
}
}

override fun onDetach() {
super.onDetach()
onBackPressedCallback.remove()
private fun resetFilter(){
val seriesFragment = filterViewPagerAdapter.getItem(0) as FilterIncenseSeriesFragment
seriesFragment.resetSeriesList()
val brandFragment = filterViewPagerAdapter.getItem(1) as FilterBrandFragment
brandFragment.resetBrandList()
val keywordFragment = filterViewPagerAdapter.getItem(2) as FilterKeywordFragment
keywordFragment.resetKeywordList()
}

private fun initViewPager() {
Expand Down Expand Up @@ -168,14 +189,18 @@ class FilterFragment : Fragment() {
}
}

@SuppressLint("SetTextI18n")
private fun updateApplyBtnText() {
val totalCount = seriesViewModel.count + brandViewModel.count + keywordViewModel.count
binding.btnFilterApply.text =
binding.btnFilterApply.apply {
if (totalCount == 0) {
"적용"
text = "적용"
isEnabled = false
} else {
"적용($totalCount)"
text = "적용($totalCount)"
isEnabled = true
}
}
}

private fun sendFilter() {
Expand All @@ -187,7 +212,10 @@ class FilterFragment : Fragment() {
val filterInfoPList = seriesViewModel.getSelectedSeries() +
brandViewModel.getSelectedBrands() +
keywordViewModel.getSelectedKeywords()
firebaseAnalytics.setOneParamClickEvent("kind_of_filter", "kind_of_filter_name", filterInfoPList.toString())
val filterInfoNameList = seriesViewModel.getSelectedSeriesName()+
brandViewModel.getSelectedBrandsName() +
keywordViewModel.getSelectedKeywordsName()
firebaseAnalytics.setOneParamClickEvent("kind_of_filter", "kind_of_filter_name", filterInfoNameList)
return SendFilter(
filterInfoPList.toMutableList(),
mutableMapOf() // TODO
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.scentsnote.android.ui.filter

import android.util.Log
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.databinding.BindingAdapter
Expand All @@ -11,6 +10,7 @@ import com.scentsnote.android.ui.filter.brand.BrandRecyclerViewAdapter
import com.scentsnote.android.ui.filter.incense.FilterSeriesViewData
import com.scentsnote.android.ui.filter.incense.IngredientFlexboxAdapter
import com.scentsnote.android.ui.filter.incense.SeriesViewAdapter
import com.scentsnote.android.utils.etc.Log

object FilterBinding {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.scentsnote.android.ui.filter.brand

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.scentsnote.android.data.vo.response.BrandTab
import com.scentsnote.android.databinding.RvItemFilterBrandTabBinding
import com.scentsnote.android.utils.extension.setOnSafeClickListener
import com.scentsnote.android.utils.extension.setSelectedTabTxt
import com.scentsnote.android.viewmodel.filter.FilterBrandViewModel

class BrandTabRecyclerViewAdapter(private val tabList: MutableList<BrandTab>, private val viewModel: FilterBrandViewModel) : RecyclerView.Adapter<BrandTabRecyclerViewAdapter.BrandTabRecyclerViewHolder>(){

interface OnItemClickListener{
fun onItemClick(position: Int)
}

var itemClickListener:OnItemClickListener?=null
var currentAdapterPosition = 0

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BrandTabRecyclerViewHolder {
val binding =
RvItemFilterBrandTabBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return BrandTabRecyclerViewHolder(binding)
}

override fun getItemCount(): Int = tabList.size

override fun onBindViewHolder(holder: BrandTabRecyclerViewHolder, position: Int) {
holder.bind(tabList[position])
}

inner class BrandTabRecyclerViewHolder(val binding: RvItemFilterBrandTabBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(brandTab: BrandTab) {
binding.item = brandTab
binding.tabName.setSelectedTabTxt(brandTab.isSelected)
brandTab.isSelected = false

binding.root.setOnSafeClickListener {
itemClickListener?.onItemClick(adapterPosition)
brandTab.isSelected = true

notifyItemChanged(adapterPosition)
notifyItemChanged(currentAdapterPosition)
currentAdapterPosition = adapterPosition
}
}
}
}
Loading

0 comments on commit 7c6bd2c

Please sign in to comment.