Skip to content

Commit 3a66f1d

Browse files
committed
add launchForResult for DialogFragmentLauncher
1 parent 7c710cb commit 3a66f1d

File tree

7 files changed

+90
-31
lines changed

7 files changed

+90
-31
lines changed

core/src/main/java/com/omega_r/base/components/OmegaActivity.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.omega_r.base.components
22

3+
import android.app.Activity
34
import android.content.Context
45
import android.content.Intent
56
import android.graphics.drawable.ColorDrawable
@@ -30,6 +31,7 @@ import com.omegar.libs.omegalaunchers.BaseIntentLauncher
3031
import com.omegar.libs.omegalaunchers.DialogFragmentLauncher
3132
import com.omegar.libs.omegalaunchers.FragmentLauncher
3233
import com.omegar.mvp.MvpAppCompatActivity
34+
import java.io.Serializable
3335

3436
/**
3537
* Created by Anton Knyazev on 04.04.2019.
@@ -247,6 +249,10 @@ abstract class OmegaActivity : MvpAppCompatActivity(), OmegaComponent {
247249
launcher.launchForResult(this, requestCode)
248250
}
249251

252+
override fun launchForResult(launcher: DialogFragmentLauncher, requestCode: Int) {
253+
launcher.launch(supportFragmentManager, requestCode = requestCode)
254+
}
255+
250256
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
251257
if (!onLaunchResult(requestCode, resultCode, data)) {
252258
super.onActivityResult(requestCode, resultCode, data)
@@ -277,6 +283,15 @@ abstract class OmegaActivity : MvpAppCompatActivity(), OmegaComponent {
277283
dialogManager.onStop()
278284
}
279285

286+
override fun setResult(success: Boolean, data: Serializable?) {
287+
val resultCode = if (success) Activity.RESULT_OK else Activity.RESULT_CANCELED
288+
if (data != null) {
289+
setResult(resultCode, Intent().putExtra(KEY_RESULT, data))
290+
} else {
291+
setResult(resultCode)
292+
}
293+
}
294+
280295
override fun exit() {
281296
finish()
282297
}

core/src/main/java/com/omega_r/base/components/OmegaBottomSheetDialogFragment.kt

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.omega_r.base.components
22

33
import android.app.Dialog
4+
import android.content.DialogInterface
45
import android.content.Intent
56
import android.os.Bundle
67
import android.view.*
@@ -21,6 +22,10 @@ import com.omegar.libs.omegalaunchers.BaseIntentLauncher
2122
import com.omegar.libs.omegalaunchers.DialogFragmentLauncher
2223
import com.omegar.libs.omegalaunchers.FragmentLauncher
2324
import com.omegar.mvp.MvpBottomSheetDialogFragment
25+
import java.io.Serializable
26+
27+
private const val KEY_SAVE_RESULT = "omegaSaveResult"
28+
private const val KEY_SAVE_DATA = "omegaSaveData"
2429

2530
abstract class OmegaBottomSheetDialogFragment : MvpBottomSheetDialogFragment(), OmegaComponent {
2631

@@ -32,10 +37,16 @@ abstract class OmegaBottomSheetDialogFragment : MvpBottomSheetDialogFragment(),
3237

3338
private var childPresenterAttached = false
3439

40+
private var result: Boolean = false
41+
private var data: Serializable? = null
42+
3543
override fun <T : View> findViewById(id: Int): T? = view?.findViewById(id)
3644

3745
override fun onCreate(savedInstanceState: Bundle?) {
3846
super.onCreate(savedInstanceState)
47+
result = savedInstanceState?.getBoolean(KEY_SAVE_RESULT, result) ?: result
48+
data = savedInstanceState?.getSerializable(KEY_SAVE_DATA) ?: data
49+
3950
setHasOptionsMenu(this::class.findAnnotation<OmegaMenu>() != null)
4051

4152
this::class.findAnnotation<OmegaClickViews>()?.let {
@@ -69,6 +80,8 @@ abstract class OmegaBottomSheetDialogFragment : MvpBottomSheetDialogFragment(),
6980
override fun onSaveInstanceState(outState: Bundle) {
7081
super.onSaveInstanceState(outState)
7182
detachChildPresenter()
83+
outState.putBoolean(KEY_SAVE_RESULT, result)
84+
outState.putSerializable(KEY_SAVE_RESULT, data)
7285
}
7386

7487
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
@@ -190,18 +203,28 @@ abstract class OmegaBottomSheetDialogFragment : MvpBottomSheetDialogFragment(),
190203
launcher.launchForResult(this, requestCode)
191204
}
192205

206+
override fun launchForResult(launcher: DialogFragmentLauncher, requestCode: Int) {
207+
launcher.launch(childFragmentManager, requestCode = requestCode)
208+
}
209+
193210
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
194211
if (!onLaunchResult(requestCode, resultCode, data)) {
195212
super.onActivityResult(requestCode, resultCode, data)
196213
}
197214
}
198215

199-
override fun setResult(resultCode: Int) {
200-
activity?.setResult(resultCode)
216+
override fun setResult(success: Boolean, data: Serializable?) {
217+
result = success
218+
this.data = data
201219
}
202220

203-
override fun setResult(resultCode: Int, intent: Intent) {
204-
activity?.setResult(resultCode, intent)
221+
override fun onDismiss(dialog: DialogInterface) {
222+
super.onDismiss(dialog)
223+
val requestCode = targetRequestCode
224+
if (requestCode != 0) {
225+
val omegaComponent = (parentFragment as? OmegaComponent) ?: (activity as? OmegaComponent)
226+
omegaComponent?.presenter?.onLaunchResult(requestCode, result, data)
227+
}
205228
}
206229

207230
override fun requestPermissions(requestCode: Int, vararg permissions: String) {

core/src/main/java/com/omega_r/base/components/OmegaComponent.kt

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ import java.io.Serializable
2727
* Created by Anton Knyazev on 26.04.2019.
2828
*/
2929

