Skip to content
Open
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
95e1da5
refactor: IntroActivity 새로운 Intent 구조 적용
PeraSite Oct 17, 2025
ccea94a
chore: companion object private 변경, androidx.core.content.IntentCompa…
PeraSite Oct 17, 2025
76a1f20
feat: ActivityCompanion, ActivityCompanionWithArgs 분리
PeraSite Oct 17, 2025
7786e8e
refactor: WebViewActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
e54505f
refactor: ForceUpdateDialogActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
27029a2
refactor: LoginActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
c79d3d1
refactor: MainActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
f9373c6
chore: ActivityUtil.kt startActivity deprecate
PeraSite Oct 17, 2025
f3cbe9a
feat: 기본값으로 만들 수 있는 ActivityCompanionWithArgsDefault 추가
PeraSite Oct 17, 2025
2b05847
refactor: SignOutActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
9e2860d
refactor: WebViewActivity 호출 구조 변경
PeraSite Oct 17, 2025
07a00fa
refactor: DeveloperActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
6e96014
refactor: MyReviewListActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
a03b597
refactor: AndroidMessageDialogActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
a9a8bc9
chore: Default start 추가
PeraSite Oct 17, 2025
a096d62
refactor: UserInfoActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
18e60af
refactor: ReportActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
3371d2e
refactor: ModifyReviewActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
b6f4318
refactor: ReviewActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
20db1c5
refactor: ReviewWriteRateActivity 새 Intent 구조 적용
PeraSite Oct 17, 2025
dec1a51
refactor: type-safe한 Fragment arguments
PeraSite Oct 17, 2025
37ea8ea
Merge branch 'develop' into refactor/typesafe-intent
PeraSite Oct 20, 2025
5a12705
docs: ActivityCompanion, FragmentCompanion 주석 추가
PeraSite Oct 20, 2025
49eabf7
feat: FragmentCompanionWithArgsDefault 추가
PeraSite Oct 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import android.content.Intent
import androidx.core.app.NotificationCompat
import com.eatssu.android.R
import com.eatssu.android.presentation.intro.IntroActivity
import com.eatssu.common.enums.LaunchPath.REMOTE_NOTIFICATION
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import timber.log.Timber
Expand Down Expand Up @@ -44,8 +45,7 @@ class EatSsuFirebaseMessagingService : FirebaseMessagingService() {
}
notificationManager.createNotificationChannel(channel)

