Skip to content

[Feat] 나만아니면돼 이벤트 팝업, 툴팁 추가#498

Merged
PeraSite merged 6 commits intodevelopfrom
feat/event-popup
Mar 15, 2026
Merged

[Feat] 나만아니면돼 이벤트 팝업, 툴팁 추가#498
PeraSite merged 6 commits intodevelopfrom
feat/event-popup

Conversation

@PeraSite
Copy link
Member

@PeraSite PeraSite commented Mar 15, 2026

Summary

나만아니면돼 이벤트 팝업을 하드코딩해 추가했습니다.
이런 일이 많이 없을 테니 팝업을 지울 때는 업데이트를 다시 하는거로...

Describe your changes

Screenshot_20260316_083638 Screenshot_20260316_083628

@PeraSite PeraSite requested a review from HI-JIN2 March 15, 2026 23:37
@PeraSite PeraSite self-assigned this Mar 15, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 Pull Request는 앱의 분석 추적 인프라를 전면적으로 개편하고, 새로운 '나만아니면돼' 이벤트 관련 UI를 추가합니다. 기존의 단일 로거 대신, 여러 분석 플랫폼에 유연하게 데이터를 전송할 수 있는 모듈화된 AnalyticsTracker 시스템을 도입하여 데이터 분석의 정확성과 확장성을 향상시켰습니다. 또한, 사용자 경험을 풍부하게 하기 위해 이벤트 팝업과 툴팁을 구현하여 사용자에게 중요한 정보를 효과적으로 전달합니다.

