-
[TedImagePicker] 1-2. TedImagePickerBaseBuilder오픈소스 공부/TedImagePicker 2024. 6. 1. 15:59
1편에서는 MainActivity부터 TedImagePicker 클래스까지 사용되는 메서드들의 흐름을 보았다.
이번장에서는 주 TedImagePickerBaseBuilder의 진행되는 흐름을 보려고 한다.
1편에서 마지막으로 start 메서드를 살펴보았고 마지막으로 statInternal(it)이 실행되는 것을 보았다.
contextWeakReference.get()?.let { startInternal(it) }
startInternal 메소드는 TedImagePicker 에서 상속받은 TedImagePickerBaseBuilder에 선언되어있다.
(MainActivity.kt > TedImagePicker > TedImagePickerBaseBuilder 이동)
1. startInternal 메소드
@SuppressLint("CheckResult") protected fun startInternal(context: Context) { val requestPermissions = getRequestPermissions() if (TedPermissionUtil.isGranted(*requestPermissions) || isPartialAccessGranted) { startActivity(context) } else { TedPermission.create() .setPermissions(*requestPermissions) .request() .subscribe({ permissionResult -> if (permissionResult.isGranted || isPartialAccessGranted) { startActivity(context) } }, { throwable -> onErrorListener?.onError(throwable) }) } }
- 권한을 물어보고 권한이 없으면 권한 받으러 가고 아니라면 startActivity()로 진행된다.
2. startActivity 메소드
private fun startActivity(context: Context) { TedImagePickerActivity.getIntent(context, this) .run { TedRxOnActivityResult.with(context).startActivityForResult(this) }.run { subscribe({ activityResult -> if (activityResult.resultCode == Activity.RESULT_OK) { onComplete(activityResult.data) } else { imageSelectCancelListener?.onImageSelectCancel() } }, { throwable -> onErrorListener?.onError(throwable) }) } }
RxJava를 사용해서 이미지를 선택하는 화면으로 이동하는 것으로 보인다.
2-1 getIntent()
이게 Ted 라이브러리들만 그런건지 다른 라이브러리들도 그런건지는 모르겠짐나 이동하려는 Activity가 있다고 하면 이동하려는 위치에 intent를 설정해준다.
TedImagePickerActivity.getIntent(context, this)
TedImagePickerActivity에 getIntent 메소드를 가져오고 Intent를 반환한다.
internal fun getIntent(context: Context, builder: TedImagePickerBaseBuilder<*>) = Intent(context, TedImagePickerActivity::class.java) .apply { putExtra(EXTRA_BUILDER, builder) }
2-2 startActivityForResult()
getIntent 메소드를 통해 Intent를 받은 이후 TedRxOnActivityResult class의 startActivityForResult를 통해서 Single<ActivityResult>를 반환 한다.
TedRxOnActivityResult.with(context).startActivityForResult(this)
그 후 RxJava의 구독 하는 방식으로 TedImagePickerAcitivity > MainActivity로 이동할때 결과를 받아오는 것으로 보인다.
subscribe({ activityResult -> if (activityResult.resultCode == Activity.RESULT_OK) { onComplete(activityResult.data) } else { imageSelectCancelListener?.onImageSelectCancel() } }, { throwable -> onErrorListener?.onError(throwable) })
이 부분은 TedOnActivityResult 라이브러리를 가져와 사용한 것이다. 학습하려면 시간이 오래 걸려서 일단 다음번에 공부하면 좋을 듯 싶다.
https://github.com/ParkSangGwon/TedOnActivityResult
이제는 TedImagePickerActivity가 켜지는 부분이다. 이부분은 새로운 부분이어서 다음장으로...
'오픈소스 공부 > TedImagePicker' 카테고리의 다른 글
[TedImagePicker] 0. 기본 소개 및 공부 방향 (0) 2024.05.23 [TedImagePicker] 1-1. 비동기 방식 이미지 1개 선택 코드 분석 (0) 2024.05.23