val intent = Intent(this, IntroActivity::class.java).apply {
putExtra("launch_path", "remote_notification")
val intent = IntroActivity.intent(this, IntroActivity.Args(REMOTE_NOTIFICATION)) {
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import android.content.Intent
import androidx.core.app.NotificationCompat
import com.eatssu.android.R
import com.eatssu.android.presentation.intro.IntroActivity
import com.eatssu.common.enums.LaunchPath
import java.time.DayOfWeek
import java.time.LocalDateTime

Expand Down Expand Up @@ -39,14 +40,17 @@ class NotificationReceiver : BroadcastReceiver() {
notificationManager.createNotificationChannel(channel)


val intent = Intent(context, IntroActivity::class.java).apply {
val intent = IntroActivity.intent(
context,
IntroActivity.Args(LaunchPath.LOCAL_NOTIFICATION)
) {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}

val pendingIntent = PendingIntent.getActivity(
context,
0,
intent.putExtra("launch_path", "local_notification"),
intent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ import androidx.navigation.fragment.NavHostFragment
import androidx.work.WorkManager
import com.eatssu.android.R
import com.eatssu.android.databinding.ActivityMainBinding
import com.eatssu.android.presentation.base.ActivityCompanion
import com.eatssu.android.presentation.base.BaseActivity
import com.eatssu.android.presentation.login.LoginActivity
import com.eatssu.android.presentation.mypage.MyPageViewModel
import com.eatssu.android.presentation.mypage.userinfo.UserInfoActivity
import com.eatssu.android.presentation.util.showToast
import com.eatssu.android.presentation.util.startActivity
import com.eatssu.common.enums.ScreenId
import com.google.android.material.bottomnavigation.BottomNavigationView
import dagger.hilt.android.AndroidEntryPoint
Expand All @@ -38,6 +38,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(
ScreenId.HOME_MAIN
) {

companion object : ActivityCompanion(MainActivity::class)

@Inject
lateinit var workManager: WorkManager

Expand Down Expand Up @@ -149,12 +151,14 @@ class MainActivity : BaseActivity<ActivityMainBinding>(
if (state is UiState.Success) {
when (state.data) {
is MainState.NicknameNull -> {
intent.putExtra("force", true)
startActivity<UserInfoActivity>()
UserInfoActivity.start(
this@MainActivity,
UserInfoActivity.Args(force = true)
)
}

is MainState.LoggedOut -> {
startActivity<LoginActivity>()
LoginActivity.start(this@MainActivity)
finishAffinity()
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.eatssu.android.presentation.base

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Parcelable
import androidx.core.content.IntentCompat.getParcelableExtra
import kotlin.reflect.KClass

private const val INTENT_ARGS_KEY = "intent_args"

abstract class ActivityCompanion(
protected val activityClass: KClass<out Activity>,
) {
fun intent(
context: Context, intentBuilder: Intent.() -> Unit = {}
): Intent = Intent(context, activityClass.java).apply {
intentBuilder()
}

fun start(context: Context, intentBuilder: Intent.() -> Unit = {}) {
context.startActivity(intent(context, intentBuilder))
}

}

abstract class ActivityCompanionWithArgs<TArgs>(
protected val activityClass: KClass<out Activity>,
protected val argsClass: KClass<TArgs>,
) where TArgs : Parcelable {
fun intent(
context: Context, args: TArgs, intentBuilder: Intent.() -> Unit = {}
): Intent = Intent(context, activityClass.java).apply {
putExtra(INTENT_ARGS_KEY, args)
intentBuilder()
}

fun start(context: Context, args: TArgs, intentBuilder: Intent.() -> Unit = {}) {
context.startActivity(intent(context, args, intentBuilder))
}

val Activity.intentOptions: TArgs?
get() = getParcelableExtra(
this.intent, INTENT_ARGS_KEY, argsClass.java
)
}

abstract class ActivityCompanionWithArgsDefault<TArgs>(
activityClass: KClass<out Activity>,
argsClass: KClass<TArgs>,
private val defaultArgs: (Context) -> TArgs,
) : ActivityCompanionWithArgs<TArgs>(activityClass, argsClass) where TArgs : Parcelable {

fun intent(
context: Context, intentBuilder: Intent.() -> Unit = {}
): Intent = Intent(context, activityClass.java).apply {
putExtra(INTENT_ARGS_KEY, defaultArgs(context))
intentBuilder()
}

fun start(context: Context, intentBuilder: Intent.() -> Unit = {}) {
context.startActivity(intent(context, intentBuilder))
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -136,9 +136,9 @@ abstract class BaseActivity<B : ViewBinding>(
}

private fun navigateToLogin() {
startActivity(Intent(this, LoginActivity::class.java).apply {
LoginActivity.start(this) {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
})
}
finishAffinity()
}

Expand Down Expand Up @@ -169,8 +169,7 @@ abstract class BaseActivity<B : ViewBinding>(
}

private fun showForceUpdateDialog() {
val intent = Intent(this, ForceUpdateDialogActivity::class.java)
startActivity(intent)
ForceUpdateDialogActivity.start(this)
}

override fun onResume() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.eatssu.android.presentation.base

import android.os.Bundle
import android.os.Parcelable
import androidx.core.os.BundleCompat
import androidx.fragment.app.Fragment
import kotlin.reflect.KClass

private const val FRAGMENT_ARGS_KEY = "fragment_args"

abstract class FragmentCompanion(
private val fragmentBuilder: () -> Fragment,
) {
fun newInstance(): Fragment {
return fragmentBuilder()
}
}

abstract class FragmentCompanionWithArgs<TArgs>(
private val fragmentBuilder: () -> Fragment,
private val argsClass: KClass<TArgs>
) where TArgs : Parcelable {

fun newInstance(args: TArgs): Fragment {
return fragmentBuilder().apply {
arguments = Bundle().apply {
putParcelable(FRAGMENT_ARGS_KEY, args)
}
}
}

val Fragment.fragmentOptions: TArgs?
get() = arguments?.let {
BundleCompat.getParcelable(it, FRAGMENT_ARGS_KEY, argsClass.java)
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
package com.eatssu.android.presentation.cafeteria.menu

import android.content.Intent
import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.eatssu.android.databinding.ItemMenuBinding
import com.eatssu.android.domain.model.Menu
import com.eatssu.android.presentation.cafeteria.review.list.ReviewActivity
import com.eatssu.common.EventLogger
import com.eatssu.common.enums.MenuType
import com.eatssu.common.enums.Restaurant
import timber.log.Timber


class MenuSubAdapter(
Expand Down Expand Up @@ -47,24 +44,17 @@ class MenuSubAdapter(

//intent 사용
holder.itemView.setOnClickListener {
val intent = Intent(holder.itemView.context, ReviewActivity::class.java)

when (restaurant.menuType) {
MenuType.FIXED -> {
Log.d("SubMenuAdapter", "고정메뉴${dataList[position].name}")
intent.putExtra("itemId", dataList[position].id)
intent.putExtra("itemName", dataList[position].name)
intent.putExtra("menuType", MenuType.FIXED.toString())
}

MenuType.VARIABLE -> {
Log.d("SubMenuAdapter", "변동메뉴${dataList[position].name}")
intent.putExtra("itemId", dataList[position].id)
intent.putExtra("itemName", dataList[position].name)
intent.putExtra("menuType", MenuType.VARIABLE.toString())
}
}
ContextCompat.startActivity(holder.itemView.context, intent, null)
val menuType = restaurant.menuType.toString()
Timber.d("SubMenuAdapter - ${restaurant.menuType}메뉴${dataList[position].name}")

ReviewActivity.start(
holder.itemView.context,
ReviewActivity.Args(
menuType = menuType,
itemId = dataList[position].id,
itemName = dataList[position].name
)
)
EventLogger.clickMenu(restaurant)
}
}
Expand Down
Loading