[와이어 프레임]

Untitled

[완성본]

Untitled

[기능 별 담당]

Untitled

**[MainActivity]**
1) 실제 저장된 연락처 불러오기(+ 주소록 권한)
① registerForActivityResult에서 유저가 허용을 눌렀을 경우(= isGranted일 경우) loadContacts 실행
거부를 눌렀을 경우 showPermissionDeniedDialog 실행

**[ContactListFragment]**
1) DetailContactDialogFragment로 상세 정보 전달
① onViewCreated -> adapter.setOnItemClickListener -> onItemClick override → bundle로 data put
② DetailContactDialogFragment에 onCreateView에 get으로 data 받음

2) View Type 2개 제공(listview, gridview)
① ContactListFragment -> onViewCreated -> binding.mainSpinner -> onItemSelectedListener
-> isGrid일 때 GridLayoutManager, 아닐 때 LinearLayoutManager-> 마지막에 adapter.setGridMode(isGridMode), rv.adapter = adapter(토글)
* setGridMode는 Apapter에 생성한 메소드
② Adapter -> onCreateViewHolder -> isGrid일 때 ActivityGirdviewItemListBinding.inflate,
아닐 때 ActivityRecyclerviewItemListBinding.inflate

3) swipe로 전화 걸기 실행 - Adapter, ContactListFragment, CallHelper 필요
- Adapter : onItemMove, onItemSwipe override
- ContactListFragment : CallHelper 변수로 호출 후 rv에 연결 helper.attachToRecyclerView(rv)
- CallHelper : ItemTouchHelper.Callback() 상속

4) 리스트 오름차순 정렬
- ContactListFragment -> onCreateView -> items.sortBy { it.name }

**[DetailContactDialogFragment]**
1) 전화 걸기 권한
① manifest에 <uses-permission android:name="android.permission.CALL_PHONE" /> 추가
② DetailContactDialogFragment에서 다음 메소드 추가
- 전화 걸기 권한이 부여되어 있는지 확인(fun checkCallPermission)
- 전화 걸기 작업 수행(fun makePhoneCall)
- 전화 걸기 권한 요청(fun requestCallPermission)
- 권한 요청 결과 처리(override fun onRequestPermissionResult)
③ onViewCreated에서 ②번 if 조건문 만족 시 호출

**[AddContactDialogFragment]**
1) ContactListFragment에 연락처 추가 즉각 반영 - MainActivity가 모든 fragment의 부모인 점 잊지말기
① interface ContactChangedListener { fun onContactInserted() }
② ContactListFragment
- ContactChangedListener 추가 상속
- onContactInserted override, adapter.notifyDataSetChanged()
- onAttach, onDetach override하여 fragment가 activity에 attach 되었을 때만 불리도록 함
③ AddContactDialogFragment -> onViewCreated -> binding.addSaveBtn.setOnClickListener()
-> **(activity as? MainActivity)?.listener?.onContactInserted()**

2) 등록된 이벤트 시간에 맞춰 notification 띄우기 - BroadcastReceiver 상속받는 AlertReceiver 생성 필요
① mainfest에 <application -> <receiver android:name=".AlertReceiver"/> 추가
② AddContactDialogFragment -> scheduleSingleAlarmAndNotification 메소드 생성 -> 버튼 클릭 시 실행되도록 onViewCreated 안에 호출
* intent AlertReceiver로 보냄

**[MyPageFragment]**
1) 기존 프로필 사진 갤러리에서 이미지 불러와서 변경하기(+ 갤러리 권한)
① manifest에 파일 및 미디어 접근 권한 추가
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
② 권한 허용 된된 경우 갤러리 열기
if (permissionsToRequest.isEmpty()) {
  val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
  intent.type = "image/*"
  startActivityForResult(intent, PICK_IMAGE_REQUEST) }