30-
private const val KEY_RESULT = "resultData"
30+
31+
internal const val KEY_RESULT = "omegaResultData"
3132

3233
interface OmegaComponent : OmegaBindable, OmegaView, OmegaClickable {
3334

35+
3436
val presenter: OmegaPresenter<out OmegaView>
3537

3638
fun createMessage(message: Text, action: Action? = null): Dialog {
@@ -98,19 +100,6 @@ interface OmegaComponent : OmegaBindable, OmegaView, OmegaClickable {
98100
)
99101
}
100102

101-
override fun setResult(success: Boolean, data: Serializable?) {
102-
val resultCode = if (success) Activity.RESULT_OK else Activity.RESULT_CANCELED
103-
if (data != null) {
104-
setResult(resultCode, Intent().putExtra(KEY_RESULT, data))
105-
} else {
106-
setResult(resultCode)
107-
}
108-
}
109-
110-
fun setResult(resultCode: Int)
111-
112-
fun setResult(resultCode: Int, intent: Intent)
113-
114103
override fun requestGetPermission(permission: String, deferred: CompletableDeferred<Boolean>) {
115104
deferred.complete(
116105
ContextCompat.checkSelfPermission(

core/src/main/java/com/omega_r/base/components/OmegaDialogFragment.kt

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.omega_r.base.components
22

33
import android.app.Dialog
4+
import android.content.DialogInterface
45
import android.content.Intent
56
import android.os.Bundle
67
import android.view.*
@@ -21,10 +22,15 @@ import com.omegar.libs.omegalaunchers.BaseIntentLauncher
2122
import com.omegar.libs.omegalaunchers.DialogFragmentLauncher
2223
import com.omegar.libs.omegalaunchers.FragmentLauncher
2324
import com.omegar.mvp.MvpAppCompatDialogFragment
25+
import java.io.Serializable
2426

2527
/**
2628
* Created by Anton Knyazev on 04.04.2019.
2729
*/
30+
31+
private const val KEY_SAVE_RESULT = "omegaSaveResult"
32+
private const val KEY_SAVE_DATA = "omegaSaveData"
33+
2834
abstract class OmegaDialogFragment : MvpAppCompatDialogFragment(), OmegaComponent {
2935

3036
private val dialogList = mutableListOf<Dialog>()
@@ -35,15 +41,20 @@ abstract class OmegaDialogFragment : MvpAppCompatDialogFragment(), OmegaComponen
3541

3642
private var childPresenterAttached = false
3743

44+
private var result: Boolean = false
45+
private var data: Serializable? = null
46+
3847
override fun <T : View> findViewById(id: Int): T? = view?.findViewById(id)
3948

4049
override fun onCreate(savedInstanceState: Bundle?) {
4150
super.onCreate(savedInstanceState)
51+
result = savedInstanceState?.getBoolean(KEY_SAVE_RESULT, result) ?: result
52+
data = savedInstanceState?.getSerializable(KEY_SAVE_DATA) ?: data
53+
4254
setHasOptionsMenu(this::class.findAnnotation<OmegaMenu>() != null)
4355
this::class.findAnnotation<OmegaClickViews>()?.let {
4456
setOnClickListeners(ids = *it.ids, block = this::onClickView)
4557
}
46-
4758
}
4859

4960
private fun attachChildPresenter() {
@@ -73,6 +84,8 @@ abstract class OmegaDialogFragment : MvpAppCompatDialogFragment(), OmegaComponen
7384
override fun onSaveInstanceState(outState: Bundle) {
7485
super.onSaveInstanceState(outState)
7586
detachChildPresenter()
87+
outState.putBoolean(KEY_SAVE_RESULT, result)
88+
outState.putSerializable(KEY_SAVE_RESULT, data)
7689
}
7790

7891
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
@@ -194,6 +207,10 @@ abstract class OmegaDialogFragment : MvpAppCompatDialogFragment(), OmegaComponen
194207
launcher.launchForResult(this, requestCode)
195208
}
196209

210+
override fun launchForResult(launcher: DialogFragmentLauncher, requestCode: Int) {
211+
launcher.launch(childFragmentManager, requestCode = requestCode)
212+
}
213+
197214
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
198215
if (!onLaunchResult(requestCode, resultCode, data)) {
199216
super.onActivityResult(requestCode, resultCode, data)
@@ -227,12 +244,18 @@ abstract class OmegaDialogFragment : MvpAppCompatDialogFragment(), OmegaComponen
227244
dismiss()
228245
}
229246

230-
override fun setResult(resultCode: Int) {
231-
activity?.setResult(resultCode)
247+
override fun setResult(success: Boolean, data: Serializable?) {
248+
result = success
249+
this.data = data
232250
}
233251

234-
override fun setResult(resultCode: Int, intent: Intent) {
235-
activity?.setResult(resultCode, intent)
252+
override fun onDismiss(dialog: DialogInterface) {
253+
super.onDismiss(dialog)
254+
val requestCode = targetRequestCode
255+
if (requestCode != 0) {
256+
val omegaComponent = (parentFragment as? OmegaComponent) ?: (activity as? OmegaComponent)
257+
omegaComponent?.presenter?.onLaunchResult(requestCode, result, data)
258+
}
236259
}
237260

238261
final override fun <T> bind(init: () -> T) = super.bind(init)

core/src/main/java/com/omega_r/base/components/OmegaFragment.kt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.omegar.libs.omegalaunchers.BaseIntentLauncher
2121
import com.omegar.libs.omegalaunchers.DialogFragmentLauncher
2222
import com.omegar.libs.omegalaunchers.FragmentLauncher
2323
import com.omegar.mvp.MvpAppCompatFragment
24+
import java.io.Serializable
2425

2526
/**
2627
* Created by Anton Knyazev on 04.04.2019.
@@ -202,6 +203,10 @@ abstract class OmegaFragment : MvpAppCompatFragment(), OmegaComponent {
202203
launcher.launchForResult(this, requestCode)
203204
}
204205

206+
override fun setResult(success: Boolean, data: Serializable?) {
207+
TODO("Not yet implemented")
208+
}
209+
205210
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
206211
if (!onLaunchResult(requestCode, resultCode, data)) {
207212
super.onActivityResult(requestCode, resultCode, data)
@@ -235,14 +240,6 @@ abstract class OmegaFragment : MvpAppCompatFragment(), OmegaComponent {
235240
activity!!.finish()
236241
}
237242

238-
override fun setResult(resultCode: Int) {
239-
activity?.setResult(resultCode)
240-
}
241-
242-
override fun setResult(resultCode: Int, intent: Intent) {
243-
activity?.setResult(resultCode, intent)
244-
}
245-
246243
final override fun <T> bind(init: () -> T) = super.bind(init)
247244

248245
final override fun <T : View, E> bind(vararg idsPair: Pair<E, Int>) = super.bind<T, E>(*idsPair)

core/src/main/java/com/omega_r/base/mvp/presenters/OmegaPresenter.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.omega_r.libs.omegaintentbuilder.interfaces.IntentBuilder
1111
import com.omega_r.libs.omegatypes.Text
1212
import com.omegar.libs.omegalaunchers.ActivityLauncher
1313
import com.omegar.libs.omegalaunchers.BaseIntentLauncher
14+
import com.omegar.libs.omegalaunchers.DialogFragmentLauncher
1415
import com.omegar.libs.omegalaunchers.Launcher
1516
import com.omegar.mvp.MvpPresenter
1617
import kotlinx.coroutines.*
@@ -163,6 +164,14 @@ open class OmegaPresenter<View : OmegaView> : MvpPresenter<View>(), CoroutineSco
163164
}
164165
}
165166

167+
protected fun DialogFragmentLauncher.launchForResult(requestCode: Int) {
168+
try {
169+
viewState.launchForResult(this, requestCode)
170+
} catch (e: Throwable) {
171+
handleErrors(e)
172+
}
173+
}
174+
166175
protected fun IntentBuilder.launch() = createLauncher().launch()
167176

168177
protected fun IntentBuilder.launchForResult(requestCode: Int) =

core/src/main/java/com/omega_r/base/mvp/views/OmegaView.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ interface OmegaView : MvpView {
5555
@StateStrategyType(OneExecutionStateStrategy::class)
5656
fun launchForResult(launcher: BaseIntentLauncher, requestCode: Int)
5757

58+
@StateStrategyType(OneExecutionStateStrategy::class)
59+
fun launchForResult(launcher: DialogFragmentLauncher, requestCode: Int)
60+
5861
@StateStrategyType(OneExecutionStateStrategy::class)
5962
fun setResult(success: Boolean, data: Serializable?)
6063

0 commit comments

Comments
 (0)