From b9ddfa8d4097f0ea2e77e52190e1c1d48b815232 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 7 Jul 2023 01:08:38 +0900 Subject: [PATCH 001/109] =?UTF-8?q?[ADD/#33]=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=EB=B0=94=EC=9D=B8=EB=94=A9=20=EC=BD=94=EB=93=9C=20=EC=95=BD?= =?UTF-8?q?=EA=B0=84=EC=9D=98=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=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 --- .../main/explore/popular/PopularViewModel.kt | 4 +-- app/src/main/res/layout/fragment_explore.xml | 5 +++- app/src/main/res/layout/fragment_popular.xml | 6 ++++ .../main/res/layout/item_explore_content.xml | 30 ++++++++++--------- 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index 693b0b6..fd44107 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -32,10 +32,10 @@ class PopularViewModel @Inject constructor( val filter = MutableLiveData("") init { - getPopularList() + getPopularData() } - private fun getPopularList() { + fun getPopularData() { viewModelScope.launch { contentRepository.getContent(filter.value.toString()) .onSuccess { response -> diff --git a/app/src/main/res/layout/fragment_explore.xml b/app/src/main/res/layout/fragment_explore.xml index 39a975a..9659123 100644 --- a/app/src/main/res/layout/fragment_explore.xml +++ b/app/src/main/res/layout/fragment_explore.xml @@ -2,7 +2,10 @@ - + + + + + + + + + app:layout_constraintTop_toTopOf="parent" + tools:text="@string/explore_activity" /> + app:layout_constraintTop_toBottomOf="@id/tv_explore_category" + tools:text="@string/explore_content_title" /> + app:layout_constraintTop_toBottomOf="@id/tv_explore_content_title" + tools:text="@string/explore_date" /> + app:layout_constraintStart_toStartOf="parent" + tools:src="@drawable/img_explore_background" /> \ No newline at end of file From 9c0d1fc5aaa736944a710c479e526d67f6a61526 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 7 Jul 2023 01:15:21 +0900 Subject: [PATCH 002/109] =?UTF-8?q?[ADD/#33]=20serializable=20=EA=B9=8C?= =?UTF-8?q?=EB=A8=B9=EC=A7=80=20=EB=A7=90=EA=B3=A0=20=EB=84=A3=EC=9E=90..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/data/entity/response/ResponseGetContentDto.kt | 2 +- .../release/keyneez/data/entity/response/ResponseGetLikeDto.kt | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt index e29e27f..1dc8e33 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt @@ -2,7 +2,7 @@ package com.release.keyneez.data.entity.response import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable - +@Serializable data class ResponseGetContentDto( @SerialName("content_pk") val content: Int, @SerialName("title") val title: String, diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetLikeDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetLikeDto.kt index 9570bb3..639d1a8 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetLikeDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetLikeDto.kt @@ -1,7 +1,9 @@ package com.release.keyneez.data.entity.response import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +@Serializable data class ResponseGetLikeDto( @SerialName("content_pk") val content: Int, @SerialName("title") val title: String, From a052c7de5041ad546ce706f6aed5d31d0c62a7fd Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 7 Jul 2023 15:26:12 +0900 Subject: [PATCH 003/109] =?UTF-8?q?[MOD/#33]=20selector=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=ED=95=98=EC=97=AC=20=EC=BD=94=EB=93=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 --- app/build.gradle | 9 +++++++++ .../main/explore/popular/PopularFragment.kt | 5 ++--- .../sel_explore_drawable_text_color.xml | 4 ++-- .../sel_explore_drawable_bnv_category.xml | 16 +++++++++++++--- app/src/main/res/layout/fragment_like.xml | 8 ++++---- app/src/main/res/layout/fragment_popular.xml | 15 ++++++++++----- app/src/main/res/layout/fragment_recent.xml | 8 ++++---- 7 files changed, 44 insertions(+), 21 deletions(-) rename app/src/main/res/{drawable => color}/sel_explore_drawable_text_color.xml (55%) diff --git a/app/build.gradle b/app/build.gradle index 2143c24..b03593a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,6 +6,7 @@ plugins { id 'org.jetbrains.kotlin.plugin.serialization' version '1.7.10' id "org.jlleitschuh.gradle.ktlint" version "10.3.0" } +apply plugin: 'kotlin-kapt' Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) @@ -58,10 +59,15 @@ dependencies { // ktx implementation 'androidx.core:core-ktx:1.10.1' implementation "androidx.fragment:fragment-ktx:1.5.7" + implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.0-alpha03" + implementation "androidx.activity:activity-ktx:1.6.1" // recyclerview implementation "androidx.recyclerview:recyclerview:1.3.0" + // kotlin serialization + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + // coroutine implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4" @@ -103,6 +109,9 @@ dependencies { // app compat implementation 'androidx.appcompat:appcompat:1.6.1' + // dot indicator + implementation "com.tbuonomo:dotsindicator:4.3" + // material implementation 'com.google.android.material:material:1.9.0' diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 0f0f69a..eb5670b 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -3,16 +3,15 @@ package com.release.keyneez.presentation.main.explore.popular import android.os.Bundle import android.view.View import androidx.fragment.app.viewModels -import com.release.keyneez.R import com.release.keyneez.databinding.FragmentPopularBinding import com.release.keyneez.util.binding.BindingFragment import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class PopularFragment : BindingFragment(R.layout.fragment_popular) { +class PopularFragment : + BindingFragment(com.release.keyneez.R.layout.fragment_popular) { private val viewModel: PopularViewModel by viewModels() private var popularAdapter: PopularAdapter? = null - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.vm = viewModel diff --git a/app/src/main/res/drawable/sel_explore_drawable_text_color.xml b/app/src/main/res/color/sel_explore_drawable_text_color.xml similarity index 55% rename from app/src/main/res/drawable/sel_explore_drawable_text_color.xml rename to app/src/main/res/color/sel_explore_drawable_text_color.xml index 143b7cd..5b2f32e 100644 --- a/app/src/main/res/drawable/sel_explore_drawable_text_color.xml +++ b/app/src/main/res/color/sel_explore_drawable_text_color.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sel_explore_drawable_bnv_category.xml b/app/src/main/res/drawable/sel_explore_drawable_bnv_category.xml index f9f2436..92fe961 100644 --- a/app/src/main/res/drawable/sel_explore_drawable_bnv_category.xml +++ b/app/src/main/res/drawable/sel_explore_drawable_bnv_category.xml @@ -1,5 +1,15 @@ - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_like.xml b/app/src/main/res/layout/fragment_like.xml index 60ed2bf..bcc3a29 100644 --- a/app/src/main/res/layout/fragment_like.xml +++ b/app/src/main/res/layout/fragment_like.xml @@ -64,7 +64,7 @@ android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_entire" - android:textColor="@drawable/sel_explore_drawable_text_color" + android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/layout_like_toolbar" /> @@ -79,7 +79,7 @@ android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_hobby" - android:textColor="@drawable/sel_explore_drawable_text_color" + android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_like_all" app:layout_constraintTop_toBottomOf="@id/layout_like_toolbar" /> @@ -94,7 +94,7 @@ android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_activity" - android:textColor="@drawable/sel_explore_drawable_text_color" + android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_like_hobby" app:layout_constraintTop_toBottomOf="@id/layout_like_toolbar" /> @@ -109,7 +109,7 @@ android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_career" - android:textColor="@drawable/sel_explore_drawable_text_color" + android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_like_outside" app:layout_constraintTop_toBottomOf="@id/layout_like_toolbar" /> diff --git a/app/src/main/res/layout/fragment_popular.xml b/app/src/main/res/layout/fragment_popular.xml index f52c79d..df0e6e1 100644 --- a/app/src/main/res/layout/fragment_popular.xml +++ b/app/src/main/res/layout/fragment_popular.xml @@ -19,7 +19,8 @@ + android:layout_height="match_parent" + android:clickable="true"> @@ -45,9 +47,10 @@ android:background="@drawable/sel_explore_drawable_bnv_category" android:paddingHorizontal="16dp" android:paddingVertical="6dp" + android:clickable="true" android:onClick="@{()->vm.getPopularData()}" android:text="@string/explore_hobby" - android:textColor="@drawable/sel_explore_drawable_text_color" + android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_explore_popular_all" app:layout_constraintTop_toTopOf="parent" /> @@ -59,10 +62,11 @@ android:layout_marginStart="9dp" android:background="@drawable/sel_explore_drawable_bnv_category" android:paddingHorizontal="16dp" + android:clickable="true" android:onClick="@{()->vm.getPopularData()}" android:paddingVertical="6dp" android:text="@string/explore_activity" - android:textColor="@drawable/sel_explore_drawable_text_color" + android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_explore_popular_hobby" app:layout_constraintTop_toTopOf="parent" /> @@ -72,12 +76,13 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="9dp" + android:clickable="true" android:background="@drawable/sel_explore_drawable_bnv_category" android:paddingHorizontal="16dp" android:onClick="@{()->vm.getPopularData()}" android:paddingVertical="6dp" android:text="@string/explore_career" - android:textColor="@drawable/sel_explore_drawable_text_color" + android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_explore_popular_outside" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/fragment_recent.xml b/app/src/main/res/layout/fragment_recent.xml index 1af3ed7..d0eae40 100644 --- a/app/src/main/res/layout/fragment_recent.xml +++ b/app/src/main/res/layout/fragment_recent.xml @@ -29,7 +29,7 @@ android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_entire" - android:textColor="@drawable/sel_explore_drawable_text_color" + android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -43,7 +43,7 @@ android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_hobby" - android:textColor="@drawable/sel_explore_drawable_text_color" + android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_explore_recent_all" app:layout_constraintTop_toTopOf="parent" /> @@ -57,7 +57,7 @@ android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_activity" - android:textColor="@drawable/sel_explore_drawable_text_color" + android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_explore_recent_hobby" app:layout_constraintTop_toTopOf="parent" /> @@ -71,7 +71,7 @@ android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_career" - android:textColor="@drawable/sel_explore_drawable_text_color" + android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_explore_recent_outside" app:layout_constraintTop_toTopOf="parent" /> From 92a1f5a5f2a7f95a06928e88d4c3a19ff6fcaab7 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 7 Jul 2023 18:34:36 +0900 Subject: [PATCH 004/109] =?UTF-8?q?[ADD/#33]=20selector=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + .../presentation/main/explore/popular/PopularFragment.kt | 5 +++++ .../main/res/drawable/sel_explore_drawable_bnv_category.xml | 4 ++-- app/src/main/res/layout/fragment_popular.xml | 1 - 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b03593a..b4fb966 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,6 +7,7 @@ plugins { id "org.jlleitschuh.gradle.ktlint" version "10.3.0" } apply plugin: 'kotlin-kapt' +apply plugin: 'kotlin-parcelize' Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index eb5670b..5391338 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -2,7 +2,9 @@ package com.release.keyneez.presentation.main.explore.popular import android.os.Bundle import android.view.View +import android.widget.TextView import androidx.fragment.app.viewModels +import com.release.keyneez.R import com.release.keyneez.databinding.FragmentPopularBinding import com.release.keyneez.util.binding.BindingFragment import dagger.hilt.android.AndroidEntryPoint @@ -15,6 +17,9 @@ class PopularFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.vm = viewModel + binding.tvExplorePopularAll.setOnClickListener { + binding.tvExplorePopularAll.isSelected = !binding.tvExplorePopularAll.isSelected + } initPopularAdapter() setupPopularActivityList() } diff --git a/app/src/main/res/drawable/sel_explore_drawable_bnv_category.xml b/app/src/main/res/drawable/sel_explore_drawable_bnv_category.xml index 92fe961..e4ef233 100644 --- a/app/src/main/res/drawable/sel_explore_drawable_bnv_category.xml +++ b/app/src/main/res/drawable/sel_explore_drawable_bnv_category.xml @@ -1,12 +1,12 @@ - + - + diff --git a/app/src/main/res/layout/fragment_popular.xml b/app/src/main/res/layout/fragment_popular.xml index df0e6e1..c8bb5fb 100644 --- a/app/src/main/res/layout/fragment_popular.xml +++ b/app/src/main/res/layout/fragment_popular.xml @@ -30,7 +30,6 @@ android:layout_marginStart="22dp" android:background="@drawable/sel_explore_drawable_bnv_category" android:paddingHorizontal="16dp" - android:onClick="@{()->vm.getPopularData()}" android:paddingVertical="6dp" android:clickable="true" android:text="@string/explore_entire" From b0975cb6fdf989cf0c2aa1a7386038575112ea56 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 7 Jul 2023 18:43:30 +0900 Subject: [PATCH 005/109] =?UTF-8?q?[FEAT/#33]=20selector=20=ED=95=98?= =?UTF-8?q?=EB=82=98=EC=9D=98=20=EB=B2=84=ED=8A=BC=EB=A7=8C=20=EB=88=84?= =?UTF-8?q?=EB=A5=BC=20=EC=88=98=20=EC=9E=88=EA=B2=8C=20=ED=95=98=EB=8A=94?= =?UTF-8?q?=20=EA=B2=83=20=EB=93=9C=EB=94=94=EC=96=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/popular/PopularFragment.kt | 28 ++++++++++++++++--- app/src/main/res/layout/fragment_popular.xml | 3 -- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 5391338..fdd3ed0 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -4,7 +4,6 @@ import android.os.Bundle import android.view.View import android.widget.TextView import androidx.fragment.app.viewModels -import com.release.keyneez.R import com.release.keyneez.databinding.FragmentPopularBinding import com.release.keyneez.util.binding.BindingFragment import dagger.hilt.android.AndroidEntryPoint @@ -17,11 +16,32 @@ class PopularFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.vm = viewModel - binding.tvExplorePopularAll.setOnClickListener { - binding.tvExplorePopularAll.isSelected = !binding.tvExplorePopularAll.isSelected - } initPopularAdapter() setupPopularActivityList() + initCategoryBtnListener() + } + + private fun initCategoryBtnListener() { + binding.tvExplorePopularAll.setOnClickListener { + selectOnlyOneButton(binding.tvExplorePopularAll) + } + binding.tvExplorePopularCareer.setOnClickListener { + selectOnlyOneButton(binding.tvExplorePopularCareer) + } + binding.tvExplorePopularHobby.setOnClickListener { + selectOnlyOneButton(binding.tvExplorePopularHobby) + } + binding.tvExplorePopularOutside.setOnClickListener { + selectOnlyOneButton(binding.tvExplorePopularOutside) + } + } + private fun selectOnlyOneButton(selectedButton: TextView) { + binding.tvExplorePopularAll.isSelected = false + binding.tvExplorePopularCareer.isSelected = false + binding.tvExplorePopularHobby.isSelected = false + binding.tvExplorePopularOutside.isSelected = false + + selectedButton.isSelected = true } private fun initPopularAdapter() { diff --git a/app/src/main/res/layout/fragment_popular.xml b/app/src/main/res/layout/fragment_popular.xml index c8bb5fb..4aa34e3 100644 --- a/app/src/main/res/layout/fragment_popular.xml +++ b/app/src/main/res/layout/fragment_popular.xml @@ -47,7 +47,6 @@ android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:clickable="true" - android:onClick="@{()->vm.getPopularData()}" android:text="@string/explore_hobby" android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_explore_popular_all" @@ -62,7 +61,6 @@ android:background="@drawable/sel_explore_drawable_bnv_category" android:paddingHorizontal="16dp" android:clickable="true" - android:onClick="@{()->vm.getPopularData()}" android:paddingVertical="6dp" android:text="@string/explore_activity" android:textColor="@color/sel_explore_drawable_text_color" @@ -78,7 +76,6 @@ android:clickable="true" android:background="@drawable/sel_explore_drawable_bnv_category" android:paddingHorizontal="16dp" - android:onClick="@{()->vm.getPopularData()}" android:paddingVertical="6dp" android:text="@string/explore_career" android:textColor="@color/sel_explore_drawable_text_color" From eb73d5c4132d8c4b3b0c3c26996db0c76a2e0699 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 7 Jul 2023 18:46:10 +0900 Subject: [PATCH 006/109] =?UTF-8?q?[ADD/#33]=20=EC=B5=9C=EC=8B=A0=20?= =?UTF-8?q?=ED=83=90=EC=83=89=EB=B7=B0=EC=97=90=EB=8F=84=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/recent/RecentFragment.kt | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index e53d3b1..e7e6e53 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -2,6 +2,7 @@ package com.release.keyneez.presentation.main.explore.recent import android.os.Bundle import android.view.View +import android.widget.TextView import androidx.fragment.app.viewModels import com.release.keyneez.R import com.release.keyneez.databinding.FragmentRecentBinding @@ -15,6 +16,30 @@ class RecentFragment : BindingFragment(R.layout.fragment_ super.onViewCreated(view, savedInstanceState) initRecentAdapter() setupRecentActivityList() + initCategoryBtnListener() + } + private fun initCategoryBtnListener() { + binding.tvExploreRecentAll.setOnClickListener { + selectOnlyOneButton(binding.tvExploreRecentAll) + } + binding.tvExploreRecentCareer.setOnClickListener { + selectOnlyOneButton(binding.tvExploreRecentCareer) + } + binding.tvExploreRecentHobby.setOnClickListener { + selectOnlyOneButton(binding.tvExploreRecentHobby) + } + binding.tvExploreRecentOutside.setOnClickListener { + selectOnlyOneButton(binding.tvExploreRecentOutside) + } + } + + private fun selectOnlyOneButton(selectedButton: TextView) { + binding.tvExploreRecentAll.isSelected = false + binding.tvExploreRecentCareer.isSelected = false + binding.tvExploreRecentHobby.isSelected = false + binding.tvExploreRecentOutside.isSelected = false + + selectedButton.isSelected = true } private fun initRecentAdapter() { From 7ec383bfc7d8c015a375a6609f112af3c9a5fa77 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 7 Jul 2023 18:49:02 +0900 Subject: [PATCH 007/109] =?UTF-8?q?[ADD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=EB=B7=B0=EC=97=90=EB=8F=84=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/like/LikeFragment.kt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index ed89f2c..a56c78b 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -2,6 +2,7 @@ import android.content.Context import android.os.Bundle import android.util.Log import android.view.View +import android.widget.TextView import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.recyclerview.widget.SimpleItemAnimator @@ -32,6 +33,31 @@ class LikeFragment : setupLikeActivityList() initLikeEditBtnClickListener() initEditBtnClickListener() + initCategoryBtnListener() + } + + private fun initCategoryBtnListener() { + binding.tvLikeAll.setOnClickListener { + selectOnlyOneButton(binding.tvLikeAll) + } + binding.tvLikeCareer.setOnClickListener { + selectOnlyOneButton(binding.tvLikeCareer) + } + binding.tvLikeHobby.setOnClickListener { + selectOnlyOneButton(binding.tvLikeHobby) + } + binding.tvLikeOutside.setOnClickListener { + selectOnlyOneButton(binding.tvLikeOutside) + } + } + + private fun selectOnlyOneButton(selectedButton: TextView) { + binding.tvLikeAll.isSelected = false + binding.tvLikeCareer.isSelected = false + binding.tvLikeHobby.isSelected = false + binding.tvLikeOutside.isSelected = false + + selectedButton.isSelected = true } private fun initLikeAdapter() { From 67cbdc71c7f5739b3ef1c4cadfeb794f6fa76862 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 7 Jul 2023 20:30:41 +0900 Subject: [PATCH 008/109] =?UTF-8?q?[FEAT/#33]=20=EC=B9=B4=ED=85=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=20=EB=B3=84=20=EC=84=9C=EB=B2=84=ED=86=B5?= =?UTF-8?q?=EC=8B=A0=ED=95=98=EA=B8=B0=20=EA=B5=AC=ED=98=84=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 --- .../presentation/main/explore/popular/PopularFragment.kt | 4 ++++ .../presentation/main/explore/popular/PopularViewModel.kt | 4 ++++ app/src/main/res/layout/fragment_popular.xml | 8 ++++---- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index fdd3ed0..c1146e5 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -35,6 +35,7 @@ class PopularFragment : selectOnlyOneButton(binding.tvExplorePopularOutside) } } + private fun selectOnlyOneButton(selectedButton: TextView) { binding.tvExplorePopularAll.isSelected = false binding.tvExplorePopularCareer.isSelected = false @@ -42,6 +43,9 @@ class PopularFragment : binding.tvExplorePopularOutside.isSelected = false selectedButton.isSelected = true + val filterValue = selectedButton.text.toString() + viewModel.setFilterValue(filterValue) + viewModel.getPopularData() } private fun initPopularAdapter() { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index fd44107..2cd61df 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -35,6 +35,10 @@ class PopularViewModel @Inject constructor( getPopularData() } + fun setFilterValue(value: String) { + filter.value = value + } + fun getPopularData() { viewModelScope.launch { contentRepository.getContent(filter.value.toString()) diff --git a/app/src/main/res/layout/fragment_popular.xml b/app/src/main/res/layout/fragment_popular.xml index 4aa34e3..bf77e81 100644 --- a/app/src/main/res/layout/fragment_popular.xml +++ b/app/src/main/res/layout/fragment_popular.xml @@ -29,9 +29,9 @@ android:layout_height="wrap_content" android:layout_marginStart="22dp" android:background="@drawable/sel_explore_drawable_bnv_category" + android:clickable="true" android:paddingHorizontal="16dp" android:paddingVertical="6dp" - android:clickable="true" android:text="@string/explore_entire" android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toStartOf="parent" @@ -44,9 +44,9 @@ android:layout_height="wrap_content" android:layout_marginStart="9dp" android:background="@drawable/sel_explore_drawable_bnv_category" + android:clickable="true" android:paddingHorizontal="16dp" android:paddingVertical="6dp" - android:clickable="true" android:text="@string/explore_hobby" android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_explore_popular_all" @@ -59,8 +59,8 @@ android:layout_height="wrap_content" android:layout_marginStart="9dp" android:background="@drawable/sel_explore_drawable_bnv_category" - android:paddingHorizontal="16dp" android:clickable="true" + android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_activity" android:textColor="@color/sel_explore_drawable_text_color" @@ -73,8 +73,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="9dp" - android:clickable="true" android:background="@drawable/sel_explore_drawable_bnv_category" + android:clickable="true" android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_career" From 4f80942a1912ad9f7da05d9e36c32e62465e9f46 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 7 Jul 2023 20:33:04 +0900 Subject: [PATCH 009/109] =?UTF-8?q?[ADD/#33]=20clickable=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/fragment_recent.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/layout/fragment_recent.xml b/app/src/main/res/layout/fragment_recent.xml index d0eae40..fb1fee7 100644 --- a/app/src/main/res/layout/fragment_recent.xml +++ b/app/src/main/res/layout/fragment_recent.xml @@ -12,12 +12,15 @@ + + + android:layout_height="match_parent" + android:clickable="true"> Date: Fri, 7 Jul 2023 20:46:39 +0900 Subject: [PATCH 010/109] =?UTF-8?q?[ADD/#33]=20recent=20=EC=B9=B4=ED=85=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=20=EB=B3=84=20=EC=84=9C=EB=B2=84=ED=86=B5?= =?UTF-8?q?=EC=8B=A0=20=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/recent/RecentAdapter.kt | 23 ++--- .../main/explore/recent/RecentFragment.kt | 10 +- .../main/explore/recent/RecentViewModel.kt | 99 +++++++++++-------- 3 files changed, 75 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt index 355e5b9..6f0127e 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt @@ -4,12 +4,12 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView -import coil.load +import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.databinding.ItemExploreContentBinding -import com.release.keyneez.domain.model.Activity import com.release.keyneez.util.DiffCallback -class RecentAdapter : ListAdapter(diffUtil) { +class RecentAdapter : ListAdapter(diffUtil) { + var data = listOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return RecentViewHolder( ItemExploreContentBinding.inflate( @@ -21,25 +21,20 @@ class RecentAdapter : ListAdapter(diffUtil) { } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - if (holder is RecentViewHolder) holder.bind(getItem(position)) + if (holder is RecentViewHolder) holder.setRecentContent(getItem(position)) } class RecentViewHolder(private val binding: ItemExploreContentBinding) : RecyclerView.ViewHolder(binding.root) { - fun bind(item: Activity) { - with(binding) { - ivExploreBackground.load(item.background) - tvExploreCategory.text = item.category - tvExploreContentTitle.text = item.title - tvExploreDate.text = item.date - // TODO : root.setOnSingleClickListener 구현 - } + fun setRecentContent(recent: ResponseGetContentDto) { + binding.data = recent + // 여기도 누르면 상세뷰로 가는 코드짜기 } } companion object { - private val diffUtil = DiffCallback( - onItemsTheSame = { old, new -> old.id == new.id }, + private val diffUtil = DiffCallback( + onItemsTheSame = { old, new -> old.content == new.content }, onContentsTheSame = { old, new -> old == new } ) } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index e7e6e53..c8deeb0 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -7,13 +7,16 @@ import androidx.fragment.app.viewModels import com.release.keyneez.R import com.release.keyneez.databinding.FragmentRecentBinding import com.release.keyneez.util.binding.BindingFragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class RecentFragment : BindingFragment(R.layout.fragment_recent) { private val viewModel: RecentViewModel by viewModels() private var recentAdapter: RecentAdapter? = null override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + binding.vm = viewModel initRecentAdapter() setupRecentActivityList() initCategoryBtnListener() @@ -40,6 +43,9 @@ class RecentFragment : BindingFragment(R.layout.fragment_ binding.tvExploreRecentOutside.isSelected = false selectedButton.isSelected = true + val filterValue = selectedButton.text.toString() + viewModel.setFilterValue(filterValue) + viewModel.getRecentData() } private fun initRecentAdapter() { @@ -48,8 +54,8 @@ class RecentFragment : BindingFragment(R.layout.fragment_ } private fun setupRecentActivityList() { - viewModel.activityList.observe(viewLifecycleOwner) { activityList -> - recentAdapter?.submitList(activityList) + viewModel.recentList.observe(viewLifecycleOwner) { recentList -> + recentAdapter?.submitList(recentList) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt index f260a92..75a85bc 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt @@ -3,53 +3,70 @@ package com.release.keyneez.presentation.main.explore.recent import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import com.release.keyneez.R +import com.release.keyneez.data.entity.response.ResponseGetContentDto +import com.release.keyneez.data.repository.ContentRepository import com.release.keyneez.domain.model.Activity +import com.release.keyneez.util.UiState +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.launch +import retrofit2.HttpException +import timber.log.Timber +import javax.inject.Inject -class RecentViewModel : ViewModel() { - private val _activityList = MutableLiveData>() - val activityList: LiveData> - get() = _activityList +@HiltViewModel +class RecentViewModel @Inject constructor( + private val contentRepository: ContentRepository +) : ViewModel() { + private val _recentList = MutableLiveData>() + val recentList: LiveData> + get() = _recentList + + private val _stateMessage = MutableLiveData() + val stateMessage: LiveData + get() = _stateMessage + + private val _saveState = MutableLiveData() + val saveState: LiveData + get() = _saveState + + val filter = MutableLiveData("") init { - getRecentActivityList() + getRecentData() + } + + fun setFilterValue(value: String) { + filter.value = value + } + + fun getRecentData() { + viewModelScope.launch { + contentRepository.getContent(filter.value.toString()) + .onSuccess { response -> + Timber.tag(successTag).d("response : $response") + + if (response.data == null) { + Timber.d("GET RECENT CONTENT IS NULL") + _stateMessage.value = UiState.Failure(RECENT_DATA_NULL_CODE) + } + _recentList.value = response.data!! + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.tag(failTag).e("throwable : $it") + if (it is HttpException) { + Timber.tag(failTag).e("code : ${it.code()}") + Timber.tag(failTag).e("message : ${it.message()}") + } + } + } } - private fun getRecentActivityList() { - val mainList = listOf( - Activity( - id = 1, - background = R.drawable.img_explore_background, - title = "행주산성\n맛집 투어", - category = "진로", - date = "%s-%s", - liked = true - ), - Activity( - id = 1, - background = R.drawable.img_explore_background, - title = "행주산성\n맛집 투어", - category = "진로", - date = "%s-%s", - liked = true - ), - Activity( - id = 1, - background = R.drawable.img_explore_background, - title = "행주산성\n맛집 투어", - category = "진로", - date = "%s-%s", - liked = true - ), - Activity( - id = 1, - background = R.drawable.img_explore_background, - title = "행주산성\n맛집 투어", - category = "진로", - date = "%s-%s", - liked = true - ) - ) - _activityList.value = mainList + companion object { + const val RECENT_DATA_NULL_CODE = 100 + private const val successTag = "GET_RECENT_CONTENT_SUCCESS" + private const val failTag = "GET_RECENT_CONTENT_FAIL" } } From 38b718ea00f212c4e911d3e613a0a3bb330e22d0 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 8 Jul 2023 13:31:34 +0900 Subject: [PATCH 011/109] =?UTF-8?q?[FEAT/#33]=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=ED=95=98=EB=8B=A4=EA=B0=80=20=EB=82=98=EA=B0=94=EC=9D=84=20?= =?UTF-8?q?=EB=95=8C=20=EB=AA=A8=EB=93=A0=20=EA=B2=83=EC=9D=B4=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=EB=90=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/like/LikeAdapter.kt | 17 ++++++++++++++--- .../presentation/main/like/LikeFragment.kt | 3 ++- .../presentation/main/like/LikeViewModel.kt | 9 +++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeAdapter.kt index 6f1d73a..014198c 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeAdapter.kt @@ -13,13 +13,15 @@ import com.release.keyneez.util.extension.setOnSingleClickListener class LikeAdapter( private val setItemsSelected: (Int) -> List, - private val isEdit: LiveData + private val isEdit: LiveData, + private val clearSelectedItems: () -> Unit ) : ListAdapter(diffUtil) { inner class LikeViewHolder( private val binding: ItemLikeContentBinding, private val setItemsSelected: (Int) -> List, - private val isEdit: LiveData + private val isEdit: LiveData, + private val clearSelectedItems: () -> Unit ) : RecyclerView.ViewHolder(binding.root) { fun bind(item: Activity) { with(binding) { @@ -35,6 +37,14 @@ class LikeAdapter( } } } + isEdit.observeForever { isEdit -> + if (isEdit == false) { + item.isSelected = false + binding.ivLikeCheckedBackground.visibility = View.GONE + binding.btnLikeChecked.visibility = View.GONE + clearSelectedItems() + } + } } } @@ -47,7 +57,8 @@ class LikeAdapter( return LikeViewHolder( binding, setItemsSelected, - isEdit + isEdit, + clearSelectedItems ) } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index a56c78b..fc4822a 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -63,7 +63,8 @@ class LikeFragment : private fun initLikeAdapter() { likeAdapter = LikeAdapter( setItemsSelected = likeViewModel::setItemsSelected, - isEdit = likeViewModel.isEdit + isEdit = likeViewModel.isEdit, + clearSelectedItems = likeViewModel::clearSelectedItems ) binding.rvLike.adapter = likeAdapter val animator = binding.rvLike.itemAnimator diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 41838ab..4ba5186 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -1,5 +1,6 @@ package com.release.keyneez.presentation.main.like +import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -42,6 +43,14 @@ class LikeViewModel : ViewModel() { return selectedIdsList.toList() } + fun clearSelectedItems() { + Log.d("1", "제발") + if (_isEdit.value == false) { + _selectedIds.value?.clear() + getSelectedIdsCount() + } + } + fun updateEditView() { _isEdit.value = _isEdit.value?.not() } From 0d861bdfcc9af3d1787f8ae030e6c2d2868e1b9c Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 8 Jul 2023 13:38:20 +0900 Subject: [PATCH 012/109] =?UTF-8?q?[MOD/#33]=20=EC=82=AD=EC=A0=9C=ED=96=88?= =?UTF-8?q?=EB=8B=A4=EA=B0=80=20=EB=8B=A4=EC=8B=9C=20=EB=82=98=EA=B0=80?= =?UTF-8?q?=EB=A9=B4=20=EB=B2=84=ED=8A=BC=20=EB=88=84=EB=A5=B4=EB=8A=94=20?= =?UTF-8?q?=EA=B2=83=EB=8F=84=20=EC=B4=88=EA=B8=B0=ED=99=94=ED=95=98?= =?UTF-8?q?=EA=B2=8C=EB=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/presentation/main/like/LikeViewModel.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 4ba5186..1fca667 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -1,6 +1,5 @@ package com.release.keyneez.presentation.main.like -import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -44,9 +43,9 @@ class LikeViewModel : ViewModel() { } fun clearSelectedItems() { - Log.d("1", "제발") if (_isEdit.value == false) { _selectedIds.value?.clear() + _selectedIds.value = mutableListOf() getSelectedIdsCount() } } From ac3e542d31daac4f93ad7fa7112463348c63b41c Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 8 Jul 2023 23:38:30 +0900 Subject: [PATCH 013/109] =?UTF-8?q?[MOD/#33]=20=EC=A0=84=EC=B2=B4=EC=9D=BC?= =?UTF-8?q?=20=EB=95=8C=EB=8A=94=20=EC=BF=BC=EB=A6=AC=EC=97=90=20=EC=95=88?= =?UTF-8?q?=20=EB=93=A4=EC=96=B4=EA=B0=80=EA=B2=8C=20=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/popular/PopularFragment.kt | 9 +++++++-- .../presentation/main/explore/recent/RecentFragment.kt | 10 ++++++++-- .../main/explore/recent/RecentViewModel.kt | 2 -- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index c1146e5..dd9f58c 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -44,8 +44,13 @@ class PopularFragment : selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - viewModel.setFilterValue(filterValue) - viewModel.getPopularData() + if (filterValue != binding.tvExplorePopularAll.text.toString()) { + viewModel.setFilterValue(filterValue) + viewModel.getPopularData() + } else { + viewModel.setFilterValue("") + viewModel.getPopularData() + } } private fun initPopularAdapter() { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index c8deeb0..5bcbd32 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -21,6 +21,7 @@ class RecentFragment : BindingFragment(R.layout.fragment_ setupRecentActivityList() initCategoryBtnListener() } + private fun initCategoryBtnListener() { binding.tvExploreRecentAll.setOnClickListener { selectOnlyOneButton(binding.tvExploreRecentAll) @@ -44,8 +45,13 @@ class RecentFragment : BindingFragment(R.layout.fragment_ selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - viewModel.setFilterValue(filterValue) - viewModel.getRecentData() + if (filterValue != binding.tvExploreRecentAll.text.toString()) { + viewModel.setFilterValue(filterValue) + viewModel.getRecentData() + } else { + viewModel.setFilterValue("") + viewModel.getRecentData() + } } private fun initRecentAdapter() { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt index 75a85bc..0dca822 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt @@ -4,10 +4,8 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.release.keyneez.R import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.data.repository.ContentRepository -import com.release.keyneez.domain.model.Activity import com.release.keyneez.util.UiState import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch From 6b8065fd4ba2474b6faa2fd79f6cbadf21689c1b Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sun, 9 Jul 2023 11:01:17 +0900 Subject: [PATCH 014/109] =?UTF-8?q?[MOD/#33]=20=ED=83=90=EC=83=89=EB=B7=B0?= =?UTF-8?q?=20=EB=93=A4=EC=96=B4=EA=B0=94=EC=9D=84=20=EB=95=8C=20=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=A0=84=EC=B2=B4?= =?UTF-8?q?=EA=B0=80=20=EC=84=A0=ED=83=9D=EB=90=98=EC=96=B4=20=EC=9E=88?= =?UTF-8?q?=EA=B2=8C=20=ED=95=B4=20=EC=A3=BC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/explore/popular/PopularFragment.kt | 1 + .../keyneez/presentation/main/explore/recent/RecentFragment.kt | 2 ++ 2 files changed, 3 insertions(+) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index dd9f58c..7d287f1 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -22,6 +22,7 @@ class PopularFragment : } private fun initCategoryBtnListener() { + selectOnlyOneButton(binding.tvExplorePopularAll) binding.tvExplorePopularAll.setOnClickListener { selectOnlyOneButton(binding.tvExplorePopularAll) } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index 5bcbd32..6a3c1b6 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -1,6 +1,7 @@ package com.release.keyneez.presentation.main.explore.recent import android.os.Bundle +import android.util.Log import android.view.View import android.widget.TextView import androidx.fragment.app.viewModels @@ -35,6 +36,7 @@ class RecentFragment : BindingFragment(R.layout.fragment_ binding.tvExploreRecentOutside.setOnClickListener { selectOnlyOneButton(binding.tvExploreRecentOutside) } + selectOnlyOneButton(binding.tvExploreRecentAll) } private fun selectOnlyOneButton(selectedButton: TextView) { From 144c0e4a86549be8f99c7167fa1b1f44133e54b4 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sun, 9 Jul 2023 11:05:13 +0900 Subject: [PATCH 015/109] =?UTF-8?q?[ADD/#33]=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20select=20=EA=B4=80=EB=A0=A8=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/recent/RecentFragment.kt | 3 +-- .../keyneez/presentation/main/like/LikeFragment.kt | 11 +++++++++++ .../keyneez/presentation/main/like/LikeViewModel.kt | 8 ++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index 6a3c1b6..17084c8 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -1,7 +1,6 @@ package com.release.keyneez.presentation.main.explore.recent import android.os.Bundle -import android.util.Log import android.view.View import android.widget.TextView import androidx.fragment.app.viewModels @@ -24,6 +23,7 @@ class RecentFragment : BindingFragment(R.layout.fragment_ } private fun initCategoryBtnListener() { + selectOnlyOneButton(binding.tvExploreRecentAll) binding.tvExploreRecentAll.setOnClickListener { selectOnlyOneButton(binding.tvExploreRecentAll) } @@ -36,7 +36,6 @@ class RecentFragment : BindingFragment(R.layout.fragment_ binding.tvExploreRecentOutside.setOnClickListener { selectOnlyOneButton(binding.tvExploreRecentOutside) } - selectOnlyOneButton(binding.tvExploreRecentAll) } private fun selectOnlyOneButton(selectedButton: TextView) { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index fc4822a..db41e40 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -14,7 +14,9 @@ import com.release.keyneez.presentation.main.like.LikeViewModel import com.release.keyneez.util.binding.BindingFragment import com.release.keyneez.util.binding.BindingToast import com.release.keyneez.util.extension.setOnSingleClickListener +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class LikeFragment : BindingFragment(com.release.keyneez.R.layout.fragment_like) { private var likeAdapter: LikeAdapter? = null @@ -37,6 +39,7 @@ class LikeFragment : } private fun initCategoryBtnListener() { + selectOnlyOneButton(binding.tvLikeAll) binding.tvLikeAll.setOnClickListener { selectOnlyOneButton(binding.tvLikeAll) } @@ -58,6 +61,14 @@ class LikeFragment : binding.tvLikeOutside.isSelected = false selectedButton.isSelected = true + val filterValue = selectedButton.text.toString() + if (filterValue != binding.tvLikeAll.text.toString()) { + likeViewModel.setFilterValue(filterValue) + likeViewModel.getPopularData() + } else { + likeViewModel.setFilterValue("") + likeViewModel.getPopularData() + } } private fun initLikeAdapter() { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 1fca667..78b64be 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.release.keyneez.R import com.release.keyneez.domain.model.Activity +import dagger.hilt.android.lifecycle.HiltViewModel +@HiltViewModel class LikeViewModel : ViewModel() { private val _activityList = MutableLiveData>(mutableListOf()) private val _isEdit = MutableLiveData() @@ -22,6 +24,8 @@ class LikeViewModel : ViewModel() { get() = _isSelected val selectedIds: LiveData> = _selectedIds + val filter = MutableLiveData("") + init { getLikeActivityList() getSelectedIdsCount() @@ -30,6 +34,10 @@ class LikeViewModel : ViewModel() { _selectedIds.value = emptyList().toMutableList() } + fun setFilterValue(value: String) { + filter.value = value + } + fun setItemsSelected(id: Int): List { val selectedIdsList = _selectedIds.value ?: mutableListOf() if (selectedIdsList.contains(id)) { From d0e5c6eff41b26554e512ca0ca0fbf8311751fe7 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sun, 9 Jul 2023 11:56:13 +0900 Subject: [PATCH 016/109] =?UTF-8?q?[MOD/#33]=20=EC=84=9C=EB=B2=84=ED=86=B5?= =?UTF-8?q?=EC=8B=A0=20=EB=B0=8F=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=B0=94?= =?UTF-8?q?=EC=9D=B8=EB=94=A9=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/response/ResponseGetLikeDto.kt | 3 +- .../data/repository/ContentRepository.kt | 2 +- .../data/repository/ContentRepositoryImpl.kt | 4 +- .../keyneez/data/service/ContentService.kt | 2 +- .../keyneez/data/source/ContentDataSource.kt | 2 +- .../keyneez/presentation/main/MainActivity.kt | 2 +- .../presentation/main/like/LikeAdapter.kt | 17 +-- .../presentation/main/like/LikeFragment.kt | 21 ++-- .../presentation/main/like/LikeViewModel.kt | 100 ++++++++++-------- app/src/main/res/layout/fragment_like.xml | 3 + app/src/main/res/layout/item_like_content.xml | 24 +++-- 11 files changed, 98 insertions(+), 82 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetLikeDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetLikeDto.kt index 639d1a8..9ea9d07 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetLikeDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetLikeDto.kt @@ -10,5 +10,6 @@ data class ResponseGetLikeDto( @SerialName("category") val category: String, @SerialName("img") val img: String?, @SerialName("start_at") val start: String?, - @SerialName("end_at") val end: String? + @SerialName("end_at") val end: String?, + var isSelected: Boolean = false ) diff --git a/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt b/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt index 3a9762f..d92378b 100644 --- a/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt +++ b/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt @@ -8,6 +8,6 @@ import com.release.keyneez.data.entity.response.wrapper.BaseResponse interface ContentRepository { suspend fun getContent(filter: String): Result>> - suspend fun getLike(): Result>> + suspend fun getLike(filter: String): Result>> suspend fun getSearch(keyword: String): Result>> } diff --git a/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt b/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt index 1bda1d4..1516051 100644 --- a/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt +++ b/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt @@ -14,8 +14,8 @@ class ContentRepositoryImpl @Inject constructor( override suspend fun getContent(filter: String): Result>> = kotlin.runCatching { contentDataSource.getContent(filter) } - override suspend fun getLike(): Result>> = - kotlin.runCatching { contentDataSource.getLike() } + override suspend fun getLike(filter: String): Result>> = + kotlin.runCatching { contentDataSource.getLike(filter) } override suspend fun getSearch(keyword: String): Result>> = kotlin.runCatching { contentDataSource.getSearch(keyword) } diff --git a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt index 34b1504..63b0563 100644 --- a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt +++ b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt @@ -9,7 +9,7 @@ import retrofit2.http.Query interface ContentService { @GET("contents/liked") - suspend fun getLike(): BaseResponse> + suspend fun getLike(@Query("filter") filter: String): BaseResponse> @GET("contents/") suspend fun getContent(@Query("filter") filter: String): BaseResponse> diff --git a/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt b/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt index 9594e66..1abd48d 100644 --- a/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt +++ b/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt @@ -13,7 +13,7 @@ class ContentDataSource @Inject constructor( suspend fun getContent(filter: String): BaseResponse> = contentService.getContent(filter) - suspend fun getLike(): BaseResponse> = contentService.getLike() + suspend fun getLike(filter: String): BaseResponse> = contentService.getLike(filter) suspend fun getSearch(keyword: String): BaseResponse> = contentService.getSearch(keyword) } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/MainActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/MainActivity.kt index 860f74e..ec20b82 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/MainActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/MainActivity.kt @@ -1,6 +1,5 @@ package com.release.keyneez.presentation.main -import LikeFragment import android.os.Bundle import androidx.fragment.app.Fragment import androidx.fragment.app.commit @@ -10,6 +9,7 @@ import com.release.keyneez.R import com.release.keyneez.databinding.ActivityMainBinding import com.release.keyneez.presentation.main.explore.ExploreFragment import com.release.keyneez.presentation.main.home.HomeFragment +import com.release.keyneez.presentation.main.like.LikeFragment import com.release.keyneez.presentation.main.setting.SettingFragment import com.release.keyneez.util.binding.BindingActivity import dagger.hilt.android.AndroidEntryPoint diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeAdapter.kt index 014198c..9ef5dc4 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeAdapter.kt @@ -6,6 +6,7 @@ import android.view.ViewGroup import androidx.lifecycle.LiveData import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView +import com.release.keyneez.data.entity.response.ResponseGetLikeDto import com.release.keyneez.databinding.ItemLikeContentBinding import com.release.keyneez.domain.model.Activity import com.release.keyneez.util.DiffCallback @@ -15,7 +16,8 @@ class LikeAdapter( private val setItemsSelected: (Int) -> List, private val isEdit: LiveData, private val clearSelectedItems: () -> Unit -) : ListAdapter(diffUtil) { +) : ListAdapter(diffUtil) { + var data = listOf() inner class LikeViewHolder( private val binding: ItemLikeContentBinding, @@ -23,13 +25,12 @@ class LikeAdapter( private val isEdit: LiveData, private val clearSelectedItems: () -> Unit ) : RecyclerView.ViewHolder(binding.root) { - fun bind(item: Activity) { + fun setLikeContent(item: ResponseGetLikeDto) { with(binding) { - data = item ivLikeBackground.setOnSingleClickListener { if (isEdit.value == true) { item.isSelected = !item.isSelected - setItemsSelected(item.id) + setItemsSelected(item.content) binding.ivLikeCheckedBackground.visibility = if (item.isSelected) View.VISIBLE else View.GONE binding.btnLikeChecked.visibility = @@ -62,16 +63,18 @@ class LikeAdapter( ) } + override fun getItemCount(): Int = data.size + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - if (holder is LikeViewHolder) holder.bind(getItem(position)) + if (holder is LikeViewHolder) holder.setLikeContent(getItem(position)) } private var onItemClickListener: ((Activity) -> Unit)? = null companion object { private val diffUtil = - DiffCallback( - onItemsTheSame = { old, new -> old.id == new.id }, + DiffCallback( + onItemsTheSame = { old, new -> old.content == new.content }, onContentsTheSame = { old, new -> old == new } ) } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index db41e40..65db051 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -1,3 +1,5 @@ +package com.release.keyneez.presentation.main.like + import android.content.Context import android.os.Bundle import android.util.Log @@ -6,11 +8,9 @@ import android.widget.TextView import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.recyclerview.widget.SimpleItemAnimator +import com.release.keyneez.data.entity.response.ResponseGetLikeDto import com.release.keyneez.databinding.FragmentLikeBinding -import com.release.keyneez.domain.model.Activity import com.release.keyneez.presentation.main.MainViewModel -import com.release.keyneez.presentation.main.like.LikeAdapter -import com.release.keyneez.presentation.main.like.LikeViewModel import com.release.keyneez.util.binding.BindingFragment import com.release.keyneez.util.binding.BindingToast import com.release.keyneez.util.extension.setOnSingleClickListener @@ -20,7 +20,7 @@ import dagger.hilt.android.AndroidEntryPoint class LikeFragment : BindingFragment(com.release.keyneez.R.layout.fragment_like) { private var likeAdapter: LikeAdapter? = null - lateinit var likeList: List + lateinit var likeList: List private val likeViewModel by viewModels() private val mainViewModel by activityViewModels() @@ -32,7 +32,7 @@ class LikeFragment : super.onViewCreated(view, savedInstanceState) binding.vm = likeViewModel initLikeAdapter() - setupLikeActivityList() + setupLikeData() initLikeEditBtnClickListener() initEditBtnClickListener() initCategoryBtnListener() @@ -64,10 +64,10 @@ class LikeFragment : val filterValue = selectedButton.text.toString() if (filterValue != binding.tvLikeAll.text.toString()) { likeViewModel.setFilterValue(filterValue) - likeViewModel.getPopularData() + likeViewModel.getLikeData() } else { likeViewModel.setFilterValue("") - likeViewModel.getPopularData() + likeViewModel.getLikeData() } } @@ -82,9 +82,6 @@ class LikeFragment : if (animator is SimpleItemAnimator) { animator.supportsChangeAnimations = false } - likeViewModel.activityList.observe(viewLifecycleOwner) { activityList -> - likeAdapter?.submitList(activityList) - } } private fun initLikeEditBtnClickListener() { @@ -108,8 +105,8 @@ class LikeFragment : } } - private fun setupLikeActivityList() { - likeViewModel.activityList.observe(viewLifecycleOwner) { activityList -> + private fun setupLikeData() { + likeViewModel.likeList.observe(viewLifecycleOwner) { activityList -> likeList = activityList likeAdapter?.submitList(activityList) if (likeViewModel.isEdit.value == false) { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 78b64be..6c6d219 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -3,31 +3,46 @@ package com.release.keyneez.presentation.main.like import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import com.release.keyneez.R -import com.release.keyneez.domain.model.Activity +import androidx.lifecycle.viewModelScope +import com.release.keyneez.data.entity.response.ResponseGetLikeDto +import com.release.keyneez.data.repository.ContentRepository +import com.release.keyneez.util.UiState import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.launch +import retrofit2.HttpException +import timber.log.Timber +import javax.inject.Inject @HiltViewModel -class LikeViewModel : ViewModel() { - private val _activityList = MutableLiveData>(mutableListOf()) +class LikeViewModel @Inject constructor( + private val contentRepository: ContentRepository +) : ViewModel() { + private val _likeList = MutableLiveData>(mutableListOf()) private val _isEdit = MutableLiveData() private val _isSelected = MutableLiveData() private val _selectedIds = MutableLiveData>() private val _selectedCount = MutableLiveData() + private val _stateMessage = MutableLiveData() + private val _saveState = MutableLiveData() val selectedCount: LiveData get() = _selectedCount - val activityList: LiveData> - get() = _activityList + val likeList: LiveData> + get() = _likeList val isEdit: LiveData get() = _isEdit val isSelected: LiveData get() = _isSelected val selectedIds: LiveData> = _selectedIds + val stateMessage: LiveData + get() = _stateMessage + + val saveState: LiveData + get() = _saveState val filter = MutableLiveData("") init { - getLikeActivityList() + getLikeData() getSelectedIdsCount() _isEdit.value = false _isSelected.value = false @@ -76,12 +91,12 @@ class LikeViewModel : ViewModel() { fun deleteSelectedItems() { if (_isEdit.value == true) { val selectedIdsList = _selectedIds.value ?: return - val updatedList = _activityList.value?.toMutableList() ?: mutableListOf() + val updatedList = _likeList.value?.toMutableList() ?: mutableListOf() val positionsToRemove = mutableListOf() val selectedIdsSet = selectedIdsList.toSet() for (selectedId in selectedIdsList) { - val itemToRemove = updatedList.find { it.id == selectedId } + val itemToRemove = updatedList.find { it.content == selectedId } itemToRemove?.let { val position = updatedList.indexOf(it) positionsToRemove.add(position) @@ -90,50 +105,41 @@ class LikeViewModel : ViewModel() { } for (i in updatedList.size - 1 downTo 0) { val activity = updatedList[i] - if (selectedIdsSet.contains(activity.id)) { + if (selectedIdsSet.contains(activity.content)) { updatedList.removeAt(i) } } - _activityList.value = updatedList.toList() + _likeList.value = updatedList.toList() + } + } + + fun getLikeData() { + viewModelScope.launch { + contentRepository.getLike(filter.value.toString()) + .onSuccess { response -> + Timber.tag(successTag).d("response : $response") + + if (response.data == null) { + Timber.d("GET LIKE CONTENT IS NULL") + _stateMessage.value = UiState.Failure(LIKE_DATA_NULL_CODE) + } + _likeList.value = response.data!! + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.tag(failTag).e("throwable : $it") + if (it is HttpException) { + Timber.tag(failTag).e("code : ${it.code()}") + Timber.tag(failTag).e("message : ${it.message()}") + } + } } } - private fun getLikeActivityList() { - val mainList = listOf( - Activity( - id = 1, - background = R.drawable.img_explore_background, - title = "행주산성\n맛집 투어", - category = "진로", - date = "%s-%s", - liked = true - ), - Activity( - id = 2, - background = R.drawable.img_explore_background, - title = "행주산성\n맛집 투어", - category = "진로", - date = "%s-%s", - liked = true - ), - Activity( - id = 3, - background = R.drawable.img_explore_background, - title = "행주산성\n맛집 투어", - category = "진로", - date = "%s-%s", - liked = true - ), - Activity( - id = 4, - background = R.drawable.img_explore_background, - title = "행주산성\n맛집 투어", - category = "진로", - date = "%s-%s", - liked = true - ) - ) - _activityList.value = mainList + companion object { + const val LIKE_DATA_NULL_CODE = 100 + private const val successTag = "GET_LIKE_CONTENT_SUCCESS" + private const val failTag = "GET_LIKE_CONTENT_FAIL" } } diff --git a/app/src/main/res/layout/fragment_like.xml b/app/src/main/res/layout/fragment_like.xml index bcc3a29..9358ffc 100644 --- a/app/src/main/res/layout/fragment_like.xml +++ b/app/src/main/res/layout/fragment_like.xml @@ -9,6 +9,9 @@ name="vm" type="com.release.keyneez.presentation.main.like.LikeViewModel" /> + diff --git a/app/src/main/res/layout/item_like_content.xml b/app/src/main/res/layout/item_like_content.xml index 87e8759..22b9434 100644 --- a/app/src/main/res/layout/item_like_content.xml +++ b/app/src/main/res/layout/item_like_content.xml @@ -7,7 +7,7 @@ + type="com.release.keyneez.data.entity.response.ResponseGetLikeDto" /> @@ -39,6 +39,7 @@ + app:layout_constraintTop_toTopOf="parent" + tools:text="@string/explore_activity" /> + app:layout_constraintTop_toBottomOf="@id/tv_like_category" + tools:text="@string/explore_content_title" /> + app:layout_constraintTop_toBottomOf="@id/tv_like_content_title" + tools:text="@string/explore_date" /> + app:layout_constraintStart_toStartOf="parent" + tools:src="@drawable/img_explore_background" /> Date: Sun, 9 Jul 2023 13:09:21 +0900 Subject: [PATCH 017/109] =?UTF-8?q?[MOD/#33]=20=ED=8E=B8=EC=A7=91=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=EC=9D=B4=20=EC=95=88=20=EB=88=8C=EB=A6=AC=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EB=B0=9C=EC=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/presentation/main/like/LikeFragment.kt | 2 +- app/src/main/res/layout/fragment_like.xml | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 65db051..e790b1f 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -33,9 +33,9 @@ class LikeFragment : binding.vm = likeViewModel initLikeAdapter() setupLikeData() - initLikeEditBtnClickListener() initEditBtnClickListener() initCategoryBtnListener() + initLikeEditBtnClickListener() } private fun initCategoryBtnListener() { diff --git a/app/src/main/res/layout/fragment_like.xml b/app/src/main/res/layout/fragment_like.xml index 9358ffc..f72bfb4 100644 --- a/app/src/main/res/layout/fragment_like.xml +++ b/app/src/main/res/layout/fragment_like.xml @@ -9,9 +9,6 @@ name="vm" type="com.release.keyneez.presentation.main.like.LikeViewModel" /> - @@ -50,6 +47,7 @@ android:layout_marginTop="37dp" android:layout_marginEnd="11dp" android:padding="12dp" + android:clickable="true" android:text="@{vm.isEdit ? @string/like_cancel : @string/like_edit}" android:textColor="@color/gray600" app:layout_constraintEnd_toEndOf="@id/layout_like_toolbar" From 8201b98832b3a2ec68174f78e2d526fe00a5b1c1 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 10 Jul 2023 18:32:44 +0900 Subject: [PATCH 018/109] =?UTF-8?q?[ADD/#33]=20like=20dto=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/entity/response/ResponsePostLikeDto.kt | 15 +++++++++++++++ .../presentation/main/like/LikeFragment.kt | 3 ++- .../presentation/main/like/LikeViewModel.kt | 6 ++---- 3 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/release/keyneez/data/entity/response/ResponsePostLikeDto.kt diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponsePostLikeDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponsePostLikeDto.kt new file mode 100644 index 0000000..7d40b75 --- /dev/null +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponsePostLikeDto.kt @@ -0,0 +1,15 @@ +package com.release.keyneez.data.entity.response + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class ResponsePostLikeDto( + @SerialName("content_pk") val content: Int, + @SerialName("title") val title: String, + @SerialName("category") val category: String, + @SerialName("img") val img: String?, + @SerialName("start_at") val start: String?, + @SerialName("end_at") val end: String?, + var isSelected: Boolean = false +) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index e790b1f..212c9ba 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -85,7 +85,8 @@ class LikeFragment : } private fun initLikeEditBtnClickListener() { - binding.btnLikeEdit.setOnSingleClickListener { + binding.btnLikeEdit.setOnClickListener { + Log.d("1", "제발..") likeViewModel.updateEditView() mainViewModel.updateBnvView() } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 6c6d219..2af6bc2 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -1,5 +1,6 @@ package com.release.keyneez.presentation.main.like +import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -74,6 +75,7 @@ class LikeViewModel @Inject constructor( } fun updateEditView() { + Log.d("1", "갑자기 왜 안되는 거야 대체..") _isEdit.value = _isEdit.value?.not() } @@ -84,10 +86,6 @@ class LikeViewModel @Inject constructor( return selectedIdsList.size } - fun updateSelected() { - _isSelected.value = _isSelected.value?.not() - } - fun deleteSelectedItems() { if (_isEdit.value == true) { val selectedIdsList = _selectedIds.value ?: return From b884850d48ef6d5403a37a6fdf8ebce39c128280 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 10 Jul 2023 18:54:31 +0900 Subject: [PATCH 019/109] =?UTF-8?q?[ADD/#33]=20=EC=B0=9C,=20=EC=B0=9C=20?= =?UTF-8?q?=EC=B7=A8=EC=86=8C=20=EA=B4=80=EB=A0=A8=20=EC=84=9C=EB=B2=84=20?= =?UTF-8?q?=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/data/repository/ContentRepository.kt | 3 +++ .../keyneez/data/repository/ContentRepositoryImpl.kt | 7 +++++++ .../com/release/keyneez/data/service/ContentService.kt | 9 +++++++++ .../release/keyneez/data/source/ContentDataSource.kt | 10 +++++++++- 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt b/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt index d92378b..7c70402 100644 --- a/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt +++ b/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt @@ -3,6 +3,7 @@ package com.release.keyneez.data.repository import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.data.entity.response.ResponseGetLikeDto import com.release.keyneez.data.entity.response.ResponseGetSearchResultDto +import com.release.keyneez.data.entity.response.ResponsePostLikeDto import com.release.keyneez.data.entity.response.wrapper.BaseResponse interface ContentRepository { @@ -10,4 +11,6 @@ interface ContentRepository { suspend fun getContent(filter: String): Result>> suspend fun getLike(filter: String): Result>> suspend fun getSearch(keyword: String): Result>> + suspend fun postLike(pk: Int): Result> + suspend fun postUnlike(pk: Int): Result> } diff --git a/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt b/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt index 1516051..adfc492 100644 --- a/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt +++ b/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt @@ -3,6 +3,7 @@ package com.release.keyneez.data.repository import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.data.entity.response.ResponseGetLikeDto import com.release.keyneez.data.entity.response.ResponseGetSearchResultDto +import com.release.keyneez.data.entity.response.ResponsePostLikeDto import com.release.keyneez.data.entity.response.wrapper.BaseResponse import com.release.keyneez.data.source.ContentDataSource import javax.inject.Inject @@ -19,4 +20,10 @@ class ContentRepositoryImpl @Inject constructor( override suspend fun getSearch(keyword: String): Result>> = kotlin.runCatching { contentDataSource.getSearch(keyword) } + + override suspend fun postLike(pk: Int): Result> = + kotlin.runCatching { contentDataSource.postLike(pk) } + + override suspend fun postUnlike(pk: Int): Result> = + kotlin.runCatching { contentDataSource.postUnlike(pk) } } diff --git a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt index 63b0563..8bce86d 100644 --- a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt +++ b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt @@ -3,8 +3,11 @@ package com.release.keyneez.data.service import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.data.entity.response.ResponseGetLikeDto import com.release.keyneez.data.entity.response.ResponseGetSearchResultDto +import com.release.keyneez.data.entity.response.ResponsePostLikeDto import com.release.keyneez.data.entity.response.wrapper.BaseResponse import retrofit2.http.GET +import retrofit2.http.POST +import retrofit2.http.Path import retrofit2.http.Query interface ContentService { @@ -18,4 +21,10 @@ interface ContentService { suspend fun getSearch( @Query("keyword") keyword: String ): BaseResponse> + + @POST("contents/{pk}/like") + suspend fun postLike(@Path("pk") pk: Int): BaseResponse + + @POST("contents/{pk}/unlike") + suspend fun postUnlike(@Path("pk") pk: Int): BaseResponse } diff --git a/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt b/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt index 1abd48d..95f0ac9 100644 --- a/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt +++ b/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt @@ -3,6 +3,7 @@ package com.release.keyneez.data.source import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.data.entity.response.ResponseGetLikeDto import com.release.keyneez.data.entity.response.ResponseGetSearchResultDto +import com.release.keyneez.data.entity.response.ResponsePostLikeDto import com.release.keyneez.data.entity.response.wrapper.BaseResponse import com.release.keyneez.data.service.ContentService import javax.inject.Inject @@ -13,7 +14,14 @@ class ContentDataSource @Inject constructor( suspend fun getContent(filter: String): BaseResponse> = contentService.getContent(filter) - suspend fun getLike(filter: String): BaseResponse> = contentService.getLike(filter) + suspend fun getLike(filter: String): BaseResponse> = + contentService.getLike(filter) + suspend fun getSearch(keyword: String): BaseResponse> = contentService.getSearch(keyword) + + suspend fun postLike(pk: Int): BaseResponse = + contentService.postLike(pk) + suspend fun postUnlike(pk: Int): BaseResponse = + contentService.postUnlike(pk) } From ae3ae4f337229b9244d5a23815b332c5018305a9 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 10 Jul 2023 19:46:07 +0900 Subject: [PATCH 020/109] =?UTF-8?q?[FEAT/#33]=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/like/LikeViewModel.kt | 13 +++++++++++++ app/src/main/res/layout/fragment_like.xml | 3 +++ 2 files changed, 16 insertions(+) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 2af6bc2..062b175 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -109,6 +109,19 @@ class LikeViewModel @Inject constructor( } _likeList.value = updatedList.toList() + // 서버 통신을 위해 선택된 아이템의 ID를 서버로 전송하여 좋아요 해제 + viewModelScope.launch { + for (selectedId in selectedIdsList) { + try { + contentRepository.postUnlike(selectedId) + // 성공적으로 좋아요를 해제한 경우 + Timber.d("Unlike item with ID: $selectedId success") + } catch (e: Exception) { + // 좋아요 해제 실패 또는 예외 발생한 경우 + Timber.e(e, "Failed to unlike item with ID: $selectedId") + } + } + } } } diff --git a/app/src/main/res/layout/fragment_like.xml b/app/src/main/res/layout/fragment_like.xml index f72bfb4..6523d58 100644 --- a/app/src/main/res/layout/fragment_like.xml +++ b/app/src/main/res/layout/fragment_like.xml @@ -8,6 +8,9 @@ + From 7b16a50b481bf7b341db698fde4a7fa85527a5f4 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 10 Jul 2023 20:15:59 +0900 Subject: [PATCH 021/109] =?UTF-8?q?[FEAT/#33]=20=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=EB=B7=B0=20=EC=A2=8B=EC=95=84=EC=9A=94=20=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B2=83=20=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/search/SearchViewModel.kt | 18 +++++++++++++++++- .../main/res/layout/item_search_content.xml | 6 ++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt index e7d1a17..2c1bf8f 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt @@ -45,7 +45,6 @@ class SearchViewModel @Inject constructor( } Timber.d("GET SEARCH LIST SUCCESS") Timber.d("response : $response") - _searchList.value = response.data!! _stateMessage.value = UiState.Success }.onFailure { @@ -65,6 +64,23 @@ class SearchViewModel @Inject constructor( } } + fun postSave(pk: Int) { + viewModelScope.launch { + contentRepository.postLike(pk).onSuccess { response -> + + Timber.d("POST SAVE STATE SUCCESS") + Timber.d("response : $response") + + _saveState.value = true + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.d("throwable : $it") + _stateMessage.value = UiState.Error + } + } + } + companion object { const val SEARCH_NULL_CODE = 100 const val SEARCH_NO_POST_CODE = 404 diff --git a/app/src/main/res/layout/item_search_content.xml b/app/src/main/res/layout/item_search_content.xml index 0066660..929bf46 100644 --- a/app/src/main/res/layout/item_search_content.xml +++ b/app/src/main/res/layout/item_search_content.xml @@ -9,6 +9,10 @@ name="data" type="com.release.keyneez.data.entity.response.ResponseGetSearchResultDto" /> + + @@ -54,6 +58,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" + isSelected="@{vm.saveState}" + android:onClick="@{()->vm.postSave(data.content)}" android:layout_marginEnd="3dp" android:background="@null" android:contentDescription="@string/search_heart_contentdescription" From 858241cb04403cc0c46be08ce375e0433789d074 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 10 Jul 2023 21:03:48 +0900 Subject: [PATCH 022/109] =?UTF-8?q?[ADD/#33]=20=EB=9D=BC=EC=82=AC=EC=9D=B4?= =?UTF-8?q?=ED=81=B4=EB=9F=AC=EB=B7=B0=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EC=9D=B8=EA=B8=B0=EB=B7=B0=20=EC=A2=8B?= =?UTF-8?q?=EC=95=84=EC=9A=94=20=EB=B3=B4=EB=82=B4=EB=8A=94=20=EA=B2=83=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/popular/PopularAdapter.kt | 6 +- .../main/explore/popular/PopularViewModel.kt | 17 +++ .../main/explore/recent/RecentAdapter.kt | 6 +- .../main/explore/recent/RecentViewModel.kt | 16 +++ app/src/main/res/layout/fragment_popular.xml | 2 +- app/src/main/res/layout/fragment_recent.xml | 2 +- ...e_content.xml => item_popular_content.xml} | 24 ++-- .../main/res/layout/item_recent_content.xml | 114 ++++++++++++++++++ 8 files changed, 170 insertions(+), 17 deletions(-) rename app/src/main/res/layout/{item_explore_content.xml => item_popular_content.xml} (85%) create mode 100644 app/src/main/res/layout/item_recent_content.xml diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt index 67d75c3..bdfbe96 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt @@ -5,13 +5,13 @@ import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.release.keyneez.data.entity.response.ResponseGetContentDto -import com.release.keyneez.databinding.ItemExploreContentBinding +import com.release.keyneez.databinding.ItemPopularContentBinding import com.release.keyneez.util.DiffCallback class PopularAdapter : ListAdapter(diffUtil) { var data = listOf() - class PopularViewHolder(private val binding: ItemExploreContentBinding) : + class PopularViewHolder(private val binding: ItemPopularContentBinding) : RecyclerView.ViewHolder(binding.root) { fun setPopularContent(popular: ResponseGetContentDto) { binding.data = popular @@ -22,7 +22,7 @@ class PopularAdapter : ListAdapter + + Timber.d("POST SAVE STATE SUCCESS") + Timber.d("response : $response") + + _saveState.value = true + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.d("throwable : $it") + _stateMessage.value = UiState.Error + } + } + } + companion object { const val POPULAR_DATA_NULL_CODE = 100 private const val successTag = "GET_POPULAR_CONTENT_SUCCESS" diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt index 6f0127e..a6f678e 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt @@ -5,14 +5,14 @@ import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.release.keyneez.data.entity.response.ResponseGetContentDto -import com.release.keyneez.databinding.ItemExploreContentBinding +import com.release.keyneez.databinding.ItemRecentContentBinding import com.release.keyneez.util.DiffCallback class RecentAdapter : ListAdapter(diffUtil) { var data = listOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return RecentViewHolder( - ItemExploreContentBinding.inflate( + ItemRecentContentBinding.inflate( LayoutInflater.from(parent.context), parent, false @@ -24,7 +24,7 @@ class RecentAdapter : ListAdapter + + Timber.d("POST SAVE STATE SUCCESS") + Timber.d("response : $response") + + _saveState.value = true + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.d("throwable : $it") + _stateMessage.value = UiState.Error + } + } + } companion object { const val RECENT_DATA_NULL_CODE = 100 diff --git a/app/src/main/res/layout/fragment_popular.xml b/app/src/main/res/layout/fragment_popular.xml index bf77e81..fe457d8 100644 --- a/app/src/main/res/layout/fragment_popular.xml +++ b/app/src/main/res/layout/fragment_popular.xml @@ -97,6 +97,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_explore_popular_all" app:spanCount="2" - tools:listitem="@layout/item_explore_content" /> + tools:listitem="@layout/item_popular_content" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_recent.xml b/app/src/main/res/layout/fragment_recent.xml index fb1fee7..beeac73 100644 --- a/app/src/main/res/layout/fragment_recent.xml +++ b/app/src/main/res/layout/fragment_recent.xml @@ -98,6 +98,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_explore_recent_all" app:spanCount="2" - tools:listitem="@layout/item_explore_content" /> + tools:listitem="@layout/item_recent_content" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_explore_content.xml b/app/src/main/res/layout/item_popular_content.xml similarity index 85% rename from app/src/main/res/layout/item_explore_content.xml rename to app/src/main/res/layout/item_popular_content.xml index 54c057a..05ec6c5 100644 --- a/app/src/main/res/layout/item_explore_content.xml +++ b/app/src/main/res/layout/item_popular_content.xml @@ -9,18 +9,22 @@ name="data" type="com.release.keyneez.data.entity.response.ResponseGetContentDto" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 34dfa2f98fa5992e63a29be4946e32b6419959cf Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Tue, 11 Jul 2023 21:07:20 +0900 Subject: [PATCH 023/109] =?UTF-8?q?[ADD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=EB=B7=B0=20=EC=95=84=EC=9D=B4=ED=85=9C=20=EA=B0=9C=EC=88=98=20?= =?UTF-8?q?=EC=84=B8=EB=8A=94=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 33 +++---------------- .../presentation/main/like/LikeViewModel.kt | 6 +++- .../main/search/SearchActivity.kt | 6 ++-- 3 files changed, 13 insertions(+), 32 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 00b757a..babcfe8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,12 +3,11 @@ xmlns:tools="http://schemas.android.com/tools"> - - - - - - - - - - - + android:name=".presentation.main.MainActivity" + android:exported="true" + android:screenOrientation="portrait"> - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 062b175..6b55622 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -80,10 +80,14 @@ class LikeViewModel @Inject constructor( } fun getSelectedIdsCount(): Int { + _selectedIds.observeForever { selectedIdsList -> + val selectedCount = selectedIdsList?.size ?: 0 + _selectedCount.value = selectedCount + } val selectedIdsList = _selectedIds.value ?: mutableListOf() val selectedCount = selectedIdsList.size _selectedCount.value = selectedCount - return selectedIdsList.size + return selectedCount } fun deleteSelectedItems() { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index c5084a4..a10cf4b 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -61,10 +61,10 @@ class SearchActivity : BindingActivity(R.layout.activity_ } private fun setupSearchActivityList() { - val searchList = viewModel.searchList.value ?: emptyList() + val searchList = viewModel.searchList.value searchAdapter?.submitList(searchList) - binding.tvSearchCount.text = searchList.size.toString() - if (searchList.size == 0) { + binding.tvSearchCount.text = searchList?.size.toString() + if (searchList?.size == 0) { showToast(getString(R.string.search_no_result)) } } From dc00654e718c490a35f2d2c278801a0088d667b7 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:45:29 +0900 Subject: [PATCH 024/109] =?UTF-8?q?[MOD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=EB=B7=B0=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/release/keyneez/presentation/main/like/LikeFragment.kt | 3 +++ .../release/keyneez/presentation/main/like/LikeViewModel.kt | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 212c9ba..bc470c3 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -82,6 +82,9 @@ class LikeFragment : if (animator is SimpleItemAnimator) { animator.supportsChangeAnimations = false } + likeViewModel.likeList.observe(viewLifecycleOwner) { likeList -> + likeAdapter?.submitList(likeList) + } } private fun initLikeEditBtnClickListener() { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 6b55622..80d77e4 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -1,6 +1,5 @@ package com.release.keyneez.presentation.main.like -import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -75,7 +74,6 @@ class LikeViewModel @Inject constructor( } fun updateEditView() { - Log.d("1", "갑자기 왜 안되는 거야 대체..") _isEdit.value = _isEdit.value?.not() } From 01b60aab2c7848ca5fe989c7e5afcd2af4170e7e Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Wed, 12 Jul 2023 19:18:49 +0900 Subject: [PATCH 025/109] =?UTF-8?q?[ADD/#33]=20api=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EB=90=A8=EC=97=90=20=EB=94=B0=EB=9D=BCdto=20=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/entity/response/ResponseGetContentDto.kt | 9 +++++++++ .../data/entity/response/ResponseGetSearchResultDto.kt | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt index 1dc8e33..466e57a 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt @@ -7,9 +7,18 @@ data class ResponseGetContentDto( @SerialName("content_pk") val content: Int, @SerialName("title") val title: String, @SerialName("category") val category: String, + @SerialName("tag") val tag: String, + @SerialName("link") val link: String, @SerialName("img") val img: String?, + @SerialName("place") val place: String, + @SerialName("introduction") val introduction: String, + @SerialName("inquiry") val inquiry: String?, + @SerialName("price") val price: String?, + @SerialName("benefit") val benefit: String?, @SerialName("start_at") val start: String?, @SerialName("end_at") val end: String?, + @SerialName("created_at") val created: String?, + @SerialName("updated_at") val updated: String?, val Likes: List ) { @Serializable diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt index 302a428..de5f040 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt @@ -8,9 +8,18 @@ data class ResponseGetSearchResultDto( @SerialName("content_pk") val content: Int, @SerialName("title") val title: String, @SerialName("category") val category: String, + @SerialName("tag") val tag: String, + @SerialName("link") val link: String, @SerialName("img") val img: String?, + @SerialName("place") val place: String, + @SerialName("introduction") val introduction: String, + @SerialName("inquiry") val inquiry: String?, + @SerialName("price") val price: String?, + @SerialName("benefit") val benefit: String?, @SerialName("start_at") val start: String?, @SerialName("end_at") val end: String?, + @SerialName("created_at") val created: String?, + @SerialName("updated_at") val updated: String?, val Likes: List ) { @Serializable From e5857f713bf237c234da54084f4db6c77bd00d39 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Wed, 12 Jul 2023 20:17:36 +0900 Subject: [PATCH 026/109] =?UTF-8?q?[MOD/#33]=20=EB=A6=B0=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/data/entity/response/ResponseGetContentDto.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt index 466e57a..bf8554b 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt @@ -2,6 +2,7 @@ package com.release.keyneez.data.entity.response import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable + @Serializable data class ResponseGetContentDto( @SerialName("content_pk") val content: Int, From 102a41874c1f6dfdc67fd45485aef180b74b4d35 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Wed, 12 Jul 2023 23:48:33 +0900 Subject: [PATCH 027/109] =?UTF-8?q?[MOD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=20=EB=B0=9B=EC=95=84=EC=98=A4=EB=8A=94=20=EA=B2=83=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/item_popular_content.xml | 2 +- app/src/main/res/layout/item_recent_content.xml | 2 +- app/src/main/res/layout/item_search_content.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/item_popular_content.xml b/app/src/main/res/layout/item_popular_content.xml index 05ec6c5..d7ff651 100644 --- a/app/src/main/res/layout/item_popular_content.xml +++ b/app/src/main/res/layout/item_popular_content.xml @@ -62,7 +62,7 @@ android:padding="12dp" isSelected="@{vm.saveState}" android:onClick="@{()->vm.postSave(data.content)}" - android:src="@drawable/sel_search_drawable_bnv_like_icon" + android:src="@{data.Likes.isEmpty() ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="SpeakableTextPresentCheck" /> diff --git a/app/src/main/res/layout/item_recent_content.xml b/app/src/main/res/layout/item_recent_content.xml index 51868cd..b4cd211 100644 --- a/app/src/main/res/layout/item_recent_content.xml +++ b/app/src/main/res/layout/item_recent_content.xml @@ -62,7 +62,7 @@ android:padding="12dp" isSelected="@{vm.saveState}" android:onClick="@{()->vm.postSave(data.content)}" - android:src="@drawable/sel_search_drawable_bnv_like_icon" + android:src="@{data.Likes.isEmpty() ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="SpeakableTextPresentCheck" /> diff --git a/app/src/main/res/layout/item_search_content.xml b/app/src/main/res/layout/item_search_content.xml index 929bf46..cf6bb64 100644 --- a/app/src/main/res/layout/item_search_content.xml +++ b/app/src/main/res/layout/item_search_content.xml @@ -64,7 +64,7 @@ android:background="@null" android:contentDescription="@string/search_heart_contentdescription" android:padding="12dp" - android:src="@drawable/sel_search_drawable_bnv_like_icon" + android:src="@{data.Likes.isEmpty() ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="SpeakableTextPresentCheck" /> From 878726fdb80f32229ac900ebd6bad8337936ed5c Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 13 Jul 2023 00:03:07 +0900 Subject: [PATCH 028/109] =?UTF-8?q?[MOD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=EB=B7=B0=20=ED=95=98=ED=8A=B8=20ui=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/item_like_content.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/item_like_content.xml b/app/src/main/res/layout/item_like_content.xml index 22b9434..7880008 100644 --- a/app/src/main/res/layout/item_like_content.xml +++ b/app/src/main/res/layout/item_like_content.xml @@ -61,7 +61,7 @@ android:layout_marginEnd="3dp" android:background="@null" android:padding="12dp" - android:src="@drawable/sel_search_drawable_bnv_like_icon" + android:src="@drawable/ic_heart_fill" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="SpeakableTextPresentCheck" /> From 7f484cf54e25e17c03d0df8b903b74eb55250417 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 14 Jul 2023 14:30:28 +0900 Subject: [PATCH 029/109] =?UTF-8?q?[MOD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=B6=80=EB=B6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/explore/popular/PopularViewModel.kt | 3 ++- app/src/main/res/layout/item_popular_content.xml | 2 +- app/src/main/res/layout/item_recent_content.xml | 2 +- app/src/main/res/layout/item_search_content.xml | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index 566d28d..07a5182 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -32,6 +32,7 @@ class PopularViewModel @Inject constructor( val filter = MutableLiveData("") init { + _saveState.value == true getPopularData() } @@ -69,7 +70,7 @@ class PopularViewModel @Inject constructor( Timber.d("POST SAVE STATE SUCCESS") Timber.d("response : $response") - _saveState.value = true + _saveState.value = false _stateMessage.value = UiState.Success } .onFailure { diff --git a/app/src/main/res/layout/item_popular_content.xml b/app/src/main/res/layout/item_popular_content.xml index d7ff651..8352846 100644 --- a/app/src/main/res/layout/item_popular_content.xml +++ b/app/src/main/res/layout/item_popular_content.xml @@ -62,7 +62,7 @@ android:padding="12dp" isSelected="@{vm.saveState}" android:onClick="@{()->vm.postSave(data.content)}" - android:src="@{data.Likes.isEmpty() ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" + android:src="@{data.Likes.isEmpty() || vm.saveState ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="SpeakableTextPresentCheck" /> diff --git a/app/src/main/res/layout/item_recent_content.xml b/app/src/main/res/layout/item_recent_content.xml index b4cd211..5a655aa 100644 --- a/app/src/main/res/layout/item_recent_content.xml +++ b/app/src/main/res/layout/item_recent_content.xml @@ -62,7 +62,7 @@ android:padding="12dp" isSelected="@{vm.saveState}" android:onClick="@{()->vm.postSave(data.content)}" - android:src="@{data.Likes.isEmpty() ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" + android:src="@{data.Likes.isEmpty() || vm.saveState ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="SpeakableTextPresentCheck" /> diff --git a/app/src/main/res/layout/item_search_content.xml b/app/src/main/res/layout/item_search_content.xml index cf6bb64..cba9317 100644 --- a/app/src/main/res/layout/item_search_content.xml +++ b/app/src/main/res/layout/item_search_content.xml @@ -64,7 +64,7 @@ android:background="@null" android:contentDescription="@string/search_heart_contentdescription" android:padding="12dp" - android:src="@{data.Likes.isEmpty() ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" + android:src="@{data.Likes.isEmpty() || vm.saveState ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="SpeakableTextPresentCheck" /> From 3b24187cb72e689a03991c8505b08c9c86230aff Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 14 Jul 2023 14:33:03 +0900 Subject: [PATCH 030/109] =?UTF-8?q?[MOD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=B6=80=EB=B6=84=20=EC=88=98=EC=A0=952?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/explore/popular/PopularViewModel.kt | 2 +- .../presentation/main/explore/recent/RecentViewModel.kt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index 07a5182..b842504 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -32,7 +32,7 @@ class PopularViewModel @Inject constructor( val filter = MutableLiveData("") init { - _saveState.value == true + _saveState.value = true getPopularData() } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt index 3c0d52f..9429ca1 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt @@ -32,6 +32,7 @@ class RecentViewModel @Inject constructor( val filter = MutableLiveData("") init { + _saveState.value = true getRecentData() } @@ -68,7 +69,7 @@ class RecentViewModel @Inject constructor( Timber.d("POST SAVE STATE SUCCESS") Timber.d("response : $response") - _saveState.value = true + _saveState.value = false _stateMessage.value = UiState.Success } .onFailure { From 321def30d694bd4ae383c0a5c1fe4b06abc45062 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 14 Jul 2023 14:34:07 +0900 Subject: [PATCH 031/109] =?UTF-8?q?[MOD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=B6=80=EB=B6=84=20=EC=88=98=EC=A0=953?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/search/SearchViewModel.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt index 2c1bf8f..f631c0d 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt @@ -32,6 +32,7 @@ class SearchViewModel @Inject constructor( val key = MutableLiveData("") init { + _saveState.value = true getSearchPostData() } @@ -71,7 +72,7 @@ class SearchViewModel @Inject constructor( Timber.d("POST SAVE STATE SUCCESS") Timber.d("response : $response") - _saveState.value = true + _saveState.value = false _stateMessage.value = UiState.Success } .onFailure { From a003130d81c5bfb2de6ea3a3877844010578728f Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 15 Jul 2023 16:54:05 +0900 Subject: [PATCH 032/109] =?UTF-8?q?[DEL/#33]=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=EC=95=88=20=EB=88=8C=EB=A6=AC=EB=8A=94=20?= =?UTF-8?q?=EA=B2=83=20=EC=9B=90=EC=9D=B8=20=ED=8C=8C=EC=95=85=20=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/MainViewModel.kt | 2 ++ .../presentation/main/like/LikeFragment.kt | 21 +++++++++---------- app/src/main/res/layout/fragment_like.xml | 5 +---- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/MainViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/MainViewModel.kt index 0772f55..dd5e741 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/MainViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/MainViewModel.kt @@ -1,5 +1,6 @@ package com.release.keyneez.presentation.main +import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -15,6 +16,7 @@ class MainViewModel @Inject constructor() : ViewModel() { } fun updateBnvView() { + Log.d("1", "hollo") _isBnvVisible.value = _isBnvVisible.value?.not() } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index bc470c3..a6bccb3 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -38,6 +38,13 @@ class LikeFragment : initLikeEditBtnClickListener() } + private fun initLikeEditBtnClickListener() { + binding.btnLikeEdit.setOnSingleClickListener { + likeViewModel.updateEditView() + mainViewModel.updateBnvView() + } + } + private fun initCategoryBtnListener() { selectOnlyOneButton(binding.tvLikeAll) binding.tvLikeAll.setOnClickListener { @@ -82,16 +89,8 @@ class LikeFragment : if (animator is SimpleItemAnimator) { animator.supportsChangeAnimations = false } - likeViewModel.likeList.observe(viewLifecycleOwner) { likeList -> - likeAdapter?.submitList(likeList) - } - } - - private fun initLikeEditBtnClickListener() { - binding.btnLikeEdit.setOnClickListener { - Log.d("1", "제발..") - likeViewModel.updateEditView() - mainViewModel.updateBnvView() + likeViewModel.likeList.observe(viewLifecycleOwner) { activityList -> + likeAdapter?.submitList(activityList) } } @@ -120,7 +119,7 @@ class LikeFragment : Log.d("1", "true일 때") binding.tvLikeNum.setText(likeViewModel.getSelectedIdsCount().toString()) } - binding.btnLikeEdit.isEnabled = likeList.isNotEmpty() +// binding.btnLikeEdit.isEnabled = likeList.isNotEmpty() -> 이게 문제였음....와우 } } diff --git a/app/src/main/res/layout/fragment_like.xml b/app/src/main/res/layout/fragment_like.xml index 6523d58..332cf6b 100644 --- a/app/src/main/res/layout/fragment_like.xml +++ b/app/src/main/res/layout/fragment_like.xml @@ -8,9 +8,6 @@ - @@ -49,8 +46,8 @@ android:layout_height="wrap_content" android:layout_marginTop="37dp" android:layout_marginEnd="11dp" - android:padding="12dp" android:clickable="true" + android:padding="12dp" android:text="@{vm.isEdit ? @string/like_cancel : @string/like_edit}" android:textColor="@color/gray600" app:layout_constraintEnd_toEndOf="@id/layout_like_toolbar" From 6745c6e50265e94a8426405d7ccd838aa138b0df Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 15 Jul 2023 16:55:59 +0900 Subject: [PATCH 033/109] =?UTF-8?q?[DEL/#33]=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/release/keyneez/presentation/main/MainViewModel.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/MainViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/MainViewModel.kt index dd5e741..0772f55 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/MainViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/MainViewModel.kt @@ -1,6 +1,5 @@ package com.release.keyneez.presentation.main -import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -16,7 +15,6 @@ class MainViewModel @Inject constructor() : ViewModel() { } fun updateBnvView() { - Log.d("1", "hollo") _isBnvVisible.value = _isBnvVisible.value?.not() } } From 95792c08b9ca3fb0b6abfc17eef5f0ce2e429573 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 15 Jul 2023 21:55:25 +0900 Subject: [PATCH 034/109] =?UTF-8?q?[MOD/#33]=20isEdit=20=EB=B6=88=EB=A6=AC?= =?UTF-8?q?=EC=96=B8=EC=97=90=20=EB=94=B0=EB=9D=BC=20text=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20part=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/like/LikeFragment.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index a6bccb3..b58c458 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -112,12 +112,14 @@ class LikeFragment : likeViewModel.likeList.observe(viewLifecycleOwner) { activityList -> likeList = activityList likeAdapter?.submitList(activityList) - if (likeViewModel.isEdit.value == false) { - Log.d("1", "false일 때") - binding.tvLikeNum.setText(likeList.size.toString()) - } else { - Log.d("1", "true일 때") - binding.tvLikeNum.setText(likeViewModel.getSelectedIdsCount().toString()) + likeViewModel.isEdit.observe(viewLifecycleOwner) { isEdit -> + if (isEdit) { + Log.d("1", "true일 때") + binding.tvLikeNum.setText(likeViewModel.getSelectedIdsCount().toString()) + } else { + Log.d("1", "false일 때") + binding.tvLikeNum.setText(likeList.size.toString()) + } } // binding.btnLikeEdit.isEnabled = likeList.isNotEmpty() -> 이게 문제였음....와우 } From 409cab4745e397966b601311237cfd27509eabbf Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 15 Jul 2023 22:34:16 +0900 Subject: [PATCH 035/109] =?UTF-8?q?[MOD/#33]=20isEdit=20=EB=B6=88=EB=A6=AC?= =?UTF-8?q?=EC=96=B8=EC=97=90=20=EB=94=B0=EB=9D=BC=20text=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20part=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/like/LikeFragment.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index b58c458..9d50830 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -8,6 +8,7 @@ import android.widget.TextView import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.recyclerview.widget.SimpleItemAnimator +import com.release.keyneez.R import com.release.keyneez.data.entity.response.ResponseGetLikeDto import com.release.keyneez.databinding.FragmentLikeBinding import com.release.keyneez.presentation.main.MainViewModel @@ -113,13 +114,15 @@ class LikeFragment : likeList = activityList likeAdapter?.submitList(activityList) likeViewModel.isEdit.observe(viewLifecycleOwner) { isEdit -> - if (isEdit) { + val countText = if (isEdit) { Log.d("1", "true일 때") - binding.tvLikeNum.setText(likeViewModel.getSelectedIdsCount().toString()) + val selectedCount = likeViewModel.getSelectedIdsCount().toString() + getString(R.string.like_select, selectedCount) } else { Log.d("1", "false일 때") - binding.tvLikeNum.setText(likeList.size.toString()) + getString(R.string.like_num, likeList.size) } + binding.tvLikeNum.text = countText } // binding.btnLikeEdit.isEnabled = likeList.isNotEmpty() -> 이게 문제였음....와우 } From 8eb2a08040096bf2d433854fa973170b5e8e80f2 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 15 Jul 2023 23:07:38 +0900 Subject: [PATCH 036/109] =?UTF-8?q?[MOD/#33]=20isEdit=20=EB=B6=88=EB=A6=AC?= =?UTF-8?q?=EC=96=B8=EC=97=90=20=EB=94=B0=EB=9D=BC=20text=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20part=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/like/LikeFragment.kt | 9 ++++----- .../keyneez/presentation/main/like/LikeViewModel.kt | 4 ---- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 9d50830..152e555 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -114,15 +114,14 @@ class LikeFragment : likeList = activityList likeAdapter?.submitList(activityList) likeViewModel.isEdit.observe(viewLifecycleOwner) { isEdit -> - val countText = if (isEdit) { - Log.d("1", "true일 때") + if (isEdit) { val selectedCount = likeViewModel.getSelectedIdsCount().toString() - getString(R.string.like_select, selectedCount) + binding.tvLikeNum.text = getString(R.string.like_select, selectedCount) + Log.d("1", "true일 때") } else { + binding.tvLikeNum.text = getString(R.string.like_num, likeList.size) Log.d("1", "false일 때") - getString(R.string.like_num, likeList.size) } - binding.tvLikeNum.text = countText } // binding.btnLikeEdit.isEnabled = likeList.isNotEmpty() -> 이게 문제였음....와우 } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 80d77e4..4827380 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -78,10 +78,6 @@ class LikeViewModel @Inject constructor( } fun getSelectedIdsCount(): Int { - _selectedIds.observeForever { selectedIdsList -> - val selectedCount = selectedIdsList?.size ?: 0 - _selectedCount.value = selectedCount - } val selectedIdsList = _selectedIds.value ?: mutableListOf() val selectedCount = selectedIdsList.size _selectedCount.value = selectedCount From c5706f1855c2adbef7341ed4b7f34be4611c69f7 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 15 Jul 2023 23:25:03 +0900 Subject: [PATCH 037/109] =?UTF-8?q?[ADD/#33]=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EB=88=84=EB=A5=BC=20=EB=95=8C=EB=A7=88=EB=8B=A4=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=ED=86=B5=EC=8B=A0=ED=95=A0=20=EC=88=98=20=EC=9E=88?= =?UTF-8?q?=EA=B2=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/presentation/main/like/LikeFragment.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 152e555..665f3b3 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -43,6 +43,9 @@ class LikeFragment : binding.btnLikeEdit.setOnSingleClickListener { likeViewModel.updateEditView() mainViewModel.updateBnvView() + if (likeViewModel.isEdit.value == false) { + likeViewModel.getLikeData() + } } } @@ -106,6 +109,7 @@ class LikeFragment : binding.ivEditBackground.visibility = View.GONE likeViewModel.updateEditView() mainViewModel.updateBnvView() + likeViewModel.getLikeData() } } From 35fc0a7ff7025fd757e8087a25f7a3cb7f235c70 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sun, 16 Jul 2023 12:36:36 +0900 Subject: [PATCH 038/109] =?UTF-8?q?[MOD/#33]=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EB=88=84=EB=A5=BC=20=EB=95=8C=EB=A7=88=EB=8B=A4=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=ED=86=B5=EC=8B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/presentation/main/like/LikeFragment.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 665f3b3..010068c 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -44,7 +44,7 @@ class LikeFragment : likeViewModel.updateEditView() mainViewModel.updateBnvView() if (likeViewModel.isEdit.value == false) { - likeViewModel.getLikeData() + selectOnlyOneButton(binding.tvLikeAll) } } } @@ -109,7 +109,7 @@ class LikeFragment : binding.ivEditBackground.visibility = View.GONE likeViewModel.updateEditView() mainViewModel.updateBnvView() - likeViewModel.getLikeData() + selectOnlyOneButton(binding.tvLikeAll) } } From 56dbb90abf9539f11c9e887580efadb877242eda Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sun, 16 Jul 2023 14:48:58 +0900 Subject: [PATCH 039/109] =?UTF-8?q?[MOD/#33]=20isEdit=20=EB=B6=88=EB=A6=AC?= =?UTF-8?q?=EC=96=B8=EC=97=90=20=EB=94=B0=EB=9D=BC=20text=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20part4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/presentation/main/like/LikeFragment.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 010068c..665f3b3 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -44,7 +44,7 @@ class LikeFragment : likeViewModel.updateEditView() mainViewModel.updateBnvView() if (likeViewModel.isEdit.value == false) { - selectOnlyOneButton(binding.tvLikeAll) + likeViewModel.getLikeData() } } } @@ -109,7 +109,7 @@ class LikeFragment : binding.ivEditBackground.visibility = View.GONE likeViewModel.updateEditView() mainViewModel.updateBnvView() - selectOnlyOneButton(binding.tvLikeAll) + likeViewModel.getLikeData() } } From 9df02acfbeb2deaa81dd9d2d4e7e02b5e28f965f Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 17 Jul 2023 21:52:57 +0900 Subject: [PATCH 040/109] =?UTF-8?q?[MOD/#33]=20=EC=B7=A8=EC=86=8C=ED=95=98?= =?UTF-8?q?=EB=A9=B4=20default=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EB=A1=9C=20=EA=B0=80=EA=B2=8C=EB=81=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/presentation/main/like/LikeFragment.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 665f3b3..9454d33 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -44,7 +44,7 @@ class LikeFragment : likeViewModel.updateEditView() mainViewModel.updateBnvView() if (likeViewModel.isEdit.value == false) { - likeViewModel.getLikeData() + initCategoryBtnListener() } } } @@ -109,7 +109,7 @@ class LikeFragment : binding.ivEditBackground.visibility = View.GONE likeViewModel.updateEditView() mainViewModel.updateBnvView() - likeViewModel.getLikeData() + initCategoryBtnListener() } } From e3dd497165f1be37861c5f53bcfbfa78b2a367d3 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 17 Jul 2023 22:02:50 +0900 Subject: [PATCH 041/109] =?UTF-8?q?[MOD/#33]=20=EA=B2=80=EC=83=89=EB=B7=B0?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/search/SearchActivity.kt | 7 +++---- app/src/main/res/layout/activity_search.xml | 2 -- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index a10cf4b..ac0ec4d 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -12,7 +12,6 @@ import com.release.keyneez.util.binding.BindingActivity import com.release.keyneez.util.extension.hideKeyboard import com.release.keyneez.util.extension.setOnSingleClickListener import com.release.keyneez.util.extension.showSnackbar -import com.release.keyneez.util.extension.showToast import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job @@ -64,9 +63,9 @@ class SearchActivity : BindingActivity(R.layout.activity_ val searchList = viewModel.searchList.value searchAdapter?.submitList(searchList) binding.tvSearchCount.text = searchList?.size.toString() - if (searchList?.size == 0) { - showToast(getString(R.string.search_no_result)) - } +// if (searchList?.size == 0) { +// showToast(getString(R.string.search_no_result)) +// } } private fun initHideKeyboard() { diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index 5a0cad3..64f80e2 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -99,7 +99,6 @@ android:layout_marginTop="34dp" android:text="@string/search_result_end" android:textColor="@color/gray900" - android:visibility="@{vm.searchList == null ? View.GONE : View.VISIBLE}" app:layout_constraintStart_toEndOf="@id/flow_search" app:layout_constraintTop_toBottomOf="@id/view_search_baseline" /> @@ -108,7 +107,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="34dp" - android:visibility="@{vm.searchList == null ? View.GONE : View.VISIBLE}" app:constraint_referenced_ids="tv_search_after,tv_search_count" app:flow_horizontalGap="3dp" app:layout_constraintEnd_toEndOf="parent" From e848653d3c917528b34bae93bf599e537ac497a5 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 17 Jul 2023 22:10:12 +0900 Subject: [PATCH 042/109] =?UTF-8?q?[DEL/#33]=20=EA=B2=80=EC=83=89=EB=B7=B0?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/presentation/main/search/SearchActivity.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index ac0ec4d..f09e0b6 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -63,9 +63,6 @@ class SearchActivity : BindingActivity(R.layout.activity_ val searchList = viewModel.searchList.value searchAdapter?.submitList(searchList) binding.tvSearchCount.text = searchList?.size.toString() -// if (searchList?.size == 0) { -// showToast(getString(R.string.search_no_result)) -// } } private fun initHideKeyboard() { From 461891ccc74145e228594ab1cbb39635eb136065 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 17 Jul 2023 22:31:57 +0900 Subject: [PATCH 043/109] =?UTF-8?q?[DEL/#33]=20=EC=A4=91=EB=B3=B5=20submit?= =?UTF-8?q?list=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/release/keyneez/presentation/main/like/LikeFragment.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 9454d33..5b0335d 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -93,9 +93,6 @@ class LikeFragment : if (animator is SimpleItemAnimator) { animator.supportsChangeAnimations = false } - likeViewModel.likeList.observe(viewLifecycleOwner) { activityList -> - likeAdapter?.submitList(activityList) - } } private fun initEditBtnClickListener() { From 17442c597e3ef934a541f9eb0b2610a4e3cbab58 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 17 Jul 2023 23:06:34 +0900 Subject: [PATCH 044/109] =?UTF-8?q?[MOD/#33]=20=EB=A7=A8=20=EC=B2=98?= =?UTF-8?q?=EC=9D=8C=EC=97=90=20=EB=93=A4=EC=96=B4=20=EC=98=AC=20=EB=95=8C?= =?UTF-8?q?=20=EC=A4=91=EB=B3=B5=20=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/like/LikeFragment.kt | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 5b0335d..71a3c44 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -24,7 +24,7 @@ class LikeFragment : lateinit var likeList: List private val likeViewModel by viewModels() private val mainViewModel by activityViewModels() - + private var isInitialLoad = true override fun onAttach(context: Context) { super.onAttach(context) } @@ -73,12 +73,14 @@ class LikeFragment : selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - if (filterValue != binding.tvLikeAll.text.toString()) { - likeViewModel.setFilterValue(filterValue) - likeViewModel.getLikeData() - } else { - likeViewModel.setFilterValue("") - likeViewModel.getLikeData() + if (isInitialLoad == false) { + if (filterValue != binding.tvLikeAll.text.toString()) { + likeViewModel.setFilterValue(filterValue) + likeViewModel.getLikeData() + } else { + likeViewModel.setFilterValue("") + likeViewModel.getLikeData() + } } } @@ -111,9 +113,13 @@ class LikeFragment : } private fun setupLikeData() { - likeViewModel.likeList.observe(viewLifecycleOwner) { activityList -> - likeList = activityList - likeAdapter?.submitList(activityList) + if (isInitialLoad) { + likeViewModel.likeList.observe(viewLifecycleOwner) { activityList -> + likeList = activityList + likeAdapter?.submitList(activityList) + isInitialLoad = false + } + } else { likeViewModel.isEdit.observe(viewLifecycleOwner) { isEdit -> if (isEdit) { val selectedCount = likeViewModel.getSelectedIdsCount().toString() @@ -124,8 +130,8 @@ class LikeFragment : Log.d("1", "false일 때") } } -// binding.btnLikeEdit.isEnabled = likeList.isNotEmpty() -> 이게 문제였음....와우 } +// binding.btnLikeEdit.isEnabled = likeList.isNotEmpty() -> 이게 문제였음....와우 } override fun onDestroyView() { From 18a6277632450f0698559d63a31eb3336d2d7415 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 17 Jul 2023 23:55:48 +0900 Subject: [PATCH 045/109] =?UTF-8?q?[MOD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=EB=B7=B0=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/like/LikeFragment.kt | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 71a3c44..c550f78 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -113,13 +113,10 @@ class LikeFragment : } private fun setupLikeData() { - if (isInitialLoad) { - likeViewModel.likeList.observe(viewLifecycleOwner) { activityList -> - likeList = activityList - likeAdapter?.submitList(activityList) - isInitialLoad = false - } - } else { + likeViewModel.likeList.observe(viewLifecycleOwner) { activityList -> + isInitialLoad = false + likeList = activityList + likeAdapter?.submitList(activityList) likeViewModel.isEdit.observe(viewLifecycleOwner) { isEdit -> if (isEdit) { val selectedCount = likeViewModel.getSelectedIdsCount().toString() From 397f0264d2d9730a6ec78182be7e85d5faf41f6f Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Tue, 18 Jul 2023 00:01:16 +0900 Subject: [PATCH 046/109] =?UTF-8?q?[ADD/#33]=20=EC=A3=BC=EC=84=9D=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/release/keyneez/presentation/main/like/LikeFragment.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index c550f78..37ac082 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -123,6 +123,7 @@ class LikeFragment : binding.tvLikeNum.text = getString(R.string.like_select, selectedCount) Log.d("1", "true일 때") } else { + // 서버 통신 때문에 제대로 출력 안되는 확률도 있기에 서버통신 되고 다시 살펴 보기 binding.tvLikeNum.text = getString(R.string.like_num, likeList.size) Log.d("1", "false일 때") } From 8f2b8c81223feb7c455b7b0aa85268e0c39dcc8d Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Wed, 19 Jul 2023 23:09:17 +0900 Subject: [PATCH 047/109] =?UTF-8?q?[MOD/#33]=20=EA=B2=80=EC=83=89=EB=B7=B0?= =?UTF-8?q?=20observe=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/search/SearchActivity.kt | 15 +++++++++++---- .../presentation/main/search/SearchViewModel.kt | 9 +++++++++ app/src/main/res/layout/activity_search.xml | 2 ++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index f09e0b6..d06a78f 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -1,7 +1,9 @@ package com.release.keyneez.presentation.main.search import android.os.Bundle +import android.util.Log import android.view.KeyEvent +import android.view.View import android.view.inputmethod.EditorInfo import android.widget.TextView import androidx.activity.viewModels @@ -29,6 +31,8 @@ class SearchActivity : BindingActivity(R.layout.activity_ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.vm = viewModel + binding.flowSearch.visibility = View.GONE + binding.tvSearchEnd.visibility = View.GONE initSearchBtnClickListener() initSearchAdapter() initBackBtnClickListener() @@ -60,9 +64,11 @@ class SearchActivity : BindingActivity(R.layout.activity_ } private fun setupSearchActivityList() { - val searchList = viewModel.searchList.value - searchAdapter?.submitList(searchList) - binding.tvSearchCount.text = searchList?.size.toString() + viewModel.searchList.observe(this) { + val searchList = viewModel.searchList.value + searchAdapter?.submitList(searchList) + binding.tvSearchCount.text = searchList?.size.toString() + } } private fun initHideKeyboard() { @@ -85,7 +91,8 @@ class SearchActivity : BindingActivity(R.layout.activity_ private fun initSearchBtnClickListener() { binding.btnSearch.setOnSingleClickListener { setupSearchActivityList() - viewModel.getSearchPostData() + Log.d("1", "제바루ㅜ") + viewModel.updateCount() } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt index f631c0d..c9c56f3 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt @@ -1,5 +1,6 @@ package com.release.keyneez.presentation.main.search +import androidx.databinding.ObservableBoolean import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -24,6 +25,9 @@ class SearchViewModel @Inject constructor( private val _stateMessage = MutableLiveData() val stateMessage: LiveData get() = _stateMessage + private val _isFlowVisible = MutableLiveData() + val isFlowVisible: LiveData + get() = _isFlowVisible private val _saveState = MutableLiveData() val saveState: LiveData @@ -33,9 +37,14 @@ class SearchViewModel @Inject constructor( init { _saveState.value = true + _isFlowVisible.value = false getSearchPostData() } + fun updateCount() { + _isFlowVisible.value = true + } + fun getSearchPostData() { viewModelScope.launch { contentRepository.getSearch(key.value.toString()).onSuccess { response -> diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index 64f80e2..d2dfe50 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -99,6 +99,7 @@ android:layout_marginTop="34dp" android:text="@string/search_result_end" android:textColor="@color/gray900" + android:visibility="@{vm.isFlowVisible ? View.VISIBLE : View.GONE}" app:layout_constraintStart_toEndOf="@id/flow_search" app:layout_constraintTop_toBottomOf="@id/view_search_baseline" /> @@ -107,6 +108,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="34dp" + android:visibility="@{vm.isFlowVisible ? View.VISIBLE : View.GONE}" app:constraint_referenced_ids="tv_search_after,tv_search_count" app:flow_horizontalGap="3dp" app:layout_constraintEnd_toEndOf="parent" From 3f5cda16281b7045f882e5989e3fc771b281e1b9 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Wed, 19 Jul 2023 23:16:31 +0900 Subject: [PATCH 048/109] =?UTF-8?q?[MOD/#33]=20=EC=9D=B8=EA=B8=B0=EB=B7=B0?= =?UTF-8?q?=20=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=EC=97=90=20=ED=95=9C=20=EB=B2=88=EB=A7=8C=20=EB=90=98=EA=B2=8C?= =?UTF-8?q?=EB=81=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/popular/PopularFragment.kt | 16 ++++++++++------ .../presentation/main/search/SearchActivity.kt | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 7d287f1..3012332 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -13,6 +13,7 @@ class PopularFragment : BindingFragment(com.release.keyneez.R.layout.fragment_popular) { private val viewModel: PopularViewModel by viewModels() private var popularAdapter: PopularAdapter? = null + private var isInitialLoad = true override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.vm = viewModel @@ -45,12 +46,14 @@ class PopularFragment : selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - if (filterValue != binding.tvExplorePopularAll.text.toString()) { - viewModel.setFilterValue(filterValue) - viewModel.getPopularData() - } else { - viewModel.setFilterValue("") - viewModel.getPopularData() + if (isInitialLoad == false) { + if (filterValue != binding.tvExplorePopularAll.text.toString()) { + viewModel.setFilterValue(filterValue) + viewModel.getPopularData() + } else { + viewModel.setFilterValue("") + viewModel.getPopularData() + } } } @@ -61,6 +64,7 @@ class PopularFragment : private fun setupPopularActivityList() { viewModel.popularList.observe(viewLifecycleOwner) { popularList -> + isInitialLoad = false popularAdapter?.submitList(popularList) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index d06a78f..f223fb5 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -27,7 +27,7 @@ import kotlinx.coroutines.runBlocking class SearchActivity : BindingActivity(R.layout.activity_search) { private var searchAdapter: SearchAdapter? = null private val viewModel: SearchViewModel by viewModels() - + private var isInitialLoad = true override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.vm = viewModel @@ -65,6 +65,7 @@ class SearchActivity : BindingActivity(R.layout.activity_ private fun setupSearchActivityList() { viewModel.searchList.observe(this) { + isInitialLoad = false val searchList = viewModel.searchList.value searchAdapter?.submitList(searchList) binding.tvSearchCount.text = searchList?.size.toString() From 9788ecb14f48ecac05d2bb5a28a337b8f296048e Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Wed, 19 Jul 2023 23:48:19 +0900 Subject: [PATCH 049/109] =?UTF-8?q?[MOD/#33]=20=EC=9D=B8=EA=B8=B0=EB=B7=B0?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/popular/PopularFragment.kt | 16 ++++++++++++++++ .../main/explore/popular/PopularViewModel.kt | 2 +- app/src/main/res/layout/fragment_popular.xml | 4 ---- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 3012332..6c946f1 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -1,9 +1,13 @@ package com.release.keyneez.presentation.main.explore.popular +import android.content.Context import android.os.Bundle +import android.util.Log import android.view.View import android.widget.TextView import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.SimpleItemAnimator +import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.databinding.FragmentPopularBinding import com.release.keyneez.util.binding.BindingFragment import dagger.hilt.android.AndroidEntryPoint @@ -12,6 +16,7 @@ import dagger.hilt.android.AndroidEntryPoint class PopularFragment : BindingFragment(com.release.keyneez.R.layout.fragment_popular) { private val viewModel: PopularViewModel by viewModels() + lateinit var list: List private var popularAdapter: PopularAdapter? = null private var isInitialLoad = true override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -22,6 +27,10 @@ class PopularFragment : initCategoryBtnListener() } + override fun onAttach(context: Context) { + super.onAttach(context) + } + private fun initCategoryBtnListener() { selectOnlyOneButton(binding.tvExplorePopularAll) binding.tvExplorePopularAll.setOnClickListener { @@ -47,6 +56,7 @@ class PopularFragment : selectedButton.isSelected = true val filterValue = selectedButton.text.toString() if (isInitialLoad == false) { + Log.d("1", "서버통신") if (filterValue != binding.tvExplorePopularAll.text.toString()) { viewModel.setFilterValue(filterValue) viewModel.getPopularData() @@ -60,11 +70,17 @@ class PopularFragment : private fun initPopularAdapter() { popularAdapter = PopularAdapter() binding.rvExplorePopular.adapter = popularAdapter + val animator = binding.rvExplorePopular.itemAnimator + if (animator is SimpleItemAnimator) { + animator.supportsChangeAnimations = false + } } private fun setupPopularActivityList() { viewModel.popularList.observe(viewLifecycleOwner) { popularList -> + Log.d("1", "핵심") isInitialLoad = false + list = popularList popularAdapter?.submitList(popularList) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index b842504..83608f9 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -17,7 +17,7 @@ import javax.inject.Inject class PopularViewModel @Inject constructor( private val contentRepository: ContentRepository ) : ViewModel() { - private val _popularList = MutableLiveData>() + private val _popularList = MutableLiveData>(mutableListOf()) val popularList: LiveData> get() = _popularList diff --git a/app/src/main/res/layout/fragment_popular.xml b/app/src/main/res/layout/fragment_popular.xml index fe457d8..d215b05 100644 --- a/app/src/main/res/layout/fragment_popular.xml +++ b/app/src/main/res/layout/fragment_popular.xml @@ -29,7 +29,6 @@ android:layout_height="wrap_content" android:layout_marginStart="22dp" android:background="@drawable/sel_explore_drawable_bnv_category" - android:clickable="true" android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_entire" @@ -44,7 +43,6 @@ android:layout_height="wrap_content" android:layout_marginStart="9dp" android:background="@drawable/sel_explore_drawable_bnv_category" - android:clickable="true" android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_hobby" @@ -59,7 +57,6 @@ android:layout_height="wrap_content" android:layout_marginStart="9dp" android:background="@drawable/sel_explore_drawable_bnv_category" - android:clickable="true" android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_activity" @@ -74,7 +71,6 @@ android:layout_height="wrap_content" android:layout_marginStart="9dp" android:background="@drawable/sel_explore_drawable_bnv_category" - android:clickable="true" android:paddingHorizontal="16dp" android:paddingVertical="6dp" android:text="@string/explore_career" From b4e82dac159e657109c68d855c79b4a39f19aea4 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Wed, 19 Jul 2023 23:49:20 +0900 Subject: [PATCH 050/109] =?UTF-8?q?[DEL/#33]=20clickable=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/fragment_recent.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/src/main/res/layout/fragment_recent.xml b/app/src/main/res/layout/fragment_recent.xml index beeac73..d2694a1 100644 --- a/app/src/main/res/layout/fragment_recent.xml +++ b/app/src/main/res/layout/fragment_recent.xml @@ -30,7 +30,6 @@ android:layout_marginStart="22dp" android:background="@drawable/sel_explore_drawable_bnv_category" android:paddingHorizontal="16dp" - android:clickable="true" android:paddingVertical="6dp" android:text="@string/explore_entire" android:textColor="@color/sel_explore_drawable_text_color" @@ -46,7 +45,6 @@ android:background="@drawable/sel_explore_drawable_bnv_category" android:paddingHorizontal="16dp" android:paddingVertical="6dp" - android:clickable="true" android:text="@string/explore_hobby" android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_explore_recent_all" @@ -61,7 +59,6 @@ android:background="@drawable/sel_explore_drawable_bnv_category" android:paddingHorizontal="16dp" android:paddingVertical="6dp" - android:clickable="true" android:text="@string/explore_activity" android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_explore_recent_hobby" @@ -76,7 +73,6 @@ android:background="@drawable/sel_explore_drawable_bnv_category" android:paddingHorizontal="16dp" android:paddingVertical="6dp" - android:clickable="true" android:text="@string/explore_career" android:textColor="@color/sel_explore_drawable_text_color" app:layout_constraintStart_toEndOf="@id/tv_explore_recent_outside" From 4064486e4828680f6be99f547c1ffe066c4b91bd Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Wed, 19 Jul 2023 23:55:55 +0900 Subject: [PATCH 051/109] =?UTF-8?q?[MOD/#33]=20=EC=B5=9C=EC=8B=A0=EB=B7=B0?= =?UTF-8?q?=20=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=EC=97=90=20=ED=95=9C=20=EB=B2=88=EB=A7=8C=20=EB=90=98=EA=B2=8C?= =?UTF-8?q?=EB=81=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/popular/PopularFragment.kt | 1 - .../main/explore/recent/RecentFragment.kt | 30 ++++++++++++++----- .../main/explore/recent/RecentViewModel.kt | 3 +- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 6c946f1..4c2988d 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -78,7 +78,6 @@ class PopularFragment : private fun setupPopularActivityList() { viewModel.popularList.observe(viewLifecycleOwner) { popularList -> - Log.d("1", "핵심") isInitialLoad = false list = popularList popularAdapter?.submitList(popularList) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index 17084c8..5c4ea07 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -1,10 +1,13 @@ package com.release.keyneez.presentation.main.explore.recent +import android.content.Context import android.os.Bundle import android.view.View import android.widget.TextView import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.SimpleItemAnimator import com.release.keyneez.R +import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.databinding.FragmentRecentBinding import com.release.keyneez.util.binding.BindingFragment import dagger.hilt.android.AndroidEntryPoint @@ -13,7 +16,8 @@ import dagger.hilt.android.AndroidEntryPoint class RecentFragment : BindingFragment(R.layout.fragment_recent) { private val viewModel: RecentViewModel by viewModels() private var recentAdapter: RecentAdapter? = null - + lateinit var list: List + private var isInitialLoad = true override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.vm = viewModel @@ -22,6 +26,10 @@ class RecentFragment : BindingFragment(R.layout.fragment_ initCategoryBtnListener() } + override fun onAttach(context: Context) { + super.onAttach(context) + } + private fun initCategoryBtnListener() { selectOnlyOneButton(binding.tvExploreRecentAll) binding.tvExploreRecentAll.setOnClickListener { @@ -46,22 +54,30 @@ class RecentFragment : BindingFragment(R.layout.fragment_ selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - if (filterValue != binding.tvExploreRecentAll.text.toString()) { - viewModel.setFilterValue(filterValue) - viewModel.getRecentData() - } else { - viewModel.setFilterValue("") - viewModel.getRecentData() + if (isInitialLoad == false) { + if (filterValue != binding.tvExploreRecentAll.text.toString()) { + viewModel.setFilterValue(filterValue) + viewModel.getRecentData() + } else { + viewModel.setFilterValue("") + viewModel.getRecentData() + } } } private fun initRecentAdapter() { recentAdapter = RecentAdapter() binding.rvExploreRecent.adapter = recentAdapter + val animator = binding.rvExploreRecent.itemAnimator + if (animator is SimpleItemAnimator) { + animator.supportsChangeAnimations = false + } } private fun setupRecentActivityList() { viewModel.recentList.observe(viewLifecycleOwner) { recentList -> + isInitialLoad = false + list = recentList recentAdapter?.submitList(recentList) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt index 9429ca1..ccf4e43 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt @@ -17,7 +17,7 @@ import javax.inject.Inject class RecentViewModel @Inject constructor( private val contentRepository: ContentRepository ) : ViewModel() { - private val _recentList = MutableLiveData>() + private val _recentList = MutableLiveData>(mutableListOf()) val recentList: LiveData> get() = _recentList @@ -62,6 +62,7 @@ class RecentViewModel @Inject constructor( } } } + fun postSave(pk: Int) { viewModelScope.launch { contentRepository.postLike(pk).onSuccess { response -> From 3565afa75861fdb62eb9212d0f9734de94b94ebd Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 20 Jul 2023 00:27:35 +0900 Subject: [PATCH 052/109] =?UTF-8?q?[MOD/#33]=20=EA=B2=80=EC=83=89=EB=B7=B0?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/search/SearchActivity.kt | 70 ++++++++----------- .../main/search/SearchViewModel.kt | 3 +- 2 files changed, 31 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index f223fb5..66cae49 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -15,19 +15,11 @@ import com.release.keyneez.util.extension.hideKeyboard import com.release.keyneez.util.extension.setOnSingleClickListener import com.release.keyneez.util.extension.showSnackbar import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.debounce -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking @AndroidEntryPoint class SearchActivity : BindingActivity(R.layout.activity_search) { private var searchAdapter: SearchAdapter? = null private val viewModel: SearchViewModel by viewModels() - private var isInitialLoad = true override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.vm = viewModel @@ -65,7 +57,6 @@ class SearchActivity : BindingActivity(R.layout.activity_ private fun setupSearchActivityList() { viewModel.searchList.observe(this) { - isInitialLoad = false val searchList = viewModel.searchList.value searchAdapter?.submitList(searchList) binding.tvSearchCount.text = searchList?.size.toString() @@ -91,42 +82,41 @@ class SearchActivity : BindingActivity(R.layout.activity_ private fun initSearchBtnClickListener() { binding.btnSearch.setOnSingleClickListener { - setupSearchActivityList() Log.d("1", "제바루ㅜ") viewModel.updateCount() } } - private fun debounce(): kotlinx.coroutines.flow.Flow = flow { - emit(1) - emit(2) - delay(500L) - emit(3) - emit(4) - delay(200L) - emit(5) - delay(700L) - emit(6) - }.debounce(300L) - - fun main() = runBlocking { - debounce().collect { } - } - - fun debounce( - timeMillis: Long = 300L, - coroutineScope: CoroutineScope, - block: (T) -> Unit - ): (T) -> Unit { - var debounceJob: Job? = null - return { - debounceJob?.cancel() - debounceJob = coroutineScope.launch { - delay(timeMillis) - block(it) - } - } - } +// private fun debounce(): kotlinx.coroutines.flow.Flow = flow { +// emit(1) +// emit(2) +// delay(500L) +// emit(3) +// emit(4) +// delay(200L) +// emit(5) +// delay(700L) +// emit(6) +// }.debounce(300L) +// +// fun main() = runBlocking { +// debounce().collect { } +// } +// +// fun debounce( +// timeMillis: Long = 300L, +// coroutineScope: CoroutineScope, +// block: (T) -> Unit +// ): (T) -> Unit { +// var debounceJob: Job? = null +// return { +// debounceJob?.cancel() +// debounceJob = coroutineScope.launch { +// delay(timeMillis) +// block(it) +// } +// } +// } private fun initBackBtnClickListener() { binding.btnSearchCancel.setOnSingleClickListener { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt index c9c56f3..40ae74e 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt @@ -1,6 +1,5 @@ package com.release.keyneez.presentation.main.search -import androidx.databinding.ObservableBoolean import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -18,7 +17,7 @@ import javax.inject.Inject class SearchViewModel @Inject constructor( private val contentRepository: ContentRepository ) : ViewModel() { - private val _searchList = MutableLiveData>() + private val _searchList = MutableLiveData>(mutableListOf()) val searchList: LiveData> get() = _searchList From 0276014c1fa45c39a36f2dbdc92e17f8fc1f01b2 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 20 Jul 2023 00:30:37 +0900 Subject: [PATCH 053/109] =?UTF-8?q?[DEL/#33]=20=EA=B2=80=EC=83=89=EB=B7=B0?= =?UTF-8?q?=20=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=EC=97=90=20=ED=95=9C=20=EB=B2=88=EB=A7=8C=20=EB=90=98=EA=B2=8C?= =?UTF-8?q?=EB=81=94=20=EC=88=98=EC=A0=95..=EC=BD=94=EB=93=9C=20=ED=95=9C?= =?UTF-8?q?=20=EC=A4=84=20=EC=82=AD=EC=A0=9C=ED=95=98=EB=A9=B4=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=EC=98=80?= =?UTF-8?q?=EB=8B=A4=EB=8B=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/presentation/main/search/SearchViewModel.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt index 40ae74e..70d9bf7 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt @@ -37,7 +37,6 @@ class SearchViewModel @Inject constructor( init { _saveState.value = true _isFlowVisible.value = false - getSearchPostData() } fun updateCount() { From b4efae7039483779101fb8f306e4b94376946c7f Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 20 Jul 2023 00:37:34 +0900 Subject: [PATCH 054/109] =?UTF-8?q?[MOD/#33]=20=EA=B2=80=EC=83=89=EB=B7=B0?= =?UTF-8?q?=20=EA=B0=AF=EC=88=98=20=EA=B2=B0=EA=B3=BC=20visible=20=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/search/SearchActivity.kt | 34 +------------------ app/src/main/res/layout/activity_search.xml | 1 - 2 files changed, 1 insertion(+), 34 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index 66cae49..6548047 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -1,7 +1,6 @@ package com.release.keyneez.presentation.main.search import android.os.Bundle -import android.util.Log import android.view.KeyEvent import android.view.View import android.view.inputmethod.EditorInfo @@ -82,42 +81,11 @@ class SearchActivity : BindingActivity(R.layout.activity_ private fun initSearchBtnClickListener() { binding.btnSearch.setOnSingleClickListener { - Log.d("1", "제바루ㅜ") viewModel.updateCount() + viewModel.getSearchPostData() } } -// private fun debounce(): kotlinx.coroutines.flow.Flow = flow { -// emit(1) -// emit(2) -// delay(500L) -// emit(3) -// emit(4) -// delay(200L) -// emit(5) -// delay(700L) -// emit(6) -// }.debounce(300L) -// -// fun main() = runBlocking { -// debounce().collect { } -// } -// -// fun debounce( -// timeMillis: Long = 300L, -// coroutineScope: CoroutineScope, -// block: (T) -> Unit -// ): (T) -> Unit { -// var debounceJob: Job? = null -// return { -// debounceJob?.cancel() -// debounceJob = coroutineScope.launch { -// delay(timeMillis) -// block(it) -// } -// } -// } - private fun initBackBtnClickListener() { binding.btnSearchCancel.setOnSingleClickListener { finish() diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index d2dfe50..3f95c71 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -26,7 +26,6 @@ android:layout_marginTop="36dp" android:background="@null" android:contentDescription="@string/search_contentdescription" - android:onClick="@{()->vm.getSearchPostData()}" android:padding="12dp" android:src="@drawable/ic_search" app:layout_constraintStart_toStartOf="parent" From a7754552bb123b9c6c2f3e7569aa34f9b21dbcc9 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 20 Jul 2023 01:29:36 +0900 Subject: [PATCH 055/109] =?UTF-8?q?[MOD/#33]=20=EA=B2=80=EC=83=89=EB=B7=B0?= =?UTF-8?q?=20=EA=B0=AF=EC=88=98=20=EA=B2=B0=EA=B3=BC=20=EA=B0=80=EC=9A=B4?= =?UTF-8?q?=EB=8D=B0=20=EC=9C=84=EC=B9=98=20=EC=8B=9C=ED=82=A4=EB=8A=94=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/search/SearchActivity.kt | 3 - app/src/main/res/layout/activity_search.xml | 62 +++++++++---------- 2 files changed, 30 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index 6548047..aa5e460 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -2,7 +2,6 @@ package com.release.keyneez.presentation.main.search import android.os.Bundle import android.view.KeyEvent -import android.view.View import android.view.inputmethod.EditorInfo import android.widget.TextView import androidx.activity.viewModels @@ -22,8 +21,6 @@ class SearchActivity : BindingActivity(R.layout.activity_ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.vm = viewModel - binding.flowSearch.visibility = View.GONE - binding.tvSearchEnd.visibility = View.GONE initSearchBtnClickListener() initSearchAdapter() initBackBtnClickListener() diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index 3f95c71..14fad19 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -74,45 +74,43 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/et_search_content" /> - - - - - - - + app:layout_constraintTop_toBottomOf="@id/view_search_baseline"> + + + + + + + Date: Thu, 20 Jul 2023 21:16:51 +0900 Subject: [PATCH 056/109] =?UTF-8?q?[ADD/#33]=20=ED=83=90=EC=83=89=EB=B7=B0?= =?UTF-8?q?=EB=93=A4=20=EB=8B=A4=EC=8B=9C=20=EB=8F=8C=EC=95=84=20=EB=8F=8C?= =?UTF-8?q?=EC=95=84=20=EC=98=A4=EB=A9=B4=20=EC=83=88=EB=A1=AD=EA=B2=8C=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20=EB=90=98=EA=B2=8C?= =?UTF-8?q?=EB=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/explore/popular/PopularFragment.kt | 7 +++++++ .../presentation/main/explore/recent/RecentFragment.kt | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 4c2988d..4993517 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -31,6 +31,13 @@ class PopularFragment : super.onAttach(context) } + override fun onResume() { + super.onResume() + if (!isInitialLoad) { + initCategoryBtnListener() + } + } + private fun initCategoryBtnListener() { selectOnlyOneButton(binding.tvExplorePopularAll) binding.tvExplorePopularAll.setOnClickListener { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index 5c4ea07..6940914 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -30,6 +30,13 @@ class RecentFragment : BindingFragment(R.layout.fragment_ super.onAttach(context) } + override fun onResume() { + super.onResume() + if (!isInitialLoad) { + initCategoryBtnListener() + } + } + private fun initCategoryBtnListener() { selectOnlyOneButton(binding.tvExploreRecentAll) binding.tvExploreRecentAll.setOnClickListener { From a25ccbe51e3ec4bde8490aec5630e39f2a70ebcb Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 20 Jul 2023 21:34:22 +0900 Subject: [PATCH 057/109] =?UTF-8?q?[DEL/#33]=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20=EC=97=86=EC=95=A0?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/explore/popular/PopularViewModel.kt | 1 - .../keyneez/presentation/main/explore/recent/RecentViewModel.kt | 1 - 2 files changed, 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index 83608f9..aebaa3b 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -33,7 +33,6 @@ class PopularViewModel @Inject constructor( init { _saveState.value = true - getPopularData() } fun setFilterValue(value: String) { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt index ccf4e43..67f5325 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt @@ -33,7 +33,6 @@ class RecentViewModel @Inject constructor( init { _saveState.value = true - getRecentData() } fun setFilterValue(value: String) { From 456b6ad6c2ae69aa106aa067789e7f46473a76e7 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 20 Jul 2023 21:37:13 +0900 Subject: [PATCH 058/109] =?UTF-8?q?[DEL/#33]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=A3=BC=EC=84=9D=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/explore/popular/PopularFragment.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 4993517..2cfe530 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -2,7 +2,6 @@ package com.release.keyneez.presentation.main.explore.popular import android.content.Context import android.os.Bundle -import android.util.Log import android.view.View import android.widget.TextView import androidx.fragment.app.viewModels @@ -63,7 +62,6 @@ class PopularFragment : selectedButton.isSelected = true val filterValue = selectedButton.text.toString() if (isInitialLoad == false) { - Log.d("1", "서버통신") if (filterValue != binding.tvExplorePopularAll.text.toString()) { viewModel.setFilterValue(filterValue) viewModel.getPopularData() From 0cab7f768fd92b22575c04ac71083a05dd01690c Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 20 Jul 2023 21:40:51 +0900 Subject: [PATCH 059/109] =?UTF-8?q?[MOD/#33]=20=EA=B2=80=EC=83=89=EB=B7=B0?= =?UTF-8?q?=20=ED=82=A4=EB=B3=B4=EB=93=9C=20=EC=88=A8=EA=B8=B0=EB=8A=94=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/search/SearchActivity.kt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index aa5e460..9022800 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -25,7 +25,6 @@ class SearchActivity : BindingActivity(R.layout.activity_ initSearchAdapter() initBackBtnClickListener() initSearchBtnKeyListener() - initHideKeyboard() setupSearchState() } @@ -59,12 +58,6 @@ class SearchActivity : BindingActivity(R.layout.activity_ } } - private fun initHideKeyboard() { - binding.layoutSearch.setOnSingleClickListener { - hideKeyboard() - } - } - private fun initSearchBtnKeyListener() { binding.etSearchContent.setOnEditorActionListener(object : TextView.OnEditorActionListener { override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean { @@ -80,6 +73,7 @@ class SearchActivity : BindingActivity(R.layout.activity_ binding.btnSearch.setOnSingleClickListener { viewModel.updateCount() viewModel.getSearchPostData() + hideKeyboard() } } From a3b2f78883c46678609c0bd72337283d2d21631c Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 20 Jul 2023 21:52:03 +0900 Subject: [PATCH 060/109] =?UTF-8?q?[MOD/#33]=20=EB=A6=B0=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/item_popular_content.xml | 4 ++-- app/src/main/res/layout/item_recent_content.xml | 4 ++-- app/src/main/res/layout/item_search_content.xml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/layout/item_popular_content.xml b/app/src/main/res/layout/item_popular_content.xml index 8352846..eb6803f 100644 --- a/app/src/main/res/layout/item_popular_content.xml +++ b/app/src/main/res/layout/item_popular_content.xml @@ -54,14 +54,14 @@ Date: Fri, 21 Jul 2023 14:30:25 +0900 Subject: [PATCH 061/109] =?UTF-8?q?[FEAT/#33]=20=EC=B5=9C=EC=8B=A0?= =?UTF-8?q?=EB=B7=B0=EC=97=90=EC=84=9C=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=B7=A8=EC=86=8C=ED=95=98=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/recent/RecentFragment.kt | 1 + .../main/explore/recent/RecentViewModel.kt | 38 ++++++++++++++++--- .../main/res/layout/item_recent_content.xml | 4 +- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index 6940914..399db3c 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -86,6 +86,7 @@ class RecentFragment : BindingFragment(R.layout.fragment_ isInitialLoad = false list = recentList recentAdapter?.submitList(recentList) + viewModel.updateSaveState(recentList.flatMap { it.Likes }) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt index 67f5325..0e2a5db 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt @@ -31,14 +31,26 @@ class RecentViewModel @Inject constructor( val filter = MutableLiveData("") - init { - _saveState.value = true - } - fun setFilterValue(value: String) { filter.value = value } + fun updateSaveState(list: List) { + if (list.isEmpty()) { + _saveState.value = false + } else { + _saveState.value = true + } + } + + fun onSaveBtnClick(data: ResponseGetContentDto, saveState: Boolean) { + if (saveState) { + postUnLike(data.content) + } else { + postSave(data.content) + } + } + fun getRecentData() { viewModelScope.launch { contentRepository.getContent(filter.value.toString()) @@ -69,7 +81,7 @@ class RecentViewModel @Inject constructor( Timber.d("POST SAVE STATE SUCCESS") Timber.d("response : $response") - _saveState.value = false + _saveState.value = true _stateMessage.value = UiState.Success } .onFailure { @@ -79,6 +91,22 @@ class RecentViewModel @Inject constructor( } } + fun postUnLike(pk: Int) { + viewModelScope.launch { + contentRepository.postUnlike(pk) + .onSuccess { response -> + Timber.tag("POST UNLIKE STATE SUCCESS") + Timber.d("response : $response") + _saveState.value = false + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.d("throwable : $it") + _stateMessage.value = UiState.Error + } + } + } + companion object { const val RECENT_DATA_NULL_CODE = 100 private const val successTag = "GET_RECENT_CONTENT_SUCCESS" diff --git a/app/src/main/res/layout/item_recent_content.xml b/app/src/main/res/layout/item_recent_content.xml index 8c9cccc..39ca4c8 100644 --- a/app/src/main/res/layout/item_recent_content.xml +++ b/app/src/main/res/layout/item_recent_content.xml @@ -60,9 +60,9 @@ android:layout_marginTop="5dp" android:layout_marginEnd="3dp" android:background="@null" - android:onClick="@{()->vm.postSave(data.content)}" + android:onClick="@{()->vm.onSaveBtnClick(data, vm.saveState)}" android:padding="12dp" - android:src="@{data.Likes.isEmpty() || vm.saveState ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" + android:src="@{vm.saveState ? @drawable/ic_heart_fill : @drawable/ic_heart_empty}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="SpeakableTextPresentCheck" /> From cc669f284450878017cbee67cc2a09e8265cef73 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 21 Jul 2023 14:36:36 +0900 Subject: [PATCH 062/109] =?UTF-8?q?[FEAT/#33]=20=EC=9D=B8=EA=B8=B0?= =?UTF-8?q?=EB=B7=B0=EC=97=90=EC=84=9C=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=B7=A8=EC=86=8C=ED=95=98=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/popular/PopularFragment.kt | 1 + .../main/explore/popular/PopularViewModel.kt | 38 ++++++++++++++++--- .../main/res/layout/item_popular_content.xml | 4 +- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 2cfe530..f7625bf 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -86,6 +86,7 @@ class PopularFragment : isInitialLoad = false list = popularList popularAdapter?.submitList(popularList) + viewModel.updateSaveState(popularList.flatMap { it.Likes }) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index aebaa3b..da165b6 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -31,14 +31,26 @@ class PopularViewModel @Inject constructor( val filter = MutableLiveData("") - init { - _saveState.value = true - } - fun setFilterValue(value: String) { filter.value = value } + fun updateSaveState(list: List) { + if (list.isEmpty()) { + _saveState.value = false + } else { + _saveState.value = true + } + } + + fun onSaveBtnClick(data: ResponseGetContentDto, saveState: Boolean) { + if (saveState) { + postUnLike(data.content) + } else { + postSave(data.content) + } + } + fun getPopularData() { viewModelScope.launch { contentRepository.getContent(filter.value.toString()) @@ -69,7 +81,7 @@ class PopularViewModel @Inject constructor( Timber.d("POST SAVE STATE SUCCESS") Timber.d("response : $response") - _saveState.value = false + _saveState.value = true _stateMessage.value = UiState.Success } .onFailure { @@ -79,6 +91,22 @@ class PopularViewModel @Inject constructor( } } + fun postUnLike(pk: Int) { + viewModelScope.launch { + contentRepository.postUnlike(pk) + .onSuccess { response -> + Timber.tag("POST UNLIKE STATE SUCCESS") + Timber.d("response : $response") + _saveState.value = false + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.d("throwable : $it") + _stateMessage.value = UiState.Error + } + } + } + companion object { const val POPULAR_DATA_NULL_CODE = 100 private const val successTag = "GET_POPULAR_CONTENT_SUCCESS" diff --git a/app/src/main/res/layout/item_popular_content.xml b/app/src/main/res/layout/item_popular_content.xml index eb6803f..31455d3 100644 --- a/app/src/main/res/layout/item_popular_content.xml +++ b/app/src/main/res/layout/item_popular_content.xml @@ -60,9 +60,9 @@ android:layout_marginTop="5dp" android:layout_marginEnd="3dp" android:background="@null" - android:onClick="@{()->vm.postSave(data.content)}" + android:onClick="@{()->vm.onSaveBtnClick(data, vm.saveState)}" android:padding="12dp" - android:src="@{data.Likes.isEmpty() || vm.saveState ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" + android:src="@{vm.saveState ? @drawable/ic_heart_fill : @drawable/ic_heart_empty}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="SpeakableTextPresentCheck" /> From 614bd49fc4b11556df3ec6fa3fa3eb200fd135b2 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 21 Jul 2023 14:54:30 +0900 Subject: [PATCH 063/109] =?UTF-8?q?[FEAT/#33]=20=EA=B2=80=EC=83=89?= =?UTF-8?q?=EB=B7=B0=EC=97=90=EC=84=9C=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=B7=A8=EC=86=8C=ED=95=98=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/search/SearchActivity.kt | 4 +-- .../main/search/SearchViewModel.kt | 36 +++++++++++++++++-- .../main/res/layout/item_search_content.xml | 4 +-- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index 9022800..c381877 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -51,10 +51,10 @@ class SearchActivity : BindingActivity(R.layout.activity_ } private fun setupSearchActivityList() { - viewModel.searchList.observe(this) { - val searchList = viewModel.searchList.value + viewModel.searchList.observe(this) { searchList -> searchAdapter?.submitList(searchList) binding.tvSearchCount.text = searchList?.size.toString() + viewModel.updateSaveState(searchList.flatMap { it.Likes }) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt index 70d9bf7..d1c6604 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt @@ -24,6 +24,7 @@ class SearchViewModel @Inject constructor( private val _stateMessage = MutableLiveData() val stateMessage: LiveData get() = _stateMessage + private val _isFlowVisible = MutableLiveData() val isFlowVisible: LiveData get() = _isFlowVisible @@ -35,7 +36,6 @@ class SearchViewModel @Inject constructor( val key = MutableLiveData("") init { - _saveState.value = true _isFlowVisible.value = false } @@ -43,6 +43,22 @@ class SearchViewModel @Inject constructor( _isFlowVisible.value = true } + fun updateSaveState(list: List) { + if (list.isEmpty()) { + _saveState.value = false + } else { + _saveState.value = true + } + } + + fun onSaveBtnClick(data: ResponseGetSearchResultDto, saveState: Boolean) { + if (saveState) { + postUnLike(data.content) + } else { + postSave(data.content) + } + } + fun getSearchPostData() { viewModelScope.launch { contentRepository.getSearch(key.value.toString()).onSuccess { response -> @@ -79,7 +95,7 @@ class SearchViewModel @Inject constructor( Timber.d("POST SAVE STATE SUCCESS") Timber.d("response : $response") - _saveState.value = false + _saveState.value = true _stateMessage.value = UiState.Success } .onFailure { @@ -89,6 +105,22 @@ class SearchViewModel @Inject constructor( } } + fun postUnLike(pk: Int) { + viewModelScope.launch { + contentRepository.postUnlike(pk) + .onSuccess { response -> + Timber.tag("POST UNLIKE STATE SUCCES뷰S") + Timber.d("response : $response") + _saveState.value = false + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.d("throwable : $it") + _stateMessage.value = UiState.Error + } + } + } + companion object { const val SEARCH_NULL_CODE = 100 const val SEARCH_NO_POST_CODE = 404 diff --git a/app/src/main/res/layout/item_search_content.xml b/app/src/main/res/layout/item_search_content.xml index 43430e3..c1739b2 100644 --- a/app/src/main/res/layout/item_search_content.xml +++ b/app/src/main/res/layout/item_search_content.xml @@ -62,9 +62,9 @@ android:layout_marginEnd="3dp" android:background="@null" android:contentDescription="@string/search_heart_contentdescription" - android:onClick="@{()->vm.postSave(data.content)}" + android:onClick="@{()->vm.onSaveBtnClick(data, vm.saveState)}" android:padding="12dp" - android:src="@{data.Likes.isEmpty() || vm.saveState ? @drawable/ic_heart_empty : @drawable/ic_heart_fill}" + android:src="@{vm.saveState ? @drawable/ic_heart_fill : @drawable/ic_heart_empty}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="SpeakableTextPresentCheck" /> From 8a2a8977aa7e8acc1fbc2f51f4dbfda27abeab68 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 22 Jul 2023 13:10:13 +0900 Subject: [PATCH 064/109] =?UTF-8?q?[DEL/#33]=20=EC=9D=B8=EA=B8=B0=EB=B7=B0?= =?UTF-8?q?=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/fragment_popular.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/src/main/res/layout/fragment_popular.xml b/app/src/main/res/layout/fragment_popular.xml index d215b05..c7aa42e 100644 --- a/app/src/main/res/layout/fragment_popular.xml +++ b/app/src/main/res/layout/fragment_popular.xml @@ -5,14 +5,6 @@ - - - - From 2102376489c88ef95f8973331a75704e437db474 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 22 Jul 2023 13:10:38 +0900 Subject: [PATCH 065/109] =?UTF-8?q?[DEL/#33]=20=EC=B5=9C=EC=8B=A0=EB=B7=B0?= =?UTF-8?q?=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/fragment_recent.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/src/main/res/layout/fragment_recent.xml b/app/src/main/res/layout/fragment_recent.xml index d2694a1..9ad6995 100644 --- a/app/src/main/res/layout/fragment_recent.xml +++ b/app/src/main/res/layout/fragment_recent.xml @@ -5,14 +5,6 @@ - - - - From 1d61a5e1c57bc91ca5167793ea752d7b7b86329a Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 22 Jul 2023 13:14:29 +0900 Subject: [PATCH 066/109] =?UTF-8?q?[DEL/#33]=20fragment=EC=97=90=20?= =?UTF-8?q?=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/explore/popular/PopularFragment.kt | 1 - .../keyneez/presentation/main/explore/recent/RecentFragment.kt | 1 - 2 files changed, 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index f7625bf..064f86b 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -20,7 +20,6 @@ class PopularFragment : private var isInitialLoad = true override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.vm = viewModel initPopularAdapter() setupPopularActivityList() initCategoryBtnListener() diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index 399db3c..35aaa9b 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -20,7 +20,6 @@ class RecentFragment : BindingFragment(R.layout.fragment_ private var isInitialLoad = true override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.vm = viewModel initRecentAdapter() setupRecentActivityList() initCategoryBtnListener() From ff165784e0d241d49c4d7f22cdef7d2d4631aa8f Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 22 Jul 2023 13:25:11 +0900 Subject: [PATCH 067/109] =?UTF-8?q?[MOD/#33]=20=EA=B2=80=EC=83=89=EC=96=B4?= =?UTF-8?q?=EA=B0=80=20=EC=9E=88=EC=9D=84=20=EB=95=8C=EB=A7=8C=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=EB=B2=84=ED=8A=BC=20=EB=88=8C=EB=9F=AC=EC=A7=80?= =?UTF-8?q?=EA=B2=8C=20=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/search/SearchActivity.kt | 9 ++++++--- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index c381877..43f98ac 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -71,9 +71,12 @@ class SearchActivity : BindingActivity(R.layout.activity_ private fun initSearchBtnClickListener() { binding.btnSearch.setOnSingleClickListener { - viewModel.updateCount() - viewModel.getSearchPostData() - hideKeyboard() + val searchKeyword = binding.etSearchContent.text.toString().trim() + if (searchKeyword.isNotEmpty()) { + viewModel.updateCount() + viewModel.getSearchPostData() + hideKeyboard() + } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3891243..3b0bd89 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -61,7 +61,7 @@ 검색결과가 없습니다. 네트워크 연결에 실패했습니다. - + 검색을 완료해 주세요. Hello blank fragment From a4d00cd53e1831b29cc8868ef5fc78fa780b9d41 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 22 Jul 2023 13:25:31 +0900 Subject: [PATCH 068/109] =?UTF-8?q?[MOD/#33]=20=EB=A6=B0=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3b0bd89..ee7de2f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -61,7 +61,7 @@ 검색결과가 없습니다. 네트워크 연결에 실패했습니다. - 검색을 완료해 주세요. + 검색을 완료해 주세요. Hello blank fragment From b8b85fb8978984a16e7243a002a46b67ea82f09b Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sun, 23 Jul 2023 00:15:54 +0900 Subject: [PATCH 069/109] =?UTF-8?q?[MOD/#33]=20=EB=82=A0=EC=A7=9C=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/util/binding/BindingAdapter.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt b/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt index 37fc0e5..f9b1e11 100644 --- a/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt +++ b/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt @@ -44,15 +44,15 @@ object BindingAdapter { @JvmStatic @BindingAdapter("putStartDate", "putEndDate") fun TextView.setDuration(start: String?, end: String?) { - if (start == null || end == null) { - this.text = "2023 -" - return - } - - val tempStart = "${end.substring(4, 6)}.${end.substring(6, 8)}" - val tempEnd = "${end.substring(4, 6)}.${end.substring(6, 8)}" + if (start?.substring(0, 4) == "9999") { + this.text = "상시" + } else { + val tempStart = + "${start?.substring(0, 4)}.${start?.substring(4, 6)}.${start?.substring(6, 8)}" + val tempEnd = "${end?.substring(4, 6)}.${end?.substring(6, 8)}" - this.text = "$tempStart - $tempEnd" + this.text = "$tempStart - $tempEnd" + } } @JvmStatic From 9b561b940b36e04e2118bc315d11f10ebf8b5aee Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sun, 23 Jul 2023 00:28:45 +0900 Subject: [PATCH 070/109] =?UTF-8?q?[MOD/#33]=20=EB=82=A0=EC=A7=9C=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=952?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/release/keyneez/util/binding/BindingAdapter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt b/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt index f9b1e11..3d1c495 100644 --- a/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt +++ b/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt @@ -44,7 +44,7 @@ object BindingAdapter { @JvmStatic @BindingAdapter("putStartDate", "putEndDate") fun TextView.setDuration(start: String?, end: String?) { - if (start?.substring(0, 4) == "9999") { + if (start?.substring(0, 4) == "9999" && end?.substring(0, 4) == "9999") { this.text = "상시" } else { val tempStart = From 912750fd1ded38f3e800fd6d29055610fd9dd35a Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sun, 23 Jul 2023 17:37:49 +0900 Subject: [PATCH 071/109] =?UTF-8?q?[DEL/#33]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=A3=BC=EC=84=9D=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/release/keyneez/presentation/main/like/LikeFragment.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 37ac082..c550f78 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -123,7 +123,6 @@ class LikeFragment : binding.tvLikeNum.text = getString(R.string.like_select, selectedCount) Log.d("1", "true일 때") } else { - // 서버 통신 때문에 제대로 출력 안되는 확률도 있기에 서버통신 되고 다시 살펴 보기 binding.tvLikeNum.text = getString(R.string.like_num, likeList.size) Log.d("1", "false일 때") } From 7dec630701cb53ac5132cba9cb95278dbd7ae466 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 24 Jul 2023 14:14:21 +0900 Subject: [PATCH 072/109] =?UTF-8?q?[ADD/#33]=20=ED=86=A0=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20string=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/search/SearchActivity.kt | 4 ++++ app/src/main/res/values/strings.xml | 1 + 2 files changed, 5 insertions(+) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index 43f98ac..9d7f28c 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.KeyEvent import android.view.inputmethod.EditorInfo import android.widget.TextView +import android.widget.Toast import androidx.activity.viewModels import com.release.keyneez.R import com.release.keyneez.databinding.ActivitySearchBinding @@ -72,6 +73,9 @@ class SearchActivity : BindingActivity(R.layout.activity_ private fun initSearchBtnClickListener() { binding.btnSearch.setOnSingleClickListener { val searchKeyword = binding.etSearchContent.text.toString().trim() + if(searchKeyword.isEmpty()){ + Toast.makeText(this, "", Toast.LENGTH_SHORT).show() + } if (searchKeyword.isNotEmpty()) { viewModel.updateCount() viewModel.getSearchPostData() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ee7de2f..0795df7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,6 +31,7 @@ 리사이클러뷰 하트 콘텐츠 + 검색어를 입력해 주세요. 탐색하기 From b488b1bf67f967d6944dc5cefb33f5678b2ec03a Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 24 Jul 2023 14:16:26 +0900 Subject: [PATCH 073/109] =?UTF-8?q?[MOD/#33]=20=EA=B2=80=EC=83=89=EC=96=B4?= =?UTF-8?q?=EA=B0=80=20=EC=97=86=EC=9D=84=20=EA=B2=BD=EC=9A=B0=20toast=20?= =?UTF-8?q?=EB=9D=84=EC=9B=8C=20=EC=A3=BC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/presentation/main/search/SearchActivity.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index 9d7f28c..1f1ece7 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -73,8 +73,8 @@ class SearchActivity : BindingActivity(R.layout.activity_ private fun initSearchBtnClickListener() { binding.btnSearch.setOnSingleClickListener { val searchKeyword = binding.etSearchContent.text.toString().trim() - if(searchKeyword.isEmpty()){ - Toast.makeText(this, "", Toast.LENGTH_SHORT).show() + if (searchKeyword.isEmpty()) { + Toast.makeText(this, R.string.search_toast, Toast.LENGTH_SHORT).show() } if (searchKeyword.isNotEmpty()) { viewModel.updateCount() From 21db91c6c816a5f629f0e0f190fc85872c317010 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 24 Jul 2023 21:52:27 +0900 Subject: [PATCH 074/109] =?UTF-8?q?[ADD/#33]=20=EC=9D=B8=EA=B8=B0=20api=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EA=B8=B0=EC=B4=88=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/response/ResponseGetPopularDto.kt | 30 +++++++++++++++++++ ...tContentDto.kt => ResponseGetRecentDto.kt} | 2 +- .../data/repository/ContentRepository.kt | 6 ++-- .../data/repository/ContentRepositoryImpl.kt | 10 +++++-- .../keyneez/data/service/ContentService.kt | 8 +++-- .../keyneez/data/source/ContentDataSource.kt | 11 +++++-- .../main/explore/popular/PopularAdapter.kt | 10 +++---- .../main/explore/popular/PopularFragment.kt | 4 +-- .../main/explore/popular/PopularViewModel.kt | 10 +++---- .../main/explore/recent/RecentAdapter.kt | 10 +++---- .../main/explore/recent/RecentFragment.kt | 4 +-- .../main/explore/recent/RecentViewModel.kt | 10 +++---- .../main/res/layout/item_popular_content.xml | 2 +- .../main/res/layout/item_recent_content.xml | 2 +- 14 files changed, 82 insertions(+), 37 deletions(-) create mode 100644 app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt rename app/src/main/java/com/release/keyneez/data/entity/response/{ResponseGetContentDto.kt => ResponseGetRecentDto.kt} (96%) diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt new file mode 100644 index 0000000..701d469 --- /dev/null +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt @@ -0,0 +1,30 @@ +package com.release.keyneez.data.entity.response + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +data class ResponseGetPopularDto( + @SerialName("content_pk") val content: Int, + @SerialName("title") val title: String, + @SerialName("category") val category: String, + @SerialName("tag") val tag: String, + @SerialName("link") val link: String, + @SerialName("img") val img: String?, + @SerialName("place") val place: String, + @SerialName("introduction") val introduction: String, + @SerialName("inquiry") val inquiry: String?, + @SerialName("price") val price: String?, + @SerialName("benefit") val benefit: String?, + @SerialName("start_at") val start: String?, + @SerialName("end_at") val end: String?, + @SerialName("created_at") val created: String?, + @SerialName("updated_at") val updated: String?, + val Likes: List +) { + @Serializable + data class Liked( + @SerialName("liked_pk") val liked: Int, + @SerialName("user") val user: Int, + @SerialName("content") val content: Int + ) +} diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetRecentDto.kt similarity index 96% rename from app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt rename to app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetRecentDto.kt index bf8554b..0edd1ff 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetContentDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetRecentDto.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class ResponseGetContentDto( +data class ResponseGetRecentDto( @SerialName("content_pk") val content: Int, @SerialName("title") val title: String, @SerialName("category") val category: String, diff --git a/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt b/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt index 7c70402..fea2694 100644 --- a/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt +++ b/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt @@ -1,14 +1,16 @@ package com.release.keyneez.data.repository -import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.data.entity.response.ResponseGetLikeDto +import com.release.keyneez.data.entity.response.ResponseGetPopularDto +import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.data.entity.response.ResponseGetSearchResultDto import com.release.keyneez.data.entity.response.ResponsePostLikeDto import com.release.keyneez.data.entity.response.wrapper.BaseResponse interface ContentRepository { - suspend fun getContent(filter: String): Result>> + suspend fun getRecent(filter: String): Result>> + suspend fun getPopular(filter: String): Result>> suspend fun getLike(filter: String): Result>> suspend fun getSearch(keyword: String): Result>> suspend fun postLike(pk: Int): Result> diff --git a/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt b/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt index adfc492..71a70fd 100644 --- a/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt +++ b/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt @@ -1,7 +1,8 @@ package com.release.keyneez.data.repository -import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.data.entity.response.ResponseGetLikeDto +import com.release.keyneez.data.entity.response.ResponseGetPopularDto +import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.data.entity.response.ResponseGetSearchResultDto import com.release.keyneez.data.entity.response.ResponsePostLikeDto import com.release.keyneez.data.entity.response.wrapper.BaseResponse @@ -12,8 +13,11 @@ class ContentRepositoryImpl @Inject constructor( private val contentDataSource: ContentDataSource ) : ContentRepository { - override suspend fun getContent(filter: String): Result>> = - kotlin.runCatching { contentDataSource.getContent(filter) } + override suspend fun getRecent(filter: String): Result>> = + kotlin.runCatching { contentDataSource.getRecent(filter) } + + override suspend fun getPopular(filter: String): Result>> = + kotlin.runCatching { contentDataSource.getPopular(filter) } override suspend fun getLike(filter: String): Result>> = kotlin.runCatching { contentDataSource.getLike(filter) } diff --git a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt index 8bce86d..fb77359 100644 --- a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt +++ b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt @@ -1,7 +1,8 @@ package com.release.keyneez.data.service -import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.data.entity.response.ResponseGetLikeDto +import com.release.keyneez.data.entity.response.ResponseGetPopularDto +import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.data.entity.response.ResponseGetSearchResultDto import com.release.keyneez.data.entity.response.ResponsePostLikeDto import com.release.keyneez.data.entity.response.wrapper.BaseResponse @@ -15,7 +16,10 @@ interface ContentService { suspend fun getLike(@Query("filter") filter: String): BaseResponse> @GET("contents/") - suspend fun getContent(@Query("filter") filter: String): BaseResponse> + suspend fun getRecent(@Query("filter") filter: String): BaseResponse> + + @GET("contents/") + suspend fun getPopular(@Query("filter") filter: String): BaseResponse> @GET("contents/search") suspend fun getSearch( diff --git a/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt b/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt index 95f0ac9..68d5a37 100644 --- a/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt +++ b/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt @@ -1,7 +1,8 @@ package com.release.keyneez.data.source -import com.release.keyneez.data.entity.response.ResponseGetContentDto import com.release.keyneez.data.entity.response.ResponseGetLikeDto +import com.release.keyneez.data.entity.response.ResponseGetPopularDto +import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.data.entity.response.ResponseGetSearchResultDto import com.release.keyneez.data.entity.response.ResponsePostLikeDto import com.release.keyneez.data.entity.response.wrapper.BaseResponse @@ -11,8 +12,11 @@ import javax.inject.Inject class ContentDataSource @Inject constructor( private val contentService: ContentService ) { - suspend fun getContent(filter: String): BaseResponse> = - contentService.getContent(filter) + suspend fun getRecent(filter: String): BaseResponse> = + contentService.getRecent(filter) + + suspend fun getPopular(filter: String): BaseResponse> = + contentService.getPopular(filter) suspend fun getLike(filter: String): BaseResponse> = contentService.getLike(filter) @@ -22,6 +26,7 @@ class ContentDataSource @Inject constructor( suspend fun postLike(pk: Int): BaseResponse = contentService.postLike(pk) + suspend fun postUnlike(pk: Int): BaseResponse = contentService.postUnlike(pk) } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt index bdfbe96..bd214dd 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt @@ -4,16 +4,16 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView -import com.release.keyneez.data.entity.response.ResponseGetContentDto +import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.databinding.ItemPopularContentBinding import com.release.keyneez.util.DiffCallback -class PopularAdapter : ListAdapter(diffUtil) { - var data = listOf() +class PopularAdapter : ListAdapter(diffUtil) { + var data = listOf() class PopularViewHolder(private val binding: ItemPopularContentBinding) : RecyclerView.ViewHolder(binding.root) { - fun setPopularContent(popular: ResponseGetContentDto) { + fun setPopularContent(popular: ResponseGetRecentDto) { binding.data = popular // 여기도 누르면 상세뷰로 가는 코드짜기 } @@ -35,7 +35,7 @@ class PopularAdapter : ListAdapter( + private val diffUtil = DiffCallback( onItemsTheSame = { old, new -> old.content == new.content }, onContentsTheSame = { old, new -> old == new } ) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 064f86b..11cc725 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -6,7 +6,7 @@ import android.view.View import android.widget.TextView import androidx.fragment.app.viewModels import androidx.recyclerview.widget.SimpleItemAnimator -import com.release.keyneez.data.entity.response.ResponseGetContentDto +import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.databinding.FragmentPopularBinding import com.release.keyneez.util.binding.BindingFragment import dagger.hilt.android.AndroidEntryPoint @@ -15,7 +15,7 @@ import dagger.hilt.android.AndroidEntryPoint class PopularFragment : BindingFragment(com.release.keyneez.R.layout.fragment_popular) { private val viewModel: PopularViewModel by viewModels() - lateinit var list: List + lateinit var list: List private var popularAdapter: PopularAdapter? = null private var isInitialLoad = true override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index da165b6..3763f17 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -4,7 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.release.keyneez.data.entity.response.ResponseGetContentDto +import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.data.repository.ContentRepository import com.release.keyneez.util.UiState import dagger.hilt.android.lifecycle.HiltViewModel @@ -17,8 +17,8 @@ import javax.inject.Inject class PopularViewModel @Inject constructor( private val contentRepository: ContentRepository ) : ViewModel() { - private val _popularList = MutableLiveData>(mutableListOf()) - val popularList: LiveData> + private val _popularList = MutableLiveData>(mutableListOf()) + val popularList: LiveData> get() = _popularList private val _stateMessage = MutableLiveData() @@ -35,7 +35,7 @@ class PopularViewModel @Inject constructor( filter.value = value } - fun updateSaveState(list: List) { + fun updateSaveState(list: List) { if (list.isEmpty()) { _saveState.value = false } else { @@ -43,7 +43,7 @@ class PopularViewModel @Inject constructor( } } - fun onSaveBtnClick(data: ResponseGetContentDto, saveState: Boolean) { + fun onSaveBtnClick(data: ResponseGetRecentDto, saveState: Boolean) { if (saveState) { postUnLike(data.content) } else { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt index a6f678e..27c4001 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt @@ -4,12 +4,12 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView -import com.release.keyneez.data.entity.response.ResponseGetContentDto +import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.databinding.ItemRecentContentBinding import com.release.keyneez.util.DiffCallback -class RecentAdapter : ListAdapter(diffUtil) { - var data = listOf() +class RecentAdapter : ListAdapter(diffUtil) { + var data = listOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return RecentViewHolder( ItemRecentContentBinding.inflate( @@ -26,14 +26,14 @@ class RecentAdapter : ListAdapter( + private val diffUtil = DiffCallback( onItemsTheSame = { old, new -> old.content == new.content }, onContentsTheSame = { old, new -> old == new } ) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index 35aaa9b..b63e90a 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -7,7 +7,7 @@ import android.widget.TextView import androidx.fragment.app.viewModels import androidx.recyclerview.widget.SimpleItemAnimator import com.release.keyneez.R -import com.release.keyneez.data.entity.response.ResponseGetContentDto +import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.databinding.FragmentRecentBinding import com.release.keyneez.util.binding.BindingFragment import dagger.hilt.android.AndroidEntryPoint @@ -16,7 +16,7 @@ import dagger.hilt.android.AndroidEntryPoint class RecentFragment : BindingFragment(R.layout.fragment_recent) { private val viewModel: RecentViewModel by viewModels() private var recentAdapter: RecentAdapter? = null - lateinit var list: List + lateinit var list: List private var isInitialLoad = true override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt index 0e2a5db..454b5a5 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt @@ -4,7 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.release.keyneez.data.entity.response.ResponseGetContentDto +import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.data.repository.ContentRepository import com.release.keyneez.util.UiState import dagger.hilt.android.lifecycle.HiltViewModel @@ -17,8 +17,8 @@ import javax.inject.Inject class RecentViewModel @Inject constructor( private val contentRepository: ContentRepository ) : ViewModel() { - private val _recentList = MutableLiveData>(mutableListOf()) - val recentList: LiveData> + private val _recentList = MutableLiveData>(mutableListOf()) + val recentList: LiveData> get() = _recentList private val _stateMessage = MutableLiveData() @@ -35,7 +35,7 @@ class RecentViewModel @Inject constructor( filter.value = value } - fun updateSaveState(list: List) { + fun updateSaveState(list: List) { if (list.isEmpty()) { _saveState.value = false } else { @@ -43,7 +43,7 @@ class RecentViewModel @Inject constructor( } } - fun onSaveBtnClick(data: ResponseGetContentDto, saveState: Boolean) { + fun onSaveBtnClick(data: ResponseGetRecentDto, saveState: Boolean) { if (saveState) { postUnLike(data.content) } else { diff --git a/app/src/main/res/layout/item_popular_content.xml b/app/src/main/res/layout/item_popular_content.xml index 31455d3..b6abbd6 100644 --- a/app/src/main/res/layout/item_popular_content.xml +++ b/app/src/main/res/layout/item_popular_content.xml @@ -7,7 +7,7 @@ + type="com.release.keyneez.data.entity.response.ResponseGetRecentDto" /> + type="com.release.keyneez.data.entity.response.ResponseGetRecentDto" /> Date: Mon, 24 Jul 2023 22:00:45 +0900 Subject: [PATCH 075/109] =?UTF-8?q?[MOD/#33]=20=EC=9D=B8=EA=B8=B0=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/release/keyneez/data/service/ContentService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt index fb77359..560e94a 100644 --- a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt +++ b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt @@ -18,7 +18,7 @@ interface ContentService { @GET("contents/") suspend fun getRecent(@Query("filter") filter: String): BaseResponse> - @GET("contents/") + @GET("contents/popularity") suspend fun getPopular(@Query("filter") filter: String): BaseResponse> @GET("contents/search") From 6598496dd5522e7bdd122eab5f8a6925ba8fde93 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 24 Jul 2023 22:04:22 +0900 Subject: [PATCH 076/109] =?UTF-8?q?[MOD/#33]=20=EC=9D=B8=EA=B8=B0=20api=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/explore/popular/PopularAdapter.kt | 10 +++++----- .../main/explore/popular/PopularFragment.kt | 4 ++-- .../main/explore/popular/PopularViewModel.kt | 9 +++++---- app/src/main/res/layout/item_popular_content.xml | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt index bd214dd..8ca8cd2 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt @@ -4,16 +4,16 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView -import com.release.keyneez.data.entity.response.ResponseGetRecentDto +import com.release.keyneez.data.entity.response.ResponseGetPopularDto import com.release.keyneez.databinding.ItemPopularContentBinding import com.release.keyneez.util.DiffCallback -class PopularAdapter : ListAdapter(diffUtil) { - var data = listOf() +class PopularAdapter : ListAdapter(diffUtil) { + var data = listOf() class PopularViewHolder(private val binding: ItemPopularContentBinding) : RecyclerView.ViewHolder(binding.root) { - fun setPopularContent(popular: ResponseGetRecentDto) { + fun setPopularContent(popular: ResponseGetPopularDto) { binding.data = popular // 여기도 누르면 상세뷰로 가는 코드짜기 } @@ -35,7 +35,7 @@ class PopularAdapter : ListAdapter( + private val diffUtil = DiffCallback( onItemsTheSame = { old, new -> old.content == new.content }, onContentsTheSame = { old, new -> old == new } ) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 11cc725..094f19b 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -6,7 +6,7 @@ import android.view.View import android.widget.TextView import androidx.fragment.app.viewModels import androidx.recyclerview.widget.SimpleItemAnimator -import com.release.keyneez.data.entity.response.ResponseGetRecentDto +import com.release.keyneez.data.entity.response.ResponseGetPopularDto import com.release.keyneez.databinding.FragmentPopularBinding import com.release.keyneez.util.binding.BindingFragment import dagger.hilt.android.AndroidEntryPoint @@ -15,7 +15,7 @@ import dagger.hilt.android.AndroidEntryPoint class PopularFragment : BindingFragment(com.release.keyneez.R.layout.fragment_popular) { private val viewModel: PopularViewModel by viewModels() - lateinit var list: List + lateinit var list: List private var popularAdapter: PopularAdapter? = null private var isInitialLoad = true override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index 3763f17..5c2eefe 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.release.keyneez.data.entity.response.ResponseGetPopularDto import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.data.repository.ContentRepository import com.release.keyneez.util.UiState @@ -17,8 +18,8 @@ import javax.inject.Inject class PopularViewModel @Inject constructor( private val contentRepository: ContentRepository ) : ViewModel() { - private val _popularList = MutableLiveData>(mutableListOf()) - val popularList: LiveData> + private val _popularList = MutableLiveData>(mutableListOf()) + val popularList: LiveData> get() = _popularList private val _stateMessage = MutableLiveData() @@ -35,7 +36,7 @@ class PopularViewModel @Inject constructor( filter.value = value } - fun updateSaveState(list: List) { + fun updateSaveState(list: List) { if (list.isEmpty()) { _saveState.value = false } else { @@ -53,7 +54,7 @@ class PopularViewModel @Inject constructor( fun getPopularData() { viewModelScope.launch { - contentRepository.getContent(filter.value.toString()) + contentRepository.getPopular(filter.value.toString()) .onSuccess { response -> Timber.tag(successTag).d("response : $response") diff --git a/app/src/main/res/layout/item_popular_content.xml b/app/src/main/res/layout/item_popular_content.xml index b6abbd6..dbce1a3 100644 --- a/app/src/main/res/layout/item_popular_content.xml +++ b/app/src/main/res/layout/item_popular_content.xml @@ -7,7 +7,7 @@ + type="com.release.keyneez.data.entity.response.ResponseGetPopularDto" /> Date: Mon, 24 Jul 2023 22:11:46 +0900 Subject: [PATCH 077/109] =?UTF-8?q?[MOD/#33]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/explore/popular/PopularViewModel.kt | 3 +-- .../presentation/main/explore/recent/RecentViewModel.kt | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index 5c2eefe..719f51d 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -5,7 +5,6 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.release.keyneez.data.entity.response.ResponseGetPopularDto -import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.data.repository.ContentRepository import com.release.keyneez.util.UiState import dagger.hilt.android.lifecycle.HiltViewModel @@ -44,7 +43,7 @@ class PopularViewModel @Inject constructor( } } - fun onSaveBtnClick(data: ResponseGetRecentDto, saveState: Boolean) { + fun onSaveBtnClick(data: ResponseGetPopularDto, saveState: Boolean) { if (saveState) { postUnLike(data.content) } else { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt index 454b5a5..b160e18 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt @@ -53,7 +53,7 @@ class RecentViewModel @Inject constructor( fun getRecentData() { viewModelScope.launch { - contentRepository.getContent(filter.value.toString()) + contentRepository.getRecent(filter.value.toString()) .onSuccess { response -> Timber.tag(successTag).d("response : $response") From 2643a894c2398ada02f5a665bccf4c450b7f5739 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 24 Jul 2023 22:35:21 +0900 Subject: [PATCH 078/109] =?UTF-8?q?[MOD/#33]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyneez/data/entity/response/ResponseGetPopularDto.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt index 701d469..3198a37 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt @@ -3,6 +3,7 @@ package com.release.keyneez.data.entity.response import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +@Serializable data class ResponseGetPopularDto( @SerialName("content_pk") val content: Int, @SerialName("title") val title: String, From 9ddb9b6c63d50c4a774d12028a11a2af3360c86f Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Tue, 25 Jul 2023 16:32:44 +0900 Subject: [PATCH 079/109] =?UTF-8?q?[MOD/#33]=20=EC=8A=A4=EB=82=B5=EB=B0=94?= =?UTF-8?q?=EB=A5=BC=20=ED=86=A0=EC=8A=A4=ED=8A=B8=EB=A1=9C=20=ED=86=B5?= =?UTF-8?q?=EC=9D=BC=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/search/SearchActivity.kt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index 1f1ece7..308f157 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -12,7 +12,6 @@ import com.release.keyneez.util.UiState import com.release.keyneez.util.binding.BindingActivity import com.release.keyneez.util.extension.hideKeyboard import com.release.keyneez.util.extension.setOnSingleClickListener -import com.release.keyneez.util.extension.showSnackbar import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint @@ -33,15 +32,14 @@ class SearchActivity : BindingActivity(R.layout.activity_ viewModel.stateMessage.observe(this) { when (it) { is UiState.Success -> setupSearchActivityList() - is UiState.Failure -> showSnackbar( - binding.root, - getString(R.string.msg_search_null) - ) + is UiState.Failure -> + Toast.makeText(this, R.string.msg_search_null, Toast.LENGTH_SHORT).show() - is UiState.Error -> showSnackbar( - binding.root, - getString(R.string.msg_server_error) - ) + is UiState.Error -> Toast.makeText( + this, + R.string.msg_server_error, + Toast.LENGTH_SHORT + ).show() } } } From df9cd7f0a017cda56919502c362ffe120b039206 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 27 Jul 2023 16:22:02 +0900 Subject: [PATCH 080/109] =?UTF-8?q?[MOD/#33]=20=EC=9D=B8=EA=B8=B0=EB=B7=B0?= =?UTF-8?q?=20=EC=A2=8B=EC=95=84=EC=9A=94=EB=B6=80=EB=B6=84,=20=EB=B7=B0?= =?UTF-8?q?=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=BD=94=EB=93=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 --- .../entity/response/ResponseGetPopularDto.kt | 2 +- .../main/explore/popular/PopularAdapter.kt | 32 +++++++++++++++---- .../main/explore/popular/PopularFragment.kt | 18 ++++++++--- .../main/explore/popular/PopularViewModel.kt | 25 +++++++-------- .../main/explore/recent/RecentFragment.kt | 14 ++++---- .../main/res/layout/item_popular_content.xml | 8 ++--- 6 files changed, 60 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt index 3198a37..38dfd2c 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt @@ -20,7 +20,7 @@ data class ResponseGetPopularDto( @SerialName("end_at") val end: String?, @SerialName("created_at") val created: String?, @SerialName("updated_at") val updated: String?, - val Likes: List + var Likes: List ) { @Serializable data class Liked( diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt index 8ca8cd2..80e4816 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt @@ -7,26 +7,44 @@ import androidx.recyclerview.widget.RecyclerView import com.release.keyneez.data.entity.response.ResponseGetPopularDto import com.release.keyneez.databinding.ItemPopularContentBinding import com.release.keyneez.util.DiffCallback +import com.release.keyneez.util.extension.setOnSingleClickListener -class PopularAdapter : ListAdapter(diffUtil) { +class PopularAdapter( + private val clickLike: (Int, Boolean) -> Unit +) : ListAdapter(diffUtil) { var data = listOf() - class PopularViewHolder(private val binding: ItemPopularContentBinding) : + class PopularViewHolder( + private val binding: ItemPopularContentBinding, + private val clickLike: (Int, Boolean) -> Unit + ) : RecyclerView.ViewHolder(binding.root) { fun setPopularContent(popular: ResponseGetPopularDto) { binding.data = popular + binding.btnPopularLiked.setOnSingleClickListener { + clickLike(popular.content, popular.Likes.isNotEmpty()) + if (popular.Likes.isNotEmpty()) { + popular.Likes = listOf() + // TODO : 객체 없애는 로직 + return@setOnSingleClickListener + } + popular.Likes = listOf(ResponseGetPopularDto.Liked(0, 0, 0)) + // TODO: 객체 집어 넣어주는 로직 + } // 여기도 누르면 상세뷰로 가는 코드짜기 } } override fun getItemCount(): Int = data.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + val binding = ItemPopularContentBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) return PopularViewHolder( - ItemPopularContentBinding.inflate( - LayoutInflater.from(parent.context), - parent, - false - ) + binding, + clickLike ) } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 094f19b..4aa9f14 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -23,6 +23,7 @@ class PopularFragment : initPopularAdapter() setupPopularActivityList() initCategoryBtnListener() + initFirstBtnListener() } override fun onAttach(context: Context) { @@ -32,12 +33,11 @@ class PopularFragment : override fun onResume() { super.onResume() if (!isInitialLoad) { - initCategoryBtnListener() + initFirstBtnListener() } } private fun initCategoryBtnListener() { - selectOnlyOneButton(binding.tvExplorePopularAll) binding.tvExplorePopularAll.setOnClickListener { selectOnlyOneButton(binding.tvExplorePopularAll) } @@ -52,6 +52,10 @@ class PopularFragment : } } + private fun initFirstBtnListener() { + selectOnlyOneButton(binding.tvExplorePopularAll) + } + private fun selectOnlyOneButton(selectedButton: TextView) { binding.tvExplorePopularAll.isSelected = false binding.tvExplorePopularCareer.isSelected = false @@ -60,7 +64,10 @@ class PopularFragment : selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - if (isInitialLoad == false) { + if (isInitialLoad) { + viewModel.setFilterValue("") + viewModel.getPopularData() + } else { if (filterValue != binding.tvExplorePopularAll.text.toString()) { viewModel.setFilterValue(filterValue) viewModel.getPopularData() @@ -72,7 +79,9 @@ class PopularFragment : } private fun initPopularAdapter() { - popularAdapter = PopularAdapter() + popularAdapter = PopularAdapter( + clickLike = viewModel::clickLike + ) binding.rvExplorePopular.adapter = popularAdapter val animator = binding.rvExplorePopular.itemAnimator if (animator is SimpleItemAnimator) { @@ -85,7 +94,6 @@ class PopularFragment : isInitialLoad = false list = popularList popularAdapter?.submitList(popularList) - viewModel.updateSaveState(popularList.flatMap { it.Likes }) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index 719f51d..370da20 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -17,7 +17,7 @@ import javax.inject.Inject class PopularViewModel @Inject constructor( private val contentRepository: ContentRepository ) : ViewModel() { - private val _popularList = MutableLiveData>(mutableListOf()) + private val _popularList = MutableLiveData>() val popularList: LiveData> get() = _popularList @@ -25,8 +25,8 @@ class PopularViewModel @Inject constructor( val stateMessage: LiveData get() = _stateMessage - private val _saveState = MutableLiveData() - val saveState: LiveData + private val _saveState = MutableLiveData>() + val saveState: LiveData> get() = _saveState val filter = MutableLiveData("") @@ -35,14 +35,6 @@ class PopularViewModel @Inject constructor( filter.value = value } - fun updateSaveState(list: List) { - if (list.isEmpty()) { - _saveState.value = false - } else { - _saveState.value = true - } - } - fun onSaveBtnClick(data: ResponseGetPopularDto, saveState: Boolean) { if (saveState) { postUnLike(data.content) @@ -74,6 +66,15 @@ class PopularViewModel @Inject constructor( } } + fun clickLike(index: Int, isSelected: Boolean) { + if (isSelected) { + postUnLike(index) + return + } + + postSave(index) + } + fun postSave(pk: Int) { viewModelScope.launch { contentRepository.postLike(pk).onSuccess { response -> @@ -81,7 +82,6 @@ class PopularViewModel @Inject constructor( Timber.d("POST SAVE STATE SUCCESS") Timber.d("response : $response") - _saveState.value = true _stateMessage.value = UiState.Success } .onFailure { @@ -97,7 +97,6 @@ class PopularViewModel @Inject constructor( .onSuccess { response -> Timber.tag("POST UNLIKE STATE SUCCESS") Timber.d("response : $response") - _saveState.value = false _stateMessage.value = UiState.Success } .onFailure { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index b63e90a..30ca52d 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -60,14 +60,12 @@ class RecentFragment : BindingFragment(R.layout.fragment_ selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - if (isInitialLoad == false) { - if (filterValue != binding.tvExploreRecentAll.text.toString()) { - viewModel.setFilterValue(filterValue) - viewModel.getRecentData() - } else { - viewModel.setFilterValue("") - viewModel.getRecentData() - } + if (filterValue != binding.tvExploreRecentAll.text.toString()) { + viewModel.setFilterValue(filterValue) + viewModel.getRecentData() + } else { + viewModel.setFilterValue("") + viewModel.getRecentData() } } diff --git a/app/src/main/res/layout/item_popular_content.xml b/app/src/main/res/layout/item_popular_content.xml index dbce1a3..9d59415 100644 --- a/app/src/main/res/layout/item_popular_content.xml +++ b/app/src/main/res/layout/item_popular_content.xml @@ -10,8 +10,8 @@ type="com.release.keyneez.data.entity.response.ResponseGetPopularDto" /> + name="index" + type="Integer" /> @@ -54,15 +54,13 @@ From e80adde1f28796109a858185bfa777a08e8a8501 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 27 Jul 2023 16:51:51 +0900 Subject: [PATCH 081/109] =?UTF-8?q?[MOD/#33]=20=EC=B5=9C=EC=8B=A0=EB=B7=B0?= =?UTF-8?q?=20=EC=A2=8B=EC=95=84=EC=9A=94=EB=B6=80=EB=B6=84,=20=EB=B7=B0?= =?UTF-8?q?=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=BD=94=EB=93=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 --- .../entity/response/ResponseGetRecentDto.kt | 2 +- .../main/explore/popular/PopularFragment.kt | 3 +- .../main/explore/popular/PopularViewModel.kt | 9 +--- .../main/explore/recent/RecentAdapter.kt | 45 +++++++++++++------ .../main/explore/recent/RecentFragment.kt | 26 +++++++---- .../main/explore/recent/RecentViewModel.kt | 26 ++++------- .../main/res/layout/item_recent_content.xml | 8 ++-- 7 files changed, 66 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetRecentDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetRecentDto.kt index 0edd1ff..1e76fe0 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetRecentDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetRecentDto.kt @@ -20,7 +20,7 @@ data class ResponseGetRecentDto( @SerialName("end_at") val end: String?, @SerialName("created_at") val created: String?, @SerialName("updated_at") val updated: String?, - val Likes: List + var Likes: List ) { @Serializable data class Liked( diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 4aa9f14..415fed0 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -23,6 +23,7 @@ class PopularFragment : initPopularAdapter() setupPopularActivityList() initCategoryBtnListener() + // isInitialLoad가 false이든 아니든 기본적으로 호출 initFirstBtnListener() } @@ -33,7 +34,7 @@ class PopularFragment : override fun onResume() { super.onResume() if (!isInitialLoad) { - initFirstBtnListener() + initCategoryBtnListener() } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index 370da20..7dde81a 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -35,14 +35,6 @@ class PopularViewModel @Inject constructor( filter.value = value } - fun onSaveBtnClick(data: ResponseGetPopularDto, saveState: Boolean) { - if (saveState) { - postUnLike(data.content) - } else { - postSave(data.content) - } - } - fun getPopularData() { viewModelScope.launch { contentRepository.getPopular(filter.value.toString()) @@ -68,6 +60,7 @@ class PopularViewModel @Inject constructor( fun clickLike(index: Int, isSelected: Boolean) { if (isSelected) { + postUnLike(index) postUnLike(index) return } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt index 27c4001..01973ac 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentAdapter.kt @@ -7,16 +7,20 @@ import androidx.recyclerview.widget.RecyclerView import com.release.keyneez.data.entity.response.ResponseGetRecentDto import com.release.keyneez.databinding.ItemRecentContentBinding import com.release.keyneez.util.DiffCallback +import com.release.keyneez.util.extension.setOnSingleClickListener -class RecentAdapter : ListAdapter(diffUtil) { +class RecentAdapter(private val clickLike: (Int, Boolean) -> Unit) : + ListAdapter(diffUtil) { var data = listOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return RecentViewHolder( - ItemRecentContentBinding.inflate( - LayoutInflater.from(parent.context), - parent, - false - ) + val binding = ItemRecentContentBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + return RecentAdapter.RecentViewHolder( + binding, + clickLike ) } @@ -24,18 +28,33 @@ class RecentAdapter : ListAdapter if (holder is RecentViewHolder) holder.setRecentContent(getItem(position)) } - class RecentViewHolder(private val binding: ItemRecentContentBinding) : - RecyclerView.ViewHolder(binding.root) { + class RecentViewHolder( + private val binding: ItemRecentContentBinding, + private val clickLike: (Int, Boolean) -> Unit + ) : RecyclerView.ViewHolder(binding.root) { fun setRecentContent(recent: ResponseGetRecentDto) { binding.data = recent + binding.btnRecentLiked.setOnSingleClickListener { + clickLike(recent.content, recent.Likes.isNotEmpty()) + if (recent.Likes.isNotEmpty()) { + recent.Likes = listOf() + // TODO : 객체 없애는 로직 + return@setOnSingleClickListener + } + recent.Likes = listOf(ResponseGetRecentDto.Liked(0, 0, 0)) + // TODO: 객체 집어 넣어주는 로직 + } // 여기도 누르면 상세뷰로 가는 코드짜기 } } + override fun getItemCount(): Int = data.size + companion object { - private val diffUtil = DiffCallback( - onItemsTheSame = { old, new -> old.content == new.content }, - onContentsTheSame = { old, new -> old == new } - ) + private val diffUtil = + DiffCallback( + onItemsTheSame = { old, new -> old.content == new.content }, + onContentsTheSame = { old, new -> old == new } + ) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index 30ca52d..16e6018 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -23,6 +23,7 @@ class RecentFragment : BindingFragment(R.layout.fragment_ initRecentAdapter() setupRecentActivityList() initCategoryBtnListener() + initFirstBtnListener() } override fun onAttach(context: Context) { @@ -32,12 +33,11 @@ class RecentFragment : BindingFragment(R.layout.fragment_ override fun onResume() { super.onResume() if (!isInitialLoad) { - initCategoryBtnListener() + initFirstBtnListener() } } private fun initCategoryBtnListener() { - selectOnlyOneButton(binding.tvExploreRecentAll) binding.tvExploreRecentAll.setOnClickListener { selectOnlyOneButton(binding.tvExploreRecentAll) } @@ -52,6 +52,10 @@ class RecentFragment : BindingFragment(R.layout.fragment_ } } + private fun initFirstBtnListener() { + selectOnlyOneButton(binding.tvExploreRecentAll) + } + private fun selectOnlyOneButton(selectedButton: TextView) { binding.tvExploreRecentAll.isSelected = false binding.tvExploreRecentCareer.isSelected = false @@ -60,17 +64,24 @@ class RecentFragment : BindingFragment(R.layout.fragment_ selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - if (filterValue != binding.tvExploreRecentAll.text.toString()) { - viewModel.setFilterValue(filterValue) - viewModel.getRecentData() - } else { + if (isInitialLoad) { viewModel.setFilterValue("") viewModel.getRecentData() + } else { + if (filterValue != binding.tvExploreRecentAll.text.toString()) { + viewModel.setFilterValue(filterValue) + viewModel.getRecentData() + } else { + viewModel.setFilterValue("") + viewModel.getRecentData() + } } } private fun initRecentAdapter() { - recentAdapter = RecentAdapter() + recentAdapter = RecentAdapter( + clickLike = viewModel::clickLike + ) binding.rvExploreRecent.adapter = recentAdapter val animator = binding.rvExploreRecent.itemAnimator if (animator is SimpleItemAnimator) { @@ -83,7 +94,6 @@ class RecentFragment : BindingFragment(R.layout.fragment_ isInitialLoad = false list = recentList recentAdapter?.submitList(recentList) - viewModel.updateSaveState(recentList.flatMap { it.Likes }) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt index b160e18..54904ae 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt @@ -17,7 +17,7 @@ import javax.inject.Inject class RecentViewModel @Inject constructor( private val contentRepository: ContentRepository ) : ViewModel() { - private val _recentList = MutableLiveData>(mutableListOf()) + private val _recentList = MutableLiveData>() val recentList: LiveData> get() = _recentList @@ -25,8 +25,8 @@ class RecentViewModel @Inject constructor( val stateMessage: LiveData get() = _stateMessage - private val _saveState = MutableLiveData() - val saveState: LiveData + private val _saveState = MutableLiveData>() + val saveState: LiveData> get() = _saveState val filter = MutableLiveData("") @@ -35,20 +35,14 @@ class RecentViewModel @Inject constructor( filter.value = value } - fun updateSaveState(list: List) { - if (list.isEmpty()) { - _saveState.value = false - } else { - _saveState.value = true + fun clickLike(index: Int, isSelected: Boolean) { + if (isSelected) { + postUnLike(index) + postUnLike(index) + return } - } - fun onSaveBtnClick(data: ResponseGetRecentDto, saveState: Boolean) { - if (saveState) { - postUnLike(data.content) - } else { - postSave(data.content) - } + postSave(index) } fun getRecentData() { @@ -81,7 +75,6 @@ class RecentViewModel @Inject constructor( Timber.d("POST SAVE STATE SUCCESS") Timber.d("response : $response") - _saveState.value = true _stateMessage.value = UiState.Success } .onFailure { @@ -97,7 +90,6 @@ class RecentViewModel @Inject constructor( .onSuccess { response -> Timber.tag("POST UNLIKE STATE SUCCESS") Timber.d("response : $response") - _saveState.value = false _stateMessage.value = UiState.Success } .onFailure { diff --git a/app/src/main/res/layout/item_recent_content.xml b/app/src/main/res/layout/item_recent_content.xml index 6a57782..b656e17 100644 --- a/app/src/main/res/layout/item_recent_content.xml +++ b/app/src/main/res/layout/item_recent_content.xml @@ -10,8 +10,8 @@ type="com.release.keyneez.data.entity.response.ResponseGetRecentDto" /> + name="index" + type="Integer" /> @@ -54,15 +54,13 @@ From 26cad1935c119c18ce1578bad129d32af80213b3 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 27 Jul 2023 19:13:34 +0900 Subject: [PATCH 082/109] =?UTF-8?q?[MOD/#33]=20=EA=B2=80=EC=83=89=EB=B7=B0?= =?UTF-8?q?=20=EC=A2=8B=EC=95=84=EC=9A=94=EB=B6=80=EB=B6=84,=20=EB=B7=B0?= =?UTF-8?q?=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=BD=94=EB=93=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 --- .../response/ResponseGetSearchResultDto.kt | 2 +- .../presentation/main/like/LikeViewModel.kt | 2 +- .../main/search/SearchActivity.kt | 5 ++- .../presentation/main/search/SearchAdapter.kt | 44 +++++++++++++------ .../main/search/SearchViewModel.kt | 26 ++++------- .../main/res/layout/item_search_content.xml | 8 ++-- 6 files changed, 47 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt index de5f040..b3aeecb 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt @@ -20,7 +20,7 @@ data class ResponseGetSearchResultDto( @SerialName("end_at") val end: String?, @SerialName("created_at") val created: String?, @SerialName("updated_at") val updated: String?, - val Likes: List + var Likes: List ) { @Serializable data class Liked( diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 4827380..a25e1ac 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -17,7 +17,7 @@ import javax.inject.Inject class LikeViewModel @Inject constructor( private val contentRepository: ContentRepository ) : ViewModel() { - private val _likeList = MutableLiveData>(mutableListOf()) + private val _likeList = MutableLiveData>() private val _isEdit = MutableLiveData() private val _isSelected = MutableLiveData() private val _selectedIds = MutableLiveData>() diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index 308f157..1fdb765 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -45,7 +45,9 @@ class SearchActivity : BindingActivity(R.layout.activity_ } private fun initSearchAdapter() { - searchAdapter = SearchAdapter() + searchAdapter = SearchAdapter( + clickLike = viewModel::clickLike + ) binding.rvSearchResultContent.adapter = searchAdapter } @@ -53,7 +55,6 @@ class SearchActivity : BindingActivity(R.layout.activity_ viewModel.searchList.observe(this) { searchList -> searchAdapter?.submitList(searchList) binding.tvSearchCount.text = searchList?.size.toString() - viewModel.updateSaveState(searchList.flatMap { it.Likes }) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchAdapter.kt index 652768f..3bc1942 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchAdapter.kt @@ -7,17 +7,20 @@ import androidx.recyclerview.widget.RecyclerView import com.release.keyneez.data.entity.response.ResponseGetSearchResultDto import com.release.keyneez.databinding.ItemSearchContentBinding import com.release.keyneez.util.DiffCallback +import com.release.keyneez.util.extension.setOnSingleClickListener -class SearchAdapter : +class SearchAdapter(private val clickLike: (Int, Boolean) -> Unit) : ListAdapter(diffUtil) { var data = listOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return SearchViewHolder( - ItemSearchContentBinding.inflate( - LayoutInflater.from(parent.context), - parent, - false - ) + val binding = ItemSearchContentBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + return SearchAdapter.SearchViewHolder( + binding, + clickLike ) } @@ -26,18 +29,31 @@ class SearchAdapter : if (holder is SearchViewHolder) holder.setSearch(getItem(position)) } - class SearchViewHolder(private val binding: ItemSearchContentBinding) : - RecyclerView.ViewHolder(binding.root) { + class SearchViewHolder( + private val binding: ItemSearchContentBinding, + private val clickLike: (Int, Boolean) -> Unit + ) : RecyclerView.ViewHolder(binding.root) { fun setSearch(search: ResponseGetSearchResultDto) { binding.data = search - // 여기 디테일뷰와 연결하는 코드 작성하기 + binding.btnSearchLiked.setOnSingleClickListener { + clickLike(search.content, search.Likes.isNotEmpty()) + if (search.Likes.isNotEmpty()) { + search.Likes = listOf() + // TODO : 객체 없애는 로직 + return@setOnSingleClickListener + } + search.Likes = listOf(ResponseGetSearchResultDto.Liked(0, 0, 0)) + // TODO: 객체 집어 넣어주는 로직 + } + // 여기 상세뷰와 연결하는 코드 작성하기 } } companion object { - private val diffUtil = DiffCallback( - onItemsTheSame = { old, new -> old.content == new.content }, - onContentsTheSame = { old, new -> old == new } - ) + private val diffUtil = + DiffCallback( + onItemsTheSame = { old, new -> old.content == new.content }, + onContentsTheSame = { old, new -> old == new } + ) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt index d1c6604..a9c78aa 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt @@ -17,7 +17,7 @@ import javax.inject.Inject class SearchViewModel @Inject constructor( private val contentRepository: ContentRepository ) : ViewModel() { - private val _searchList = MutableLiveData>(mutableListOf()) + private val _searchList = MutableLiveData>() val searchList: LiveData> get() = _searchList @@ -29,8 +29,8 @@ class SearchViewModel @Inject constructor( val isFlowVisible: LiveData get() = _isFlowVisible - private val _saveState = MutableLiveData() - val saveState: LiveData + private val _saveState = MutableLiveData>() + val saveState: LiveData> get() = _saveState val key = MutableLiveData("") @@ -43,20 +43,14 @@ class SearchViewModel @Inject constructor( _isFlowVisible.value = true } - fun updateSaveState(list: List) { - if (list.isEmpty()) { - _saveState.value = false - } else { - _saveState.value = true + fun clickLike(index: Int, isSelected: Boolean) { + if (isSelected) { + postUnLike(index) + postUnLike(index) + return } - } - fun onSaveBtnClick(data: ResponseGetSearchResultDto, saveState: Boolean) { - if (saveState) { - postUnLike(data.content) - } else { - postSave(data.content) - } + postSave(index) } fun getSearchPostData() { @@ -95,7 +89,6 @@ class SearchViewModel @Inject constructor( Timber.d("POST SAVE STATE SUCCESS") Timber.d("response : $response") - _saveState.value = true _stateMessage.value = UiState.Success } .onFailure { @@ -111,7 +104,6 @@ class SearchViewModel @Inject constructor( .onSuccess { response -> Timber.tag("POST UNLIKE STATE SUCCES뷰S") Timber.d("response : $response") - _saveState.value = false _stateMessage.value = UiState.Success } .onFailure { diff --git a/app/src/main/res/layout/item_search_content.xml b/app/src/main/res/layout/item_search_content.xml index c1739b2..bccf237 100644 --- a/app/src/main/res/layout/item_search_content.xml +++ b/app/src/main/res/layout/item_search_content.xml @@ -10,8 +10,8 @@ type="com.release.keyneez.data.entity.response.ResponseGetSearchResultDto" /> + name="index" + type="Integer" /> @@ -55,16 +55,14 @@ From 5ded7db6f43fab802d0b928b4cb189a004c9e339 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 27 Jul 2023 20:07:13 +0900 Subject: [PATCH 083/109] =?UTF-8?q?[MOD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=EB=B7=B0=20=EB=B7=B0=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/like/LikeFragment.kt | 19 +++++++++++++++++-- .../presentation/main/like/LikeViewModel.kt | 1 - 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index c550f78..ecaf24b 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -29,6 +29,13 @@ class LikeFragment : super.onAttach(context) } + override fun onResume() { + super.onResume() + if (!isInitialLoad) { + initCategoryBtnListener() + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.vm = likeViewModel @@ -36,6 +43,7 @@ class LikeFragment : setupLikeData() initEditBtnClickListener() initCategoryBtnListener() + initFirstBtnListener() initLikeEditBtnClickListener() } @@ -50,7 +58,6 @@ class LikeFragment : } private fun initCategoryBtnListener() { - selectOnlyOneButton(binding.tvLikeAll) binding.tvLikeAll.setOnClickListener { selectOnlyOneButton(binding.tvLikeAll) } @@ -65,6 +72,10 @@ class LikeFragment : } } + private fun initFirstBtnListener() { + selectOnlyOneButton(binding.tvLikeAll) + } + private fun selectOnlyOneButton(selectedButton: TextView) { binding.tvLikeAll.isSelected = false binding.tvLikeCareer.isSelected = false @@ -73,8 +84,12 @@ class LikeFragment : selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - if (isInitialLoad == false) { + if (isInitialLoad) { + likeViewModel.setFilterValue("") + likeViewModel.getLikeData() + } else { if (filterValue != binding.tvLikeAll.text.toString()) { + Log.d("1", "또 말썽") likeViewModel.setFilterValue(filterValue) likeViewModel.getLikeData() } else { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index a25e1ac..afe3135 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -42,7 +42,6 @@ class LikeViewModel @Inject constructor( val filter = MutableLiveData("") init { - getLikeData() getSelectedIdsCount() _isEdit.value = false _isSelected.value = false From 92f9f284d2a1fd9098c0f315240d7fcc6c84b9f5 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 28 Jul 2023 09:35:30 +0900 Subject: [PATCH 084/109] =?UTF-8?q?[MOD/#33]=20=EB=82=A0=EC=A7=9C=20?= =?UTF-8?q?=EB=B0=9B=EC=95=84=EC=98=A4=EB=8A=94=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/release/keyneez/util/binding/BindingAdapter.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt b/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt index 3d1c495..9818c7c 100644 --- a/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt +++ b/app/src/main/java/com/release/keyneez/util/binding/BindingAdapter.kt @@ -46,11 +46,17 @@ object BindingAdapter { fun TextView.setDuration(start: String?, end: String?) { if (start?.substring(0, 4) == "9999" && end?.substring(0, 4) == "9999") { this.text = "상시" + } else if (start?.substring(0, 4) == "9999") { + val tempEnd = "${end?.substring(0, 4)}.${end?.substring(4, 6)}.${end?.substring(6, 8)}" + this.text = "- $tempEnd" + } else if (end?.substring(0, 4) == "9999") { + val tempStart = + "${start?.substring(0, 4)}.${start?.substring(4, 6)}.${start?.substring(6, 8)}" + this.text = "$tempStart -" } else { val tempStart = "${start?.substring(0, 4)}.${start?.substring(4, 6)}.${start?.substring(6, 8)}" val tempEnd = "${end?.substring(4, 6)}.${end?.substring(6, 8)}" - this.text = "$tempStart - $tempEnd" } } From ae7168bc876048d54cf0bbdd6ffcf3bb71499b82 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sat, 29 Jul 2023 20:47:40 +0900 Subject: [PATCH 085/109] =?UTF-8?q?[MOD/#33]=20=EC=A3=BC=EC=84=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/explore/popular/PopularAdapter.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt index 80e4816..efb9e13 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularAdapter.kt @@ -25,13 +25,11 @@ class PopularAdapter( clickLike(popular.content, popular.Likes.isNotEmpty()) if (popular.Likes.isNotEmpty()) { popular.Likes = listOf() - // TODO : 객체 없애는 로직 return@setOnSingleClickListener } popular.Likes = listOf(ResponseGetPopularDto.Liked(0, 0, 0)) - // TODO: 객체 집어 넣어주는 로직 } - // 여기도 누르면 상세뷰로 가는 코드짜기 + // 상세뷰로 가는 코드짜기 } } From 97474bf48816a91e19ee8d8bb508ea8b8aec7164 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 3 Aug 2023 11:48:20 +0900 Subject: [PATCH 086/109] =?UTF-8?q?[MOD/#33]=20service=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 --- .../release/keyneez/data/service/ContentService.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt index 560e94a..518ffc1 100644 --- a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt +++ b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt @@ -12,23 +12,23 @@ import retrofit2.http.Path import retrofit2.http.Query interface ContentService { - @GET("contents/liked") + @GET("api/contents/liked") suspend fun getLike(@Query("filter") filter: String): BaseResponse> - @GET("contents/") + @GET("api/contents/") suspend fun getRecent(@Query("filter") filter: String): BaseResponse> - @GET("contents/popularity") + @GET("api/contents/popularity") suspend fun getPopular(@Query("filter") filter: String): BaseResponse> - @GET("contents/search") + @GET("api/contents/search") suspend fun getSearch( @Query("keyword") keyword: String ): BaseResponse> - @POST("contents/{pk}/like") + @POST("api/contents/{pk}/like") suspend fun postLike(@Path("pk") pk: Int): BaseResponse - @POST("contents/{pk}/unlike") + @POST("api/contents/{pk}/unlike") suspend fun postUnlike(@Path("pk") pk: Int): BaseResponse } From 0e37893a7f65755d448ecccd16f66f503df29604 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Thu, 3 Aug 2023 22:34:55 +0900 Subject: [PATCH 087/109] =?UTF-8?q?[MOD/#33]=20api=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/data/service/ContentService.kt | 12 ++++++------ .../main/explore/popular/PopularFragment.kt | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt index 518ffc1..3ca6c39 100644 --- a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt +++ b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt @@ -12,23 +12,23 @@ import retrofit2.http.Path import retrofit2.http.Query interface ContentService { - @GET("api/contents/liked") + @GET("api/v1/contents/liked") suspend fun getLike(@Query("filter") filter: String): BaseResponse> - @GET("api/contents/") + @GET("api/v1/contents/") suspend fun getRecent(@Query("filter") filter: String): BaseResponse> - @GET("api/contents/popularity") + @GET("api/v1/contents/popularity") suspend fun getPopular(@Query("filter") filter: String): BaseResponse> - @GET("api/contents/search") + @GET("api/v1/contents/search") suspend fun getSearch( @Query("keyword") keyword: String ): BaseResponse> - @POST("api/contents/{pk}/like") + @POST("api/v1/contents/{pk}/like") suspend fun postLike(@Path("pk") pk: Int): BaseResponse - @POST("api/contents/{pk}/unlike") + @POST("api/v1/contents/{pk}/unlike") suspend fun postUnlike(@Path("pk") pk: Int): BaseResponse } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 415fed0..3e9e2d5 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -2,6 +2,7 @@ package com.release.keyneez.presentation.main.explore.popular import android.content.Context import android.os.Bundle +import android.util.Log import android.view.View import android.widget.TextView import androidx.fragment.app.viewModels @@ -55,6 +56,7 @@ class PopularFragment : private fun initFirstBtnListener() { selectOnlyOneButton(binding.tvExplorePopularAll) + Log.d("1", "hello") } private fun selectOnlyOneButton(selectedButton: TextView) { From d1abae08b3398ad2120afb1bd4a3dc082ec543ff Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 4 Aug 2023 01:37:19 +0900 Subject: [PATCH 088/109] =?UTF-8?q?[MOD/#33]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 10 ------ app/src/main/AndroidManifest.xml | 33 ++++++++++++++++--- .../util/extension/SharedPreferenceManager.kt | 2 +- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8f1c2d2..fef962b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,6 @@ plugins { id 'org.jetbrains.kotlin.plugin.serialization' version '1.7.10' id "org.jlleitschuh.gradle.ktlint" version "10.3.0" } -apply plugin: 'kotlin-kapt' -apply plugin: 'kotlin-parcelize' android { namespace 'com.release.keyneez' @@ -64,15 +62,10 @@ dependencies { // ktx implementation 'androidx.core:core-ktx:1.10.1' implementation "androidx.fragment:fragment-ktx:1.5.7" - implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.0-alpha03" - implementation "androidx.activity:activity-ktx:1.6.1" // recyclerview implementation "androidx.recyclerview:recyclerview:1.3.0" - // kotlin serialization - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" - // coroutine implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4" @@ -114,9 +107,6 @@ dependencies { // app compat implementation 'androidx.appcompat:appcompat:1.6.1' - // dot indicator - implementation "com.tbuonomo:dotsindicator:4.3" - // material implementation 'com.google.android.material:material:1.9.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index babcfe8..00b757a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,11 +3,12 @@ xmlns:tools="http://schemas.android.com/tools"> + + android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity" + android:exported="true"> + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/release/keyneez/util/extension/SharedPreferenceManager.kt b/app/src/main/java/com/release/keyneez/util/extension/SharedPreferenceManager.kt index 3698165..eb71217 100644 --- a/app/src/main/java/com/release/keyneez/util/extension/SharedPreferenceManager.kt +++ b/app/src/main/java/com/release/keyneez/util/extension/SharedPreferenceManager.kt @@ -43,4 +43,4 @@ fun getUserJwt(context: Context): String { val spf = context.getSharedPreferences("jwt", AppCompatActivity.MODE_PRIVATE) return spf.getString("jwt", "")!! -} +} \ No newline at end of file From b800d921b94f2816c5ba2b5c1a93455b4660d3f8 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 4 Aug 2023 11:48:22 +0900 Subject: [PATCH 089/109] =?UTF-8?q?[MOD/#33]=20manifest=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 --- app/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 00b757a..cb702fd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,7 +29,7 @@ + android:scheme="kakao0501023316109643f5aaf664f5af0eef" /> Date: Fri, 4 Aug 2023 22:42:07 +0900 Subject: [PATCH 090/109] =?UTF-8?q?[MOD/#33]=20=EB=8C=80=EA=B1=B0=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 33 +++---------------- .../entity/response/ResponseGetPopularDto.kt | 6 ++-- .../entity/response/ResponseGetRecentDto.kt | 6 ++-- .../response/ResponseGetSearchResultDto.kt | 6 ++-- .../data/repository/ContentRepository.kt | 3 ++ .../data/repository/ContentRepositoryImpl.kt | 9 +++++ .../keyneez/data/service/ContentService.kt | 9 +++++ .../keyneez/data/source/ContentDataSource.kt | 9 +++++ .../com/release/keyneez/di/RetrofitModule.kt | 22 ++++++++----- .../main/explore/popular/PopularFragment.kt | 27 ++++----------- .../main/explore/popular/PopularViewModel.kt | 22 +++++++++++++ .../main/explore/recent/RecentFragment.kt | 22 +++---------- .../main/explore/recent/RecentViewModel.kt | 24 +++++++++++++- .../presentation/main/like/LikeFragment.kt | 24 ++++---------- .../presentation/main/like/LikeViewModel.kt | 23 +++++++++++++ .../util/extension/SharedPreferenceManager.kt | 2 +- 16 files changed, 143 insertions(+), 104 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cb702fd..babcfe8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,12 +3,11 @@ xmlns:tools="http://schemas.android.com/tools"> - - - - - - - - - - - + android:name=".presentation.main.MainActivity" + android:exported="true" + android:screenOrientation="portrait"> - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt index 38dfd2c..1939bb8 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetPopularDto.kt @@ -13,9 +13,9 @@ data class ResponseGetPopularDto( @SerialName("img") val img: String?, @SerialName("place") val place: String, @SerialName("introduction") val introduction: String, - @SerialName("inquiry") val inquiry: String?, - @SerialName("price") val price: String?, - @SerialName("benefit") val benefit: String?, + @SerialName("inquiry") val inquiry: List?, + @SerialName("price") val price: List?, + @SerialName("benefit") val benefit: List?, @SerialName("start_at") val start: String?, @SerialName("end_at") val end: String?, @SerialName("created_at") val created: String?, diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetRecentDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetRecentDto.kt index 1e76fe0..fe29e97 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetRecentDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetRecentDto.kt @@ -13,11 +13,11 @@ data class ResponseGetRecentDto( @SerialName("img") val img: String?, @SerialName("place") val place: String, @SerialName("introduction") val introduction: String, - @SerialName("inquiry") val inquiry: String?, - @SerialName("price") val price: String?, - @SerialName("benefit") val benefit: String?, @SerialName("start_at") val start: String?, @SerialName("end_at") val end: String?, + @SerialName("inquiry") val inquiry: List?, + @SerialName("price") val price: List?, + @SerialName("benefit") val benefit: List?, @SerialName("created_at") val created: String?, @SerialName("updated_at") val updated: String?, var Likes: List diff --git a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt index b3aeecb..a3bb059 100644 --- a/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt +++ b/app/src/main/java/com/release/keyneez/data/entity/response/ResponseGetSearchResultDto.kt @@ -13,9 +13,9 @@ data class ResponseGetSearchResultDto( @SerialName("img") val img: String?, @SerialName("place") val place: String, @SerialName("introduction") val introduction: String, - @SerialName("inquiry") val inquiry: String?, - @SerialName("price") val price: String?, - @SerialName("benefit") val benefit: String?, + @SerialName("inquiry") val inquiry: List?, + @SerialName("price") val price: List?, + @SerialName("benefit") val benefit: List?, @SerialName("start_at") val start: String?, @SerialName("end_at") val end: String?, @SerialName("created_at") val created: String?, diff --git a/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt b/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt index fea2694..4ee9447 100644 --- a/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt +++ b/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt @@ -10,8 +10,11 @@ import com.release.keyneez.data.entity.response.wrapper.BaseResponse interface ContentRepository { suspend fun getRecent(filter: String): Result>> + suspend fun getAllRecent(): Result>> suspend fun getPopular(filter: String): Result>> + suspend fun getAllPopular(): Result>> suspend fun getLike(filter: String): Result>> + suspend fun getAllLike(): Result>> suspend fun getSearch(keyword: String): Result>> suspend fun postLike(pk: Int): Result> suspend fun postUnlike(pk: Int): Result> diff --git a/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt b/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt index 71a70fd..87bbf86 100644 --- a/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt +++ b/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt @@ -16,12 +16,21 @@ class ContentRepositoryImpl @Inject constructor( override suspend fun getRecent(filter: String): Result>> = kotlin.runCatching { contentDataSource.getRecent(filter) } + override suspend fun getAllRecent(): Result>> = + kotlin.runCatching { contentDataSource.getAllRecent() } + override suspend fun getPopular(filter: String): Result>> = kotlin.runCatching { contentDataSource.getPopular(filter) } + override suspend fun getAllPopular(): Result>> = + kotlin.runCatching { contentDataSource.getAllPopular() } + override suspend fun getLike(filter: String): Result>> = kotlin.runCatching { contentDataSource.getLike(filter) } + override suspend fun getAllLike(): Result>> = + kotlin.runCatching { contentDataSource.getAllLike() } + override suspend fun getSearch(keyword: String): Result>> = kotlin.runCatching { contentDataSource.getSearch(keyword) } diff --git a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt index 3ca6c39..49cda60 100644 --- a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt +++ b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt @@ -15,12 +15,21 @@ interface ContentService { @GET("api/v1/contents/liked") suspend fun getLike(@Query("filter") filter: String): BaseResponse> + @GET("api/v1/contents/liked") + suspend fun getAllLike(): BaseResponse> + @GET("api/v1/contents/") suspend fun getRecent(@Query("filter") filter: String): BaseResponse> + @GET("api/v1/contents/") + suspend fun getAllRecent(): BaseResponse> + @GET("api/v1/contents/popularity") suspend fun getPopular(@Query("filter") filter: String): BaseResponse> + @GET("api/v1/contents/popularity") + suspend fun getAllPopular(): BaseResponse> + @GET("api/v1/contents/search") suspend fun getSearch( @Query("keyword") keyword: String diff --git a/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt b/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt index 68d5a37..40cedb5 100644 --- a/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt +++ b/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt @@ -15,12 +15,21 @@ class ContentDataSource @Inject constructor( suspend fun getRecent(filter: String): BaseResponse> = contentService.getRecent(filter) + suspend fun getAllRecent(): BaseResponse> = + contentService.getAllRecent() + suspend fun getPopular(filter: String): BaseResponse> = contentService.getPopular(filter) + suspend fun getAllPopular(): BaseResponse> = + contentService.getAllPopular() + suspend fun getLike(filter: String): BaseResponse> = contentService.getLike(filter) + suspend fun getAllLike(): BaseResponse> = + contentService.getAllLike() + suspend fun getSearch(keyword: String): BaseResponse> = contentService.getSearch(keyword) diff --git a/app/src/main/java/com/release/keyneez/di/RetrofitModule.kt b/app/src/main/java/com/release/keyneez/di/RetrofitModule.kt index 7bd2327..1155461 100644 --- a/app/src/main/java/com/release/keyneez/di/RetrofitModule.kt +++ b/app/src/main/java/com/release/keyneez/di/RetrofitModule.kt @@ -2,7 +2,6 @@ package com.release.keyneez.di import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import com.release.keyneez.BuildConfig.BASE_URL -import com.release.keyneez.data.source.LocalPrefDataSource import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -22,18 +21,23 @@ object RetrofitModule { private const val APPLICATION_JSON = "application/json" private const val AUTHORIZATION = "Authorization" + // Json 빌더 설정에 'coerceInputValues = true'를 추가하여 null 값을 기본 값으로 변환 + val jsonBuilder = Json { + coerceInputValues = true + } + @Provides @Singleton - fun providesKeyneezInterceptor( - localPrefDataSource: LocalPrefDataSource - ): Interceptor = Interceptor { chain -> + fun providesKeyneezInterceptor(): Interceptor = Interceptor { chain -> with(chain) { - proceed( - request().newBuilder().addHeader(CONTENT_TYPE, APPLICATION_JSON).addHeader( + val requestBuilder = request().newBuilder() + .addHeader(CONTENT_TYPE, APPLICATION_JSON) + .addHeader( AUTHORIZATION, - requireNotNull(localPrefDataSource.getAccessToken()) - ).build() - ) + "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJLZWVuemUiLCJzdWIiOiIyIiwiaWF0IjoxNjkxMTQ3MjA3LCJleHAiOjE2OTExNTQ0MDd9.80aY7H3MdIMl8ir7selmL5esLJi1ISaLz7KRLWvRDv8" + ) // 엑세스 토큰 값을 직접 설정합니다. + .build() + proceed(requestBuilder) } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index 3e9e2d5..a05edce 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -2,7 +2,6 @@ package com.release.keyneez.presentation.main.explore.popular import android.content.Context import android.os.Bundle -import android.util.Log import android.view.View import android.widget.TextView import androidx.fragment.app.viewModels @@ -19,13 +18,12 @@ class PopularFragment : lateinit var list: List private var popularAdapter: PopularAdapter? = null private var isInitialLoad = true + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initPopularAdapter() setupPopularActivityList() initCategoryBtnListener() - // isInitialLoad가 false이든 아니든 기본적으로 호출 - initFirstBtnListener() } override fun onAttach(context: Context) { @@ -34,12 +32,11 @@ class PopularFragment : override fun onResume() { super.onResume() - if (!isInitialLoad) { - initCategoryBtnListener() - } + initCategoryBtnListener() } private fun initCategoryBtnListener() { + selectOnlyOneButton(binding.tvExplorePopularAll) binding.tvExplorePopularAll.setOnClickListener { selectOnlyOneButton(binding.tvExplorePopularAll) } @@ -53,12 +50,6 @@ class PopularFragment : selectOnlyOneButton(binding.tvExplorePopularOutside) } } - - private fun initFirstBtnListener() { - selectOnlyOneButton(binding.tvExplorePopularAll) - Log.d("1", "hello") - } - private fun selectOnlyOneButton(selectedButton: TextView) { binding.tvExplorePopularAll.isSelected = false binding.tvExplorePopularCareer.isSelected = false @@ -67,17 +58,11 @@ class PopularFragment : selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - if (isInitialLoad) { - viewModel.setFilterValue("") + if (filterValue != binding.tvExplorePopularAll.text.toString()) { + viewModel.setFilterValue(filterValue) viewModel.getPopularData() } else { - if (filterValue != binding.tvExplorePopularAll.text.toString()) { - viewModel.setFilterValue(filterValue) - viewModel.getPopularData() - } else { - viewModel.setFilterValue("") - viewModel.getPopularData() - } + viewModel.getAllPopularData() } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index 7dde81a..15adda0 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -35,6 +35,7 @@ class PopularViewModel @Inject constructor( filter.value = value } + fun getPopularData() { viewModelScope.launch { contentRepository.getPopular(filter.value.toString()) @@ -57,7 +58,28 @@ class PopularViewModel @Inject constructor( } } } + fun getAllPopularData() { + viewModelScope.launch { + contentRepository.getAllPopular() + .onSuccess { response -> + Timber.tag(successTag).d("response : $response") + if (response.data == null) { + Timber.d("GET POPULAR CONTENT IS NULL") + _stateMessage.value = UiState.Failure(POPULAR_DATA_NULL_CODE) + } + _popularList.value = response.data!! + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.tag(failTag).e("throwable : $it") + if (it is HttpException) { + Timber.tag(failTag).e("code : ${it.code()}") + Timber.tag(failTag).e("message : ${it.message()}") + } + } + } + } fun clickLike(index: Int, isSelected: Boolean) { if (isSelected) { postUnLike(index) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index 16e6018..9dad473 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -23,7 +23,6 @@ class RecentFragment : BindingFragment(R.layout.fragment_ initRecentAdapter() setupRecentActivityList() initCategoryBtnListener() - initFirstBtnListener() } override fun onAttach(context: Context) { @@ -32,12 +31,11 @@ class RecentFragment : BindingFragment(R.layout.fragment_ override fun onResume() { super.onResume() - if (!isInitialLoad) { - initFirstBtnListener() - } + initCategoryBtnListener() } private fun initCategoryBtnListener() { + selectOnlyOneButton(binding.tvExploreRecentAll) binding.tvExploreRecentAll.setOnClickListener { selectOnlyOneButton(binding.tvExploreRecentAll) } @@ -52,10 +50,6 @@ class RecentFragment : BindingFragment(R.layout.fragment_ } } - private fun initFirstBtnListener() { - selectOnlyOneButton(binding.tvExploreRecentAll) - } - private fun selectOnlyOneButton(selectedButton: TextView) { binding.tvExploreRecentAll.isSelected = false binding.tvExploreRecentCareer.isSelected = false @@ -64,17 +58,11 @@ class RecentFragment : BindingFragment(R.layout.fragment_ selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - if (isInitialLoad) { - viewModel.setFilterValue("") + if (filterValue != binding.tvExploreRecentAll.text.toString()) { + viewModel.setFilterValue(filterValue) viewModel.getRecentData() } else { - if (filterValue != binding.tvExploreRecentAll.text.toString()) { - viewModel.setFilterValue(filterValue) - viewModel.getRecentData() - } else { - viewModel.setFilterValue("") - viewModel.getRecentData() - } + viewModel.getAllRecentData() } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt index 54904ae..272c4a3 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt @@ -31,7 +31,7 @@ class RecentViewModel @Inject constructor( val filter = MutableLiveData("") - fun setFilterValue(value: String) { + fun setFilterValue(value: String?) { filter.value = value } @@ -67,6 +67,28 @@ class RecentViewModel @Inject constructor( } } } + fun getAllRecentData() { + viewModelScope.launch { + contentRepository.getAllRecent() + .onSuccess { response -> + Timber.tag(successTag).d("response : $response") + + if (response.data == null) { + Timber.d("GET RECENT CONTENT IS NULL") + _stateMessage.value = UiState.Failure(RECENT_DATA_NULL_CODE) + } + _recentList.value = response.data!! + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.tag(failTag).e("throwable : $it") + if (it is HttpException) { + Timber.tag(failTag).e("code : ${it.code()}") + Timber.tag(failTag).e("message : ${it.message()}") + } + } + } + } fun postSave(pk: Int) { viewModelScope.launch { diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index ecaf24b..12679a2 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -31,9 +31,7 @@ class LikeFragment : override fun onResume() { super.onResume() - if (!isInitialLoad) { - initCategoryBtnListener() - } + initCategoryBtnListener() } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -43,7 +41,6 @@ class LikeFragment : setupLikeData() initEditBtnClickListener() initCategoryBtnListener() - initFirstBtnListener() initLikeEditBtnClickListener() } @@ -58,6 +55,7 @@ class LikeFragment : } private fun initCategoryBtnListener() { + selectOnlyOneButton(binding.tvLikeAll) binding.tvLikeAll.setOnClickListener { selectOnlyOneButton(binding.tvLikeAll) } @@ -72,10 +70,6 @@ class LikeFragment : } } - private fun initFirstBtnListener() { - selectOnlyOneButton(binding.tvLikeAll) - } - private fun selectOnlyOneButton(selectedButton: TextView) { binding.tvLikeAll.isSelected = false binding.tvLikeCareer.isSelected = false @@ -84,18 +78,12 @@ class LikeFragment : selectedButton.isSelected = true val filterValue = selectedButton.text.toString() - if (isInitialLoad) { - likeViewModel.setFilterValue("") + + if (filterValue != binding.tvLikeAll.text.toString()) { + likeViewModel.setFilterValue(filterValue) likeViewModel.getLikeData() } else { - if (filterValue != binding.tvLikeAll.text.toString()) { - Log.d("1", "또 말썽") - likeViewModel.setFilterValue(filterValue) - likeViewModel.getLikeData() - } else { - likeViewModel.setFilterValue("") - likeViewModel.getLikeData() - } + likeViewModel.getAllLikeData() } } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index afe3135..2822357 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -145,6 +145,29 @@ class LikeViewModel @Inject constructor( } } + fun getAllLikeData() { + viewModelScope.launch { + contentRepository.getAllLike() + .onSuccess { response -> + Timber.tag(successTag).d("response : $response") + + if (response.data == null) { + Timber.d("GET LIKE CONTENT IS NULL") + _stateMessage.value = UiState.Failure(LIKE_DATA_NULL_CODE) + } + _likeList.value = response.data!! + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.tag(failTag).e("throwable : $it") + if (it is HttpException) { + Timber.tag(failTag).e("code : ${it.code()}") + Timber.tag(failTag).e("message : ${it.message()}") + } + } + } + } + companion object { const val LIKE_DATA_NULL_CODE = 100 private const val successTag = "GET_LIKE_CONTENT_SUCCESS" diff --git a/app/src/main/java/com/release/keyneez/util/extension/SharedPreferenceManager.kt b/app/src/main/java/com/release/keyneez/util/extension/SharedPreferenceManager.kt index eb71217..3698165 100644 --- a/app/src/main/java/com/release/keyneez/util/extension/SharedPreferenceManager.kt +++ b/app/src/main/java/com/release/keyneez/util/extension/SharedPreferenceManager.kt @@ -43,4 +43,4 @@ fun getUserJwt(context: Context): String { val spf = context.getSharedPreferences("jwt", AppCompatActivity.MODE_PRIVATE) return spf.getString("jwt", "")!! -} \ No newline at end of file +} From e92ec9625a1c3972f1db77526d70b2e6a35d3f8c Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 4 Aug 2023 23:04:56 +0900 Subject: [PATCH 091/109] =?UTF-8?q?[MOD/#33]=20=EC=84=9C=EB=B2=84=ED=86=B5?= =?UTF-8?q?=EC=8B=A0=20=EC=B4=88=EA=B8=B0=EC=97=90=20=ED=95=9C=20=EB=B2=88?= =?UTF-8?q?=EB=A7=8C=20=ED=95=98=EA=B2=8C=EB=81=94=20=EC=9E=AC=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/explore/popular/PopularFragment.kt | 7 ++++++- .../presentation/main/explore/recent/RecentFragment.kt | 7 +++++-- .../release/keyneez/presentation/main/like/LikeFragment.kt | 7 +++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt index a05edce..7fdc158 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularFragment.kt @@ -24,6 +24,7 @@ class PopularFragment : initPopularAdapter() setupPopularActivityList() initCategoryBtnListener() + selectOnlyOneButton(binding.tvExplorePopularAll) } override fun onAttach(context: Context) { @@ -33,10 +34,13 @@ class PopularFragment : override fun onResume() { super.onResume() initCategoryBtnListener() + if (!isInitialLoad) { + selectOnlyOneButton(binding.tvExplorePopularAll) + } + isInitialLoad = false } private fun initCategoryBtnListener() { - selectOnlyOneButton(binding.tvExplorePopularAll) binding.tvExplorePopularAll.setOnClickListener { selectOnlyOneButton(binding.tvExplorePopularAll) } @@ -50,6 +54,7 @@ class PopularFragment : selectOnlyOneButton(binding.tvExplorePopularOutside) } } + private fun selectOnlyOneButton(selectedButton: TextView) { binding.tvExplorePopularAll.isSelected = false binding.tvExplorePopularCareer.isSelected = false diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt index 9dad473..3d27085 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentFragment.kt @@ -23,6 +23,7 @@ class RecentFragment : BindingFragment(R.layout.fragment_ initRecentAdapter() setupRecentActivityList() initCategoryBtnListener() + selectOnlyOneButton(binding.tvExploreRecentAll) } override fun onAttach(context: Context) { @@ -31,11 +32,13 @@ class RecentFragment : BindingFragment(R.layout.fragment_ override fun onResume() { super.onResume() - initCategoryBtnListener() + if (!isInitialLoad) { + selectOnlyOneButton(binding.tvExploreRecentAll) + } + isInitialLoad = false } private fun initCategoryBtnListener() { - selectOnlyOneButton(binding.tvExploreRecentAll) binding.tvExploreRecentAll.setOnClickListener { selectOnlyOneButton(binding.tvExploreRecentAll) } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 12679a2..1e20cf0 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -31,7 +31,10 @@ class LikeFragment : override fun onResume() { super.onResume() - initCategoryBtnListener() + if (!isInitialLoad) { + selectOnlyOneButton(binding.tvLikeAll) + } + isInitialLoad = false } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -42,6 +45,7 @@ class LikeFragment : initEditBtnClickListener() initCategoryBtnListener() initLikeEditBtnClickListener() + selectOnlyOneButton(binding.tvLikeAll) } private fun initLikeEditBtnClickListener() { @@ -55,7 +59,6 @@ class LikeFragment : } private fun initCategoryBtnListener() { - selectOnlyOneButton(binding.tvLikeAll) binding.tvLikeAll.setOnClickListener { selectOnlyOneButton(binding.tvLikeAll) } From acabfc53acaf0fe410766be3bf9fc8076c8bf976 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Fri, 4 Aug 2023 23:09:35 +0900 Subject: [PATCH 092/109] =?UTF-8?q?[DEL/#33]=EC=BD=94=EB=93=9C=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/release/keyneez/di/RetrofitModule.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/di/RetrofitModule.kt b/app/src/main/java/com/release/keyneez/di/RetrofitModule.kt index 1155461..4a9ffc2 100644 --- a/app/src/main/java/com/release/keyneez/di/RetrofitModule.kt +++ b/app/src/main/java/com/release/keyneez/di/RetrofitModule.kt @@ -21,11 +21,6 @@ object RetrofitModule { private const val APPLICATION_JSON = "application/json" private const val AUTHORIZATION = "Authorization" - // Json 빌더 설정에 'coerceInputValues = true'를 추가하여 null 값을 기본 값으로 변환 - val jsonBuilder = Json { - coerceInputValues = true - } - @Provides @Singleton fun providesKeyneezInterceptor(): Interceptor = Interceptor { chain -> From 907b299e608154e037517fa986bb80a57b98eefa Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sun, 6 Aug 2023 18:56:47 +0900 Subject: [PATCH 093/109] =?UTF-8?q?[MOD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=20=EC=B7=A8=EC=86=8C=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/data/repository/ContentRepository.kt | 2 +- .../presentation/main/explore/popular/PopularViewModel.kt | 6 +++--- .../presentation/main/explore/recent/RecentViewModel.kt | 4 ++-- .../keyneez/presentation/main/search/SearchViewModel.kt | 3 +-- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt b/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt index 4ee9447..063b4c7 100644 --- a/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt +++ b/app/src/main/java/com/release/keyneez/data/repository/ContentRepository.kt @@ -17,5 +17,5 @@ interface ContentRepository { suspend fun getAllLike(): Result>> suspend fun getSearch(keyword: String): Result>> suspend fun postLike(pk: Int): Result> - suspend fun postUnlike(pk: Int): Result> + suspend fun postUnlike(pk: List): Result> } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt index 15adda0..e2a28ca 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/popular/PopularViewModel.kt @@ -35,7 +35,6 @@ class PopularViewModel @Inject constructor( filter.value = value } - fun getPopularData() { viewModelScope.launch { contentRepository.getPopular(filter.value.toString()) @@ -58,6 +57,7 @@ class PopularViewModel @Inject constructor( } } } + fun getAllPopularData() { viewModelScope.launch { contentRepository.getAllPopular() @@ -80,9 +80,9 @@ class PopularViewModel @Inject constructor( } } } + fun clickLike(index: Int, isSelected: Boolean) { if (isSelected) { - postUnLike(index) postUnLike(index) return } @@ -108,7 +108,7 @@ class PopularViewModel @Inject constructor( fun postUnLike(pk: Int) { viewModelScope.launch { - contentRepository.postUnlike(pk) + contentRepository.postUnlike(listOf(pk)) .onSuccess { response -> Timber.tag("POST UNLIKE STATE SUCCESS") Timber.d("response : $response") diff --git a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt index 272c4a3..0b27fbd 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/explore/recent/RecentViewModel.kt @@ -37,7 +37,6 @@ class RecentViewModel @Inject constructor( fun clickLike(index: Int, isSelected: Boolean) { if (isSelected) { - postUnLike(index) postUnLike(index) return } @@ -67,6 +66,7 @@ class RecentViewModel @Inject constructor( } } } + fun getAllRecentData() { viewModelScope.launch { contentRepository.getAllRecent() @@ -108,7 +108,7 @@ class RecentViewModel @Inject constructor( fun postUnLike(pk: Int) { viewModelScope.launch { - contentRepository.postUnlike(pk) + contentRepository.postUnlike(listOf(pk)) .onSuccess { response -> Timber.tag("POST UNLIKE STATE SUCCESS") Timber.d("response : $response") diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt index a9c78aa..39cce5b 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchViewModel.kt @@ -45,7 +45,6 @@ class SearchViewModel @Inject constructor( fun clickLike(index: Int, isSelected: Boolean) { if (isSelected) { - postUnLike(index) postUnLike(index) return } @@ -100,7 +99,7 @@ class SearchViewModel @Inject constructor( fun postUnLike(pk: Int) { viewModelScope.launch { - contentRepository.postUnlike(pk) + contentRepository.postUnlike(listOf(pk)) .onSuccess { response -> Timber.tag("POST UNLIKE STATE SUCCES뷰S") Timber.d("response : $response") From 18e14dafff5f062ba13e744600c7f4d27deec004 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sun, 6 Aug 2023 21:36:18 +0900 Subject: [PATCH 094/109] =?UTF-8?q?[MOD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=EB=B7=B0=20=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=B7=A8=EC=86=8C=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/like/LikeViewModel.kt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 2822357..5bf5090 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -108,16 +108,16 @@ class LikeViewModel @Inject constructor( _likeList.value = updatedList.toList() // 서버 통신을 위해 선택된 아이템의 ID를 서버로 전송하여 좋아요 해제 viewModelScope.launch { - for (selectedId in selectedIdsList) { - try { - contentRepository.postUnlike(selectedId) - // 성공적으로 좋아요를 해제한 경우 - Timber.d("Unlike item with ID: $selectedId success") - } catch (e: Exception) { - // 좋아요 해제 실패 또는 예외 발생한 경우 - Timber.e(e, "Failed to unlike item with ID: $selectedId") + contentRepository.postUnlike(selectedIdsList) + .onSuccess { response -> + Timber.tag("POST UNLIKE STATE SUCCESS") + Timber.d("response : $response") + _stateMessage.value = UiState.Success + } + .onFailure { + Timber.d("throwable : $it") + _stateMessage.value = UiState.Error } - } } } } From 29860563c0646825d4ee27998b88dffb091bafe4 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Sun, 6 Aug 2023 21:48:20 +0900 Subject: [PATCH 095/109] =?UTF-8?q?[MOD/#33]=20=EA=B2=80=EC=83=89=EB=B7=B0?= =?UTF-8?q?=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20size=20null=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=EC=B2=98=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/presentation/main/search/SearchActivity.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt index 1fdb765..8fcebc4 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchActivity.kt @@ -54,7 +54,8 @@ class SearchActivity : BindingActivity(R.layout.activity_ private fun setupSearchActivityList() { viewModel.searchList.observe(this) { searchList -> searchAdapter?.submitList(searchList) - binding.tvSearchCount.text = searchList?.size.toString() + val itemCount = searchList?.size ?: 0 + binding.tvSearchCount.text = itemCount.toString() } } From 0e833fa27abb7fc0ee13424fccb397eb9966a408 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 7 Aug 2023 11:14:22 +0900 Subject: [PATCH 096/109] =?UTF-8?q?[MOD/#33]=20=EC=84=9C=EB=B2=84=ED=86=B5?= =?UTF-8?q?=EC=8B=A0=ED=95=98=EB=8A=94=20=EB=B6=80=EB=B6=84=20List?= =?UTF-8?q?=EB=A1=9C=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/data/repository/ContentRepositoryImpl.kt | 2 +- .../java/com/release/keyneez/data/service/ContentService.kt | 2 +- .../java/com/release/keyneez/data/source/ContentDataSource.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt b/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt index 87bbf86..501c8e7 100644 --- a/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt +++ b/app/src/main/java/com/release/keyneez/data/repository/ContentRepositoryImpl.kt @@ -37,6 +37,6 @@ class ContentRepositoryImpl @Inject constructor( override suspend fun postLike(pk: Int): Result> = kotlin.runCatching { contentDataSource.postLike(pk) } - override suspend fun postUnlike(pk: Int): Result> = + override suspend fun postUnlike(pk: List): Result> = kotlin.runCatching { contentDataSource.postUnlike(pk) } } diff --git a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt index 49cda60..dbc16d3 100644 --- a/app/src/main/java/com/release/keyneez/data/service/ContentService.kt +++ b/app/src/main/java/com/release/keyneez/data/service/ContentService.kt @@ -39,5 +39,5 @@ interface ContentService { suspend fun postLike(@Path("pk") pk: Int): BaseResponse @POST("api/v1/contents/{pk}/unlike") - suspend fun postUnlike(@Path("pk") pk: Int): BaseResponse + suspend fun postUnlike(@Path("pk") pk: List): BaseResponse } diff --git a/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt b/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt index 40cedb5..75130f6 100644 --- a/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt +++ b/app/src/main/java/com/release/keyneez/data/source/ContentDataSource.kt @@ -36,6 +36,6 @@ class ContentDataSource @Inject constructor( suspend fun postLike(pk: Int): BaseResponse = contentService.postLike(pk) - suspend fun postUnlike(pk: Int): BaseResponse = + suspend fun postUnlike(pk: List): BaseResponse = contentService.postUnlike(pk) } From 39af3b621017964e527060adef18203f5c0b17e5 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Mon, 7 Aug 2023 12:10:17 +0900 Subject: [PATCH 097/109] =?UTF-8?q?[MOD/#33]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/release/keyneez/presentation/main/like/LikeViewModel.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt index 5bf5090..acd7d37 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeViewModel.kt @@ -106,7 +106,6 @@ class LikeViewModel @Inject constructor( } _likeList.value = updatedList.toList() - // 서버 통신을 위해 선택된 아이템의 ID를 서버로 전송하여 좋아요 해제 viewModelScope.launch { contentRepository.postUnlike(selectedIdsList) .onSuccess { response -> From bd61f6e028ad9cf01b8d6723656150c83824b928 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Tue, 8 Aug 2023 14:46:11 +0900 Subject: [PATCH 098/109] =?UTF-8?q?[DEL/#33]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EA=B0=84=EC=86=8C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/keyneez/presentation/main/like/LikeFragment.kt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 1e20cf0..48aee5c 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -9,7 +9,6 @@ import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.recyclerview.widget.SimpleItemAnimator import com.release.keyneez.R -import com.release.keyneez.data.entity.response.ResponseGetLikeDto import com.release.keyneez.databinding.FragmentLikeBinding import com.release.keyneez.presentation.main.MainViewModel import com.release.keyneez.util.binding.BindingFragment @@ -21,7 +20,6 @@ import dagger.hilt.android.AndroidEntryPoint class LikeFragment : BindingFragment(com.release.keyneez.R.layout.fragment_like) { private var likeAdapter: LikeAdapter? = null - lateinit var likeList: List private val likeViewModel by viewModels() private val mainViewModel by activityViewModels() private var isInitialLoad = true @@ -119,10 +117,9 @@ class LikeFragment : } private fun setupLikeData() { - likeViewModel.likeList.observe(viewLifecycleOwner) { activityList -> + likeViewModel.likeList.observe(viewLifecycleOwner) { likeList -> isInitialLoad = false - likeList = activityList - likeAdapter?.submitList(activityList) + likeAdapter?.submitList(likeList) likeViewModel.isEdit.observe(viewLifecycleOwner) { isEdit -> if (isEdit) { val selectedCount = likeViewModel.getSelectedIdsCount().toString() From 9debebeb1ba111119a52d36a8479a084041fb3ce Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Tue, 8 Aug 2023 14:54:41 +0900 Subject: [PATCH 099/109] =?UTF-8?q?[MOD/#33]=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=EB=B7=B0=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/release/keyneez/presentation/main/like/LikeFragment.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt index 48aee5c..5a08515 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/like/LikeFragment.kt @@ -120,13 +120,14 @@ class LikeFragment : likeViewModel.likeList.observe(viewLifecycleOwner) { likeList -> isInitialLoad = false likeAdapter?.submitList(likeList) + val itemCount = likeList?.size ?: 0 likeViewModel.isEdit.observe(viewLifecycleOwner) { isEdit -> if (isEdit) { val selectedCount = likeViewModel.getSelectedIdsCount().toString() binding.tvLikeNum.text = getString(R.string.like_select, selectedCount) Log.d("1", "true일 때") } else { - binding.tvLikeNum.text = getString(R.string.like_num, likeList.size) + binding.tvLikeNum.text = getString(R.string.like_num, itemCount.toString()) Log.d("1", "false일 때") } } From 017789787fedb73831d773f8d7932fe732248601 Mon Sep 17 00:00:00 2001 From: 0zlrlo <99941493+0zlrlo@users.noreply.github.com> Date: Tue, 8 Aug 2023 16:00:10 +0900 Subject: [PATCH 100/109] =?UTF-8?q?[DEL/#33]=20=EC=A3=BC=EC=84=9D=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../main/explore/recent/RecentAdapter.kt | 2 - .../presentation/main/search/SearchAdapter.kt | 2 - workspace.xml | 189 ++++++++++++++++++ 4 files changed, 190 insertions(+), 5 deletions(-) create mode 100644 workspace.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index babcfe8..f9209da 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,8 +6,8 @@ Unit) : clickLike(recent.content, recent.Likes.isNotEmpty()) if (recent.Likes.isNotEmpty()) { recent.Likes = listOf() - // TODO : 객체 없애는 로직 return@setOnSingleClickListener } recent.Likes = listOf(ResponseGetRecentDto.Liked(0, 0, 0)) - // TODO: 객체 집어 넣어주는 로직 } // 여기도 누르면 상세뷰로 가는 코드짜기 } diff --git a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchAdapter.kt b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchAdapter.kt index 3bc1942..b786184 100644 --- a/app/src/main/java/com/release/keyneez/presentation/main/search/SearchAdapter.kt +++ b/app/src/main/java/com/release/keyneez/presentation/main/search/SearchAdapter.kt @@ -39,11 +39,9 @@ class SearchAdapter(private val clickLike: (Int, Boolean) -> Unit) : clickLike(search.content, search.Likes.isNotEmpty()) if (search.Likes.isNotEmpty()) { search.Likes = listOf() - // TODO : 객체 없애는 로직 return@setOnSingleClickListener } search.Likes = listOf(ResponseGetSearchResultDto.Liked(0, 0, 0)) - // TODO: 객체 집어 넣어주는 로직 } // 여기 상세뷰와 연결하는 코드 작성하기 } diff --git a/workspace.xml b/workspace.xml new file mode 100644 index 0000000..b42f765 --- /dev/null +++ b/workspace.xml @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +