Skip to content

Commit 4a84a9b

Browse files
committed
fix(register): pick image
1 parent a3a9162 commit 4a84a9b

File tree

1 file changed

+21
-15
lines changed

1 file changed

+21
-15
lines changed

app/src/main/java/com/hoc/comicapp/ui/register/RegisterFragment.kt

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.hoc.comicapp.ui.register
22

3+
import android.net.Uri
34
import android.os.Bundle
45
import android.view.LayoutInflater
56
import android.view.View
@@ -13,6 +14,9 @@ import androidx.transition.ChangeBounds
1314
import androidx.transition.Fade
1415
import androidx.transition.TransitionManager
1516
import androidx.transition.TransitionSet
17+
import arrow.core.Option
18+
import arrow.core.Some
19+
import arrow.core.toOption
1620
import com.hoc.comicapp.GlideApp
1721
import com.hoc.comicapp.R
1822
import com.hoc.comicapp.databinding.FragmentRegisterBinding
@@ -30,10 +34,11 @@ import com.hoc.comicapp.utils.uriFromResourceId
3034
import com.hoc081098.viewbindingdelegate.viewBinding
3135
import com.jakewharton.rxbinding4.view.clicks
3236
import com.jakewharton.rxbinding4.widget.textChanges
33-
import io.reactivex.rxjava3.android.MainThreadDisposable
37+
import com.jakewharton.rxrelay3.PublishRelay
3438
import io.reactivex.rxjava3.core.Observable
3539
import io.reactivex.rxjava3.disposables.CompositeDisposable
3640
import io.reactivex.rxjava3.kotlin.addTo
41+
import io.reactivex.rxjava3.kotlin.ofType
3742
import org.koin.androidx.scope.ScopeFragment
3843
import org.koin.androidx.viewmodel.ext.android.viewModel
3944
import 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

Comments
 (0)