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

[1.1.0/AN_FEAT] 배틀 선택 데이터 저장 #324

Merged
merged 10 commits into from
Sep 26, 2024

Conversation

JoYehyun99
Copy link
Contributor

작업 영상

  • PASS

작업한 내용

  • 내 포켓몬, 기술, 상대 포켓몬 선택 데이터 저장 기능 구현
  • Datastore을 사용하여 해당 데이터들을 저장했습니다.
  • 현재 skill ID 값으로 해당 skill 데이터를 불러오는 API 는 따로 없어서 일단 이 전에 불러왔던 skill들을 map 형식으로 캐싱해두고, 나중에 find를 활용하여 해당하는 Skill 데이터를 찾을 수 있도록 설정했습니다.
  • Dex Repository 에서도 포켓몬 ID를 넘기면 해당 Pokemon 을 반환해주는 메서드도 추가했습니다!
    • 기존에 있던 부분은 Detail을 반환하기 때문

🚀Next Feature

@github-actions github-actions bot added AN_FEAT ✨ 안드 새로운 기능 v1.1.0 🏷️ labels Sep 19, 2024
@JoYehyun99 JoYehyun99 linked an issue Sep 19, 2024 that may be closed by this pull request
1 task
Copy link
Contributor

@sh1mj1 sh1mj1 left a comment

Choose a reason for hiding this comment

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

안드로이드 공식 문서 코드랩 의 예시 코드와 비슷하게 작성하셨군요~

날씨는 따로 저장하지 않아도 될지에 대해 리뷰 남겨두었습니다.
고생 많으셨습니다!!!!


data class PokemonWithSkillIds(val pokemonId: String, val skillId: String)

fun SavedPokemonWithSkill.toData() = PokemonWithSkillIds(pokemonId, skillId)
Copy link
Contributor

Choose a reason for hiding this comment

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

SavedPokemonWithSkill 는 로컬 모듈에서 사용하는 것이고, PokemonWithSkillIds 은 데이터 모듈에서 사용하기 위한 것인가요?

네이밍이 뭔가 좀 헷갈리는 것 같기도 합니다

Copy link
Contributor Author

Choose a reason for hiding this comment

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

맞습니다!!!
Datastore 에 저장되는 객체 네이밍을 XXEntity 로 설정해도 되런지 ,,, 모르겠네요,,,!!!!

pokemonId: String,
skillId: String,
) {
battleDataStore.savePokemonWithSkill(pokemonId, skillId)
Copy link
Contributor

Choose a reason for hiding this comment

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

날씨는 따로 저장하지 않아도 될까요?

Copy link
Contributor Author

@JoYehyun99 JoYehyun99 Sep 20, 2024

Choose a reason for hiding this comment

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

고민 중입니다,,,🥲
날씨의 경우 default 인 경우가 더 많은 것 같아서 저장 로직에서 제외하기는 했는데,,,
어떻게 생각하시나요 다들!!!!

Copy link
Contributor

Choose a reason for hiding this comment

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

날씨를 자주 선택하는 케이스가 적을 것 같긴한데..!
선택했다가 날씨만 저장이 되지 않으면 😳할 것 같긴해요..

Copy link
Contributor

Choose a reason for hiding this comment

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

저도 일관성있게 날씨도 저장되면 좋을듯?

Copy link
Contributor

@kkosang kkosang left a comment

Choose a reason for hiding this comment

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

이제 정말 포켓로그 하면서 사용할 수 있겠다 !!
고생하셨습니다 조대리님. 😁

@@ -12,7 +12,7 @@ data class BattleSelectionsState(
) {
val allSelected: Boolean
get() =
minePokemon.isSelected() && skill.isSelected() && opponentPokemon.isSelected()
minePokemon.isSelected() && skill.isSelected() && opponentPokemon.isSelected() && weather.isSelected()
Copy link
Contributor

Choose a reason for hiding this comment

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

별건 아니지만 이렇게도 나타낼 수 있을 거 같아요 !

listOf(minePokemon, skill, opponentPokemon,weather).all { it.isSelected() }

Copy link
Contributor

Choose a reason for hiding this comment

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

가독성 좋은데요?! LGTM 👍 👍 👍

battleDataStore.savePokemonWithSkill(pokemonId, skillId)
}

suspend fun savePokemon(pokemonId: String) = battleDataStore.savePokemon(pokemonId)
Copy link
Contributor

Choose a reason for hiding this comment

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

해당 함수의 반환값이 없는데 이렇게 작성한 이유가 있나요?!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

실수임당 ,, ㅎㅎ

pokemonId: String,
skillId: String,
) {
battleDataStore.savePokemonWithSkill(pokemonId, skillId)
Copy link
Contributor

Choose a reason for hiding this comment

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

날씨를 자주 선택하는 케이스가 적을 것 같긴한데..!
선택했다가 날씨만 저장이 되지 않으면 😳할 것 같긴해요..

Copy link
Contributor

@murjune murjune left a comment

Choose a reason for hiding this comment

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

고생하셨습니다 예니 👍
코드 리뷰가 좀 늦어 미안합니다..

몇 가지 논의해볼게 있는거 같아요!

@@ -12,7 +12,7 @@ data class BattleSelectionsState(
) {
val allSelected: Boolean
get() =
minePokemon.isSelected() && skill.isSelected() && opponentPokemon.isSelected()
minePokemon.isSelected() && skill.isSelected() && opponentPokemon.isSelected() && weather.isSelected()
Copy link
Contributor

Choose a reason for hiding this comment

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

가독성 좋은데요?! LGTM 👍 👍 👍

Comment on lines +68 to +73
val weatherId = requireNotNull(weather.selectedData()?.id) { "날씨는 null일 수 없습니다." }
val myPokemonId =
requireNotNull(minePokemon.selectedData()?.id) { "내 포켓몬은 null일 수 없습니다." }
val mySkillId = requireNotNull(skill.selectedData()?.id) { "내 스킬은 null일 수 없습니다." }
val opponentPokemonId =
requireNotNull(opponentPokemon.selectedData()?.id) { "상대 포켓몬은 null일 수 없습니다." }
Copy link
Contributor

Choose a reason for hiding this comment

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

requireNotNull 활용 좋습니다 👍 👍 👍

@@ -24,7 +24,7 @@ class SkillSelectionFragment :
private val sharedViewModel: BattleSelectionViewModel by activityViewModels()
private val viewModel: SkillSelectionViewModel by viewModels<SkillSelectionViewModel> {
SkillSelectionViewModel.factory(
DefaultBattleRepository.instance(),
DefaultBattleRepository.instance(requireContext()),
Copy link
Contributor

Choose a reason for hiding this comment

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

오호 Activity Context 를 사용하셨군요..!
Application Context 로 변경 부탁 드립니다.

화면 회전이 발생할 경우 �DataStore 는 죽어있는 Context를 들고 있게 됩니다.
그럼 액티비티는 참조 해지를 못해서 메모리 누수가 발생할 것입니다.

Suggested change
DefaultBattleRepository.instance(requireContext()),
DefaultBattleRepository.instance(requireContext().applicationContext),

Copy link
Contributor

Choose a reason for hiding this comment

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

오홍 화면 회전시에도 상태가 남아있는 객체는 Application Context로 관리하는군요.. 메모 📝

pokemonId: String,
skillId: String,
) {
battleDataStore.savePokemonWithSkill(pokemonId, skillId)
Copy link
Contributor

Choose a reason for hiding this comment

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

저도 일관성있게 날씨도 저장되면 좋을듯?

private val remoteBattleDataSource: RemoteBattleDataSource,
private val pokemonRepository: DexRepository,
) : BattleRepository {
private val cachedSkills: HashMap<Long, List<BattleSkill>> = hashMapOf()
Copy link
Contributor

Choose a reason for hiding this comment

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

여기서 MutableMap 이 아닌 HashMap 을 사용하신 이유가 있으실까용?

참고) mutableMapOf() 를 사용하면 내부적으로 LinkedHashMap()을 사용합니당

Copy link
Contributor Author

Choose a reason for hiding this comment

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

딱히 어떤 이유는 없고 그냥 습관(?) 입니다,,,ㅎㅎㅎ
주입 순서 저장의 차이라고만 알고 있습니다만 🤔

Copy link
Contributor

Choose a reason for hiding this comment

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

만약 삽입 순서가 필요하지 않다면, HashMap이 더 가볍고 약간 더 빠릅니다.

그렇다고는 합니다

Copy link
Contributor

Choose a reason for hiding this comment

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

@JoYehyun99 반드시 적용할 내용은 아니지만 저는 MutableMap으로 변경하는 것을 제안드립니다.

Suggested change
private val cachedSkills: HashMap<Long, List<BattleSkill>> = hashMapOf()
private val cachedSkills: MutableMap<Long, List<BattleSkill>> = hashMapOf()

반드시 적용할 내용은 아니지만 MutableMap 바꿔주셨으면 좋겠습니다!

이유 1) 구현체 타입보다는 인터페이스 타입인 MutableMap으로 추상화하는 것이 추후 ConcurrentHashMap 이나 다른 �LinkedHashMap 으로 바뀔 경우 더 유연하게 바꿀 수 있을 것입니다!


참고) LinkedHashMap 가 필요한 경우가 뭐가 있을까 생각해보았는데, 아마 이를 활용해서 LRU 캐시를 구현할 때 사용할 수 있을 것 같습니다.(쉽게 말해 가장 오래 사용안한 데이터 부터 삭제하는 캐시 전략입니다)

LinkedHashMap 은 accessOrder 라는 옵션과 사이즈 크기의 limit 를 지정해줄 수 있어 LRU 캐시를 구현할 수 있습니다.

Comment on lines +23 to +28
override suspend fun availableSkills(dexNumber: Long): List<BattleSkill> =
cachedSkills[dexNumber] ?: run {
val skills = remoteBattleDataSource.availableSkills(dexNumber).distinct()
cachedSkills[dexNumber] = skills
skills
}
Copy link
Contributor

Choose a reason for hiding this comment

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

캐시를 사용하신다면 AnalyticsLogger 도 연동 부탁드립니당!!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

�해당 부분은 포켓몬에 해당 하는 모든 스킬 리스트들을 캐싱하는데, 어떤식으로 로깅을 달아야하는지 모르겠어요 🥲
기존에 있는 포켓몬, 스킬 선택에 대한 로깅이 해당 캐싱에 영향을 받지는 않고 있습니다!

Copy link
Contributor

Choose a reason for hiding this comment

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

로깅을 �Activity 에서 찍고 있는 거라면 상관 없긴 합니다! 맞나용?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

맞슴돠~

Comment on lines 15 to 16
@Serializable
data class SavedPokemonWithSkill(val pokemonId: String, val skillId: String)
Copy link
Contributor

Choose a reason for hiding this comment

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

�String id 2개면 띠로 저장하는 방식도 좋을 것 같아요!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

오! 저장은 따로 해도 좋을 것 같네요 👀

@murjune
Copy link
Contributor

murjune commented Sep 22, 2024

/noti 예니 코리 남겼습니다 한 번 봐주소~

@JoYehyun99
Copy link
Contributor Author

/noti
날씨 저장 빼고 나머지 부분 반영했으요
스피너 못하겠다 🥲

Copy link
Contributor

@sh1mj1 sh1mj1 left a comment

Choose a reason for hiding this comment

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

LGTM~
날씨 저장 관련해서 너무 막히는가 싶으면 어떤 부분에서 막히는지 같이 이야기해봅시당~

private val remoteBattleDataSource: RemoteBattleDataSource,
private val pokemonRepository: DexRepository,
) : BattleRepository {
private val cachedSkills: HashMap<Long, List<BattleSkill>> = hashMapOf()
Copy link
Contributor

Choose a reason for hiding this comment

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

만약 삽입 순서가 필요하지 않다면, HashMap이 더 가볍고 약간 더 빠릅니다.

그렇다고는 합니다

private companion object {
const val BATTLE_PREFERENCE_NAME = "battle"
val PAIR_POKEMON_SELECTION_KEY = stringPreferencesKey("pair_pokemon_selection")
val PAIR_SKILL_SELECTION_KEY = stringPreferencesKey("pair_skill_selection")
Copy link
Contributor

Choose a reason for hiding this comment

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

이 PAIR 라는 의미가 무엇인가요?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

포켓몬 + 스킬, 포켓몬 을 구분하기 위함,,,입니다,,,,ㅎ

context.dataStore.edit {
it[PAIR_POKEMON_SELECTION_KEY] = pokemonId
it[PAIR_SKILL_SELECTION_KEY] = skillId
}
Copy link
Contributor

Choose a reason for hiding this comment

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

포켓몬과 스킬을 DataStore 에 저장할 때 하나의 객체로 묶어서 저장하지 않으니
Json.encodeToString(data) 코드가 없어져서 보기 좋네요~

@kkosang
Copy link
Contributor

kkosang commented Sep 25, 2024

/noti
굿 리뷰 반영 확인했습니다 👍

Copy link
Contributor

@murjune murjune left a comment

Choose a reason for hiding this comment

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

고생하셨습니다 예니~~
데모데이 때 스킬 저장부분 어려웠던거 어필해봅시다 ㅋㅋㅋ

private val remoteBattleDataSource: RemoteBattleDataSource,
private val pokemonRepository: DexRepository,
) : BattleRepository {
private val cachedSkills: HashMap<Long, List<BattleSkill>> = hashMapOf()
Copy link
Contributor

Choose a reason for hiding this comment

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

@JoYehyun99 반드시 적용할 내용은 아니지만 저는 MutableMap으로 변경하는 것을 제안드립니다.

Suggested change
private val cachedSkills: HashMap<Long, List<BattleSkill>> = hashMapOf()
private val cachedSkills: MutableMap<Long, List<BattleSkill>> = hashMapOf()

반드시 적용할 내용은 아니지만 MutableMap 바꿔주셨으면 좋겠습니다!

이유 1) 구현체 타입보다는 인터페이스 타입인 MutableMap으로 추상화하는 것이 추후 ConcurrentHashMap 이나 다른 �LinkedHashMap 으로 바뀔 경우 더 유연하게 바꿀 수 있을 것입니다!


참고) LinkedHashMap 가 필요한 경우가 뭐가 있을까 생각해보았는데, 아마 이를 활용해서 LRU 캐시를 구현할 때 사용할 수 있을 것 같습니다.(쉽게 말해 가장 오래 사용안한 데이터 부터 삭제하는 캐시 전략입니다)

LinkedHashMap 은 accessOrder 라는 옵션과 사이즈 크기의 limit 를 지정해줄 수 있어 LRU 캐시를 구현할 수 있습니다.

