11package com.hoc.comicapp.ui.register
22
3+ import android.net.Uri
34import android.os.Bundle
45import android.view.LayoutInflater
56import android.view.View
@@ -13,6 +14,9 @@ import androidx.transition.ChangeBounds
1314import androidx.transition.Fade
1415import androidx.transition.TransitionManager
1516import androidx.transition.TransitionSet
17+ import arrow.core.Option
18+ import arrow.core.Some
19+ import arrow.core.toOption
1620import com.hoc.comicapp.GlideApp
1721import com.hoc.comicapp.R
1822import com.hoc.comicapp.databinding.FragmentRegisterBinding
@@ -30,10 +34,11 @@ import com.hoc.comicapp.utils.uriFromResourceId
3034import com.hoc081098.viewbindingdelegate.viewBinding
3135import com.jakewharton.rxbinding4.view.clicks
3236import com.jakewharton.rxbinding4.widget.textChanges
33- import io.reactivex.rxjava3.android.MainThreadDisposable
37+ import com.jakewharton.rxrelay3.PublishRelay
3438import io.reactivex.rxjava3.core.Observable
3539import io.reactivex.rxjava3.disposables.CompositeDisposable
3640import io.reactivex.rxjava3.kotlin.addTo
41+ import io.reactivex.rxjava3.kotlin.ofType
3742import org.koin.androidx.scope.ScopeFragment
3843import org.koin.androidx.viewmodel.ext.android.viewModel
3944import timber.log.Timber
@@ -46,6 +51,12 @@ class RegisterFragment : ScopeFragment() {
4651 private val compositeDisposable = CompositeDisposable ()
4752 private val glide by lazy(NONE ) { GlideApp .with (this ) }
4853
54+ private val avatarUriS = PublishRelay .create<Option <Uri >>()
55+ private val openDocumentLauncher =
56+ registerForActivityResult(ActivityResultContracts .OpenDocument ()) { uri: Uri ? ->
57+ avatarUriS.accept(uri.toOption())
58+ }
59+
4960 override fun onCreateView (
5061 inflater : LayoutInflater ,
5162 container : ViewGroup ? ,
@@ -122,21 +133,16 @@ class RegisterFragment : ScopeFragment() {
122133 return viewBinding.imageAvatar
123134 .clicks()
124135 .exhaustMap {
125- Timber .d(" Select image" )
126-
127- Observable .create<Intent .AvatarChanged > { emitter ->
128- val launcher = registerForActivityResult(ActivityResultContracts .OpenDocument ()) { uri ->
129- uri?.let { emitter.onNext(Intent .AvatarChanged (it)) }
130- emitter.onComplete()
131- }.apply { launch(arrayOf(" image/*" )) }
132-
133- emitter.setDisposable(
134- object : MainThreadDisposable () {
135- override fun onDispose () = launcher.unregister()
136- }
137- )
138- }
136+ avatarUriS
137+ .take(1 )
138+ .doOnSubscribe {
139+ Timber .d(" Start image" )
140+ openDocumentLauncher.launch(arrayOf(" image/*" ))
141+ }
139142 }
143+ .doOnNext { Timber .d(" Picked $it " ) }
144+ .ofType<Some <Uri >>()
145+ .map { Intent .AvatarChanged (it.value) }
140146 .doOnNext { Timber .d(" Select image $it " ) }
141147 }
142148
0 commit comments