Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[부나] 3, 4단계 영화 극장 선택 제출합니다. #33

Merged
merged 96 commits into from
May 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
27b9fc2
refactor(TicketingResultActivity): intent() 함수명 변경
tmdgh1592 Apr 30, 2023
7703b5f
refactor(LocalDataStore): 불필요한 null 체크 제거
tmdgh1592 Apr 30, 2023
24e5dfe
refactor(Reminder): Reminder 클래스명 변경
tmdgh1592 Apr 30, 2023
4f7d7e7
fix(ReservationNotification): pushId를 고정값 1000에서 data의 해시코드로 변경
tmdgh1592 Apr 30, 2023
07d393a
refactor(Movie): 예약하는 기능을 Movie 클래스로 이동
tmdgh1592 Apr 30, 2023
3b02eb8
refactor(HistoryFragment): MVP 아키텍쳐로 리팩터링
tmdgh1592 May 2, 2023
093980c
refactor(HomeFragment): MVP 아키텍쳐로 리팩터링
tmdgh1592 May 2, 2023
8a13760
refactor(HomeFragment): MVP 아키텍쳐로 리팩터링
tmdgh1592 May 2, 2023
b6f1982
refactor(SettingFragment): MVP 아키텍쳐로 리팩터링
tmdgh1592 May 2, 2023
1a96aa3
refactor(TicketingResult): MVP 아키텍쳐로 리팩터링
tmdgh1592 May 2, 2023
a8bbe5d
refactor(TicketingActivity): MVP 아키텍쳐로 리팩터링
tmdgh1592 May 2, 2023
d384917
fix(SeatPickerActivity): intent extra data 가져오지 못하는 버그 수정
tmdgh1592 May 2, 2023
6590058
refactor(Ticketing): 뷰와 프레젠터 메서드와 파라미터 변경
tmdgh1592 May 3, 2023
0242535
refactor(Ticketing): View의 initView()에 movie 인자 추가
tmdgh1592 May 3, 2023
8aa32a1
refactor(Ticketing): view를 private으로 변경
tmdgh1592 May 3, 2023
d071f9a
refactor(HistoryFragment): presenter에 view를 attach하도록 변경
tmdgh1592 May 3, 2023
ebadeee
refactor(Ticketing): view를 private으로 변경
tmdgh1592 May 3, 2023
a814bcc
Revert "refactor(HistoryFragment): presenter에 view를 attach하도록 변경"
tmdgh1592 May 3, 2023
756b8d7
refactor(HistoryFragment): presenter에 view를 attach하도록 변경
tmdgh1592 May 3, 2023
a6d2cbb
refactor(SeatPicker): MVP 아키텍쳐로 리팩터링
tmdgh1592 May 3, 2023
d237a93
refactor(SeatPicker): MVP 아키텍쳐로 리팩터링
tmdgh1592 May 3, 2023
8fc7e43
refactor(CacheDataStore): DataStore 이름명 변경
tmdgh1592 May 3, 2023
76bbcf9
chore: Data 모듈에 Domain 의존성 추가
tmdgh1592 May 3, 2023
66c1ebf
feat: Reservation 데이터 모델 구현
tmdgh1592 May 3, 2023
dbff0c0
feat: Data, Domain mapper 구현
tmdgh1592 May 3, 2023
4b74487
feat(HistoryDao): 영화 예약 정보를 저장하는 기능 구현
tmdgh1592 May 3, 2023
b781e81
refactor(HomeFragment): Presenter detach() 호출하도록 변경
tmdgh1592 May 3, 2023
04e676c
feat(ReservationDao): 예매 내역을 불러오는 기능 구현
tmdgh1592 May 4, 2023
ae60ccc
feat(SeatPickerPresenter): 메서드 배치 순서 이동
tmdgh1592 May 4, 2023
118ab25
feat(HistoryFragment): 영화 예매시 예매 내역에 추가되는 기능 구현
tmdgh1592 May 4, 2023
23de4ea
Merge remote-tracking branch 'origin/step3' into step3
tmdgh1592 May 4, 2023
a20b4ba
refactor(MainActivity): MVP 아키텍쳐로 리팩토링
tmdgh1592 May 4, 2023
4656710
chore(Mockk): Mockk 라이브러리 추가
tmdgh1592 May 4, 2023
d2594a3
refactor(MainScreenState): 클래스명을 MainState로 변경
tmdgh1592 May 4, 2023
515fe0e
test(MainPresenterTest): MainPresenter 테스트 코드 작성
tmdgh1592 May 4, 2023
597de77
test(HistoryPresenterTest): HistoryPresenter 테스트 코드 작성
tmdgh1592 May 4, 2023
615a10e
test(HomePresenter): HomePresenter 테스트 코드 작성
tmdgh1592 May 4, 2023
840f092
test(SettingPresenterTest): SettingPresenter 테스트 코드 작성
tmdgh1592 May 4, 2023
5b9271f
test(TicketingPresenterTest): TicketingPresenter 테스트 코드 작성
tmdgh1592 May 4, 2023
94b070e
test(SeatPickerPresenterTest): SeatPickerPresenter 테스트 코드 작성
tmdgh1592 May 4, 2023
2a15933
docs(README): 극장 선택 기능 목록 작성
tmdgh1592 May 5, 2023
c1f0cb6
feat(TheaterPickerDialog): 영화 선택후 극장을 선택하는 기능 구현
tmdgh1592 May 5, 2023
86f4589
test(TheaterPresenterTest): TheaterPresenter 테스트 코드 작성
tmdgh1592 May 5, 2023
eee64ee
refactor(HistoryPresenter): 데이터 바인딩 적용
tmdgh1592 May 6, 2023
3170489
refactor(HomeFragment): 데이터 바인딩 적용
tmdgh1592 May 6, 2023
da06418
refactor(SettingFragment): 데이터 바인딩 적용
tmdgh1592 May 6, 2023
d7c21b9
fix(fragment_home): Fragment variable 제거
tmdgh1592 May 6, 2023
22e33fb
refactor(MovieViewHolder): DataBinding 적용
tmdgh1592 May 6, 2023
5b56ca7
refactor(HistoryViewHolder): DataBinding 적용
tmdgh1592 May 6, 2023
e6086ec
refactor(MainActivity): DataBinding 적용
tmdgh1592 May 6, 2023
73d450f
refactor(TicketingResultActivity): DataBinding 적용
tmdgh1592 May 6, 2023
29fafa1
refactor(TicketingActivity): DataBinding 적용
tmdgh1592 May 6, 2023
cb74ad8
refactor(SeatPickerActivity): DataBinding 적용
tmdgh1592 May 6, 2023
3352b84
test: Databinding 리팩토링으로 인해 사용되지 않는 테스트 코드 제거
tmdgh1592 May 6, 2023
d455eb7
refactor: item_movie_seat.xml 에서 좌석 TextView가 padding을 갖지 않도록 변경
tmdgh1592 May 8, 2023
c9a614b
refactor(MainContract): MainContract의 attach(), deatch() 메서드 제거
tmdgh1592 May 8, 2023
f6b7961
refactor(HistoryContract): HistoryContract attach(), detach() 메서드 제거
tmdgh1592 May 8, 2023
b7e7a86
refactor(HomeContract): HomeContract attach(), detach() 메서드 제거
tmdgh1592 May 8, 2023
779ef67
refactor(SettingContract): SettingContract attach(), detach() 메서드 제거
tmdgh1592 May 8, 2023
a0a460b
refactor(TheaterContract): TheaterContract attach(), detach() 메서드 제거
tmdgh1592 May 8, 2023
8ac321c
refactor(SeatPickerContract): SeatPickerContract attach(), detach() 메…
tmdgh1592 May 8, 2023
aeb69a1
refactor(TicketingContract): TicketingContract attach(), detach() 메서드 제거
tmdgh1592 May 8, 2023
7355c09
refactor(TicketingResultContract): TicketingResultContract attach(), …
tmdgh1592 May 8, 2023
3b8b76d
fix(TicketingPickerDialog): 다이얼로그 실행시 앱 팅기는 버그 수정
tmdgh1592 May 8, 2023
afcbc7a
refactor(MainPresenter): onXxx()와 같은 이벤트 함수 네이밍을 변경
tmdgh1592 May 8, 2023
9936736
refactor(SettingPresenter): onXxx()와 같은 이벤트 함수 네이밍을 변경
tmdgh1592 May 8, 2023
3baa1fd
refactor(SeatPickerContract): onXxx()와 같은 이벤트 함수 네이밍을 변경
tmdgh1592 May 8, 2023
0cedfdd
refactor(TicketingContract): onXxx()와 같은 이벤트 함수 네이밍을 변경
tmdgh1592 May 8, 2023
fd75b56
refactor(TicketingResultContract): View.close() 메서드 제거
tmdgh1592 May 8, 2023
c10de9b
refactor(TicketingPresenter): 선택 가능한 영화 날짜가 비어있을 때 경고 토스트를 보이도록 변경
tmdgh1592 May 8, 2023
61f11f5
refactor(TheaterDao): 인터페이스로 변경
tmdgh1592 May 8, 2023
6480aa2
refactor(ReservationDao): Database를 외부에서 주입받도록 변경
tmdgh1592 May 8, 2023
317d924
refactor(Repository): Repository 인터페이스를 domain 모듈로 이동
tmdgh1592 May 8, 2023
2eb3c7f
refactor(TicketingResult): Presenter에서 Reservation을 반환하지 않도록 변경
tmdgh1592 May 8, 2023
7e57f3a
refactor(TicketingResult): Presenter에서 Reservation을 반환하지 않도록 변경
tmdgh1592 May 8, 2023
1a85bee
refactor(activity_main): Presenter 대신 람다를 전달받도록 변경
tmdgh1592 May 8, 2023
e5a4189
Merge remote-tracking branch 'origin/step4' into step4
tmdgh1592 May 8, 2023
19e13c9
refactor(RecyclerViewBindingAdapter): BindingAdapter 속성을 공통적으로 사용할 수 …
tmdgh1592 May 8, 2023
dedd320
refactor(HomeFragment): xml에서 presenter 메서드를 호출하도록 변경
tmdgh1592 May 8, 2023
b583b65
refactor(TheaterPickerDialog): xml에서 presenter 메서드를 호출하도록 변경
tmdgh1592 May 8, 2023
eaa8f75
refactor(package): views 패키지명을 ui로 변경
tmdgh1592 May 8, 2023
c77b796
refactor(BaseFragment): 모든 Fragment에 BaseFragment 적용
tmdgh1592 May 8, 2023
4f23a58
refactor(BaseFragmentDialog): BaseFragmentDialog 적용
tmdgh1592 May 8, 2023
0a4188c
fix(TheaterPickerDialog): 아이템 클릭해도 무응답인 버그 수정
tmdgh1592 May 8, 2023
7950fed
refactor(TicketingActivity): BaseActivity 적용
tmdgh1592 May 8, 2023
6eeec45
refactor(TicketingResultActivity): BaseActivity 적용
tmdgh1592 May 8, 2023
2df6306
refactor(SeatPickerActivity): BaseActivity 적용
tmdgh1592 May 8, 2023
5ed7a8d
refactor(HistoryFragment): HistoryFragment 반환하는 함수 구현
tmdgh1592 May 8, 2023
8b8be46
refactor(MainPresenter): 불필요한 코드 제거
tmdgh1592 May 11, 2023
484f541
refactor(MovieRepository): 영화 목록을 레퍼지토리에서 가져오도록 변경
tmdgh1592 May 11, 2023
261fb21
refactor(TheaterPickerDialog): showTheaterList() call할 때 극장을 새로고침하도록 변경
tmdgh1592 May 11, 2023
1602f18
refactor(TheaterPresenter): 극장 목록을 가져올 때, 기존 극장 목록을 초기화하고 새롭게 추가하도록 변경
tmdgh1592 May 11, 2023
cfb076e
refactor(SeatPickerPresenter): isAllPicked() 메서드를 private으로 변경
tmdgh1592 May 11, 2023
a90d451
fix(SeatPickerActivity): 예약 버튼을 클릭해도 다이얼로그가 보이지 않는 버그 수정
tmdgh1592 May 11, 2023
fcbdb0f
refactor(HomePresenter): Presenter에서 영화 아이템 목록에 광고를 추가해서 반환하도록 변경
tmdgh1592 May 11, 2023
9fe5402
fix(MainActivity): MainActivity에서 처음 시작할 때 HomeFragment 화면이 보이지 않는 버그 수정
tmdgh1592 May 11, 2023
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
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,3 +86,20 @@
### Data
- [x] 사용자가 앱을 재실행해도 설정 데이터가 남아있어야 한다.
- [x] SharedPreference를 사용한다.