Comment on lines +23 to +28
override suspend fun availableSkills(dexNumber: Long): List<BattleSkill> =
cachedSkills[dexNumber] ?: run {
val skills = remoteBattleDataSource.availableSkills(dexNumber).distinct()
cachedSkills[dexNumber] = skills
skills
}
Copy link
Contributor

Choose a reason for hiding this comment

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

로깅을 �Activity 에서 찍고 있는 거라면 상관 없긴 합니다! 맞나용?

Copy link
Contributor

@murjune murjune left a comment

Choose a reason for hiding this comment

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

실수로 request changed 보냄..

@murjune
Copy link
Contributor

murjune commented Sep 25, 2024

/noti 날씨 저장 해결했습니다~ 이건 따로 PR 분리해야 보기 편하실 거 같아서 예니 머지되면 올릴게요

@JoYehyun99 JoYehyun99 merged commit 59efa72 into an/develop Sep 26, 2024
5 checks passed
@JoYehyun99 JoYehyun99 deleted the an/feat/battle-save branch September 26, 2024 01:03
murjune added a commit that referenced this pull request Oct 23, 2024
* #6 초기 세팅

build: rest-assured 의존성 추가

chore: 중복된 gitignore 삭제

pr 템플릿

android pr builder
docs: project 단 gitignore

build: gradle 버전 관리

feat: PokeRogueHelperApp

chore: Manifest INTERNET 설정

chore: Packaging base

utils: 프로젝트 ui 에서 사용할 util 추가

utils: test util

style: ktFormat

fix: 깃 충돌 해결

fix: PR Builder 수정

delete: assertj 삭제

build: room 설정 및 glide-compiler

refactor: 코드리뷰 반영

- GridSpacingItemDecoration 주석 삭제
- RecyclerViewItemCountAssertion 주석 삭제

refactor: withItemCount, performClickHolderAt 함수 RecyclerViewUtil 로 이동

- 기존 ViewInteractonExtensions

refactor: getDeviceSize -> deviceSize로 네이밍 수정

refactor: getDescription 에 View Id 추가

refactor: matchDescendantWithText 로 네이밍 수정

refactor: CommonBindingAdapter 로 네이밍 수정

build: FlexboxLayout 추가

