[김수효], [이희우]
swipe 으로 이동할 수 있는 3 개의 탭으로 이루어진 앱.
TAB 1. Contact
TAB 2. Image Gallery
TAB 3. Tool box
- 저장된 연락처 불러오기
- 연락처 추가하기
- 연락처 삭제하기
- 연락처로 문자, 전화하기
연락처를 Array list로 불러와 Recycler View 로 나타내었다. 각 아이템이 전화 버튼, 문자 버튼, 삭제 버튼을 가지고 있다.
Floating Button 을 클릭하면 Alert Dialog 이 나와 사용자 이름과 번호 정보를 받는다. 주어진 정보는 intent를 통해 원래의 연락처 앱에 저장이 된다.
휴지통 버튼을 누르면 목록에서 목록이 삭제된다. 연락처 앱에 연동이 되도록 만들고 싶었으나, getContentResolver().delete()에 문제가 있는 것으로 보인다.
전화 혹은 문자 아이콘을 누르면 사용자의 전화번호 정보를 가지고 전화 및 문자창으로 연결된다. 연동은 intent를 이용하고 각각 ACTION_DIAL, ACTION_VIEW를 이용한다.
- 저장소에서 모든 이미지 자동으로 불러오기
- 스크롤을 통해 여러 장의 이미지 보여주기
- 사용자의 기기 환경에 맞추어 격자 크기 자동으로 조절하기
- 사진 선택시 전체화면으로 원본 사진 보여주기
- 아래로 당겨 갤러리 새로고침하기
ImageAdapter의 getAllImages()에서 내부에 저장된 모든 이미지들의 파일 경로를 탐색하고, 이를 ArrayList에 저장한다.
getView()에서 이 ArrayList를 이용해 사진을 View에 Glide한다.
Fragment 2의 onCreateView()에서 ImageAdapter를 호출해 GridView에 사진을 표시한다.
GridView에 내장된 스크롤 기능을 통해 여러 장의 이미지를 스크롤을 통해 표시한다.
displayMetrics를 가져와 사용자의 기기 환경을 파악한다.
default width를 250px로 설정하고, 그 주변의 값 중 기기의 display width를 꽉 채울 수 있는 가장 적절한 값을 계산해 optimalWidth로 설정한다.
Column의 갯수는 auto_fill로 설정해 optimalWidth에 적합한 갯수를 찾는다.
이를 통해 기기의 화면 크기, 가로 또는 세로 모드에 상관없이 화면에 꽉 찬 격자 배치를 얻을 수 있다.
onClickListner를 통해 GridView의 각 item에 대한 클릭 여부를 파악하고, 클릭시 ImageView에 해당 사진을 Glide한다.
GridView와 ImageView는 FrameLayout에 함께 묶여 있어 visibility 조절을 통해 어떤 view를 보여줄지 선택할 수 있다.
visibility조절을 할 때 애니메이션을 삽입해 자연스러운 화면 전환 효과를 추가했다.
새로운 사진을 다운로드하거나 촬영한 경우 View를 새로고침하여 새롭게 추가된 이미지를 갤러리 화면에 띄울 수 있다.
FrameLayout을 swipeRefreshLayout으로 감싼 뒤 setOnRefreshListner()를 추가해 아래로 당기면 새로고침된다.
- 손전등
- 다크모드
- 음성녹음
- 화면녹화
- QR코드 리더기
ScrollView안에 ConstraintLayout을 삽입하고, 6개의 clickable ImageView를 배치해 도구 아이콘을 표시했다.
디바이스에 손전등이 있는지 확인한 후, toggle 하여 손전등을 조절한다.
화면을 클릭하여 다크모드를 조정하고 sharedPreferences에 설정값을 저장한다.