Highlights

  • 새로운 분석 추적 시스템 도입: 기존의 단일 EventLogger를 유연하고 확장 가능한 AnalyticsTracker 인터페이스 기반의 시스템으로 전환했습니다. 이 시스템은 Firebase와 PostHog와 같은 여러 분석 대상으로 이벤트를 동시에 전송할 수 있습니다.
  • 나만아니면돼 이벤트 팝업 및 툴팁 추가: 앱 실행 시 표시되는 '나만아니면돼' 이벤트 팝업과 하단 내비게이션 바에 이벤트 툴팁을 추가하여 사용자 참여를 유도합니다. 팝업은 다시 보지 않기 기능을 포함하며, 툴팁은 특정 메뉴 항목 위에 표시됩니다.
  • 사용자 식별 및 속성 관리 개선: AnalyticsIdentityManager를 도입하여 사용자 로그인, 로그아웃, 학과/학부 정보 변경 시 분석 플랫폼에 사용자 식별 정보(이메일, 닉네임, 단과대, 학과)를 자동으로 동기화하도록 개선했습니다.
  • 기존 분석 로직 제거 및 통합: 앱 전반에 걸쳐 사용되던 EventLogger 클래스를 제거하고, 모든 분석 이벤트 로깅을 새로운 AnalyticsTracker를 통해 처리하도록 통합했습니다. 이는 코드의 일관성과 유지보수성을 높입니다.
  • Compose 환경에서의 분석 추적 지원: Jetpack Compose 기반 화면에서 분석 추적을 쉽게 통합할 수 있도록 LocalAnalyticsTrackerProvideAnalyticsTracker 컴포저블을 추가했습니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • app/src/main/java/com/eatssu/android/App.kt
    • PostHog 초기화 로직을 제거했습니다.
  • app/src/main/java/com/eatssu/android/analytics/AnalyticsIdentityManager.kt
    • 사용자 식별 및 속성 관리를 위한 AnalyticsIdentityManager 클래스를 추가했습니다.
  • app/src/main/java/com/eatssu/android/analytics/AnalyticsIdentityProperties.kt
    • AnalyticsIdentity 객체를 속성 맵으로 변환하는 확장 함수를 추가했습니다.
  • app/src/main/java/com/eatssu/android/analytics/ComposeAnalytics.kt
    • Compose 환경에서 분석 트래커를 제공하기 위한 LocalAnalyticsTrackerProvideAnalyticsTracker를 추가했습니다.
  • app/src/main/java/com/eatssu/android/analytics/DefaultAnalyticsTracker.kt
    • 여러 분석 대상으로 이벤트를 디스패치하는 AnalyticsTracker의 기본 구현체를 추가했습니다.
  • app/src/main/java/com/eatssu/android/analytics/FirebaseAnalyticsDestination.kt
    • Firebase Analytics로 데이터를 전송하는 AnalyticsDestination 구현체를 추가했습니다.
  • app/src/main/java/com/eatssu/android/analytics/PostHogAnalyticsDestination.kt
    • PostHog로 데이터를 전송하는 AnalyticsDestination 구현체를 추가했습니다.
  • app/src/main/java/com/eatssu/android/data/local/AppFeatureDataStore.kt
    • 앱 기능 상태를 저장하기 위한 AppFeatureDataStore를 추가했습니다.
  • app/src/main/java/com/eatssu/android/di/AnalyticsModule.kt
    • 새로운 분석 트래커 및 대상들을 주입하기 위한 Dagger Hilt 모듈을 추가했습니다.
  • app/src/main/java/com/eatssu/android/domain/usecase/auth/LogoutUseCase.kt
    • 로그아웃 시 분석 사용자 식별 정보를 초기화하도록 업데이트했습니다.
  • app/src/main/java/com/eatssu/android/domain/usecase/user/GetUserEmailUseCase.kt
    • 사용자 이메일을 가져오는 새로운 유스케이스를 추가했습니다.
  • app/src/main/java/com/eatssu/android/presentation/MainActivity.kt
    • 이벤트 팝업 및 툴팁 컨트롤러를 주입하고 바인딩했습니다.
    • '나만아니면돼' 메뉴 항목 클릭 시 이벤트 팝업 컨트롤러를 사용하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/MainViewModel.kt
    • AnalyticsIdentityManager를 주입하고, 앱 시작 및 사용자 정보 변경 시 분석 사용자 식별 정보를 동기화하도록 업데이트했습니다.
  • app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt
    • AnalyticsTracker를 주입하고, 화면 뷰 로깅을 새로운 분석 시스템으로 전환했습니다.
  • app/src/main/java/com/eatssu/android/presentation/base/BaseFragment.kt
    • AnalyticsTracker를 주입하고, 화면 뷰 로깅을 새로운 분석 시스템으로 전환했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/CafeteriaFragment.kt
    • 식당 및 날짜 선택 이벤트를 새로운 분석 시스템으로 로깅하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/info/InfoBottomSheetFragment.kt
    • AnalyticsTracker를 주입하고, 식당 정보 클릭 및 화면 뷰 이벤트를 새로운 분석 시스템으로 로깅하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/menu/MenuAdapter.kt
    • 생성자에 AnalyticsTracker를 추가하고 MenuSubAdapter에 전달하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/menu/MenuFragment.kt
    • AnalyticsTracker를 주입하고 MenuAdapter에 전달하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/menu/MenuSubAdapter.kt
    • 생성자에 AnalyticsTracker를 추가하고 메뉴 클릭 이벤트를 새로운 분석 시스템으로 로깅하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/review/ReviewComposeActivity.kt
    • AnalyticsTracker를 주입하고 Compose 콘텐츠에 제공하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewListScreen.kt
    • LocalAnalyticsTracker를 사용하여 리뷰 작성 버튼 클릭 이벤트를 로깅하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewViewModel.kt
    • AnalyticsTracker를 주입하고 리뷰 작성 완료 이벤트를 새로운 분석 시스템으로 로깅하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/event/AnyoneButMeEventDialog.kt
    • '나만아니면돼' 이벤트 팝업 다이얼로그를 위한 Compose 컴포저블을 추가했습니다.
  • app/src/main/java/com/eatssu/android/presentation/event/AnyoneButMeEventPopupController.kt
    • '나만아니면돼' 이벤트 팝업의 표시 로직 및 상호작용을 관리하는 컨트롤러 클래스를 추가했습니다.
  • app/src/main/java/com/eatssu/android/presentation/event/AnyoneButMeEventTooltip.kt
    • '나만아니면돼' 이벤트 툴팁을 위한 Compose 컴포저블을 추가했습니다.
  • app/src/main/java/com/eatssu/android/presentation/event/AnyoneButMeEventTooltipController.kt
    • '나만아니면돼' 이벤트 툴팁의 표시 로직 및 위치 지정을 관리하는 컨트롤러 클래스를 추가했습니다.
  • app/src/main/java/com/eatssu/android/presentation/intro/IntroActivity.kt
    • AnalyticsTracker를 주입하고, 앱 실행 및 화면 뷰 이벤트를 새로운 분석 시스템으로 로깅하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/login/LoginViewModel.kt
    • AnalyticsIdentityManager를 주입하고, 로그인 성공 시 사용자 식별 정보를 분석 시스템에 전달하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/map/MapFragment.kt
    • AnalyticsTracker를 주입하고 Compose 콘텐츠에 제공하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/map/MapFragmentView.kt
    • LocalAnalyticsTracker를 사용하여 지도 관련 이벤트를 로깅하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/map/MapViewModel.kt
    • AnalyticsTracker를 주입하고, 지도 필터 및 제휴 식당 클릭 이벤트를 새로운 분석 시스템으로 로깅하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/mypage/MyPageFragment.kt
    • 외부 문의 화면 뷰 이벤트를 새로운 분석 시스템으로 로깅하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/mypage/language/LanguageSelectorActivity.kt
    • AnalyticsTracker를 주입하고 Compose 콘텐츠에 제공하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/mypage/myreview/MyReviewListActivity.kt
    • AnalyticsTracker를 주입하고 Compose 콘텐츠에 제공하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/mypage/terms/WebViewActivity.kt
    • AnalyticsTracker를 주입하고 화면 뷰 이벤트를 새로운 분석 시스템으로 로깅하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/mypage/userinfo/UserInfoViewModel.kt
    • AnalyticsIdentityManagerGetUserEmailUseCase를 주입하고, 사용자 정보 업데이트 시 분석 사용자 식별 정보를 동기화하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/util/AnalyticsUtil.kt
    • TrackScreenViewEvent 컴포저블이 LocalAnalyticsTracker를 사용하도록 수정했습니다.
  • app/src/main/java/com/eatssu/android/presentation/util/BrowserUtil.kt
    • URL을 브라우저에서 열기 위한 유틸리티 함수를 추가했습니다.
  • app/src/main/java/com/eatssu/android/presentation/widget/MealWidgetReceiver.kt
    • AnalyticsTracker를 주입하고 위젯 제거 이벤트를 새로운 분석 시스템으로 로깅하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/widget/ui/WidgetSettingActivity.kt
    • AnalyticsTracker를 주입하고 Compose 콘텐츠에 제공하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/widget/ui/WidgetSettingScreen.kt
    • LocalAnalyticsTracker를 사용하여 위젯 추가 이벤트를 로깅하도록 변경했습니다.
  • app/src/main/res/layout/activity_main.xml
    • 이벤트 툴팁 및 팝업을 위한 ComposeView 요소를 추가했습니다.
  • app/src/main/res/values/strings.xml
    • 새로운 인스타그램 이벤트 URL 문자열 리소스를 추가했습니다.
  • app/src/test/java/com/eatssu/android/analytics/AnalyticsIdentityManagerTest.kt
    • AnalyticsIdentityManager에 대한 단위 테스트를 추가했습니다.
  • app/src/test/java/com/eatssu/android/analytics/DefaultAnalyticsTrackerTest.kt
    • DefaultAnalyticsTracker에 대한 단위 테스트를 추가했습니다.
  • app/src/test/java/com/eatssu/android/analytics/FirebaseAnalyticsDestinationTest.kt
    • Firebase 분석 페이로드 변환에 대한 단위 테스트를 추가했습니다.
  • app/src/test/java/com/eatssu/android/analytics/PostHogAnalyticsDestinationTest.kt
    • PostHog 분석 페이로드 변환에 대한 단위 테스트를 추가했습니다.
  • core/common/build.gradle.kts
    • google.services 플러그인 및 Firebase 종속성을 제거했습니다.
  • core/common/src/main/java/com/eatssu/common/EventLogger.kt
    • 기존 EventLogger 클래스를 제거했습니다.
  • core/common/src/main/java/com/eatssu/common/analytics/AnalyticsDestination.kt
    • 분석 대상에 대한 새로운 인터페이스를 추가했습니다.
  • core/common/src/main/java/com/eatssu/common/analytics/AnalyticsEvent.kt
    • 유형화된 분석 이벤트 및 해당 구현을 위한 새로운 봉인된 인터페이스를 추가했습니다.
  • core/common/src/main/java/com/eatssu/common/analytics/AnalyticsIdentity.kt
    • 분석에서 사용자 식별을 위한 새로운 데이터 클래스를 추가했습니다.
  • core/common/src/main/java/com/eatssu/common/analytics/AnalyticsPayload.kt
    • 분석 이벤트 페이로드를 위한 새로운 데이터 클래스를 추가했습니다.
  • core/common/src/main/java/com/eatssu/common/analytics/AnalyticsTracker.kt
    • 메인 분석 트래커에 대한 새로운 인터페이스를 추가했습니다.
  • core/common/src/main/java/com/eatssu/common/enums/EventType.kt
    • EventType 열거형을 제거했습니다.
