From 2a7a5a6a707718bf654cb00d28ce810bfeed26ed Mon Sep 17 00:00:00 2001 From: Donghyeon0915 Date: Fri, 23 Feb 2024 02:06:25 +0900 Subject: [PATCH 1/7] =?UTF-8?q?[ADD]=20#335=20Navigator=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/runnect/runnect/navigator/base/Navigator.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 app/src/main/java/com/runnect/runnect/navigator/base/Navigator.kt diff --git a/app/src/main/java/com/runnect/runnect/navigator/base/Navigator.kt b/app/src/main/java/com/runnect/runnect/navigator/base/Navigator.kt new file mode 100644 index 00000000..5f6cf3fb --- /dev/null +++ b/app/src/main/java/com/runnect/runnect/navigator/base/Navigator.kt @@ -0,0 +1,12 @@ +package com.runnect.runnect.navigator.base + +import android.app.Activity +import android.content.Intent + +interface Navigator { + fun navigateFrom( + activity: Activity, + intentBuilder: Intent.() -> Intent = { this }, + withFinish: Boolean = false, + ) +} \ No newline at end of file From ceeec792cd93f0434d144055f491f1eb0e4f9e2a Mon Sep 17 00:00:00 2001 From: Donghyeon0915 Date: Fri, 23 Feb 2024 02:08:30 +0900 Subject: [PATCH 2/7] =?UTF-8?q?[ADD]=20#335=20Navaigator=EC=97=90=EC=84=9C?= =?UTF-8?q?=20=EC=93=B8=20startActivity=20=ED=99=95=EC=9E=A5=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../runnect/util/extension/ActivityExt.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app/src/main/java/com/runnect/runnect/util/extension/ActivityExt.kt b/app/src/main/java/com/runnect/runnect/util/extension/ActivityExt.kt index 63ee1f12..6e8fc135 100644 --- a/app/src/main/java/com/runnect/runnect/util/extension/ActivityExt.kt +++ b/app/src/main/java/com/runnect/runnect/util/extension/ActivityExt.kt @@ -1,8 +1,25 @@ package com.runnect.runnect.util.extension import android.app.Activity +import android.content.Intent import com.runnect.runnect.R +/** + * 애니메이션과 함께 새로운 액티비티를 시작합니다. + * + * @param intentBuilder 새로 시작할 액티비티의 [Intent] + * @param withFinish 현재 액티비티를 종료할 지 여부 + */ +inline fun Activity.startActivityWithAnimation( + intentBuilder: Intent.() -> Intent = { this }, + withFinish: Boolean = false, +) { + startActivity(intentBuilder(Intent(this, T::class.java))) + applyScreenEnterAnimation() + + if (withFinish) finish() +} + fun Activity.navigateToPreviousScreenWithAnimation() { finish() applyScreenExitAnimation() From e193e42fc99ac8a9e13cf0cf64ff0620fa136641 Mon Sep 17 00:00:00 2001 From: Donghyeon0915 Date: Fri, 23 Feb 2024 02:08:56 +0900 Subject: [PATCH 3/7] =?UTF-8?q?[ADD]=20#335=20CourseDetailActivity=20Navig?= =?UTF-8?q?ator=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CourseDetailNavigatorImpl.kt | 21 +++++++++++++++++++ .../module/CourseDetailNavigatorModule.kt | 18 ++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 app/src/main/java/com/runnect/runnect/presentation/detail/navigator/impl/CourseDetailNavigatorImpl.kt create mode 100644 app/src/main/java/com/runnect/runnect/presentation/detail/navigator/module/CourseDetailNavigatorModule.kt diff --git a/app/src/main/java/com/runnect/runnect/presentation/detail/navigator/impl/CourseDetailNavigatorImpl.kt b/app/src/main/java/com/runnect/runnect/presentation/detail/navigator/impl/CourseDetailNavigatorImpl.kt new file mode 100644 index 00000000..4982b205 --- /dev/null +++ b/app/src/main/java/com/runnect/runnect/presentation/detail/navigator/impl/CourseDetailNavigatorImpl.kt @@ -0,0 +1,21 @@ +package com.runnect.runnect.presentation.detail.navigator.impl + +import com.runnect.runnect.navigator.feature.detail.CourseDetailNavigator +import android.app.Activity +import android.content.Intent +import com.runnect.runnect.presentation.detail.CourseDetailActivity +import com.runnect.runnect.util.extension.startActivityWithAnimation +import javax.inject.Inject + +internal class CourseDetailNavigatorImpl @Inject constructor() : CourseDetailNavigator { + override fun navigateFrom( + activity: Activity, + intentBuilder: Intent.() -> Intent, + withFinish: Boolean + ) { + activity.startActivityWithAnimation( + intentBuilder = intentBuilder, + withFinish = withFinish, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/runnect/runnect/presentation/detail/navigator/module/CourseDetailNavigatorModule.kt b/app/src/main/java/com/runnect/runnect/presentation/detail/navigator/module/CourseDetailNavigatorModule.kt new file mode 100644 index 00000000..b74d58d1 --- /dev/null +++ b/app/src/main/java/com/runnect/runnect/presentation/detail/navigator/module/CourseDetailNavigatorModule.kt @@ -0,0 +1,18 @@ +package com.runnect.runnect.presentation.detail.navigator.module + +import com.runnect.runnect.navigator.feature.detail.CourseDetailNavigator +import com.runnect.runnect.presentation.detail.navigator.impl.CourseDetailNavigatorImpl +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class CourseDetailNavigatorModule { + + @Singleton + @Binds + abstract fun bindDetailNavigator(navigator: CourseDetailNavigatorImpl): CourseDetailNavigator +} \ No newline at end of file From 4aef5283021bf43de8801ccbbd63a73c0d758a87 Mon Sep 17 00:00:00 2001 From: Donghyeon0915 Date: Fri, 23 Feb 2024 02:09:38 +0900 Subject: [PATCH 4/7] =?UTF-8?q?[MOD]=20#335=20Extra=20Key=20=EC=83=81?= =?UTF-8?q?=EC=88=98=20Navigator=20=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../navigator/feature/detail/CourseDetailNavigator.kt | 9 +++++++++ .../presentation/detail/CourseDetailActivity.kt | 10 +++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/runnect/runnect/navigator/feature/detail/CourseDetailNavigator.kt diff --git a/app/src/main/java/com/runnect/runnect/navigator/feature/detail/CourseDetailNavigator.kt b/app/src/main/java/com/runnect/runnect/navigator/feature/detail/CourseDetailNavigator.kt new file mode 100644 index 00000000..c652de0a --- /dev/null +++ b/app/src/main/java/com/runnect/runnect/navigator/feature/detail/CourseDetailNavigator.kt @@ -0,0 +1,9 @@ +package com.runnect.runnect.navigator.feature.detail + +import com.runnect.runnect.navigator.base.Navigator + +interface CourseDetailNavigator : Navigator { + companion object { + const val EXTRA_PUBLIC_COURSE_ID = "EXTRA_PUBLIC_COURSE_ID" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/runnect/runnect/presentation/detail/CourseDetailActivity.kt b/app/src/main/java/com/runnect/runnect/presentation/detail/CourseDetailActivity.kt index c702fd2a..dd49e8ff 100644 --- a/app/src/main/java/com/runnect/runnect/presentation/detail/CourseDetailActivity.kt +++ b/app/src/main/java/com/runnect/runnect/presentation/detail/CourseDetailActivity.kt @@ -22,6 +22,7 @@ import com.runnect.runnect.data.dto.CourseData import com.runnect.runnect.databinding.ActivityCourseDetailBinding import com.runnect.runnect.domain.entity.CourseDetail import com.runnect.runnect.domain.entity.EditableCourseDetail +import com.runnect.runnect.navigator.feature.detail.CourseDetailNavigator import com.runnect.runnect.presentation.MainActivity import com.runnect.runnect.presentation.countdown.CountDownActivity import com.runnect.runnect.presentation.detail.CourseDetailRootScreen.COURSE_DISCOVER @@ -98,7 +99,7 @@ class CourseDetailActivity : intent.getCompatibleSerializableExtra(EXTRA_ROOT_SCREEN)?.let { rootScreen = it } - publicCourseId = intent.getIntExtra(EXTRA_PUBLIC_COURSE_ID, -1) + publicCourseId = intent.getIntExtra(CourseDetailNavigator.EXTRA_PUBLIC_COURSE_ID,-1) Timber.tag("intent-publicCourseId").d("$publicCourseId") } @@ -167,7 +168,11 @@ class CourseDetailActivity : intent?.let { newIntent -> newIntent.getCompatibleSerializableExtra(EXTRA_ROOT_SCREEN) ?.let { rootScreen = it } - publicCourseId = newIntent.getIntExtra(EXTRA_PUBLIC_COURSE_ID, -1) + + publicCourseId = newIntent.getIntExtra( + CourseDetailNavigator.EXTRA_PUBLIC_COURSE_ID, + -1 + ) getCourseDetail() } } @@ -620,7 +625,6 @@ class CourseDetailActivity : private const val RES_STAMP_TYPE = "drawable" private const val EXTRA_ROOT_SCREEN = "rootScreen" - private const val EXTRA_PUBLIC_COURSE_ID = "publicCourseId" private const val EXTRA_COURSE_DATA = "CourseData" private const val EXTRA_FRAGMENT_REPLACEMENT_DIRECTION = "fragmentReplacementDirection" private const val EXTRA_FROM_COURSE_DETAIL = "fromCourseDetail" From 1ba5ac6b8582513fe04871f222e2da7906cd3054 Mon Sep 17 00:00:00 2001 From: Donghyeon0915 Date: Fri, 23 Feb 2024 02:10:11 +0900 Subject: [PATCH 5/7] =?UTF-8?q?[FEAT]=20#335=20ProfileActivity=20->=20Cour?= =?UTF-8?q?seDetailActivity=20=EC=9D=B4=EB=8F=99=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 --- .../presentation/profile/ProfileActivity.kt | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt b/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt index 5781284a..e1cf6bc4 100644 --- a/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt +++ b/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt @@ -4,22 +4,28 @@ import android.content.Intent import android.os.Bundle import androidx.activity.viewModels import androidx.core.view.isVisible +import com.runnect.runnect.navigator.feature.detail.CourseDetailNavigator import com.runnect.runnect.R import com.runnect.runnect.binding.BindingActivity import com.runnect.runnect.databinding.ActivityProfileBinding -import com.runnect.runnect.presentation.detail.CourseDetailActivity +import com.runnect.runnect.presentation.detail.navigator.impl.CourseDetailNavigatorImpl import com.runnect.runnect.presentation.state.UiStateV2 import com.runnect.runnect.util.analytics.Analytics import com.runnect.runnect.util.analytics.EventName.VIEW_USER_PROFILE -import com.runnect.runnect.util.extension.applyScreenEnterAnimation import com.runnect.runnect.util.extension.showSnackbar import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint class ProfileActivity : BindingActivity(R.layout.activity_profile) { + + @Inject + lateinit var detailNavigator: CourseDetailNavigator + private val viewModel: ProfileViewModel by viewModels() private lateinit var adapter: ProfileCourseAdapter private var userId: Int = -1 + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.vm = viewModel @@ -56,12 +62,13 @@ class ProfileActivity : BindingActivity(R.layout.activit } private fun navigateToCourseDetail(courseId: Int) { - Intent(this@ProfileActivity, CourseDetailActivity::class.java).apply { - putExtra(EXTRA_PUBLIC_COURSE_ID, courseId) - addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) - startActivity(this) - } - applyScreenEnterAnimation() + detailNavigator.navigateFrom( + this, + intentBuilder = { + putExtra(CourseDetailNavigator.EXTRA_PUBLIC_COURSE_ID, courseId) + addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) + }, + ) } private fun initBackButtonClickListener() { @@ -140,6 +147,5 @@ class ProfileActivity : BindingActivity(R.layout.activit companion object { private const val EXTRA_COURSE_USER_ID = "courseUserId" - private const val EXTRA_PUBLIC_COURSE_ID = "publicCourseId" } } \ No newline at end of file From 3e34ce24f33d62986a0cf578ed82d67d22e5d19f Mon Sep 17 00:00:00 2001 From: Donghyeon0915 Date: Fri, 23 Feb 2024 02:17:19 +0900 Subject: [PATCH 6/7] =?UTF-8?q?[DEL]=20#335=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=20import=EB=AC=B8=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/runnect/runnect/presentation/profile/ProfileActivity.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt b/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt index e1cf6bc4..462c7448 100644 --- a/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt +++ b/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt @@ -8,7 +8,6 @@ import com.runnect.runnect.navigator.feature.detail.CourseDetailNavigator import com.runnect.runnect.R import com.runnect.runnect.binding.BindingActivity import com.runnect.runnect.databinding.ActivityProfileBinding -import com.runnect.runnect.presentation.detail.navigator.impl.CourseDetailNavigatorImpl import com.runnect.runnect.presentation.state.UiStateV2 import com.runnect.runnect.util.analytics.Analytics import com.runnect.runnect.util.analytics.EventName.VIEW_USER_PROFILE From dba0f65c6e43dc91f1e27ff29336c6064dd38288 Mon Sep 17 00:00:00 2001 From: Donghyeon0915 Date: Wed, 28 Feb 2024 03:04:54 +0900 Subject: [PATCH 7/7] =?UTF-8?q?[ADD]=20#335=20Extras=20=EC=9C=A0=ED=8B=B8?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/runnect/runnect/navigator/base/Extras.kt | 6 ++++++ .../navigator/feature/detail/CourseDetailNavigator.kt | 6 +----- .../runnect/presentation/detail/CourseDetailActivity.kt | 6 +++--- .../runnect/runnect/presentation/profile/ProfileActivity.kt | 3 ++- 4 files changed, 12 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/runnect/runnect/navigator/base/Extras.kt diff --git a/app/src/main/java/com/runnect/runnect/navigator/base/Extras.kt b/app/src/main/java/com/runnect/runnect/navigator/base/Extras.kt new file mode 100644 index 00000000..3e217e0c --- /dev/null +++ b/app/src/main/java/com/runnect/runnect/navigator/base/Extras.kt @@ -0,0 +1,6 @@ +package com.runnect.runnect.navigator.base + +object Extras { + // common + const val PUBLIC_COURSE_ID = "PUBLIC_COURSE_ID" +} \ No newline at end of file diff --git a/app/src/main/java/com/runnect/runnect/navigator/feature/detail/CourseDetailNavigator.kt b/app/src/main/java/com/runnect/runnect/navigator/feature/detail/CourseDetailNavigator.kt index c652de0a..de207495 100644 --- a/app/src/main/java/com/runnect/runnect/navigator/feature/detail/CourseDetailNavigator.kt +++ b/app/src/main/java/com/runnect/runnect/navigator/feature/detail/CourseDetailNavigator.kt @@ -2,8 +2,4 @@ package com.runnect.runnect.navigator.feature.detail import com.runnect.runnect.navigator.base.Navigator -interface CourseDetailNavigator : Navigator { - companion object { - const val EXTRA_PUBLIC_COURSE_ID = "EXTRA_PUBLIC_COURSE_ID" - } -} \ No newline at end of file +interface CourseDetailNavigator : Navigator \ No newline at end of file diff --git a/app/src/main/java/com/runnect/runnect/presentation/detail/CourseDetailActivity.kt b/app/src/main/java/com/runnect/runnect/presentation/detail/CourseDetailActivity.kt index dd49e8ff..fc0b8de9 100644 --- a/app/src/main/java/com/runnect/runnect/presentation/detail/CourseDetailActivity.kt +++ b/app/src/main/java/com/runnect/runnect/presentation/detail/CourseDetailActivity.kt @@ -22,7 +22,7 @@ import com.runnect.runnect.data.dto.CourseData import com.runnect.runnect.databinding.ActivityCourseDetailBinding import com.runnect.runnect.domain.entity.CourseDetail import com.runnect.runnect.domain.entity.EditableCourseDetail -import com.runnect.runnect.navigator.feature.detail.CourseDetailNavigator +import com.runnect.runnect.navigator.base.Extras import com.runnect.runnect.presentation.MainActivity import com.runnect.runnect.presentation.countdown.CountDownActivity import com.runnect.runnect.presentation.detail.CourseDetailRootScreen.COURSE_DISCOVER @@ -99,7 +99,7 @@ class CourseDetailActivity : intent.getCompatibleSerializableExtra(EXTRA_ROOT_SCREEN)?.let { rootScreen = it } - publicCourseId = intent.getIntExtra(CourseDetailNavigator.EXTRA_PUBLIC_COURSE_ID,-1) + publicCourseId = intent.getIntExtra(Extras.PUBLIC_COURSE_ID,-1) Timber.tag("intent-publicCourseId").d("$publicCourseId") } @@ -170,7 +170,7 @@ class CourseDetailActivity : ?.let { rootScreen = it } publicCourseId = newIntent.getIntExtra( - CourseDetailNavigator.EXTRA_PUBLIC_COURSE_ID, + Extras.PUBLIC_COURSE_ID, -1 ) getCourseDetail() diff --git a/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt b/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt index 462c7448..7b24a320 100644 --- a/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt +++ b/app/src/main/java/com/runnect/runnect/presentation/profile/ProfileActivity.kt @@ -8,6 +8,7 @@ import com.runnect.runnect.navigator.feature.detail.CourseDetailNavigator import com.runnect.runnect.R import com.runnect.runnect.binding.BindingActivity import com.runnect.runnect.databinding.ActivityProfileBinding +import com.runnect.runnect.navigator.base.Extras import com.runnect.runnect.presentation.state.UiStateV2 import com.runnect.runnect.util.analytics.Analytics import com.runnect.runnect.util.analytics.EventName.VIEW_USER_PROFILE @@ -64,7 +65,7 @@ class ProfileActivity : BindingActivity(R.layout.activit detailNavigator.navigateFrom( this, intentBuilder = { - putExtra(CourseDetailNavigator.EXTRA_PUBLIC_COURSE_ID, courseId) + putExtra(Extras.PUBLIC_COURSE_ID, courseId) addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) }, )