Sunflower 분석해 보기

Juan·2022년 2월 27일
0

Google의 안드로이드 Sample인 Sunflower를 분석해 보았습니다.
MVVMHilt에 대한 기본적인 이해가 있으면 소스를 이해하기 편합니다.
Gallery 화면의 Network단까지 실행해보기 위해서는 Unsplash API Key가 필요합니다.

아래부터는 화면과 모듈별로 제 기준에서 중요하다고 생각되는 기능들을 정리했습니다.

공통

  • BindingAdapter에서 Glide로 url에 위치한 이미지를 보여줌

HomeViewPagerFragment

  • 최초 실행 시에 보여지는 Home 화면
  • TabLayoutViewPager를 활용 해 Garden 화면과 Plant List 화면으로 분기할 수 있게 구성
  • ViewPager를 위한 SunflowerPagerAdapter에서 createFragment 로직은 참고할 만함

GardenFragment

  • Plant Detail 화면에서 사용자가 심은 식물이 보여지는 Garden 화면
  • PlantAndGardenPlantings에서 PlantGardenPlanting의 관계를 1:N 으로 설정함 (1가지 식물은 1번 밖에 못 심는데 1:1으로 해도 되지 않을까?)
  • DiffUtil을 사용하는 RecyclerView
  • List Item을 위한 별도의 ViewModel을 만들어서 바인딩 함

PlantListFragment

  • Home 화면에서 PLANT LIST 탭을 누르면 보여지는 화면
  • 정원에 심을 수 있는 식물들을 보여줌
  • DiffUtil을 사용하는 RecyclerView
  • App bar의 필터 버튼을 눌러 NO_GROW_ZONEGROW_ZONE_9 을 토글할 수 있음
  • ViewModel에서 SaveStateHandle , Flow , flatMapLatest 를 이용해 필터링 로직을 구현함

PlantDetailFragment

  • Plant List 화면에서 각각의 Plant를 누르면 보여지는 화면
  • + 버튼을 눌러 식물을 정원에 심을 수 있음
  • Share Intent 사용해 공유 기능 구현
  • Navigation argument를 SaveStateHandle에서 가져옴
  • BindingAdapter에서 HtmlCompat으로 HTML 렌더링

GalleryFragment

  • Plant Detail 화면에서 갤러리 이미지 버튼을 누르면 보여지는 화면(gradle.propertiesunsplash_access_key값이 존재해야 함)
  • Unsplash API를 통해 Plant 이름의 이미지 검색 결과를 보여줌
  • DiffUtil을 사용하는 PagingDataAdapter
  • Paging 구현을 위해 Job, Flow, collectLatest 활용

Data

DB

Table

  • plants: 정원에 심을 수 있는 식물의 Master Data
  • garden_plantings: 사용자가 정원에 식물을 심은 Transaction Data

Network

  • Retrofit, GsonConverter 를 사용하여 Unsplash 이미지 검색 API 호출
  • Hilt를 통해 API Service 생성
profile
I love Kotlin!

0개의 댓글