## step4

### UI
- [x] 영화 선택 후 극장을 선택할 수 있다.
- [x] 예매 완료 화면에서 극장 이름이 길 경우 말줄임표로 표시되어야 한다.

### Data
- [x] 극장별로 상영하는 영화와 상영시간은 달라질 수 있다.
- 예시)
- 선릉 극장
+ 스타워즈(09시, 11시, 15시)
+ 해리포터(13시, 15시, 17시, 19시)
- 잠실 극장
+ 스즈메의 문단속(09시)
+ 해리포터(10시, 12시, 14시)
+ 어벤져스(11시, 13시)
16 changes: 16 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("kotlin-parcelize")
id("kotlin-kapt")
}

android {
Expand Down Expand Up @@ -38,10 +39,24 @@ android {
kotlinOptions {
jvmTarget = "11"
}
packagingOptions {
resources {
excludes += "META-INF/LICENSE.md"
excludes += "META-INF/LICENSE-notice.md"
}
jniLibs {
useLegacyPackaging = true
}
}
dataBinding {
enable = true
}
}

dependencies {
testImplementation("junit:junit:4.12")
val fragmentVersion = "1.5.5"
val mockkVersion = "1.13.5"

implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.appcompat:appcompat:1.6.0")
Expand All @@ -59,4 +74,5 @@ dependencies {
implementation(project(":data"))
implementation("androidx.fragment:fragment-ktx:1.4.0")
androidTestImplementation("androidx.fragment:fragment-testing:$fragmentVersion")
testImplementation("io.mockk:mockk-android:$mockkVersion")
}

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package woowacourse.movie.presentation.activities.main.fragments.setting
package woowacourse.movie.presentation.ui.main.fragments.setting

import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
Expand All @@ -13,8 +13,7 @@ import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import woowacourse.movie.R
import woowacourse.movie.presentation.activities.main.MainActivity
import woowacourse.movie.presentation.activities.main.fragments.setting.SettingFragment.Companion.PUSH_ALLOW_KEY
import woowacourse.movie.presentation.ui.main.MainActivity

@RunWith(AndroidJUnit4::class)
class SettingFragmentTest {
Expand All @@ -34,8 +33,6 @@ class SettingFragmentTest {

@Test
internal fun 푸시_동의_스위치가_활성화_상태일_때_누르면_비활성화한다() {
setPushState(true)

onView(withId(R.id.setting))
.check(matches(isDisplayed()))
.perform(click())
Expand All @@ -47,8 +44,6 @@ class SettingFragmentTest {

@Test
internal fun 푸시_동의_스위치가_비활성화_상태일_때_누르면_활성화한다() {
setPushState(false)

onView(withId(R.id.setting))
.check(matches(isDisplayed()))
.perform(click())
Expand All @@ -57,8 +52,4 @@ class SettingFragmentTest {
.perform(click())
.check(matches(isChecked()))
}

private fun setPushState(value: Boolean) {
MovieApplication.dataStore.setBoolean(PUSH_ALLOW_KEY, value)
}
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,18 @@
package woowacourse.movie.presentation.activities.ticketing
package woowacourse.movie.presentation.ui.ticketing

import android.content.Intent
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.isEnabled
import androidx.test.espresso.matcher.ViewMatchers.isSelected
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import org.hamcrest.CoreMatchers.not
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import woowacourse.movie.R
import woowacourse.movie.presentation.activities.main.fragments.home.HomeFragment.Companion.MOVIE_KEY
import woowacourse.movie.presentation.activities.ticketing.TicketingActivity.Companion.MOVIE_DATE_KEY
import woowacourse.movie.presentation.activities.ticketing.TicketingActivity.Companion.MOVIE_TIME_KEY
import woowacourse.movie.presentation.activities.ticketing.TicketingActivity.Companion.TICKET_KEY
import woowacourse.movie.presentation.model.MovieDate
import woowacourse.movie.presentation.model.MovieTime
import woowacourse.movie.presentation.model.Ticket
Expand All @@ -31,6 +23,7 @@ import java.time.LocalDate
@LargeTest
internal class SeatPickerActivityTest {
private val movie: Movie = Movie(
0,
"테스트 영화",
startDate = LocalDate.of(2023, 4, 1),
endDate = LocalDate.of(2023, 4, 30),
Expand All @@ -52,16 +45,16 @@ internal class SeatPickerActivityTest {
"E1", "E2", "E3", "E4",
)

private val intent =
Intent(ApplicationProvider.getApplicationContext(), SeatPickerActivity::class.java).apply {
putExtra(MOVIE_KEY, movie)
putExtra(TICKET_KEY, movieTicket)
putExtra(MOVIE_DATE_KEY, selectedMovieDate)
putExtra(MOVIE_TIME_KEY, selectedMovieTime)
}
// private val intent =
// Intent(ApplicationProvider.getApplicationContext(), SeatPickerActivity::class.java).apply {
// putExtra(MOVIE_KEY, movie)
// putExtra(TICKET_KEY, movieTicket)
// putExtra(MOVIE_DATE_KEY, selectedMovieDate)
// putExtra(MOVIE_TIME_KEY, selectedMovieTime)
// }

@get:Rule
internal val activityRule = ActivityScenarioRule<SeatPickerActivity>(intent)
// @get:Rule
// internal val activityRule = ActivityScenarioRule<SeatPickerActivity>(intent)

@Test
internal fun 영화_제목이_보여진다() {
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,16 @@
android:theme="@style/Theme.Movie"
tools:targetApi="31">
<activity
android:name=".presentation.activities.main.MainActivity"
android:name=".presentation.ui.main.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".presentation.activities.ticketing.TicketingActivity" />
<activity android:name=".presentation.activities.ticketing.SeatPickerActivity" />
<activity android:name=".presentation.activities.ticketingresult.TicketingResultActivity" />
<activity android:name=".presentation.ui.ticketing.TicketingActivity" />
<activity android:name=".presentation.ui.seatpicker.SeatPickerActivity" />
<activity android:name=".presentation.ui.ticketingresult.TicketingResultActivity" />

<receiver
android:name=".presentation.receiver.ReservationPushReceiver"
Expand Down
Loading