ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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가 켜지는 부분이다. 이부분은 새로운 부분이어서 다음장으로...

     

Designed by Tistory.