diff --git a/.github/workflows/release_tag.yml b/.github/workflows/release_tag.yml new file mode 100644 index 00000000..685c7a69 --- /dev/null +++ b/.github/workflows/release_tag.yml @@ -0,0 +1,20 @@ +name: Release Tag +on: + push: + branches: + - master +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: 버전 정보 추출 + run: echo "##[set-output name=version;]$(echo '${{ github.event.head_commit.message }}' | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')" + id: extract_version_name + - name: Release 생성 + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.extract_version_name.outputs.version }} + release_name: ${{ steps.extract_version_name.outputs.version }} diff --git a/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSource.kt b/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSource.kt index 735a5fe0..9e081189 100644 --- a/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSource.kt +++ b/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSource.kt @@ -56,5 +56,5 @@ interface RemoteDataSource { suspend fun getRecommendPerfumeList(token: String) : MutableList suspend fun getCommonPerfumeList(token: String) : MutableList suspend fun getRecentPerfumeList(token: String) : MutableList - suspend fun getNewPerfumeList() : MutableList + suspend fun getNewPerfumeList(requestSize: Int?) : MutableList } \ No newline at end of file diff --git a/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSourceImpl.kt b/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSourceImpl.kt index 1c0c89f7..470603a0 100644 --- a/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSourceImpl.kt +++ b/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSourceImpl.kt @@ -87,8 +87,8 @@ class RemoteDataSourceImpl : RemoteDataSource{ return api.getRecentList(token).data.rows } - override suspend fun getNewPerfumeList(): MutableList { - return api.getNewPerfumeList().data.rows + override suspend fun getNewPerfumeList(requestSize: Int?): MutableList { + return api.getNewPerfumeList(requestSize).data.rows } override suspend fun getReview(reviewIdx: Int): ResponseReview { diff --git a/app/src/main/java/com/scentsnote/android/data/remote/network/ScentsNoteService.kt b/app/src/main/java/com/scentsnote/android/data/remote/network/ScentsNoteService.kt index 67e7cf26..d6d149e7 100644 --- a/app/src/main/java/com/scentsnote/android/data/remote/network/ScentsNoteService.kt +++ b/app/src/main/java/com/scentsnote/android/data/remote/network/ScentsNoteService.kt @@ -117,7 +117,7 @@ interface ScentsNoteService { // Home - New Perfume List @GET("perfume/new") suspend fun getNewPerfumeList( - + @Query("requestSize") requestSize : Int? ):ResponseBase @GET("perfume/{perfumeIdx}") diff --git a/app/src/main/java/com/scentsnote/android/data/repository/HomeRepository.kt b/app/src/main/java/com/scentsnote/android/data/repository/HomeRepository.kt index 97e7dfbf..570dcc15 100644 --- a/app/src/main/java/com/scentsnote/android/data/repository/HomeRepository.kt +++ b/app/src/main/java/com/scentsnote/android/data/repository/HomeRepository.kt @@ -12,7 +12,7 @@ class HomeRepository { suspend fun getRecommendPerfumeList(token : String) = remoteDataSource.getRecommendPerfumeList(token) suspend fun getCommonPerfumeList(token : String) = remoteDataSource.getCommonPerfumeList(token) suspend fun getRecentPerfumeList(token : String) = remoteDataSource.getRecentPerfumeList(token) - suspend fun getNewPerfumeList() = remoteDataSource.getNewPerfumeList() + suspend fun getNewPerfumeList(requestSize: Int?) = remoteDataSource.getNewPerfumeList(requestSize) fun postPerfumeLike(token: String, perfumeIdx: Int): Single> = ScentsNoteServiceImpl.service.postPerfumeLike(token, perfumeIdx).map { it } } \ No newline at end of file diff --git a/app/src/main/java/com/scentsnote/android/ui/filter/FilterFragment.kt b/app/src/main/java/com/scentsnote/android/ui/filter/FilterFragment.kt index 8dd28458..251cec20 100644 --- a/app/src/main/java/com/scentsnote/android/ui/filter/FilterFragment.kt +++ b/app/src/main/java/com/scentsnote/android/ui/filter/FilterFragment.kt @@ -76,6 +76,7 @@ class FilterFragment : Fragment() { override fun onResume() { super.onResume() + binding.tabFilter.changeTabsFont(0) firebaseAnalytics.setPageViewEvent("Filter", this::class.java.name) } @@ -96,13 +97,7 @@ class FilterFragment : Fragment() { firebaseAnalytics.setClickEvent("FilterActionButton") - reqFilterGa("apply_filter", seriesViewModel.getSelectedSeries()) - reqFilterGa("apply_brand", brandViewModel.getSelectedBrands()) - reqFilterGa("apply_bonding", keywordViewModel.getSelectedKeywords()) - - 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()) + setFilterGa() } binding.toolbarFilter.toolbarBtn.setOnSafeClickListener { closeSelfWithAnimation() @@ -125,6 +120,23 @@ class FilterFragment : Fragment() { } } + private fun setFilterGa(){ + if(seriesViewModel.getSelectedSeries().isNotEmpty()){ + reqFilterGa("apply_filter", seriesViewModel.getSelectedSeries()) + Log.d("GA 필터 - 계열", seriesViewModel.getSelectedSeries().map { it.name }.toString()) + } + + if(brandViewModel.getSelectedBrands().isNotEmpty()){ + reqFilterGa("apply_brand", brandViewModel.getSelectedBrands()) + Log.d("GA 필터 - 브랜드", brandViewModel.getSelectedBrands().map { it.name }.toString()) + } + + if(keywordViewModel.getSelectedKeywords().isNotEmpty()){ + reqFilterGa("apply_bonding", keywordViewModel.getSelectedKeywords()) + Log.d("GA 필터 - 키워드", keywordViewModel.getSelectedKeywords().map { it.name }.toString()) + } + } + private fun reqFilterGa(type: String, list : List){ list.forEach { firebaseAnalytics.setOneParamClickEvent("kind_of_filter", type, it.name) @@ -156,7 +168,6 @@ class FilterFragment : Fragment() { filterCategoryList.forEachIndexed { index, filterCategory -> val tab = getTabAt(index) tab?.text = filterCategory.nameText - tab?.orCreateBadge?.backgroundColor = context.getColor(R.color.black) } addOnTabSelectedListener(TabSelectedListener(binding.tabFilter)) changeTabsFont(0) @@ -166,26 +177,35 @@ class FilterFragment : Fragment() { private fun observeViewModel() { seriesViewModel.selectedCount.observe(viewLifecycleOwner) { count -> val tab = binding.tabFilter.getTabAt(FilterCategory.Series.index) - tab?.orCreateBadge?.let { - updateCategoryBadge(it, count) + if(count != 0){ + tab?.text = FilterCategory.Series.nameText+"($count)" + }else{ + tab?.text = FilterCategory.Series.nameText } updateApplyBtnText() + binding.tabFilter.changeTabsFont(FilterCategory.Series.index) } brandViewModel.selectedCount.observe(viewLifecycleOwner) { count -> val tab = binding.tabFilter.getTabAt(FilterCategory.Brand.index) - tab?.orCreateBadge?.let { - updateCategoryBadge(it, count) + if(count != 0){ + tab?.text = FilterCategory.Brand.nameText+"($count)" + }else{ + tab?.text = FilterCategory.Brand.nameText } updateApplyBtnText() + binding.tabFilter.changeTabsFont(FilterCategory.Brand.index) } keywordViewModel.selectedCount.observe(viewLifecycleOwner) { count -> val tab = binding.tabFilter.getTabAt(FilterCategory.Keyword.index) - tab?.orCreateBadge?.let { - updateCategoryBadge(it, count) + if(count != 0){ + tab?.text = FilterCategory.Keyword.nameText+"($count)" + }else{ + tab?.text = FilterCategory.Keyword.nameText } updateApplyBtnText() + binding.tabFilter.changeTabsFont(FilterCategory.Keyword.index) } } diff --git a/app/src/main/java/com/scentsnote/android/ui/home/HomeFragment.kt b/app/src/main/java/com/scentsnote/android/ui/home/HomeFragment.kt index 36a3f752..6cc0e37c 100644 --- a/app/src/main/java/com/scentsnote/android/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/scentsnote/android/ui/home/HomeFragment.kt @@ -8,7 +8,9 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import com.scentsnote.android.ScentsNoteApplication import com.scentsnote.android.R import com.scentsnote.android.ScentsNoteApplication.Companion.firebaseAnalytics @@ -22,6 +24,7 @@ import com.scentsnote.android.utils.extension.setHeartBtnClickEvent import com.scentsnote.android.viewmodel.home.HomeViewModel import com.scentsnote.android.utils.extension.setOnSafeClickListener import com.scentsnote.android.utils.extension.setPageViewEvent +import kotlinx.coroutines.launch import java.util.* /** @@ -60,7 +63,7 @@ class HomeFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - observe() + initObserve() initRecommendList() initPopularList() @@ -71,8 +74,11 @@ class HomeFragment : Fragment() { override fun onResume() { super.onResume() - viewLifecycleOwner.lifecycleScope.launchWhenCreated { - homeViewModel.getHomePerfumeList() + viewLifecycleOwner.lifecycleScope.launch { + homeViewModel.run { + getHomePerfumeList() + getNewPerfumeList(10) + } } firebaseAnalytics.setPageViewEvent("HomePage",this::class.java.name) @@ -135,8 +141,8 @@ class HomeFragment : Fragment() { binding.vpHomeRecommend.adapter = recommendAdapter } - private fun observe() { - homeViewModel.recommendPerfumeList.observe(requireActivity(), androidx.lifecycle.Observer { + private fun initObserve() { + homeViewModel.recommendPerfumeList.observe(requireActivity()){ recommendAdapter.run { replaceAll(ArrayList(it)) @@ -144,7 +150,13 @@ class HomeFragment : Fragment() { } binding.indicatorHome.setViewPager(binding.vpHomeRecommend) - }) + } + + homeViewModel.recentPerfumeList.observe(requireActivity()) { + binding.clHomeRecent.visibility = + if(it.isNotEmpty()) View.VISIBLE + else View.GONE + } } private fun initPopularList() { diff --git a/app/src/main/java/com/scentsnote/android/ui/home/MoreNewPerfumeActivity.kt b/app/src/main/java/com/scentsnote/android/ui/home/MoreNewPerfumeActivity.kt index c9b504c6..8a622dbe 100644 --- a/app/src/main/java/com/scentsnote/android/ui/home/MoreNewPerfumeActivity.kt +++ b/app/src/main/java/com/scentsnote/android/ui/home/MoreNewPerfumeActivity.kt @@ -6,6 +6,9 @@ import android.view.View import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import com.scentsnote.android.R import com.scentsnote.android.ScentsNoteApplication.Companion.firebaseAnalytics import com.scentsnote.android.databinding.ActivityMoreNewPerfumeBinding @@ -14,6 +17,7 @@ import com.scentsnote.android.viewmodel.home.HomeViewModel import com.scentsnote.android.utils.base.BaseWebViewActivity import com.scentsnote.android.utils.extension.setHeartBtnClickEvent import com.scentsnote.android.utils.extension.setPageViewEvent +import kotlinx.coroutines.launch /** * 홈 화면 - 새로운 향수 더보기 @@ -31,6 +35,10 @@ class MoreNewPerfumeActivity : AppCompatActivity() { binding.lifecycleOwner = this binding.viewModel = homeViewModel + lifecycleScope.launch { + homeViewModel.getNewPerfumeList(null) + } + initNewList() } diff --git a/app/src/main/java/com/scentsnote/android/viewmodel/home/HomeViewModel.kt b/app/src/main/java/com/scentsnote/android/viewmodel/home/HomeViewModel.kt index b3895147..cdf441f3 100644 --- a/app/src/main/java/com/scentsnote/android/viewmodel/home/HomeViewModel.kt +++ b/app/src/main/java/com/scentsnote/android/viewmodel/home/HomeViewModel.kt @@ -32,25 +32,14 @@ class HomeViewModel : ViewModel(){ val recentPerfumeList : LiveData> get() = _recentPerfumeList - private val _isValidRecentList = MutableLiveData(true) - val isValidRecentList : LiveData - get() = _isValidRecentList - private val _newPerfumeList : MutableLiveData> = MutableLiveData() val newPerfumeList : LiveData> get() = _newPerfumeList - init { - viewModelScope.launch { - getHomePerfumeList() - } - } - suspend fun getHomePerfumeList(){ getRecommendPerfumeList() getCommonPerfumeList() getRecentPerfumeList() - getNewPerfumeList() } private suspend fun getRecommendPerfumeList(){ @@ -73,22 +62,17 @@ class HomeViewModel : ViewModel(){ private suspend fun getRecentPerfumeList(){ try{ - _isValidRecentList.postValue(true) _recentPerfumeList.value = homeRepository.getRecentPerfumeList(ScentsNoteApplication.prefManager.accessToken) Log.d("getRecentPerfumeList", _recentPerfumeList.value.toString()) - - if(_recentPerfumeList.value!!.isEmpty()){ - _isValidRecentList.postValue(false) - } }catch (e : HttpException){ - _isValidRecentList.postValue(false) + _recentPerfumeList.value = mutableListOf() Log.d("getRecentPerfumeList error", e.message()) } } - private suspend fun getNewPerfumeList(){ + suspend fun getNewPerfumeList(requestSize: Int?){ try{ - _newPerfumeList.value = homeRepository.getNewPerfumeList() + _newPerfumeList.value = homeRepository.getNewPerfumeList(requestSize) Log.d("getNewPerfumeList", _newPerfumeList.value.toString()) }catch (e : HttpException){ Log.d("getNewPerfumeList error", e.message()) diff --git a/app/src/main/res/drawable/background_white_circle_fill.xml b/app/src/main/res/drawable/background_white_circle_fill.xml new file mode 100644 index 00000000..ce2058fb --- /dev/null +++ b/app/src/main/res/drawable/background_white_circle_fill.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_filter.xml b/app/src/main/res/layout/fragment_filter.xml index ef9f3f34..8420e143 100644 --- a/app/src/main/res/layout/fragment_filter.xml +++ b/app/src/main/res/layout/fragment_filter.xml @@ -56,7 +56,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:srcCompat="@color/gray_cd" /> + app:srcCompat="@color/light_gray_ec" /> + tools:listitem="@layout/rv_item_filter_brand_tab"> + + + + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/rv_item_home_recent.xml b/app/src/main/res/layout/rv_item_home_recent.xml index 41c55119..c93b7000 100644 --- a/app/src/main/res/layout/rv_item_home_recent.xml +++ b/app/src/main/res/layout/rv_item_home_recent.xml @@ -14,21 +14,32 @@ android:layout_width="wrap_content" android:layout_height="wrap_content"> - + + #f0f0f0 #f9f9f9 #dbdbdb + #ececec #cdcdcd #b6b6b6 diff --git a/buildSrc/src/main/java/ConfigData.kt b/buildSrc/src/main/java/ConfigData.kt index 2c484364..6be961af 100644 --- a/buildSrc/src/main/java/ConfigData.kt +++ b/buildSrc/src/main/java/ConfigData.kt @@ -3,8 +3,8 @@ object ConfigData { const val buildToolsVersion = "30.0.3" const val minSdkVersion = 23 const val targetSdkVersion = 33 - const val versionCode = 15 - const val versionName = "1.5.5" + const val versionCode = 16 + const val versionName = "1.5.6" // gradle const val gradleVersion = "7.3.1"