Activity
  • 이 Pull Request는 코드 변경 사항에 중점을 두었으며, 현재까지 특별한 코멘트나 리뷰 활동은 기록되지 않았습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이번 PR은 '나만 아니면 돼' 이벤트 팝업과 툴팁을 추가하고, 기존의 EventLogger를 새로운 AnalyticsTracker 추상화 계층으로 대체하는 대규모 리팩토링을 포함하고 있습니다. 전반적으로 새로운 기능 구현과 분석 시스템 개선이 잘 이루어졌습니다. 특히 분석 로깅을 추상화하여 Firebase, PostHog 등 다양한 분석 도구에 유연하게 대응할 수 있도록 구조를 개선한 점이 인상적입니다. 몇 가지 유지보수성 향상을 위한 제안 사항을 남겼으니 확인 부탁드립니다.

Comment on lines +15 to +16
const val BOTTOM_NAVIGATION_ITEM_COUNT = 4
const val ANYONE_BUT_ME_MENU_INDEX = 2
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

하단 네비게이션 아이템의 총 개수와 특정 메뉴의 인덱스를 상수로 하드코딩하면, 향후 메뉴 아이템이 추가되거나 순서가 변경될 때 코드가 오작동할 위험이 있습니다. BottomNavigationView.menu.size()를 통해 아이템 개수를 동적으로 가져오고, 메뉴 ID (R.id.anyone_but_me_menu)를 이용해 반복문으로 인덱스를 찾는 방식으로 리팩토링하면 더 안정적인 코드가 될 것입니다.

