구현 동기
- PhotoPicker와 같은 캡슐화된 라이브러리는 데이터를 긁어올 쿼리 세분화가 불가능
- 기능요구사항 : 최소 시간 10초 이상의 영상들만 화면에 표출
- Intent + StartActivityForResult를 사용하여 갤러리를 호출하거나 photo picker 등을 사용하여 구현 방식은 다른 화면을 띄우고 결과값을 받아오는 방식으로 사용자가 본인이 선택한 영상을 즉시 확인 할 수 없기에 보기 불편
구현 결과

View 구성
// 구조 요약
<CoordinatorLayout
<AppBarLayout>
<CollapsingToolbarLayout>
<exoplayer2.ui.StyledPlayerView>
<Toolbar>
</CollapsingToolbarLayout>
</AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
app:layout_behavior="appbar.AppBarLayout$ScrollingViewBehavior"/>
</CoordinatorLayout>
- 전체 Layout을 CoordinatorLayout로 두고 자식뷰로 AppbarLayout 과 RecyclerView를 두어 RecyclerView에
app:layout_behavior=AppBarLayout$ScrollingViewBehavior
속성을 주어 AppBarLayout
→ CollapsingToolbarLayout
→ exoplayer2
영상 재생 영역을 동적으로 확대, 축소시키며 구성
영상 데이터 흐름

Repository Layer
PagingSource
- ContentResolver 객체를 생성하여 쿼리를 통해 MediaStore에서 10초 이상의 영상 데이터 Load
- 쿼리 동작은 Dispatchers.IO에서 동작
- MediaStore로부터 데이터가 정상적으로 수행되었는지 아닌지에 따른 LoadState 값 반환
- PagingData
- 페이징된 데이터의 Container 역할
- 구성요소
- PagingConfig
- pagerSize : 각 페이지에 로드할 데이터 수
- enablePlaceHolders : 플레이스 홀더 사용 여부
- maxSize : 기본적으로 모든 페이지를 메모리에 유지
- pagingSourceFctory