* [AN-UI] 안드로이드 공통 디자인 컴포넌트 세팅 (#14)

* ui: add base icon

* ui: add color

* ui: add poke type icon

* ui: add pretendard font

논의 해봐야함

* ui: Primary Theming

* fix: 잘못된 함수 네이밍 수정

* ui: 평행사변형 커스텀뷰

* style: ktFormat

* [AN-UI] 상성 페이지 UI 구현 (#8)

* init 기초 세팅

- pr 템플릿
- android pr builder

* ui: 타입 선택 화면 관련 drawable 추가

* ui: 타입 선택 화면 xml 구현

* ui: 타입 선택 바텀 시트 xml 구현

* chore: 초기 세팅과 병합

* feat: 상성 타입 데이터 정의

- UI 모델 정의 및 Mapper

* feat: 상성 타입 선택 바텀 시트 구현

* feat: 상성 화면 구현

* feat: 상성 화면으로 이동 로직(임시용) 구현

- 상성 화면 확인을 위한 작업

* feat: 상성 결과 화면 커스텀 뷰 구현

* chore: 패키지 명 수정

* feat: 상성 결과 글자 색상 변경 부분 추가

* chore: 상성 결과 커스텀뷰 네이밍 수정

* chore: UiModel mapper 패키지 이동

* chore: 상성 결과 변수 네이밍 수정

* refactor: 바텀 시트 전역 변수 제거

* refactor: 커스텀뷰 바인딩 연결

* feat: 상성 결과 색상 설정 기능

---------

Co-authored-by: murjune <[email protected]>

* [AN-UI] 홈 화면 UI 구현 (#11)

* ui: toolbar와 관련된 drawable 추가

* ui: toolbar xml 작성

* ui: toolbar 구현

* ui: home과 관련된 drawable 추가

* ui: home xml 작성

* feat: 메뉴 클릭시 화면 이동

* chore: xml id 컨벤션

* chore: 코드리뷰 반영

* ui: home drawable 추가

* ui: 스타일 적용

---------

Co-authored-by: murjune <[email protected]>

* [AN-HACKATON] 해커톤 작업한거 develop 에 머지 (#27)

* ci: an/hack/develop 추가

* [AN-FEAT] 해커톤용 포켓몬 도감 UI/Presentation 로직 (#22)

* 심지 커밋 스틸

ui: 포켓몬 도감 목록 프래그먼트 파일을 생성하여 연결한다

chore: 타입에 임시로 사용할 긴 이미지 추가

ui: 포켓몬 목록 화면의 item 을 보여준다

- 일단 타입이 두 가지가 있다고 가정하고 화면을 그린다

chore: 타입에 임시로 사용할 작은 동그란 이미지 추가

refactor: PokemonUiModel 의 더미 이미지 url 변경

ui: 포켓몬 도감 목록 화면의 item 의 배경, 텍스트 색상을 변경한다

ui: 포켓몬 목록 프래그먼트에 리사이클러뷰 생성해서 연결

ui: 포켓몬 목록 리사이클러뷰 어댑터에 데코레이터를 추가한다

ui: 포켓몬 목록 프래그먼트에 서치 바를 추가한다

chore: 사용하지 않는 타입 아이콘 제거, 문자열 리소스로 변경

* ui: toolbar

* feat: poke List

* feat: common Linear 용 Decoration

* feat: common ImageRes bindingAdapter

* feat: poke detail

* feat: poke list

* refactor: 패키징

* style: ktFormat

* feat: placeholder, error icon 추가

* [AN-HACK] 포켓몬 특성 기능 구현 (#25)

* ci: an/hack/develop 추가

* 심지 커밋 스틸

ui: 포켓몬 도감 목록 프래그먼트 파일을 생성하여 연결한다

chore: 타입에 임시로 사용할 긴 이미지 추가

ui: 포켓몬 목록 화면의 item 을 보여준다

- 일단 타입이 두 가지가 있다고 가정하고 화면을 그린다

chore: 타입에 임시로 사용할 작은 동그란 이미지 추가

refactor: PokemonUiModel 의 더미 이미지 url 변경

ui: 포켓몬 도감 목록 화면의 item 의 배경, 텍스트 색상을 변경한다

ui: 포켓몬 목록 프래그먼트에 리사이클러뷰 생성해서 연결

ui: 포켓몬 목록 리사이클러뷰 어댑터에 데코레이터를 추가한다

ui: 포켓몬 목록 프래그먼트에 서치 바를 추가한다

chore: 사용하지 않는 타입 아이콘 제거, 문자열 리소스로 변경

* ui: toolbar

* feat: menu 클릭시 해당 페이지로 이동

* ui: 특성 화면과 관련된 drawable 추가

* ui: 특성 화면 xml 작성

* feat: 특성 화면 기능 구현

* 오둥꺼랑 머지

* 토스트 삭제

* feat: dummy 특성

* feat:dummy 포켓몬

---------

Co-authored-by: murjune <[email protected]>

* [AN-HACK] 상성 기능 구현 (#26)

* ci: an/hack/develop 추가

* ui: theme 설정 및 컬러 적용

* refactor: type UI 모델 재정의

- 색상도 포함하도록 수정

* chore: 타입 데이터 추가 및 파일 위치 변경

* chore: 불필요한 파일 제거

* feat: 타입 결과 반환하는 로직 구현

* feat: 타입 선택 바텀 시트 데이터 및 이벤트 핸들러 연결

* feat: 상성 결과 화면 데이터 연결 및 이벤트 처리

* refresh, 눌렀을 때 바텀시트 dismiss

* ktlintformat

---------

Co-authored-by: murjune <[email protected]>

---------

Co-authored-by: SangHyun Ko <[email protected]>
Co-authored-by: Yehyun Jo <[email protected]>

* [AN-UI] 포켓몬 상성 Icon + TextAppearance 추가 (#33)

* ui: TextApearance

* ui: icon svg로 변경

* ui: Home Appearance 적용

* [AN-FEAT] Network Config 추가 (#34)

* chore: gitkeep 삭제

* build: Base URL 추가

* CI: add base url Checker

* feat: Retrofit Module

* feat: Service Module

* feat: PokeDexService

* feat: AbilityService

* style: ktlint

* [AN-REFACTOR] 포켓몬 도감 데이터는 데이터 레이어에서 불러온다. (#36)

* chore: pokemon2 패키지 이름을 dex 로 변경한다

* refactor: PokemonListFragment 에서 뷰모델을 BaseViewModelFactory 을 통해 생성한다

* refactor: PokemonListFragment 어댑터를 lazy 하게 생성한다

* refactor: PokemonDetailFragment 에서 뷰모델을 BaseViewModelFactory 을 통해 생성한다

* refactor: PokemonDetailFragment 의 어댑터를 lazy 하게 생성한다

* feat(data/model/Type): 포켓몬 타입 원시값 포장, 캐싱한다

- 캐싱을 통해 타입을 계속해서 생성하지 않아도 된다
- 추후에 타입이 추가되었을 때 서버 통신을 통해 TYPES 맵에 추가할 수 있도록 대응한다

* feat(data/model/Pokemon): 포켓몬 데이터

* feat: 포켓몬 목록을 in-memory 에서 불러온다

* feat(dex/model/PokemonUiModel): id, 이름, 이미지, 타입 목록을 가지는 ui model

* feat(TypeUiModel): 데이터 레이어의 타입으로부터 타입 ui 모델로 만든다

* refactor: pokemonUiModel 을 모델 패키지의 것으로 교체한다

* refactor: 포켓몬 목록 화면에서 데이터 레이어로부터 데이터를 가져온다

- Before: 뷰모델에서 ui model 의 더미 데이터를 가져온다
- After: 데이터 소스를 통해 더미 데이터를 가져온다

* feat(data/model/Stat): 스탯 이름과 수치를 프로퍼티로 가진다

* feat(presentation/.../StatUiModel): 스탯 이름, 수치, progress 를 프로퍼티로 가진다

* feat(presentation/.../PokemonUiModel): id, 도감번호, 이름, 이미지, 타입 목록을 가진다

* feat(data/.../PokemonDetail): 포켓몬, 스탯 목록, 특성 목록, 키, 무게를 가진다

* feat(presentation/.../PokemonDetailUiModel): 포켓몬 상세 정보 ui 모델을 가진다

* feat(PokemonDetailDataSource): 포켓몬 상세 정보를 가져온다

* refactor($PokemonDetail): 포켓몬 상세 페이지에서 ui 모델을 사용한다

- Before: 데이터 레이어에 있는 모델을 사용

- After: 프레젠테이션 레이어에 있는 모델을 사용

* refactor(PokemonDetailViewModel): 데이터 소스로부터 포켓몬 상세 정보를 불러온다

* refactor(StatUiModel): 능력치 값의 limit 를 설정

능력치 총합의 limit 와 단일 능력치의 limit 을 각각 설정한다

* refactor(item_stat.xml): 능력치 아이템의 텍스트 너비 조정

* chore: 사용하지 않는 ui,데이터 모델 삭제

* refactor(PokemonListFragment): 포켓몬 어댑터에 리스너 함수의 참조가 아닌 뷰모델을 넘긴다

* refactor: 타입 이름을 한글로 설정한다

* chore(PokemonDetailViewModel): 로그 제거

* refactor: data/model/Type 을 enum class 로 변경한다

* chore: 임시 포켓몬 리스트 데이터 소스 클래스 이름 변경

- InMemoryPokemonListDataSource -> FakePokemonListDataSource 로 이름 변경

* chore: 임시 포켓몬 리스트 데이터 소스 인터페이스 제거

* feat: PokemonListRepository 인터페이스와 Fake 구현체를 만든다

* refactor: 포켓몬 목록 뷰모델이 레포지토리로부터 포켓몬을 가져온다

- Before: 페이크 데이터 소스로부터 포켓몬를 가져온다
- After: 레포지토리 인터페이스로부터 포켓몬을 가져온다

* chore: 임시 포켓몬 디테일 데이터 소스 클래스 이름 변경

- DummyPokemonDetailDataSource -> FakePokemonDetailDataSource 로 이름 변경

* chore: 임시 포켓몬 상세 데이터 소스 인터페이스 제거

* feat: 포켓몬 상세 인터페이스와 Fake 구현체를 만든다

* refactor: 포켓몬 상세 데이터 클래스에 있던 더미 데이터를 fake 데이터 소스로 이동

- fake 포켓몬 상세 레포지토리가 fakepokemonDataSource 를 주 생성자로 가진다

* refactor: 포켓몬 상세 뷰모델이 레포지토리로부터 포켓몬을 가져온다

- Before: 페이크 데이터 소스로부터 포켓몬를 가져온다
- After: 레포지토리 인터페이스로부터 포켓몬을 가져온다

* [AN_UI] TypeChip component, CommonBindingAdapter, Serializable, Parcelable Util 함수들 추가 (#47)

* ui: color 변경

* feat: BundleExtensions, IntentExtensions

* feat: withArgs  구현

* feat: withArgs, serializable 함수 적용

* feat(CommonBindingAdapter): setBackGroundColorRes

* ui: textAppearance 수정

* ui: TypeItemView 구현,  item_type_name 에 적용

* style: Ktformat

* chore: TypeChip으로 네이밍 변경

* fix: androidx.core.content.res 의 use함수로 수정

reference: https://stackoverflow.com/questions/73502338/android-content-res-typedarray-cannot-be-cast-to-java-lang-autocloseable

* [AN-REFACTOR] 상성 화면 리팩토링 (#38)

* chore: 패키지 네이밍 수정 및 이동

- 상성 결과 화면 관련된 파일들을 패키지로 묶음

* refactor: 데이터 바인딩 적용

- 상성 이벤트 정의
- EventHandler 개선

* refactor: 선택된 상성 UI 커스텀 뷰 확장 및 데이터 바인딩 적용

- 기본으로 들어가는 이미지와 삭제 버튼까지 포함하도록 수정

* ui: BottomSheetDragHandleView 추가

* refactor: Flow 적용

* refactor: string 리소스 활용

* chore: 불필요한 파일 제거

* [AN-UI] 포켓몬 상성 Icon + TextAppearance 추가 (#33)

* ui: TextApearance

* ui: icon svg로 변경

* ui: Home Appearance 적용

* refactor: 타입 데이터 불러오는 로직과 UI 분리

* chore: 네이밍 수정

* refactor: Repository 추상화

* fix: NestedScrollView 로 수정

* refactor: 공유 뷰모델 초기화 코드 수정

* refactor: flow 수정

* refactor: 내 타입, 상대 타입 선택을 포함하는 하나의 객체 생성

---------

Co-authored-by: JUNWON LEE <[email protected]>

* [AN_REFACTOR] 홈 화면 MVVM 패턴 적용 (#59)

* refactor: 화면 이동 ViewModel 및 DataBinding 설정

* refactor: navigateState flow 적용

* ui: toolbar popupTheme 수정

* chore: ktlint

* refactor: home logo xml 수정

* refactor: Event 처리하는 인터페이스 네이밍 수정

* [AN_UI] 포켓몬 도감 목록에서 포켓몬 이름을 통해 검색 (#60)

* feat: 포켓몬 목록의 검색 바 ui 를 추가한다

* feat: 포켓몬 리스트에 서치바를 추가한다

* feat: 포켓몬 이름으로 검색한 포켓몬 결과 목록을 구한다

* feat: 포켓몬 목록 검색 바에서 포켓몬 이름을 검색하면 그를 포함하는 포켓몬을 구한다

* feat: 포켓몬 쿼리 리스너에서 이름으로 포켓몬들을 쿼리한다

* refactor: 포켓몬 검색 쿼리를 데이터바인딩으로 쿼리한다

* feat: 가짜 포켓몬 목록 데이터 소스에서 쿼리된 포켓몬 목록을 리턴한다

* feat: 포켓몬 목록 레포지토리에서 모든 포켓몬 목록과 검색된 포켓몬 목록을 flow 로 래핑하여 리턴한다

* feat: 포켓몬 목록 데이터 리스트를 ui 모델로 변환한다

* refactor: 레포지토리의 Flow 로 감싸진 결과를 가지고 ui 에 쿼리된 포켓몬을 표시한다

* refactor: 포켓몬 목록 레포지토리의 기존 함수 제거하고 함수명을 변경한다

- 포켓몬 목록을 리턴하는 함수 제거
- 포켓몬 목록 플로우를 리턴하는 함수 이름 변경
    pokemons2 -> pokemons

* refactor: 포켓몬 목록 프래그먼트에 필요없는 애노테이션 제거

* chore(PokemonQueryListener -> PokemonQueryHandler) 이름 변경

- 새로 정해진 컨벤션에 맞춰 수정한다

* refactor: 가짜 포켓몬 목록 데이터소스의 메서드 네이밍 변경

- searchedPokemons -> pokemons

* feet: 가짜 포켓몬 목록 레포지토리의 Flow 가 아닌 결과를 리턴하는 메서드

* refactor: 포켓몬 목록 뷰모델에서 flow 로 래핑되지 않은 포케몬 목록 반환 함수를 사용한다

* refactor: PokemonListRepository 의 flow 를 리턴하는 함수 제거

* refactor(PokeMonItemClickListener -> PokemonDetailNavigateHandler) 이름 변경

* refactor: 포켓몬 목록 뷰모델 map 함수를 mapLatest 로 바꾼다

* [AN_REFACTOR] 특성 화면 MVVM 패턴 적용 (#67)

* refactor: ability item xml 수정

* refactor: MVVM 패턴 적용

* chore: ktlint

* refactor: 마지막 특성 보이도록 수정

* refactor: ActionHandler -> uiEventHandler 네이밍 변경

* refactor: navigationEvent 변수명 수정

* [AN-FEAT] 포켓몬 목록를 네트워크를 통해 로드 (#65)

* chore: pokemon response 패키지 이름 변경 poke -> pokemon

* test: PokemonTypeResponse 를 Type 데이터로 매핑한다

* test: 포켓몬 타입 응답을 만드는 testFixture

* feat: 포켓몬 타입 목록 응답을 toData 로 맏드는 확장 함수, testFixture 사용

* test: 포켓몬 응답과 포켓몬 응답 목록을 생성하는 test fixture

* feat: 포켓몬 응답, 포켓몬 응답 목록을 데이터로 매핑한다

* feat: 네트워크를 통해 포켓몬 데이터들을 가져온다

* test: RemotePokemonListDataSourceTest 를 통해 포켓몬들을 불러온다

* refactor: 서비스, 데이터소스, 레포지토리 함수를 suspend 로 변경한다

* refactor: 기본 포켓몬 목록 레포지토리에서 포켓몬 목록을 가져온다

* refactor(PokemonListViewModel): 포켓몬 목록을 네트워크를 통해 가져온다

* test(RemotePokemonListDataSourceTest): 모킹을 통해 포켓몬 목록 로드한다

* refactor: 포켓몬 목록에서 쿼리를 통해 검색된 포켓몬들을 로드한다

* test(RemotePokemonListDataSourceTest): 포켓몬 이름으로 쿼리된 포켓몬 목록을 불러온다

* chore(RemotePokemonListDataSourceTest): 변수 명 개선

* chore: 가짜 포켓몬 목록 데이터 소스 & 레포지토리를 테스트 패키지로 옮긴다

* test(PokemonListViewModelTest): 모든 포켓몬 로드, 쿼리된 포켓몬 로드

* chore: PokemonResponse 에서 Pokemon 으로 매핑하는 함수 위치를  DTO 레이어로 변경한다

* chore: TypeResponse 에서 Type 으로 매핑하는 함수 위치를  DTO 레이어로 변경한다

* chore: TestFixture 의 패키지, 파일 분리

* [AN-FEAT] 특성 목록 네트워크 연결  (#78)

* feat: 특성 response를 data로 매핑

* feat: 특성 데이터를 remote에서 가져온다

* feat: ViewModel에 repository DI

* feat: 매핑 함수 구현

- data to ui
- response to data

* feat: repo,source 중단 함수 추가

* feat: 특성 데이터 연결

* chore: ktlint

* refactor: Activity 함수 분리

* chore: UiModel 패키지 이동

* refactor: 특성 api 스펙 변경

* chore: kotlin convention

* chore: DataSource 프로퍼티 네이밍 변경

* [AN-FEAT] 포켓몬 상세 데이터를 네트워크를 통해 로드 (#81)

* feat: 포켓몬 상세 응답 데이터 클래스

* feat: PokemonDetailResponse 데이터 레이어의 모델로 매핑

* feat: PokeDexService 에서 중단 가능한 함수, BaseResponse 로 감싸서 리턴한다

* feat: RemotePokemonDetailDataSource 에서 서비스를 통해 데이터를 받는다

* feat: PokemonDetailRepository 에서 상세 정보를 로드한다

* fix: PokemonResponse 의 name 프로퍼티에 @SerialName("koName")

* fix: 포켓몬 상세 응답을 데이터로 매핑

- 영어로 변경

* fix: fragment_pokemon_list.xml 에 필요없는 hint 제거

* feat: 스탯 이름을 ui 에 맞게 매핑한다

ex) "attack" -> "공격"

* refactor: PokemonUiState 를 도입한다

* chroe: fake 객체를 테스트 패키지로 옮긴다

* feat: 프래그먼트 확장 함수 선언해서 포켓몬 상세 화면에서 이름 바인딩

* test(PokemonDetailViewModelTest): 포켓몬 상세 데이터 로드

* fix(FragmentExtension): vararg 인수 전달을 위한 star 연산자 추가

* [AN-FEAT] 특성 검색 기능 구현 (#82)

* ui: searchView 구현

* chore: 검색 BindingAdapter 패키지 이동

* feat: 특성 이름으로 쿼리

* chore: ktlint

* feat: 특성 불러올 때 UiState 적용

* chore: ktlint

* [AN-FEAT] 상성 화면 세부적인 기능 수정 및 추가 (#69)

* fix: 내 타입, 상대타입1,2 모두 선택시 반환되는 데이터 형식 수정

- 상대 타입 둘 다 같은 상성 결과임에도 분리된 형식으로 반환했던 오류 수정

* feat: 상성 결과에 "대등한" 경우도 보여 주는 기능 구현

* feat: 상성 결과를 지정된 순서대로 화면에 표기

* feat: 선택된 타입이 없을 경우 보여지는 화면 구현

* chore: 불필요한 파일 제거

* chore: 네이밍 통일을 위한 변경

* ui: 선택 불가능한 타입 구현

* feat: 상대 타입으로 이미 선택되었을 경우, 선택하지 못하도록 설정

* chore: 함수 분리 및 네이밍 수정

* ui: 상성 결과 텍스트에 bold 적용

* refactor: Type model 통일

- 기존 TypeInfo 사용 대신 Type Enum 사용으로 변경

* refactor: 타입 결과 아이템 정렬

- GridLayoutManager 로 수정

* test: 타입 뷰모델 테스트

* refactor: string resource 적용

* chore: UI 모델 변환 메서드 네이밍 변경

---------

Co-authored-by: murjune <[email protected]>

* [AN-CONFIG] 개발 서버 다운시 Local host 로 �리다이렉션 (#93)

* config: android/docker 패키지 gitignore

* config: network_security_config 추가

* config:  gitignore 위치 수정

* feat:  failed connected to develop server, connect to localhost

* style: ktlint Format

* �fix: pr_builder.yaml

* [AN_CI] PR Open 될 때 reviewers, assignees, labels 자동 할당  (#97)

* ci: add auto label script

* ci: reviewer list

* ci: add assign-reviewers-labels

* [AN-FEAT] 특성 상세 네트워크 연결  (#96)

* refactor: response 값 변경

* feat: 네트워크를 통해 data를 받는다

* chore: localhost 설정

* chore: AbilityService Api 경로 변경

* refactor: 특성리스트,특성상세 dto값 변경

* feat: data -> ui 매퍼 함수 추가

* refactor: detail mvvm 패턴 적용

* refactor: 특성검색 쿼리 로직 repo로 이동

* refactor: 불필요한 코드 삭제

* feat: 포켓몬 타입 표시

* chore: detail ui 패키지 이동

* feat: detailUiEvent 기능 연결

* chore: ktlint

* refactor: DataSource,Repository 하나로 합치기

* feat: invalid id 에러처리

* chore: ktlint

* refactor: invalid id 에러값일 때 error event

* chore: ktlintCheck

* [AN-FEAT] 포켓몬 상세 화면에 특성 (#87)

* feat: 포켓몬 상세 응답 데이터 클래스

* feat: PokemonDetailResponse 데이터 레이어의 모델로 매핑

* feat: PokeDexService 에서 중단 가능한 함수, BaseResponse 로 감싸서 리턴한다

* feat: RemotePokemonDetailDataSource 에서 서비스를 통해 데이터를 받는다

* feat: PokemonDetailRepository 에서 상세 정보를 로드한다

* fix: PokemonResponse 의 name 프로퍼티에 @SerialName("koName")

* fix: 포켓몬 상세 응답을 데이터로 매핑

- 영어로 변경

* fix: fragment_pokemon_list.xml 에 필요없는 hint 제거

* feat: 스탯 이름을 ui 에 맞게 매핑한다

ex) "attack" -> "공격"

* refactor: PokemonUiState 를 도입한다

* chroe: fake 객체를 테스트 패키지로 옮긴다

* feat: 프래그먼트 확장 함수 선언해서 포켓몬 상세 화면에서 이름 바인딩

* test(PokemonDetailViewModelTest): 포켓몬 상세 데이터 로드

* fix(FragmentExtension): vararg 인수 전달을 위한 star 연산자 추가

* ui: 특성 타이틀 ui

* ui: 특성 제목 어댑터를 생성한다

* ui: 포켓몬 상세 화면에서 특성을 연결한다

* refactor: 포켓몬 상세 화면에 특성을 데이터 바인딩으로 연결한다

* feat: 포켓몬 상세에 특성 어댑터에 데코레이터를 추가한다

* fix: 포켓몬 상세의 특성 api 가 바뀐 것 반영

Before: 포켓몬 상세 api 의 특성 응답은 List<String> 타입
After: 포켓몬 상세 api 의 특성 응답은 List<AbilityResponse> 타입

* chore(PokemonDetailFragment): Timber 로그 제거

* fix: 포켓몬 상세 응답에서 특성 프로퍼티 네이밍 수정

* fix: 특성을 포켓몬 상세화면에서 쓰이는 ui Model 로 변경하는 매퍼의 위치를 옴ㄹ긴다

* chore: 포켓몬 목록에서 쓰이는 네비게이션 핸들러 네이밍 수정

* refactor: 포켓몬 상세 화면을 위한 navigate handler

* chore: 메서드 오타 수정 binPokemonDetail -> bindPokemonDetail

* chore: 이미지 바인딩 어댑터 메서드를 setImage 로 오버로딩하도록 네이밍 수정

* refactor: 포켓몬 상세 ui state 의 네이밍 수정

PokemonDetailUiModel -> Success

* fix: 포켓몬 상세 페이크 객체의 더미 데이터를 수정한다

* fix: 포켓몬 상세 페이크 객체의 더미 데이터를 수정한다

* chore: 포켓몬 검색 뷰 바인딩 어댑터 이름을 수정한다

* [AN-FEAT] 여백 없는 이미지로 리사이징하는 Transformation 구현 (#71)

* chore: pokemon response 패키지 이름 변경 poke -> pokemon

* test: PokemonTypeResponse 를 Type 데이터로 매핑한다

* test: 포켓몬 타입 응답을 만드는 testFixture

* feat: 포켓몬 타입 목록 응답을 toData 로 맏드는 확장 함수, testFixture 사용

* test: 포켓몬 응답과 포켓몬 응답 목록을 생성하는 test fixture

* feat: 포켓몬 응답, 포켓몬 응답 목록을 데이터로 매핑한다

* feat: 네트워크를 통해 포켓몬 데이터들을 가져온다

* test: RemotePokemonListDataSourceTest 를 통해 포켓몬들을 불러온다

* refactor: 서비스, 데이터소스, 레포지토리 함수를 suspend 로 변경한다

* refactor: 기본 포켓몬 목록 레포지토리에서 포켓몬 목록을 가져온다

* refactor(PokemonListViewModel): 포켓몬 목록을 네트워크를 통해 가져온다

* test(RemotePokemonListDataSourceTest): 모킹을 통해 포켓몬 목록 로드한다

* refactor: 포켓몬 목록에서 쿼리를 통해 검색된 포켓몬들을 로드한다

* test(RemotePokemonListDataSourceTest): 포켓몬 이름으로 쿼리된 포켓몬 목록을 불러온다

* chore(RemotePokemonListDataSourceTest): 변수 명 개선

* chore: 가짜 포켓몬 목록 데이터 소스 & 레포지토리를 테스트 패키지로 옮긴다

* test(PokemonListViewModelTest): 모든 포켓몬 로드, 쿼리된 포켓몬 로드

* feat: CropTransformation 적용

마진을 없앤다

* ui: 이미지 비율 0.8로 조정

* fix: scale 속성 삭제

* ui: 사진 크기 조정

* [AN_CI] PR Open 될 때 reviewers, assignees, labels 자동 할당  (#97)

* ci: add auto label script

* ci: reviewer list

* ci: add assign-reviewers-labels

---------

Co-authored-by: sh1mj1 <[email protected]>
[AN-FEAT] 여백 없는 이미지로 리사이징하는 Transformation 구현 (#71)

* chore: pokemon response 패키지 이름 변경 poke -> pokemon

* test: PokemonTypeResponse 를 Type 데이터로 매핑한다

* test: 포켓몬 타입 응답을 만드는 testFixture

* feat: 포켓몬 타입 목록 응답을 toData 로 맏드는 확장 함수, testFixture 사용

* test: 포켓몬 응답과 포켓몬 응답 목록을 생성하는 test fixture

* feat: 포켓몬 응답, 포켓몬 응답 목록을 데이터로 매핑한다

* feat: 네트워크를 통해 포켓몬 데이터들을 가져온다

* test: RemotePokemonListDataSourceTest 를 통해 포켓몬들을 불러온다

* refactor: 서비스, 데이터소스, 레포지토리 함수를 suspend 로 변경한다

* refactor: 기본 포켓몬 목록 레포지토리에서 포켓몬 목록을 가져온다

* refactor(PokemonListViewModel): 포켓몬 목록을 네트워크를 통해 가져온다

* test(RemotePokemonListDataSourceTest): 모킹을 통해 포켓몬 목록 로드한다

* refactor: 포켓몬 목록에서 쿼리를 통해 검색된 포켓몬들을 로드한다

* test(RemotePokemonListDataSourceTest): 포켓몬 이름으로 쿼리된 포켓몬 목록을 불러온다

* chore(RemotePokemonListDataSourceTest): 변수 명 개선

* chore: 가짜 포켓몬 목록 데이터 소스 & 레포지토리를 테스트 패키지로 옮긴다

* test(PokemonListViewModelTest): 모든 포켓몬 로드, 쿼리된 포켓몬 로드

* feat: CropTransformation 적용

마진을 없앤다

* ui: 이미지 비율 0.8로 조정

* fix: scale 속성 삭제

* ui: 사진 크기 조정

* [AN_CI] PR Open 될 때 reviewers, assignees, labels 자동 할당  (#97)

* ci: add auto label script

* ci: reviewer list

* ci: add assign-reviewers-labels

---------

Co-authored-by: sh1mj1 <[email protected]>

* [AN-REFACTOR] 특성 상세 페이지 Fragment로 마이그레이션 (#109)

* ui: ability fragment 작성

* refactor: ability fragment 연결

* ui: ability detail fragment 작성

* refactor: ability detail fragment 연결

* chore: 불필요한 activity xml 삭제

* feat: dex detail <-> ability detail 화면 전환

* feat: containerId 에러 처리

* chore: ktlint

* chore: container 에러시 early return

* chore: 불필요한 xml 코드 삭제

* refactor: 코드리뷰 반영

* [AN-UI] 타입 화면 수정 사항 반영 (#106)

* ui: 글자 사이즈 및 padding 값 조절

* refactor: 파일 분리 및 ui 모델 프로퍼티 수정

* chore: 상성 결과 정렬 로직 수정

* refactor: 함수 분리 및 코드 정리

* refactor: 리뷰 반영 🚀

* ui: 여백 dp 살짝 조절

* [AN_REFACTOR] 멀티 모듈로 분리 및 testing 모듈 추가 (#110)

* feat: testing 모듈 추가

* build: 불필요한 ktlint plugins 삭제

* build: sub module 에 모두 test 의존성 및 kotlinCompiler 추가

* build: testing module 에 코루틴, kotlin 의존성 추가

* chore: 패키지 네이밍 testing으로 변경

* 임시 저장

* build: project 단 pacelize, jbm, library 추가

* feat: local 모듈 분리

* feat: remote 모듈 분리

* feat: data 모듈 분리

* feat: testing 모듈 분리

* feat: module들 app에 연결

* chore: 린트 체크

* build: local, testing exclude meta

---------

Co-authored-by: Yehyun Jo <[email protected]>
Co-authored-by: JoYehyun <[email protected]>

* [AN_FEAT] 포켓몬, 특성 초성 검색 (#111)

* feat: testing 모듈 추가

* build: 불필요한 ktlint plugins 삭제

* build: sub module 에 모두 test 의존성 및 kotlinCompiler 추가

* build: testing module 에 코루틴, kotlin 의존성 추가

* chore: 패키지 네이밍 testing으로 변경

* 임시 저장

* build: project 단 pacelize, jbm, library 추가

* feat: local 모듈 분리

* feat: remote 모듈 분리

* feat: data 모듈 분리

* feat: testing 모듈 분리

* feat: module들 app에 연결

* feat: stringmatcher module

* feat: 초성 검색 구현

* feat: 특성, 포켓몬 초성 검색 구현완

* style: ktlint format

* feat: 웹뷰 연결 (#119)

* [AN-FEAT] 특성 ViewModel Test (#126)

* feat: fakeRepository 추가

* feat: fakeRepository test 작성

* feat: 특성 ViewModel test 작성

* feat: 특성 상세 ViewModel test 작성

* chore: ktlint

* chore: 코드리뷰 반영

* [AN-REFACTOR] 상성 데이터 레이어 수정 (#116)

* feat: 스텔라 타입 추가

* refactor: 상성 데이터 테이블 구조 변경

* refactor: fake 레포지토리를 활용하여 테스트 구현

* chore: 불필요한 파일 제거

* refactor: private 추가

* fix: 테스트 fail 해결

* refactor: 변수명 수정 및 코드 정리

* test: 테스트 코드 추가 및 수정

* [AN-REFACTOR] 앱바 중복 코드 분리 및 커스텀 (#137)

* refactor: 화면별 타이틀 설정

- 툴바 Include 대신 개별 toolbar로 정의

* refactor: 반복되는 공통 코드 base activity로 이동

* ui: drawable 추가 및 수정

* refactor: toolbar 연결

* refactor: searchView style 정의

* refactor: ToolbarActivity & ToolbarFragment 정의

* [AN-Config] Firebase Analytics, Crashlytics 연동 (#146)

* CI: PR_Buider 수정 (assembleDebug)

* build: firebase 설정

* build: change Semantic Versioning

* build: debug keyStore, applicationIdSuffix 설정, 초기세팅

* build: debug 모드 app_name

여기에 추가로 google-service.json 들어감

* init: analytics module

* build: alpha, beta version 추가

* feat: Version 별 AnalyticsLogger

* test: TestLogger

* utils: startActivity

* utils: Analytics Extensions

* feat: Home Activity 에 Logger 추가

* style: ktFormat

* refactor: Click Event 상수화

* style: ktlintFormat

* CI: Google-service 설정 추가

* ci: debug.keystore

---------

Co-authored-by: Yehyun Jo <[email protected]>

* feat: api testOptions 추가 (#148)

* [AN-UI] 포켓몬 상세, 목록 화면의 타입 위치 수정 (#136)

* refactor: pokemon detail 화면의 view 계층 개선

* refactor: pokemon detail 화면에서 type chip 사용

* refactor: pokemon detail 타입을 보여주는 방법 변경

- 포켓몬 이름 아래에 타입들을 보여준다
- 리사이클러뷰 제거, LinearLayout 에 동적으로 타입들을 추가

* refactor: pokemon detail 화면에서 타입을 추가하는 역할을 어댑터에 위임

* refactor: item pokemon list pokemon 프리뷰 화면의 타입 디자인 개선

- 타입을 포켓몬 이름 아래에 위치시킨다
- 무거운 리사이클러뷰를 삭제한다
- 어댑터의 함수 파라미터에 글자와 아이콘 크기를 넘긴다

* chore: PokemonTypesAdapter 의 패키지 위치 변경

* fix: 아이템 뷰에 타입이 중복해서 추가되는 경우를 방지한다

- viewGroup.removeAllViews() 메서드 추가

* feat: layoutParams 의 높이와 너비를 지정하는 바인딩 어댑터

* refactor: TypeChip 에 ui 설정 데이터 클래스를 만들고 이를 item_type 에 데이터바인딩

* refactor: 상성 보기에서 사용하는 xml 파일을 변경한다

* chore: 타입 사이의 공간 spacing 네이밍

* fix:포켓몬 목록에서 포켓몬 사진 padding 조정

* fix: PoketmonViewHolder -> PokemonViewHolder 네이밍 변경

* refactor: 포켓몬 상세 xml 파일 뷰 계층 제거

- 스탯을 제외하고 뷰 계층 제거

* refactor: 포켓몬 상세 포켓몬 이미지 cropped 가 아닌 이미지 사용

* fix: 포켓몬 목록 리사이클러뷰 아이템 사이 간격 조정

* fix: 타입 사이의 spacing 의 크기를 dp 로 적용

* refactor: PokemonTypeViewConfiguration 의 프로퍼티 네이밍 변경, spacingBetweenTypes 은 어댑터의 파라미터로 옮긴다

* [AN-FEAT] Ability, Dex List InMemory 캐싱 (#149)

* feat: ability List 캐싱

* feat: dex List 캐싱

* style: ktLintFormat

* refactor: Dex로 네이밍 변경, Fake 레포지토리 변경

* style: ktFormat

* [AN-FEAT] 설문조사 링크 연결 및 Analytics 적용 (#160)

* feat: 피드백 링크 연결

* ui: 메뉴 아이템 위치 조절

* ui: 상성 결과 텍스트 디자인 수정

* feat: 로깅 적용

* feat: logScreenView msg 수정

---------

Co-authored-by: murjune <[email protected]>

* [AN-UI] 홈,특성 상세 가로 화면 대응 (#161)

* ui: 가로화면 drawable 추가

* ui: 가로화면 xml 작성

* chore: androidTest 패키지 구조 변경

* test: home 회전 테스트 추가

* test: home 회전 테스트 수정

* feat: 특성화면 세로모드로 고정

* fix: 특성 detail api 통신 수정

* fix: 포켓몬 detail api 통신 수정

* test: home ui test 추가

* test: api 27-29 테스트시 onIdle 추가

* chore: 세로고정 삭제

* ui: 특성 상세 가로 xml 작성

* feat: api testOptions 추가 (#148)

* chore: ktlintCheck

* [AN-UI] 포켓몬 상세, 목록 화면의 타입 위치 수정 (#136)

* refactor: pokemon detail 화면의 view 계층 개선

* refactor: pokemon detail 화면에서 type chip 사용

* refactor: pokemon detail 타입을 보여주는 방법 변경

- 포켓몬 이름 아래에 타입들을 보여준다
- 리사이클러뷰 제거, LinearLayout 에 동적으로 타입들을 추가

* refactor: pokemon detail 화면에서 타입을 추가하는 역할을 어댑터에 위임

* refactor: item pokemon list pokemon 프리뷰 화면의 타입 디자인 개선

- 타입을 포켓몬 이름 아래에 위치시킨다
- 무거운 리사이클러뷰를 삭제한다
- 어댑터의 함수 파라미터에 글자와 아이콘 크기를 넘긴다

* chore: PokemonTypesAdapter 의 패키지 위치 변경

* fix: 아이템 뷰에 타입이 중복해서 추가되는 경우를 방지한다

- viewGroup.removeAllViews() 메서드 추가

* feat: layoutParams 의 높이와 너비를 지정하는 바인딩 어댑터

* refactor: TypeChip 에 ui 설정 데이터 클래스를 만들고 이를 item_type 에 데이터바인딩

* refactor: 상성 보기에서 사용하는 xml 파일을 변경한다

* chore: 타입 사이의 공간 spacing 네이밍

* fix:포켓몬 목록에서 포켓몬 사진 padding 조정

* fix: PoketmonViewHolder -> PokemonViewHolder 네이밍 변경

* refactor: 포켓몬 상세 xml 파일 뷰 계층 제거

- 스탯을 제외하고 뷰 계층 제거

* refactor: 포켓몬 상세 포켓몬 이미지 cropped 가 아닌 이미지 사용

* fix: 포켓몬 목록 리사이클러뷰 아이템 사이 간격 조정

* fix: 타입 사이의 spacing 의 크기를 dp 로 적용

* refactor: PokemonTypeViewConfiguration 의 프로퍼티 네이밍 변경, spacingBetweenTypes 은 어댑터의 파라미터로 옮긴다

* [AN-FEAT] Ability, Dex List InMemory 캐싱 (#149)

* feat: ability List 캐싱

* feat: dex List 캐싱

* style: ktLintFormat

* refactor: Dex로 네이밍 변경, Fake 레포지토리 변경

* style: ktFormat

---------

Co-authored-by: murjune <[email protected]>
Co-authored-by: sh1mj1 <[email protected]>

* [AN-FIX] 베타 버전 배포 전 2차 QA 버그 수정  (#166)

* ui: 가로화면 drawable 추가

* ui: 가로화면 xml 작성

* chore: androidTest 패키지 구조 변경

* test: home 회전 테스트 추가

* test: home 회전 테스트 수정

* feat: 특성화면 세로모드로 고정

* fix: 특성 detail api 통신 수정

* fix: 포켓몬 detail api 통신 수정

* test: home ui test 추가

* test: api 27-29 테스트시 onIdle 추가

* chore: 세로고정 삭제

* ui: 특성 상세 가로 xml 작성

* feat: api testOptions 추가 (#148)

* chore: ktlintCheck

* [AN-UI] 포켓몬 상세, 목록 화면의 타입 위치 수정 (#136)

* refactor: pokemon detail 화면의 view 계층 개선

* refactor: pokemon detail 화면에서 type chip 사용

* refactor: pokemon detail 타입을 보여주는 방법 변경

- 포켓몬 이름 아래에 타입들을 보여준다
- 리사이클러뷰 제거, LinearLayout 에 동적으로 타입들을 추가

* refactor: pokemon detail 화면에서 타입을 추가하는 역할을 어댑터에 위임

* refactor: item pokemon list pokemon 프리뷰 화면의 타입 디자인 개선

- 타입을 포켓몬 이름 아래에 위치시킨다
- 무거운 리사이클러뷰를 삭제한다
- 어댑터의 함수 파라미터에 글자와 아이콘 크기를 넘긴다

* chore: PokemonTypesAdapter 의 패키지 위치 변경

* fix: 아이템 뷰에 타입이 중복해서 추가되는 경우를 방지한다

- viewGroup.removeAllViews() 메서드 추가

* feat: layoutParams 의 높이와 너비를 지정하는 바인딩 어댑터

* refactor: TypeChip 에 ui 설정 데이터 클래스를 만들고 이를 item_type 에 데이터바인딩

* refactor: 상성 보기에서 사용하는 xml 파일을 변경한다

* chore: 타입 사이의 공간 spacing 네이밍

* fix:포켓몬 목록에서 포켓몬 사진 padding 조정

* fix: PoketmonViewHolder -> PokemonViewHolder 네이밍 변경

* refactor: 포켓몬 상세 xml 파일 뷰 계층 제거

- 스탯을 제외하고 뷰 계층 제거

* refactor: 포켓몬 상세 포켓몬 이미지 cropped 가 아닌 이미지 사용

* fix: 포켓몬 목록 리사이클러뷰 아이템 사이 간격 조정

* fix: 타입 사이의 spacing 의 크기를 dp 로 적용

* refactor: PokemonTypeViewConfiguration 의 프로퍼티 네이밍 변경, spacingBetweenTypes 은 어댑터의 파라미터로 옮긴다

* [AN-FEAT] Ability, Dex List InMemory 캐싱 (#149)

* feat: ability List 캐싱

* feat: dex List 캐싱

* style: ktLintFormat

* refactor: Dex로 네이밍 변경, Fake 레포지토리 변경

* style: ktFormat

* fix: 존재하지 않음 경우  filtering

* ui: ability pokemon cropImageUrl 적용

* ui: dex detail toolbar 적용

* fix: 뒤로가기 시 Type 없어지는 이슈 해결

* feat: 임시로 로딩뷰 띄우기

* style: ktFormat

* 버저닝

* fix: test 이슈 해결, 해결된 문제 삭제

---------

Co-authored-by: kkosang <[email protected]>
Co-authored-by: SangHyun Ko <[email protected]>
Co-authored-by: sh1mj1 <[email protected]>

* [0.1.20-alpha/AN-FEAT] Click Event에 Throttle 처리 (#174)

* feat: onSingleClick BindingAdapter

* ui: Home, Type, Ability, Dex 에 적용

* style: ktFormat

* [0.1.20-alpha/AN-FIX, AN-UI] 포켓몬 상세 화면 스탯 UI 색깔과 타입 UI  (#177)

* feat: 포켓몬 상세 화면에서 능력치 progress bar 의 크기 증가, 색 적용

* feat: color 추가 pokemon 회색

* refactor: 포켓몬 스탯 ui 에 색을 입힌다

* refactor: 포켓몬 상세 화면에서 타입 UI 를 동ㄱ라미로 변경

* test: 포켓몬 상세 데이터의 타입 ui model 의 변경에 따른 테스트 변경

* refactor: 기존에 사용하던 type to typeUiModel 매핑 함수 제거

* [0.1.20-alpha/AN-FIX] UI 이슈 사항 해결 (#176)

* fix: 상성 선택 위치 변경

* ui: add 버튼 추가

* feat: 로고 이미지 크기 변경

* feat: 특성, 포켓몬 디테일 화면에 홈버튼 추가

* ui: 플러스 버튼 수정

* refactor: 액티비티 이동 코드 수정

* chore: 린트 수정

* [0.1.20-alpha/AN-UI] 상성 가로 화면 대응 (#178)

* ui: type land 버전 xml 생성

* ui: 화면 모드에 따라 상성 spanCount 다르게 설정

* test: ui 테스트

* [0.1.20.alpha/AN-FEAT] 네트워크 ConnectException 및 HttpException Handling (#179)

* build: 버전업 1.2.0

* feat: 인터넷 연결 확인 함수

* feat: NetworkErrorActivity

* feat: startActivity util 함수 default args

* refactor: ErrorViewModel

* feat: AbilityDetail에 에러핸들링

* feat: AbilityList에 에러핸들링

* feat: PokemonList 에러핸들링

* style: ktFormat

* refactor: logger ViewModel 에서 주입 받도록 수정

* [0.1.20-alpha/AN-UI, AN-FIX] 특성 description 의 줄 수를 조정한다 (#181)

* feat: item_ability_description 가 다른 아이템의 간격을 변하게 하지 않도록 조정한다

* feat: 특성 상세 화면에서는 maxLine 이 동작하지 않도록 해서 특성 description 전체 내용을 보여주도록 한다

---------

Co-authored-by: murjune <[email protected]>

* [0.1.20-alpha/AN-UI, AN-FEAT] 포켓몬 이미지를 로딩 중에 progress indicator 를 보인다 (#180)

* feat: 포켓몬 상세 화면에 material progressbar 추가

* feat: 포켓몬 상세 화면 이미지 로드 전에 progress bar 보여주기

* fix: 포켓몬 상세에서 progress indicator 보여주는 방식 변경

* feat: 포켓몬 목록 화면에서 포켓몬 progress indicator 추가

* refactor: progress bar 를 사용하는 glide 리스너를 하나의 파일로 분리한다

* chore: progress indicator 색상 변경

* fix: 포켓몬 목록에서 spanCount 가 2

* fix: 포켓몬 아이템에 progressbar 제거

* feat: glide placeholder 에 피카츄 실루엣, 에러에는 메타몽 실루엣

* [0.1.2-alpha/AN-FEAT] Firebase Dev, Alpha 버전 로깅 툴 해제 (#184)

* fix: Firebase Dev 버전 로깅 툴 해제

* ktlint

* [0.1.20-alpha/AN-FIX, AN_UI] 특성 상세 화면에서 포켓몬의 타입의 위치 변경 (#186)

* feat: 포켓몬 상세 화면에 material progressbar 추가

* feat: 포켓몬 상세 화면 이미지 로드 전에 progress bar 보여주기

* fix: 포켓몬 상세에서 progress indicator 보여주는 방식 변경

* feat: 포켓몬 목록 화면에서 포켓몬 progress indicator 추가

* refactor: progress bar 를 사용하는 glide 리스너를 하나의 파일로 분리한다

* chore: progress indicator 색상 변경

* feat: item_ability_description 가 다른 아이템의 간격을 변하게 하지 않도록 조정한다

* feat: 특성 상세 화면에서는 maxLine 이 동작하지 않도록 해서 특성 description 전체 내용을 보여주도록 한다

* feat: 특성 상세에서 포켓몬들의 타입을 이름 아래의 추가한다

* refactor: 로딩 문자열을 strings 리소스로 옮긴다

* refactor: AbilityDetailViewHolder 에서 사용하던 포켓몬 타입 리사이클러뷰 제거

* fix: 타입 텍스트 2줄로 넘어가는 문제 해결

* ui: ability detail 이미지 크기 조정

* feat: 특성 도감 empty 뷰

* feat: dex List ladscape시 span 4개

* style: ktFormat

* feat: dex detail 기본 스탯 visible 처리

---------

Co-authored-by: murjune <[email protected]>

* [0.1.3-alpha/AN-FIX] 홈화면 이동 기능 수정 (#189)

* fix: 포켓몬 상세 페이지에서 홈 화면 이동

* ui: 상성 가로 화면 '+' 이미지 추가

* [0.1.30-alpha/AN-FIX, AN_UI] 포켓몬 디테일 화면 가로 화면 대응 (#195)

* feat: 포켓몬 상세 가로 화면 대응

* build: version 0.1.30 으로

* [0.2.0.alpha/AN_UI] 홈 화면 메뉴 추가 (#204)

* ui: 홈 메뉴와 관련된 아이콘 추가

* ui: 추가된 메뉴 xml 작성

* feat: 바이옴 화면 추가

* feat: 아이템 화면 추가

* feat: 홈 화면과 연결

* style: ktFormat

* [0.2.0.alpha/AN-FEAT] remote ApiResponse 로 적용, BaseResponse 삭제, app 단 retrofit 의존성 걷어내기 (#207)

* feat: ApiResponse

* feat: CallAdapter 를 통해 기존 Call intercept 후 Service Return 타입 ApiResponse

* refactor: injector 패키지로 이동

* feta: BaseResponse UnWrap

* test: Ability Service

* style: ktFormat

* feat: PokeException

* feat: ApiResponseExtensions

* refactor: PokeException 적용

* style: ktFormat

* feat: app 단에 PokeExcetion 적용

* style: ktFormat

* [0.2.0.alpha/AN-FEAT, AN_UI] 포켓몬 상세 화면 Tab layout 틀  (#209)

* feat: 포켓몬 상세 액티비티 이미지와 이름, 툴바 위치

* feat: 포켓몬 상세 포켓몬 이미지와 타입 위치

* feat: context 확장 함수 stringOf 추가해서 여러 파라미터를 받을 수 있다

* feat: 포켓몬 상세에서 viewmodel 로부터 데이터를 받아온다

* feat: 포켓몬 상세 하단에 탭 레이아웃과 뷰 페이저 스켈레톤

* refactor: 포켓몬 상세의 뷰페이저 클래스 분리, 메서드 분리

* refactor: 포켓몬 상세의 뷰페이저 클래스 분리, 메서드 분리

* refactor: 디폴트로 생성된 프래그먼트에서 필요없는 정보 지우기

* feat: 포켓몬 상세 tablayout 에 스타일 적용

* feat: 포켓몬 목록에서 포켓몬 상세 액티비티로 연결

* feat: 뷰페이저 프래그먼트들 lint

* feat: 포켓몬 상세 툴바 연결

* feat: 포켓몬 상세에서 능력치와 특성 연결

* feat: 포켓몬 상세에서 능력치와 특성 연결

* feat: Manifest 에 포켓몬 상세 액티비티를 추가한다

* feat: 포켓몬 상세에 스크롤 뷰 추가

* refactor: PokemonDetailPagerAdapter 프래그먼트를 Listof 로

* refactor: PokemonActivity 의 intent 제거

* refactor: 포켓몬 목록 프래그먼트의 주석 제거

* [0.2.0.alpha/FEAT-AN] RemoteDataSource 에서 erro log 심기 (#208)

* feat: ApiResponse

* feat: CallAdapter 를 통해 기존 Call intercept 후 Service Return 타입 ApiResponse

* refactor: injector 패키지로 이동

* feta: BaseResponse UnWrap

* test: Ability Service

* style: ktFormat

* feat: PokeException

* feat: ApiResponseExtensions

* refactor: PokeException 적용

* style: ktFormat

* feat: app 단에 PokeExcetion 적용

* style: ktFormat

* feat: Analytics Stub

* build: data에 analytics 모듈 추가

* feat: 서버 통신 로직에 logger 추가

* [0.2.0.alpha/AN_UI] 바이옴 리스트 화면 추가 (#214)

* ui: 홈 메뉴와 관련된 아이콘 추가

* ui: 추가된 메뉴 xml 작성

* feat: 바이옴 화면 추가

* feat: 아이템 화면 추가

* feat: 홈 화면과 연결

* style: ktFormat

* ui: 바이옴 아이템 및 페이지 xml 작성

* feat: 바이옴 xml 연결

* feat: 바이옴 상세 화면 구현 및 연결

* feat: 바이옴 디테일 화면 이동

* style: ktFormat

* feat: dummy data 추가

* refactor: 불필요한 부분 삭제

* [0.2.0.alpha/AN-FEAT] 네트워크 ReConnection 시 Refresh (#212)

* feat: ApiResponse

* feat: CallAdapter 를 통해 기존 Call intercept 후 Service Return 타입 ApiResponse

* refactor: injector 패키지로 이동

* feta: BaseResponse UnWrap

* test: Ability Service

* style: ktFormat

* feat: PokeException

* feat: ApiResponseExtensions

* refactor: PokeException 적용

* style: ktFormat

* feat: app 단에 PokeExcetion 적용

* style: ktFormat

* feat: EventFlow, RefreshEventBus

* refactor: 패키지 이동, 네이밍 변경

* ui: poke dex empty 뷰

* feat: NetworkException 시 리프레시 하도록

* style: ktFormat

* chore: intent 삭제

* [0.2.0.alpha/AN_FEAT, AN_UI] 포켓몬 상세 화면에서 기술들을 보여준다 (#226)

* feat: 포켓몬 상세 액티비티 이미지와 이름, 툴바 위치

* feat: 포켓몬 상세 포켓몬 이미지와 타입 위치

* feat: context 확장 함수 stringOf 추가해서 여러 파라미터를 받을 수 있다

* feat: 포켓몬 상세에서 viewmodel 로부터 데이터를 받아온다

* feat: 포켓몬 상세 하단에 탭 레이아웃과 뷰 페이저 스켈레톤

* refactor: 포켓몬 상세의 뷰페이저 클래스 분리, 메서드 분리

* refactor: 포켓몬 상세의 뷰페이저 클래스 분리, 메서드 분리

* refactor: 디폴트로 생성된 프래그먼트에서 필요없는 정보 지우기

* feat: 포켓몬 상세 tablayout 에 스타일 적용

* feat: 포켓몬 목록에서 포켓몬 상세 액티비티로 연결

* feat: 뷰페이저 프래그먼트들 lint

* feat: 포켓몬 상세 툴바 연결

* feat: 포켓몬 상세에서 능력치와 특성 연결

* feat: 포켓몬 상세에서 능력치와 특성 연결

* feat: Manifest 에 포켓몬 상세 액티비티를 추가한다

* feat: 포켓몬 상세에 스크롤 뷰 추가

* chore: 포켓몬 상세 페이지 tab 재목 리소스로

* refactor: 포켓몬 상세에서 옵저빙 기능을 메서드로 분리한다

* feat: 포켓몬 상세 특성에 decoration

* feat: 포켓몬 상세에서 특성을 선택하면 특성 액티비티로 이동

* refactor: 특성 액티비티에 intent 함수 추가

* feat: Pokemon 능력치 프래그먼트에서 특성 상세로 가는 이벤트 핸들러를 바인딩한다

* feat: 특성 액티비티에서 디테일과 목록 프래그먼트로 네비게이팅한다

* refactor: 특성 상세 프래그먼트에서 포켓몬 상세 액티비티로 네비게이팅

* feat: 포켓몬 기술 데이터 클래스와 가짜 기술 데이터

* feat: 포켓몬 상세 데이터에 기술 리스트 프로퍼티 추가

* feat: 포켓몬 기술 카테고리(물리, 특수, 변화)

* feat: 포켓몬 기술의 카테고리를 MoveCategory 로

* feat: PokemonMove 에서 PokemonMoveUiModel 로 매핑

* feat: 포켓몬 디테일에서 ui 모델로 매핑할 때 기술 정보 추가

* test: 포켓몬 상세 뷰모델 데이터 로드

* fix: 포켓몬 상세의 tab 제목 버그 변경

* chore: PokemonMovesUiModel.kt -> PokemonMoveUiModel 네이밍 변경

* feat: 포켓몬 디테일 ui 매핑에 기술 추가

* chore: ktlint

* feat: 포켓몬 상세 기술 view 프로토 타입

* feat: 배틀 구도, 아이템 도감 기능 선택 시 coming soon toast message

* feat: 포켓몬 기술 모델 ui 모델 분리

* feat: 특수, 물리, 변화기 아이콘 추가

* feat: 텍스트 크기 조정

- issue: 빠르게 스크롤 시에 아이템이 날라가는 버그가 있다

* feat: 포켓몬 상세의 뷰 페이저 프래그먼트들의 height 를 다시 그림으로 구한다.

- `binding.root.requestLayout()``

* chore: 포켓몬 상세 기술 정보 텍스트 사이즈

* feat: 포켓몬 상세 기술에 itemDecoration 추가

* feat: 포켓몬 상세 기술에 divider 추가

* feat: 위력이 없는 기술은 - 로 표시한다

* test: PokemonDetailViewModelTest 테스트 수정

* chore: 포켓몬 상세 패키지 이동

* chore: 포켓몬의 기술을 move 에서 skill 이라는 네이밍으로 변경

* [0.2.0-alph/AN-UI,Fix] 화면 나갔다가 5초 이후에 오둥이 보이는 버그 수정 + clearFocus (#225)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* [0.2.0.alpha/AN-UI] 배틀 도우미 화면 구현 (#232)

* feat: 배틀 페이지 이동

* chore: 필요한 아이콘 추가

* chore: 필요한 배경 및 스타일 지정

* ui: 배틀 페이지 xml 작성

* ui: 날씨 선택 스피너 구현

* ui: 배틀 페이지 액티비티 구현

* feat: 날씨 데이터 연결

* refactor: adapter의 리스트 데이터를 업데이트할 수 있도록 변경

* fix: 린트 수정 및 충돌 해결

* [0.2.0.alpha/AN-FEAT] Pokemon FIlter, Sort data 로직 (#228)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* feat: Pokemon 프로퍼티 추가

* feat: Pokemon filter, sort

* feat: Pokemon filtering, Sort 로직

* test: FakeDexRepository

* style: KtFormat

* feat: 여러 filter 조건으로 받을 수 있도록 리팩토링

* refactor: filter 네이밍 변경

* [0.2.0.alpha/AN-UI] 바이옴 상세 화면 UI 구현 (#238)

* ui: tablayout xml 작성 및 연결

* ui: viewPager fragment xml 작성

* ui: tablayout(다음바이옴) xml 작성 및 연결

* ui: tablayout 디자인 변경

* ui: 야생 포켓몬 xml 작성

* ui: 야생 포켓몬 화면 구현

* ui: boss fragment 추가

* ui: tablayout(gym) 추가

* refactor: 야생 fragment uiModel 수정

* refactor: 바이옴 포켓몬 네이밍 수정

* ui: boss fragment 화면 작성 및 연결

* config: coil-svg 추가

* feat: svgUrl 바인딩 어댑터

* ui: 체육관 관장 fragment xml 작성 및 연결

* refactor: tablayout string-array 이용

* refactor: 패키지 이동 및 네이밍 수정

* ui: xml 수정

* style: ktFormat

* style: ktFormat

* refactor: ui 관련 코드리뷰 반영

* refactor: 다음 바이옴 네이밍 변경

* style: ktFormat

---------

Co-authored-by: kkosang <[email protected]>

* [0.2.0.alpha/AN-UI] 배틀 도우미 선택 화면 구현  (#239)

* ui: 배틀 선택 activity 정의

* ui: 포켓몬, 기술 선택 fragment 정의

* ui: 선택 UI 모델 정의

* ui: 포켓몬, 기술 선택 어댑터 정의

* chore: 패키지 분리

* ui: 아이템 선택 시 선택된 효과 표시

* ui: 선택된 포켓몬 정보 연결

* feat: 화면 이동 버튼 기능 구현

* chore: UiState 패키지 이동

- 배틀 선택 페이지 내에 있던 UiState를 배틀 패키지 내로 이동

---------

Co-authored-by: JoYehyun <[email protected]>

* [0.2.0.alpha/AN_FEAT] 포켓몬 상세에서 정보 화면, id(Long -> String) (#240)

* chore: 포켓몬 상세 탭 타이틀을 string-array 로 한다

* chore: strings 리소스에 dex 를 pokemon_list 와 detail 로

* feat: 포켓몬 상세에서 필요한 데이터 정의

* feat: 포켓몬 상세에서 필요한 데이터 바이옴 추가

* feat: 데이터 레이어 Biome 추가

* feat: 포켓몬 상세 정보에서 바이옴 정보 item UI

* feat: 포켓몬 상세 정보에서 바이옴 뷰 홀더

* feat: 포켓몬 상세 정보 프래그먼트 ui xml

* feat: 포켓몬 상세 정보에서 바이옴 어댑터

* feat: 포켓몬 상세 뷰모델에 바이옴 상세로 네비게이션하는 이벤트 추가

* feat: 바이옴 상세 액티비티 동반 객체에 intent 추가

* feat(PokemonInformationFragment): 포켓몬 상세 액티비티 뷰모델, 어댑터 연결

* feat(PokemonDetailActivity): 포켓몬 상세에서 바이옴 상세로 네비게이션

* fix(Biome): 바이옴 이미지 url 변경

* feat(PokemonInformationFragmen): 바이옴 라사이클러뷰에 데코레이션

* feat: 바이옴 타이틀과 바이옴 아이템 사이 구분선 추가

* feat(NewPokemon,NewPokemonUiModel): id 를 Long -> String

* feat presentation layer 에 NewPokeMonUiModel 적용

* feat(DexRepository): 포켓몬 리스트 리턴을 NewPokemon 으로

* feat(DexDataSource): 포켓몬 리스트 리턴을 NewPokemon 으로

* feat(NewPokemonDetail, NewAbility): response 에서 데이터로

* feat(DexRepository,RemoteDexDataSource.kt) 에서 데이터를 NewPokemonDetail 로

* feat(AbilityDetail): NewPokemon 리스트로

* refactor: 포켓몬 상세 액티비티 뷰모델에서 pokemonId 는 String

* feat: PokemonSkill 의 클래스 변경됨

* feat: 포켓몬 특성 id 를 Long -> String 으로

* refactor: Ability 의 id 를 Long -> String

- issue: 포켓몬 상세에서 특성 상세로 이동 시 예외

* refactor: 포켓몬 상세에서 특성 상세로 이동하도록 한다
- 이전 커밋(80872b6f) 이슈 해결

* chore: ktlint

* refactor: NewPokemon -> Pokemon

* refactor: NewSKill -> PokemonSkill

* refactor: NewPokemonDetail -> PokemonDetail

* chore: 네이밍 NewPokemonSKills -> PokemonDetailSkills

* refactor: NewAbility -> PokemonDetailAbility

* refactor: id: Long 을 모두 id: String 로 변경

* fix(data/unitTest): id 값을 String 으로

* fix: 특성 상세 프래그먼트에서 bundle 이 null 일 때 처리

* fix: Pokemon 클래스의 더미데이터 복구

* chore: 포켓몬 상세 특성 ui model 네이밍 변경

* feat: 기술머신으로 배우는 PokemonSkill 리스트 추가

* test: data 레이어의 모델의 id String 으로

* chore: ktlint

* refactor: getStringArrayOf 를 확장 유틸함수로

---------

Co-authored-by: sh1mj1 <[email protected]>

* [0.2.0.alpha/AN_FEAT_UI] PokemonList Filter, PokeChip, PokeChipGroup Component 구현 (#242)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* feat: Pokemon 프로퍼티 추가

* feat: Pokemon filter, sort

* feat: Pokemon filtering, Sort 로직

* test: FakeDexRepository

* style: KtFormat

* [2.0.0-alph/AN-UI,Fix] 화면 나갔다가 5초 이후에 들어오면 오둥이 보이는 버그 수정 + clearFocus (#225)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* [2.0.0.alpha/AN-UI] 배틀 도우미 화면 구현 (#232)

* feat: 배틀 페이지 이동

* chore: 필요한 아이콘 추가

* chore: 필요한 배경 및 스타일 지정

* ui: 배틀 페이지 xml 작성

* ui: 날씨 선택 스피너 구현

* ui: 배틀 페이지 액티비티 구현

* feat: 날씨 데이터 연결

* refactor: adapter의 리스트 데이터를 업데이트할 수 있도록 변경

* fix: 린트 수정 및 충돌 해결

* ui: PokeChip, PokeChipGroup

* [0.2.0.alpha/AN-FEAT] Pokemon FIlter, Sort data 로직 (#228)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* feat: Pokemon 프로퍼티 추가

* feat: Pokemon filter, sort

* feat: Pokemon filtering, Sort 로직

* test: FakeDexRepository

* style: KtFormat

* feat: 여러 filter 조건으로 받을 수 있도록 리팩토링

* refactor: filter 네이밍 변경

* refactor: packaing

* ui: Chip select 시 bold 처리

* fix: DexRepository isBlanck() 로 변경

* build: crashlytics impl 위치 변경

* chore: sample Activity 삭제

* feat: PokeFIlter 구현

* style: ktFormat

* refactor: 코드 정리

* chore: PokeChipSpec -> Spec

* chore: 불필요한 Timber 삭제

* style: ktFormat

* ui: PokeChip - ConerRadius, Padding 추가

* ui: PokeSpec - color, sizes naming 변경

---------

Co-authored-by: Yehyun Jo <[email protected]>

* [0.2.0.alpha/AN_FEAT] PokemonList Sort Chip 구현, Sort BottomSheet 구현 (#254)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* feat: Pokemon 프로퍼티 추가

* feat: Pokemon filter, sort

* feat: Pokemon filtering, Sort 로직

* test: FakeDexRepository

* style: KtFormat

* [2.0.0-alph/AN-UI,Fix] 화면 나갔다가 5초 이후에 들어오면 오둥이 보이는 버그 수정 + clearFocus (#225)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* [2.0.0.alpha/AN-UI] 배틀 도우미 화면 구현 (#232)

* feat: 배틀 페이지 이동

* chore: 필요한 아이콘 추가

* chore: 필요한 배경 및 스타일 지정

* ui: 배틀 페이지 xml 작성

* ui: 날씨 선택 스피너 구현

* ui: 배틀 페이지 액티비티 구현

* feat: 날씨 데이터 연결

* refactor: adapter의 리스트 데이터를 업데이트할 수 있도록 변경

* fix: 린트 수정 및 충돌 해결

* ui: PokeChip, PokeChipGroup

* [0.2.0.alpha/AN-FEAT] Pokemon FIlter, Sort data 로직 (#228)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* feat: Pokemon 프로퍼티 추가

* feat: Pokemon filter, sort

* feat: Pokemon filtering, Sort 로직

* test: FakeDexRepository

* style: KtFormat

* feat: 여러 filter 조건으로 받을 수 있도록 리팩토링

* refactor: filter 네이밍 변경

* refactor: packaing

* ui: Chip select 시 bold 처리

* fix: DexRepository isBlanck() 로 변경

* build: crashlytics impl 위치 변경

* chore: sample Activity 삭제

* feat: PokeFIlter 구현

* style: ktFormat

* refactor: 코드 정리

* chore: PokeChipSpec -> Spec

* chore: 불필요한 Timber 삭제

* style: ktFormat

* ui: PokeChip - ConerRadius, Padding 추가

* ui: PokeSpec - color, sizes naming 변경

* test: fake 객체 값 수정

* ui: check, sort icon 추가

* refactor: pokemon filter 코드 정리

* ui: SelectableUiModel parcelable 적용

* feat: pokemon Sort 구현

* feat: PokeFilterViewModel SavedStateHandle 적용

* style: ktformat

* feat: ui test margin 변경

* chore: Fake 삭제

* chore: ktFormat

* ci: Pr_builder 수정

* fix: test 수정

* ktFormat 이다 이말이야

---------

Co-authored-by: Yehyun Jo <[email protected]>

* [0.2.0.alpha/AN_FEAT] 바이옴 네트워크 연결 (#256)

* ui: tablayout xml 작성 및 연결

* ui: viewPager fragment xml 작성

* ui: tablayout(다음바이옴) xml 작성 및 연결

* ui: tablayout 디자인 변경

* [2.0.0-alph/AN-UI,Fix] 화면 나갔다가 5초 이후에 들어오면 오둥이 보이는 버그 수정 + clearFocus (#225)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* ui: 야생 포켓몬 xml 작성

* ui: 야생 포켓몬 화면 구현

* [2.0.0.alpha/AN-UI] 배틀 도우미 화면 구현 (#232)

* feat: 배틀 페이지 이동

* chore: 필요한 아이콘 추가

* chore: 필요한 배경 및 스타일 지정

* ui: 배틀 페이지 xml 작성

* ui: 날씨 선택 스피너 구현

* ui: 배틀 페이지 액티비티 구현

* feat: 날씨 데이터 연결

* refactor: adapter의 리스트 데이터를 업데이트할 수 있도록 변경

* fix: 린트 수정 및 충돌 해결

* ui: boss fragment 추가

* ui: tablayout(gym) 추가

* refactor: 야생 fragment uiModel 수정

* refactor: 바이옴 포켓몬 네이밍 수정

* ui: boss fragment 화면 작성 및 연결

* config: coil-svg 추가

* feat: svgUrl 바인딩 어댑터

* ui: 체육관 관장 fragment xml 작성 및 연결

* refactor: tablayout string-array 이용

* refactor: 패키지 이동 및 네이밍 수정

* ui: xml 수정

* style: ktFormat

* style: ktFormat

* feat: 바이옴 리스트 dto 작성

* feat: 바이옴 디테일 dto 작성

* feat: 바이옴 remote ApiService

* refactor: biomeDetail response 네이밍 변경

* feat: biome list mapper

* feat: biome detail mapper

* refactor: 다음 바이옴 네이밍 변경

* refactor: biome data -> pokemonBiome으로 네이밍 변경

* refactor: BiomeService 변경

* feat: biome pokemon data & mapper

* feat: biomeDataSource 구현

* feat: biomeRepository 구현

* feat: fake repo 생성

* feat: fake repo test 추가

* style: ktFormat

* refactor: 불필요한 코드 삭제

* feat: 바이옴 포켓몬 dto id값 추가

* test: 바이옴 포켓몬 dto id값 추가에 따른 테스트 수정

* style: ktFormat

---------

Co-authored-by: JUNWON LEE <[email protected]>
Co-authored-by: Yehyun Jo <[email protected]>

* [0.2.0.alpha/AN_FEAT, AN_UI] 포켓몬 상세 화면에서 진화 정보 (#257)

* feat: 단일 진화 UI Model

* feat(EvolutionsUiModel): 여러 진화 UIModel 을 목록으로 가진다

* feat(item_pokemon_detail_evolution): 진화 아이템

* feat: 포켓몬 진화 UiModel 에 imageUrl 추가

* fix(PokemonDetailViewModel): lint 깨지는 문제 해결

* feat(SingleEvolutionUiModel): add more dummy data 고라파덕

* feat(EvolutionsUiModel): 진화 체인이 있는지 확인한다

* feat(item_pokemon_detail_evolution): 진화 정보에서 하나의 포켓몬 개체

* feat: 진화 정보 뷰 홀더와 어댑터

* feat: 포켓몬 진화 아이템에 레벨 텍스트뷰 추가

* feat: 포켓몬 진화 정보 UI 완성

* feat: 포켓몬 진화 정보 이브이 더미 데이터 추가

* feat(NestedScrollableHost): viewpager2 와 리사이클러뷰의 스크롤 중첩을 위한 기능

* feat(PokemonEvolutionViewGroup): 포켓몬 진화 뷰그룹 커스텀 뷰

* refactor(PokemonEvolutionFragment): 포켓몬 진화 뷰 그룹 커스텀 뷰 사용

* feat: 포켓몬 상세 탭 레이아웃에 배경

* chore: 더미 데이터 이브이로

* [0.2.0.alpha/AN_FEAT]  배틀 도우미 세부 기능 구현  (#260)

* feat: 포켓몬 선택 시 이동 기능

* feat: 내 포켓몬, 상대 포켓몬 선택에 따라 페이지 구성 및 버튼 다르게 설정

* feat: 포켓몬을 선택해야만 다음 단계로 넘어가도록 설정

* feat: 선택한 데이터 BattleActivity로 전송

* feat: 선택된 데이터 반영

* feat: 선택 결과 불러오기 기능

* feat: 선택 결과 공유 로직

* refactor: 포켓몬, 기술 선택 뷰모델 분리

* feat: 기존 선택했던 데이터 유지

* feat: 기존 선택했던 스킬 데이터 유지 및 갱신 로직 구현

* refactor: 검색바 설정

* fix: 기존 데이터 유지 로직 수정

* [0.2.0.alpha/AN-FEAT] PokeList Room Cache, Splash 화면, Pokemon Api v2 서버 연결 (#262)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* feat: Pokemon 프로퍼티 추가

* feat: Pokemon filter, sort

* feat: Pokemon filtering, Sort 로직

* test: FakeDexRepository

* style: KtFormat

* [2.0.0-alph/AN-UI,Fix] 화면 나갔다가 5초 이후에 들어오면 오둥이 보이는 버그 수정 + clearFocus (#225)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* [2.0.0.alpha/AN-UI] 배틀 도우미 화면 구현 (#232)

* feat: 배틀 페이지 이동

* chore: 필요한 아이콘 추가

* chore: 필요한 배경 및 스타일 지정

* ui: 배틀 페이지 xml 작성

* ui: 날씨 선택 스피너 구현

* ui: 배틀 페이지 액티비티 구현

* feat: 날씨 데이터 연결

* refactor: adapter의 리스트 데이터를 업데이트할 수 있도록 변경

* fix: 린트 수정 및 충돌 해결

* ui: PokeChip, PokeChipGroup

* [0.2.0.alpha/AN-FEAT] Pokemon FIlter, Sort data 로직 (#228)

* refactor: PokeListFragment -> PokeActivity

* test: EventFLowTest

* chore: RefreshEventBus 네이밍 변경

* fix: 5초 지나고 화면 다시 돌아오면 오둥이 보이는 버그 수정

* feat: SearchView clearFocus

* style: ktFormat

* ui: margin 늘리기

* feat: Pokemon 프로퍼티 추가

* feat: Pokemon filter, sort

* feat: Pokemon filtering, Sort 로직

* test: FakeDexRepository

* style: KtFormat

* feat: 여러 filter 조건으로 받을 수 있도록 리팩토링

* refactor: filter 네이밍 변경

* refactor: packaing

* ui: Chip select 시 bold 처리

* fix: DexRepository isBlanck() 로 변경

* build: crashlytics impl 위치 변경

* chore: sample Activity 삭제

* feat: PokeFIlter 구현

* style: ktFormat

* refactor: 코드 정리

* chore: PokeChipSpec -> Spec

* chore: 불필요한 Timber 삭제

* style: ktFormat

* ui: PokeChip - ConerRadius, Padding 추가

* ui: PokeSpec - color, sizes naming 변경

* test: fake 객체 값 수정

* ui: check, sort icon 추가

* refactor: pokemon filter 코드 정리

* ui: SelectableUiModel parcelable 적용

* feat: pokemon Sort 구현

* feat: PokeFilterViewModel SavedStateHandle 적용

* style: ktformat

* feat: ui test margin 변경

* chore: Fake 삭제

* chore: ktFormat

* ci: Pr_builder 수정

* fix: test 수정

* ktFormat 이다 이말이야

* feat: pokemons2 서버 연결

* ui: 포켓몬 Splash 이미지

* feat: dexRepository warmUp 함수 추가

* feat: Intro 뷰

* ui: new type icon 반영

* build: local android junit5, kotest 추가

* feat: pokemon db에 저장

* feat: local Database 캐싱 연동

* style: ktFormat

* feat: stats 필드 추가

* ui: pokemonList 에 stat ui

* style: ktFormat

* fix: select 된 Sort 한 번 더 누르면 팅기는 문제

* feat: connection 시간 줄이기

* feat: home으로 이동시 종료

* chore: 불필요한 코드 삭제

* style: ktlintFormat

---------

Co-authored-by: Yehyun Jo <[email protected]>

* [0.2.0.alpha/AN_FEAT] 바이옴 리스트 Api 연결 (#266)

* feat: biome mapper

* feat: fetch remote data

* feat: loading view

* refactor: uiModel id값 변경

* style: ktFormat

* feat: ViewModel test

* style: ktFormat

* test: biome id값 변경에 따른 테스트 수정

* refactor: biome type dto 수정

* feat: biome Detail 서버 연동 및 기타 작업

* fix: test

---------

Co-authored-by: murjune <[email protected]>

* [0.2.0.alpha/AN_FEAT] 배틀 도우미 API 연결 (#279)

* feat: 배틀 api 연결 세팅

* feat: 날씨 api 연결

* feat: 포켓몬에 해당 하는 기술 api 연결

* feat: 배틀 계산 결과 api 연결

* ui: 피드백 반영

* feat: 수정된 서버 데이터 대응

* feat: 스킬 검색 기능 구현

* chore: 주석 제거

* feat: 포켓몬 선택 검색 기능 구현

* chore: 린트 체크

* [1.0.0/AN/Release] (#280)

* fix: idx로 hashID

* �chore: 바이옴에서 포켓몬 상세페이지 이동 일단 막기

* chore: 포켓몬 리스트에서 포켓몬 상세페이지 이동 일단 막기

* fix: PokeChip spec이 null일 때 처리

* feat: item도감, 꿀팁 도감 삭제(주석처리)

* style: ktFormat

* build: 1.0.0으로 버전업

* .gitignore 추가

* fix: PokeChip

* build: release gradle

* build: 프로가드, signKey

* build: 1.0.1로 배포

* fix: firebase fragment1.1.0, activity1.1.0 참조되는 문제 해결

* fix: backImage dto 추가

* chore: 테스트 임시 주석처리

* [0.2.0.alpha/AN_FEAT] 포켓몬 상세 서버 연결, 바이옴 <-> 포켓몬 상세 이동  (#281)

* feat: 단일 진화 UI Model

* feat(EvolutionsUiModel): 여러 진화 UIModel 을 목록으로 가진다

* feat(item_pokemon_detail_evolution): 진화 아이템

* feat: 포켓몬 진화 UiModel 에 imageUrl 추가

* fix(PokemonDetailViewModel): lint 깨지는 문제 해결

* feat(SingleEvolutionUiModel): add more dummy data 고라파덕

* feat(EvolutionsUiModel): 진화 체인이 있는지 확인한다

* feat(item_pokemon_detail_evolution): 진화 정보에서 하나의 포켓몬 개체

* feat: 진화 정보 뷰 홀더와 어댑터

* feat: 포켓몬 진화 아이템에 레벨 텍스트뷰 추가

* feat: 포켓몬 진화 정보 UI 완성

* feat: 포켓몬 진화 정보 이브이 더미 데이터 추가

* feat(NestedScrollableHost): viewpager2 와 리사이클러뷰의 스크롤 중첩을 위한 기능

* feat(PokemonEvolutionViewGroup): 포켓몬 진화 뷰그룹 커스텀 뷰

* refactor(PokemonEvolutionFragment): 포켓몬 진화 뷰 그룹 커스텀 뷰 사용

* feat: 포켓몬 상세 탭 레이아웃에 배경

* chore: 더미 데이터 이브이로

* feat(EvolutionResponse): 진화 응답

* feat(BiomeResponse): 상세에서 바이옴 응답

* feat(PokemonSkillResponse): 상세에서 포켓몬 스킬 응답

* feat(AbilityResponse2): 상세에서 포켓몬 특성 응답

* feat(PokemonDetailResponse2): 상세에서 포켓몬 상세 응답

* feat(PokeDexService): 포켓몬 상세 정보 불러오기

* feat(PokemonBiomeResponse): image 필드 추가, 네이밍 변경

* feat(Evolution): 진화 정보 dto -> data 매핑

* feat(PokemonBiome): 포켓몬 바이옴 dto -> data 매핑

* feat(PokemonDetailAbility): 포켓몬 상세의 특성 dto -> data 매핑

* feat(SkillCategory2): 카테고리 이름과 로고를 필드로 갖는다

* feat(PokemonSkill2): 포켓몬 기술 dto -> data 매핑

* feat(PokemonDetail2): 포켓몬 상세의 프로퍼티 수정, dto -> data 매핑

* feat(RemoteDexDataSource): PokemonDetail2 타입으로 데이터 요청

* chore(PokemonDetailSkills2): 네이밍 오타 수정

* feat: 포켓몬 상세 데이터 리턴

* feat(PokemonDetailUiState2): 포켓몬 상세 ui state 2

* feat(item_pokemon_detail_skill.xml): 포켓몬 상세의 스킬 아이템에 이미지는 String

* feat(fragment_pokemon_skills): 알 기술 프로토 타입 UI

* feat: 포켓몬 상세 ui state 2 로

* chore(Evolution): 더미데이터 추가

* chore(Stat): 더미데이터 추가

* chore(PokemonSkill): 더미데이터 추가

* feat(StatUiModel): 종족값 ui model 로 매핑

* feat(PokemonDetailAbility): 더미데이터 추가

* feat(FakeDexRepository): 포켓몬 상세 메서드 pokemon2 를 구현

* test(PokemonDetailViewModelTest): 포켓몬 상세 데이터(pokemon2 메서드)를 불러온다

* feat(fragment_pokemon_skills): 포켓몬 기술 프래그먼트에 알 기술 추가

* chore: ktlint

* refactor: AbilityResponse2 -> PokemonAbilityResponse 로 네이밍

* refactor: PokemonDetailUiState2 -> PokemonDetailUiState

* refactor(DefaultDexRepository): 포켓몬 상세를 불러오는 네이밍 변경 pokemon2 -> pokemon

* refactor(RemoteDexDataSource): 포켓몬 상세 api pokemon2 -> pokmon

* refactor(PokemonDetail): PokemonDetail2 -> PokemonDetail 교체

* refactor(PokemonDetailSkills): PokemonDetailSkills2 -> PokemonDetailSkills 교체

* refactor(PokemonSkill): PokemonSkill2 -> PokemonSkill 교체

* refactor(SkillCategory): SkillCategoryUiModel,SkillCategory2 삭제

* chore: ktlint

* feat(EvolutionsUiModel): 진화 데이터 ui 모델로

* chore: PokemonStatFragment 사용하지 않는 data -> ui 매핑 함수 제거

* feat(PokemonEvolutionFragment): 포켓몬 진화 데이터 viewmodel 과 연결

* feat(PokemonDetailResponse): 포켓몬 상세 응답 클래스 프로퍼티

* feat(PokemonDetail): 변경된 서버 API 스펙에 맞춰 변경

* feat: 포켓몬 바이옴 정보 연결

* feat: 포켓몬 진화 정보에서 아이템과 조건이 유효하지 않을 때 보이지 않게 한다

* feat(PokemonDetailAbility): 중복된 특성이 내려오는 경우 중복 제거

* feat(item_ability_title): 특성이 passive 인지, hidden 인지에 따라 색 지정

* feat: 포켓몬 진화 체인에서 포켓몬 클릭 시 해당 포켓몬 상세로 이동

* fix: 바이옴 상세 터지는 에러 해결

* fix: 바이옴 상세 -> 포켓몬 상세로 navigate

* test(PokemonDetailViewModelTest): 포켓몬 상세 데이터를 불러온다 fix

* feat: 진화 response api 명세에 맞게 변경

* [1.0.1/AN_FEAT] 배틀 페이지 뒷모습 이미지 추가 (#288)

* feat:뒷모습 이미지 추가

* chore: 테스트 실패 해결

* [1.0.1/AN_FEAT] 특성 목록, 특성 상세 API 연결 (#287)

* feat(AbilityResponse2): property includes id, name, description

* feat(AbilityDetailResponse2): property includes name, description, pokemons

* feat(ability2.json , abilities2.json): 특성 가짜 json 파일

* feat(AbilityService): 모든 특성 조회

* feat(AbilityDetailResponse2): property pokemons 타입 변경

* feat(AbilityService): id 로 특성 조회

* feat(RemoteAbilityDataSource): 특성 목록 불러온다

* feat(RemoteAbilityDataSource): 특성 상세

* refactor(AbilityService): 메서드 ability2 -> ability

* chore: 사용하지 않는 특성 응답 삭제

* refactor(AbilityResponse2 -> AbilityResponse): 네이밍

* hot-fix: battle 도우미 이전 버튼 color + 스킬 업데이트 안되는 문제 + 위력 없는 스킬 filter

* [1.0.1/AN_FIX] 포켓몬 상세 이미지와 진화 UI  (#295)

* feat(AbilityResponse2): property includes id, name, description

* feat(AbilityDetailResponse2): property includes name, description, pokemons

* feat(ability2.json , abilities2.json): 특성 가짜 json 파일

* feat(AbilityService): 모든 특성 조회

* feat(AbilityDetailResponse2): property pokemons 타입 변경

* feat(AbilityService): id 로 특성 조회

* feat(RemoteAbilityDataSource): 특성 목록 불러온다

* feat(RemoteAbilityDataSource): 특성 상세

* refactor(AbilityService): 메서드 ability2 -> ability

* chore: 사용하지 않는 특성 응답 삭제

* refactor(AbilityResponse2 -> AbilityResponse): 네이밍

* feat: crop 이미지 삭제

* feat: 진화 구분선 수정

* feat: 포켓몬 이미지 조정

* feat: 진화 뷰 그룹 spacing

* feat(PokemonSkillUiModel): 명줄률이 -1 인 것은 - 라는 문자열로

* [1.1.0.alpha/AN-FIX] 바이옴 디테일 페이지 UI 수정 (#300)

* feat: 관장 data 없을 시 empty view 추가

* feat: 보스 data 없을 시 empty view 추가

* fix: 야생 포켓몬 크기가 작아지는 이슈 해결

* ui: 다음 바이옴 탭 view 수정

* test: 테스트 픽스처 수정

* refactor: 코드리뷰 반영

* [1.1.0-AN/Feat] id 기반으로 로그 심기 + 로그 이벤트 비동기 처리 AN_FEAT ✨ (#303)

* feat: AnalyticsScope 적용

* feat: 바이옴, 포켓몬, 특성 Detail analytics 적용

* feat: Pokemon filter, sort analytics 달기

* feat: 배틀 로그

* style : ktFormat

* [1.1.0/AN_FEAT,AN_UI] 바이옴 전체 지도 toolbar에 웹뷰 구현  (#306)

* fix: 바이옴 디테일 타이틀 툴바로 이동

* feat: toolbar에 웹뷰로 가는 아이콘 추가

* feat: 바이옴 전체 지도를 볼 수 있는 웹뷰 구현

* style: ktFormat

* test: 웹뷰 화면이동 테스트 추가

* refactor: 코드리뷰 반영

* refactor: 다음 바이옴 확률 xml 수정

* [1.1.0/AN_FIX] 배틀 디테일 로직 수정 (#310)

* feat: 검색창 외 화면 터치 시 키보드 내리기 설정

* fix: 포켓몬에 해당 하지 않는 기술 데이터 출력 오류 해결

* fix: 포켓몬이 사용 가능한 기술 불러오기 오류 해결

* feat: 선택 모드 값 정의

* feat: 기술 선택 시 바로 기술 선택 화면으로 이동

* refactor: type 어댑터 파일 분리

- 기존 바이옴 타입 어댑터 사용에서 배틀 페이지 전용으로 파일 분리

* refactor: 키보드 이슈 해결

* refactor: 에러 반환 코드 리팩토링

* refactor: touchListener를 clickListener로 변경

* refactor: 피드백 반영 및 불필요한 코드 제거

* refactor: 키보드가 올라가 있는 경우에만 숨김 처리 하도록 설정

* fix: UI dp 값 조절

* feat: 배틀 선택 페이지 로그 심기

---------

Co-authored-by: murjune <[email protected]>

* [1.1.0.alpha/AN_FEAT, AN_UI] 도감 상세 UI 수정, 바이옴에서의 포켓몬 타입 가져오기 (#308)

* feat(PokemonBiomeUiModel): 포켓몬 바이옴 리스트와 모든 바이옴 정보를 통해 ui 모델로

* refactor(PokemonBiomeUiModel): 포켓몬 바이옴 리스트와 모든 바이옴 정보를 통해 ui 모델로

* feat(PokemonDetailUiState2): PokemonUiModel 을 가진다

* refactor(PokemonDetailViewModel): 바이옴 레포지토리를 추가로 가진다

* feat(PokemonDetailSkillFragment): PokemonDetailUiState2 에 대한 함수 추가

* feat(PokemonEvolutionFragment): PokemonDetailUiState2 에 대한 함수 추가

* feat(PokemonInformationFragment): PokemonDetailUiState2 에 대한 함수 추가

* feat(PokemonStatFragment): PokemonDetailUiState2 에 대한 함수 추가

* feat(PokemonDetailBiomeAdapter): PokemonDetailUiState2 에 대한 함수 추가

* refactor(PokemonDetailActivity): PokemonDetailUiState 에 대한 참조 제거

* refactor(PokemonEvolutionFragment): PokemonDetailUiState 에 대한 참조 제거

* refactor(PokemonInformationFragment): PokemonDetailUiState 에 대한 참조 제거

* refactor(PokemonDetailSkillFragment): PokemonDetailUiState 에 대한 참조 제거

* refactor(PokemonStatFragment): PokemonDetailUiState 에 대한 참조 제거

* refactor(PokemonDetailUiState.kt): PokemonDetailUiState2 -> PokemonDetailUiState

* test(PokemonDetailViewModelTest): 포켓모 상세에서 바이옴 정보

* ui(PokemonDetailBiomeTypesAdapter): 바이옴의 타입 정보 추가

* ui(PokemonDetailBiomeViewHolder): 바이옴의 타입 정보 추가

* feat(PokemonInformationFragment.kt): 체중, 키를 서버로부터 로드한 데이터 보여준다

* feat(PokemonBiome): 바이옴에서 출연하는 포켓몬 타입 프로퍼티 추가

* feat(DefaultDexRepository): 바이옴 레포지토리 생성자 추가

* feat(PokemonBiomeUiModel): PokemonBiome 에서 ui 모델로 매핑

* refactor(PokemonBiomeUiModel): 포켓몬 뷰모델은 이전처럼 dex repository 하나만 갖는다

* refactor(PokemonBiomeUiModel): ui 모델로 매핑할 때 다른 파라미터를 갖지 않는다

* test(PokemonDetailViewModelTest): 포켓몬 상세 로드

* chore: ktlint

* refactor(DefaultDexRepository): 포켓몬 상세 로직 가독성 개선

* [1.1.0/AN_CD] Discord로 alpha 버전 apk 전달 (#290)

* 🎉 Chore: PR_Comment_Notification.yml

PR Comment 에 '/noti' 를 포함할 경우 Andorid 채널 혹은 Backend 채널로 노티가 간다

* 🎉 Chore: �Avatar, Content, Description 수정

* docs: README v0.1

* CD: discord로 apk 전달

* CD: cd되는지 확인

* ci: artifact 버전 v3로 수정

* test

* build : 병렬처리

* Revert "Merge branch 'main' into an/cd/send_to_discord"

This reverts commit 925c8db99bb655c11f5f31bbf51bb6627b8741b3, reversing
changes made to 346391c13691baeaf9ac17e41afd7ce98fe61f86.

* ci: google-service추가

* ci: 버저닝 label 추가
[1.1.0/AN_CD] Discord로 alpha 버전 apk 전달 (#290)

* 🎉 Chore: PR_Comment_Notification.yml

PR Comment 에 '/noti' 를 포함할 경우 Andorid 채널 혹은 Backend 채널로 노티가 간다

* 🎉 Chore: �Avatar, Content, Description 수정

* docs: README v0.1

* CD: discord로 apk 전달

* CD: cd되는지 확인

* ci: artifact 버전 v3로 수정

* test

* build : 병렬처리

* Revert "Merge branch 'main' into an/cd/send_to_discord"

This reverts commit 925c8db99bb655c11f5f31bbf51bb6627b8741b3, reversing
changes made to 346391c13691baeaf9ac17e41afd7ce98fe61f86.

* ci: google-service추가

* ci: 버저닝 label 추가

* ci, cd  분리 (#321)

* [1.1.0/AN-FEAT] 배틀 선택 / 결과 UI 개선  (#316)

* feat: 기술 위력이 마이너스 값일 경우, 화면 표시 변경

* feat: 배수 값에 따라 색상 다르게 설정

* feat: 선택했던 값 위치로 스크롤 되도록 설정

* chore: 변수명 수정

* feat: 명중률이 마이너스 값일 경우 -로 표시

* feat: 위력이 마이너스일 경우, 배수 표기 방식 변경

* refactor: App -> analytics 모듈로 FIrebase init 로직 이동 (#318)

* [1.1.0-AN_FEAT] 스플래시 때 포켓몬 front 이미지 캐시 (#319)

* feat: Splash 화면에서 24개 사진 Preload

* [1.1.0/AN_CD] Discord로 alpha 버전 apk 전달 (#290)

* 🎉 Chore: PR_Comment_Notification.yml 

PR Comment 에 '/noti' 를 포함할 경우 Andorid 채널 혹은 Backend 채널로 노티가 간다

* 🎉 Chore: �Avatar, Content, Description 수정

* docs: README v0.1

* CD: discord로 apk 전달

* CD: cd되는지 확인

* ci: artifact 버전 v3로 수정

* test

* build : 병렬처리

* Revert "Merge branch 'main' into an/cd/send_to_discord"

This reverts commit 925c8db99bb655c11f5f31bbf51bb6627b8741b3, reversing
changes made to 346391c13691baeaf9ac17e41afd7ce98fe61f86.

* ci: google-service추가

* ci: 버저닝 label 추가

* fix: 매직 넘버 상수화 및 예외처리 문 추가

* fix

* style: ktFormat

* fix: withContext -> coroutineScope, 주석 변경

* fix: Splash 시간 최소 시간 설정

* [1.1.0/AN_FEAT] 바이옴 리스트 검색 기능 구현 (#320)

* feat: toolbar에 검색 아이콘 넣기

* feat: biome repository 검색 구현

* feat: biome 리스트 검색 바인딩 어뎁터

* test: 바이옴 조회 repository 테스트 작성

* feat: 바이옴 검색 기능 구현

* feat: 검색시 리싸이클러뷰 스크롤 항상 맨위로 이동

* feat: 키보드 아웃포커싱 내리기

* style: ktFormat

* refactor: 리싸이클러뷰 스크롤 위치 이동

* style: ktFormat

* [1.1.0/AN_FEAT] 배틀 선택 데이터 저장 (#324)

* chore: DataStore 의존성 설정

* feat: Datastore 저장 로직 추가

* feat: 저장된 선택 데이터 UI 에 반영

* refactor: Skill 캐싱

* refactor: Test 객체 수정

* refactor: context 참조 수정

* refactor: 리팩토링 리뷰 반영

* refactor: 아이디 저장값 분리

* refactor: Map 형태 변경

* [1.1.0-AN-CI/CD] WorkFlow PR CI 2번 돌아가는거 수정, CI/CD actions 파일로 분리 (#327)

* [CI/CD] ktlint, unit test workFlow 파일 분리

* fix: Input BaseURL 로 수정

* fix: wokring-directory 수정

* fix: working-directory 개별 step 마다 적용

* add debuger

* unitTest파일 분리 되돌리기..

* [1.1.0/AN-UI] 타입 아이콘 불일치 수정 (#345)

* refactor: 타입 아이콘 불일치 변경

* refactor: 타입 색상 변경

* refactor: 독 타입 변경

* refactor: 독 타입 색상 변경

* [1.1.0/AN_FEAT] 배틀 구도 날씨 저장  (#343)

* chore: DataStore 의존성 설정

* feat: Datastore 저장 로직 추가

* feat: 저장된 선택 데이터 UI 에 반영

* refactor: Skill 캐싱

* refactor: Test 객체 수정

* refactor: context 참조 수정

* refactor: 리팩토링 리뷰 반영

* refactor: 아이디 저장값 분리

* feat: Spinner 초기화 시 0으로 자동 선택되는거 방지하는 ItemSelectListener 구현

* feat: 날씨저장

* fix: BattleActivity  Context 수정

* refactor: xxStream postFix 붙이기, suspend 함수 제거

* ktlintFormat

* fix: weather 가 결과에 영향 안주던거 수정

* refactor : Flow 반환 함수 네이밍 (Stream) 붙이기

* refactor: hashMap -> mutableMap

* ktLintFormat

---------

Co-authored-by: JoYehyun <[email protected]>

* feat: 룸 엔티티의 스키마가 바뀌었을 때만 감지해서 DB 재생성 (#355)

* [1.1.0/AN-Refactor] Koin 기초 세팅, App, data, local, remote, testing, analytics 모듈 세팅 (#361)

* feat: remote 모듈에 Koin 적용

* feat: local 모듈에 Koin 적용

* feat: Analytics 모듈 Koin 적용

* build :android core ktx, robolectric bundle 추가

* fix: module 변수에서 getter 로 변경

* feat: Testing Module

* feat: TestApplication

* feat: KoinAndroidUnitTestRule

* feat: testing 모듈 test에 Koin 적용

* build : app 모듈 managedDevices 리팩토링

* feat: app 모듈 Koin 세팅

* ktFormat

* ci 돌아가기 위한 커밋

* fix: repository internal 키워드 추가

* [1.1.0/AN-FEAT] 인앱 업데이트 기능 구현 (#358)

* feat: In-App update 의존성 추가

* feat: 인앱 업데이트 하는 기능 구현

* style: ktFormat

* refactor: In-App update 불필요한 의존성 제거

* feat: updateManager lifecycle 관리

* refactor: splash 화면으로 업데이트 로직 이동

* refactor: 다시 Home화면으로 로직 이동

* refactor: 불필요한 파일 삭제

* feat: 업데이트 거절시 24시간 뒤에 다이얼로그 보여주기

* feat: 다운로드 완료시 설치 안내 메시지 추가

* feat: 업데이트 로깅 달기

* style: ktFormat

* style: ktFormat

* [1.1.0/AN-UI, AN-REFACTOR] 포켓몬 상세 화면 스크롤 시 애니메이션 (#369)

* feat(activity_pokemon_detail2): first coordinatorlayout

* feat(activity_pokemon_detail2): title

* chore: PokemonDetailActivity 안 쓰는 부분 일단 주석

* feat(PokemonDetail2Activity): 샘플 코드 가져와보기

* feat: activity_pokemon_detail2.xml 타입만 해결하면 되는데

* feat: OuterEvolutionAdapter, OuterEvolutionViewHolder

* feat: 진화 프래그먼트 outer evolutions 로 변경

issue: 화면이 안나옴..

* fix: feat: 진화 프래그먼트 outer evolutions 로 , 화면 나옴

* fix: activity_pokemon_detail2 의 nestedScrollview 를 각 프래그먼트로 이동

* chore: ktlint, 사용하지 않는 파일 제거

* chore: ktlint, 사용하지 않는 파일 제거

* refactor(EvolutionsUiModel): ui 에서 사용하는 리스트로 변환

* refactor(EvolutionStageAdapter): 네이밍

* fix: activity_pokemon_detail.xml 최상단일 때만 상단이 가려진다

fix: https://github.com/woowacourse-teams/2024-pokerogue-helper/pull/369#pullrequestreview-2377127135

* chore: 로그 삭제

* fix(activity_pokemon_detail): progress indicator 위치 조정

* [1.1.0/AN-FEAT] Splash 화면에서 포켓몬 데이터 캐싱 교체 전략 추가 (#385)

* fix: Weather PlaceHolder 반환하도록 수정

* feat: 서버 데이터베이스 VersionService

* feat: dataStore에 서버 버전 저장

* feat: 서버의 데이터베이스 버전이 달라지면 디스크 캐시를 리프레쉬한다

* fix: @Serializable 어노테이션 추가

* fix: dataStore 2번 만들어지는거 임시 해결 (나중에 koin으로 다 마이그레이션하면 없어짐)

* fix: Koin Single Component  인 DexRepository warm up

* refactor: Flow 반…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
AN_FEAT ✨ 안드 새로운 기능 v1.1.0 🏷️
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[1.1.0/AN-FEAT] 배틀 선택 데이터 저장
4 participants