Comment on lines +23 to +28
val selectedCollege =
college?.takeUnless { it.collegeId == -1 || it.collegeName.isBlank() || it.collegeName == "단과대" }
val selectedDepartment =
department?.takeUnless {
it.departmentId == -1 || it.departmentName.isBlank() || it.departmentName == "학과"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

하드코딩된 문자열 "단과대"와 "학과"는 유지보수성을 위해 상수로 정의하는 것이 좋습니다. 예를 들어, CollegeDepartment 모델의 companion object에 기본값을 나타내는 상수를 정의해두면, 향후 값이 변경될 때 한 곳에서만 수정하면 되므로 실수를 줄일 수 있습니다.

Intent(context, WebViewActivity::class.java).apply {
putExtra(WebViewActivity.EXTRA_URL, context.getString(R.string.anyone_but_me_url))
putExtra(WebViewActivity.EXTRA_TITLE, context.getString(R.string.nav_anyone_but_me))
putExtra("SCREEN_ID", ScreenId.ANYONE_BUT_ME_MAIN.name)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

인텐트 extra에 사용되는 키 "SCREEN_ID"가 하드코딩되어 있습니다. WebViewActivity의 companion object에 상수로 정의하고, 이를 참조하여 사용하는 것이 타입 안정성을 높이고 실수를 방지하는 데 도움이 됩니다. 예를 들어, WebViewActivity.EXTRA_SCREEN_ID와 같이 정의할 수 있습니다.

Comment on lines +41 to +46
style = TextStyle(
fontFamily = pretendardMedium,
fontWeight = FontWeight.Medium,
fontSize = 12.sp,
lineHeight = 18.sp
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

인라인으로 TextStyle을 정의하기보다 EatssuTheme.typography에 정의된 스타일을 사용하는 것이 앱 전체의 디자인 일관성을 유지하는 데 도움이 됩니다. body2caption 등 기존 스타일을 재사용하거나, 필요한 경우 테마에 새로운 텍스트 스타일을 추가하는 것을 고려해 보세요.

Copy link
Member

@HI-JIN2 HI-JIN2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@PeraSite
Copy link
Member Author

https://firebase.google.com/docs/in-app-messaging/explore-use-cases?hl=ko&_gl=1*1rcovlv*_up*MQ..*_ga*Mzc1MTUzMTcuMTc3MzYxODY3NQ..*_ga_CW55HF8NVT*czE3NzM2MTg2NzQkbzEkZzAkdDE3NzM2MTg2ODEkajUzJGwwJGgw

요런것도 있습니다~!

급해보여서 일단 하드코딩으로 배포해도 괜찮을 것 같아영

콘피그 써야하나? 했는데 인앱메세지란것도 있네요 ㄷㄷ
레거시 쌓이는덴 이유가 있다를 체감중

@PeraSite PeraSite merged commit bc02070 into develop Mar 15, 2026
2 checks passed
@PeraSite PeraSite deleted the feat/event-popup branch March 15, 2026 23:55
@PeraSite PeraSite mentioned this pull request Mar 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants