From 02c5dad497905a034e8b79657fa59f656c8eeb61 Mon Sep 17 00:00:00 2001 From: Timur Zadvornov Date: Thu, 8 Oct 2020 14:29:35 +0300 Subject: [PATCH 1/3] ANDDEP-1104 add DialogNavigator animations + sample --- .../navigation/animation/DefaultAnimations.kt | 5 +-- .../animation/styled/StyledAnimations.kt | 14 +++++++ .../utils/ActivityAnimationSupplier.kt | 21 ++++++++++ .../utils/DialogAnimationSupplier.kt | 31 ++++++++++++++ .../utils/FragmentAnimationSupplier.kt | 4 ++ .../navigation/command/dialog/Dismiss.kt | 9 ++-- .../android/navigation/command/dialog/Show.kt | 10 ++--- .../screen/dialog/DialogCommandExecutor.kt | 4 +- .../navigator/dialog/DialogNavigator.kt | 12 ++++-- .../dialog/DialogNavigatorInterface.kt | 5 ++- .../src/main/AndroidManifest.xml | 4 ++ .../screen/dialogs/DialogsActivityView.kt | 29 +++++++++++++ .../screen/dialogs/DialogsBindModel.kt | 12 ++++++ .../screen/dialogs/DialogsPresenter.kt | 37 ++++++++++++++++ .../screen/dialogs/DialogsRoute.kt | 8 ++++ .../dialogs/DialogsScreenConfigurator.kt | 42 +++++++++++++++++++ .../screen/dialogs/amazing/AmazingDialog.kt | 21 ++++++++++ .../dialogs/amazing/AmazingDialogRoute.kt | 12 ++++++ .../screen/guide/GuideBindModel.kt | 1 + .../screen/guide/GuideFragmentView.kt | 1 + .../screen/guide/GuidePresenter.kt | 5 +++ .../src/main/res/layout/activity_dialogs.xml | 29 +++++++++++++ .../src/main/res/layout/fragment_guide.xml | 7 ++++ .../src/main/res/values/styles.xml | 14 +++++++ 24 files changed, 315 insertions(+), 22 deletions(-) create mode 100644 navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/styled/StyledAnimations.kt create mode 100644 navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/DialogAnimationSupplier.kt create mode 100644 navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsActivityView.kt create mode 100644 navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsBindModel.kt create mode 100644 navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsPresenter.kt create mode 100644 navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsRoute.kt create mode 100644 navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsScreenConfigurator.kt create mode 100644 navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/amazing/AmazingDialog.kt create mode 100644 navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/amazing/AmazingDialogRoute.kt create mode 100644 navigation/sample-standard/src/main/res/layout/activity_dialogs.xml create mode 100644 navigation/sample-standard/src/main/res/values/styles.xml diff --git a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/DefaultAnimations.kt b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/DefaultAnimations.kt index 77acf9e7f..e4b2af738 100644 --- a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/DefaultAnimations.kt +++ b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/DefaultAnimations.kt @@ -32,11 +32,8 @@ object DefaultAnimations { /** * Animations to be executed for each * [ru.surfstudio.android.navigation.command.dialog.base.DialogNavigationCommand]. - * - * Warning! Dialog animations are not yet implemented. */ - @Deprecated("Dialog animations are not yet implemented.") - var dialog: Animations = NoResourceAnimations + var dialog: Animations = EmptyResourceAnimations /** * Animations to be executed for each WidgetNavigationCommand diff --git a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/styled/StyledAnimations.kt b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/styled/StyledAnimations.kt new file mode 100644 index 000000000..018178514 --- /dev/null +++ b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/styled/StyledAnimations.kt @@ -0,0 +1,14 @@ +package ru.surfstudio.android.navigation.animation.styled + +import androidx.annotation.StyleRes +import ru.surfstudio.android.navigation.animation.Animations +import java.io.Serializable + +/** + * Style resources based animations + * + * @param style style resource + */ +data class StyledAnimations( + @StyleRes val style: Int +) : Animations, Serializable \ No newline at end of file diff --git a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/ActivityAnimationSupplier.kt b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/ActivityAnimationSupplier.kt index 89826dad2..9ff31cee5 100644 --- a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/ActivityAnimationSupplier.kt +++ b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/ActivityAnimationSupplier.kt @@ -8,6 +8,7 @@ import ru.surfstudio.android.navigation.animation.Animations import ru.surfstudio.android.navigation.animation.resource.BaseResourceAnimations import ru.surfstudio.android.navigation.animation.set.SetAnimations import ru.surfstudio.android.navigation.animation.shared.SharedElementAnimations +import ru.surfstudio.android.navigation.animation.styled.StyledAnimations /** * Supplier which is responsible for inflating Activity transition with animations. @@ -38,6 +39,8 @@ open class ActivityAnimationSupplier { setSharedElementAnimations(activity, options, animations) is BaseResourceAnimations -> setResourceAnimations(activity, options, animations) + is StyledAnimations -> + setStyledAnimations(activity, options, animations) else -> null } } @@ -88,4 +91,22 @@ open class ActivityAnimationSupplier { nonNullOptions.putAll(resourceAnimations.toBundle()) return nonNullOptions } + + /** + * Add [StyledAnimations] to activity window style. + * + * @param activity activity which will execute transition + * @param options bundle with activity transition options + * @param animations bundle with animations + * + * @return [Bundle] options with animations + */ + fun setStyledAnimations( + activity: Activity, + options: Bundle?, + animations: StyledAnimations + ): Bundle? { + activity.window.setWindowAnimations(animations.style) + return options ?: Bundle() + } } \ No newline at end of file diff --git a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/DialogAnimationSupplier.kt b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/DialogAnimationSupplier.kt new file mode 100644 index 000000000..eb804325f --- /dev/null +++ b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/DialogAnimationSupplier.kt @@ -0,0 +1,31 @@ +package ru.surfstudio.android.navigation.animation.utils + +import androidx.fragment.app.DialogFragment +import ru.surfstudio.android.navigation.animation.Animations +import ru.surfstudio.android.navigation.animation.styled.StyledAnimations + +/** + * Supplier which is responsible for inflating DialogFragments with animations. + */ +open class DialogAnimationSupplier { + + /** + * Supplies animations to [DialogFragment] + * + * @param dialog dialog which animates + * @param animations animations object, only [StyledAnimations] support + */ + fun supplyWithAnimations(dialog: DialogFragment, animations: Animations) { + when (animations) { + is StyledAnimations -> setResourceAnimations(dialog, animations) + else -> Unit + } + } + + /** + * Sets windowAnimation to [DialogFragment]'s dialog + */ + private fun setResourceAnimations(dialogFragment: DialogFragment, animations: StyledAnimations) { + dialogFragment.dialog?.window?.setWindowAnimations(animations.style) + } +} \ No newline at end of file diff --git a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/FragmentAnimationSupplier.kt b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/FragmentAnimationSupplier.kt index ef74f6a49..dc289bda3 100644 --- a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/FragmentAnimationSupplier.kt +++ b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/animation/utils/FragmentAnimationSupplier.kt @@ -5,6 +5,7 @@ import ru.surfstudio.android.navigation.animation.Animations import ru.surfstudio.android.navigation.animation.resource.BaseResourceAnimations import ru.surfstudio.android.navigation.animation.set.SetAnimations import ru.surfstudio.android.navigation.animation.shared.SharedElementAnimations +import ru.surfstudio.android.navigation.animation.styled.StyledAnimations /** * Supplier, which is responsible for inflating [FragmentTransaction] with animations. @@ -25,6 +26,9 @@ open class FragmentAnimationSupplier { setResourceAnimations(transaction, animations, false) is SharedElementAnimations -> setSharedElementAnimations(transaction, animations) + is StyledAnimations -> + throw UnsupportedOperationException("StyledAnimations is only for activities & dialogs") + } return transaction } diff --git a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/command/dialog/Dismiss.kt b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/command/dialog/Dismiss.kt index 2582aa1e7..bc3d007ad 100644 --- a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/command/dialog/Dismiss.kt +++ b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/command/dialog/Dismiss.kt @@ -2,14 +2,13 @@ package ru.surfstudio.android.navigation.command.dialog import ru.surfstudio.android.navigation.animation.Animations import ru.surfstudio.android.navigation.animation.DefaultAnimations -import ru.surfstudio.android.navigation.animation.resource.NoResourceAnimations import ru.surfstudio.android.navigation.command.dialog.base.DialogNavigationCommand import ru.surfstudio.android.navigation.route.dialog.DialogRoute /** * Dismiss dialog from the screen */ -data class Dismiss(override val route: DialogRoute) : DialogNavigationCommand { - - override val animations: Animations = DefaultAnimations.dialog -} \ No newline at end of file +data class Dismiss( + override val route: DialogRoute, + override val animations: Animations = DefaultAnimations.dialog +) : DialogNavigationCommand \ No newline at end of file diff --git a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/command/dialog/Show.kt b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/command/dialog/Show.kt index 0c2c39a10..3aeea0c58 100644 --- a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/command/dialog/Show.kt +++ b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/command/dialog/Show.kt @@ -2,15 +2,13 @@ package ru.surfstudio.android.navigation.command.dialog import ru.surfstudio.android.navigation.animation.Animations import ru.surfstudio.android.navigation.animation.DefaultAnimations -import ru.surfstudio.android.navigation.animation.resource.EmptyResourceAnimations -import ru.surfstudio.android.navigation.animation.resource.NoResourceAnimations import ru.surfstudio.android.navigation.command.dialog.base.DialogNavigationCommand import ru.surfstudio.android.navigation.route.dialog.DialogRoute /** * Show dialog on the screen */ -data class Show(override val route: DialogRoute) : DialogNavigationCommand { - - override val animations: Animations = DefaultAnimations.dialog -} \ No newline at end of file +data class Show( + override val route: DialogRoute, + override val animations: Animations = DefaultAnimations.dialog +) : DialogNavigationCommand \ No newline at end of file diff --git a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/executor/screen/dialog/DialogCommandExecutor.kt b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/executor/screen/dialog/DialogCommandExecutor.kt index a23a18012..897574b45 100644 --- a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/executor/screen/dialog/DialogCommandExecutor.kt +++ b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/executor/screen/dialog/DialogCommandExecutor.kt @@ -22,8 +22,8 @@ open class DialogCommandExecutor( override fun execute(command: DialogNavigationCommand) { when (command) { - is Show -> dialogNavigator.show(command.route) - is Dismiss -> dialogNavigator.dismiss(command.route) + is Show -> dialogNavigator.show(command.route, command.animations) + is Dismiss -> dialogNavigator.dismiss(command.route, command.animations) } } diff --git a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/navigator/dialog/DialogNavigator.kt b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/navigator/dialog/DialogNavigator.kt index b19694213..16e874500 100644 --- a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/navigator/dialog/DialogNavigator.kt +++ b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/navigator/dialog/DialogNavigator.kt @@ -2,19 +2,25 @@ package ru.surfstudio.android.navigation.navigator.dialog import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.DialogFragment +import ru.surfstudio.android.navigation.animation.Animations +import ru.surfstudio.android.navigation.animation.utils.DialogAnimationSupplier import ru.surfstudio.android.navigation.route.dialog.DialogRoute class DialogNavigator(val activity: AppCompatActivity) : DialogNavigatorInterface { - override fun show(route: DialogRoute) { + protected open var animationSupplier = DialogAnimationSupplier() + + override fun show(route: DialogRoute, animations: Animations) { val tag = route.getId() val dialog = route.createDialog() - dialog.show(activity.supportFragmentManager, tag) + dialog.showNow(activity.supportFragmentManager, tag) + animationSupplier.supplyWithAnimations(dialog, animations) } - override fun dismiss(route: DialogRoute) { + override fun dismiss(route: DialogRoute, animations: Animations) { val tag = route.getId() val dialog = activity.supportFragmentManager.findFragmentByTag(tag) as? DialogFragment + dialog?.let { animationSupplier.supplyWithAnimations(it, animations) } dialog?.dismiss() } } \ No newline at end of file diff --git a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/navigator/dialog/DialogNavigatorInterface.kt b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/navigator/dialog/DialogNavigatorInterface.kt index 69d1c1838..f91f0fc22 100644 --- a/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/navigator/dialog/DialogNavigatorInterface.kt +++ b/navigation/lib-navigation/src/main/java/ru/surfstudio/android/navigation/navigator/dialog/DialogNavigatorInterface.kt @@ -1,10 +1,11 @@ package ru.surfstudio.android.navigation.navigator.dialog +import ru.surfstudio.android.navigation.animation.Animations import ru.surfstudio.android.navigation.route.dialog.DialogRoute interface DialogNavigatorInterface { - fun show(route: DialogRoute) + fun show(route: DialogRoute, animations: Animations) - fun dismiss(route: DialogRoute) + fun dismiss(route: DialogRoute, animations: Animations) } \ No newline at end of file diff --git a/navigation/sample-standard/src/main/AndroidManifest.xml b/navigation/sample-standard/src/main/AndroidManifest.xml index 23a802605..2cd352af2 100644 --- a/navigation/sample-standard/src/main/AndroidManifest.xml +++ b/navigation/sample-standard/src/main/AndroidManifest.xml @@ -43,6 +43,10 @@ android:name=".screen.main.MainActivityView" android:label="Main Activity" /> + + \ No newline at end of file diff --git a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsActivityView.kt b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsActivityView.kt new file mode 100644 index 000000000..360be8e95 --- /dev/null +++ b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsActivityView.kt @@ -0,0 +1,29 @@ +package ru.surfstudio.android.navigation.sample_standard.screen.dialogs + +import android.os.Bundle +import android.os.PersistableBundle +import com.jakewharton.rxbinding2.view.clicks +import kotlinx.android.synthetic.main.activity_dialogs.* +import ru.surfstudio.android.core.mvp.binding.rx.ui.BaseRxActivityView +import ru.surfstudio.android.navigation.sample_standard.R +import javax.inject.Inject + +class DialogsActivityView : BaseRxActivityView() { + + @Inject + lateinit var bm: DialogsBindModel + + override fun createConfigurator() = DialogsScreenConfigurator(intent) + + override fun getContentView(): Int = R.layout.activity_dialogs + + override fun getScreenName(): String = "Dialogs" + + override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?, viewRecreated: Boolean) { + super.onCreate(savedInstanceState, persistentState, viewRecreated) + + dialogs_default_btn.clicks() bindTo { bm.openDialogButtonClicked.accept() } + dialogs_fade_btn.clicks() bindTo { bm.openDialogWithFadeButtonClicked.accept() } + dialogs_slide_btn.clicks() bindTo { bm.openDialogWithSlideButtonClicked.accept() } + } +} \ No newline at end of file diff --git a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsBindModel.kt b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsBindModel.kt new file mode 100644 index 000000000..dd6a32e74 --- /dev/null +++ b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsBindModel.kt @@ -0,0 +1,12 @@ +package ru.surfstudio.android.navigation.sample_standard.screen.dialogs + +import ru.surfstudio.android.core.mvp.binding.rx.relation.mvp.Action +import ru.surfstudio.android.dagger.scope.PerScreen +import javax.inject.Inject + +@PerScreen +class DialogsBindModel @Inject constructor() { + val openDialogButtonClicked = Action() + val openDialogWithFadeButtonClicked = Action() + val openDialogWithSlideButtonClicked = Action() +} \ No newline at end of file diff --git a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsPresenter.kt b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsPresenter.kt new file mode 100644 index 000000000..b550921db --- /dev/null +++ b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsPresenter.kt @@ -0,0 +1,37 @@ +package ru.surfstudio.android.navigation.sample_standard.screen.dialogs + +import ru.surfstudio.android.core.mvp.binding.rx.ui.BaseRxPresenter +import ru.surfstudio.android.core.mvp.presenter.BasePresenterDependency +import ru.surfstudio.android.dagger.scope.PerScreen +import ru.surfstudio.android.navigation.animation.styled.StyledAnimations +import ru.surfstudio.android.navigation.command.dialog.Show +import ru.surfstudio.android.navigation.executor.NavigationCommandExecutor +import ru.surfstudio.android.navigation.sample_standard.R +import ru.surfstudio.android.navigation.sample_standard.screen.dialogs.amazing.AmazingDialogRoute +import javax.inject.Inject + +@PerScreen +class DialogsPresenter @Inject constructor( + basePresenterDependency: BasePresenterDependency, + private val executor: NavigationCommandExecutor, + private val bm: DialogsBindModel +) : BaseRxPresenter(basePresenterDependency) { + + override fun onFirstLoad() { + bm.openDialogButtonClicked bindTo { openDialog() } + bm.openDialogWithFadeButtonClicked bindTo { openDialogWithFade() } + bm.openDialogWithSlideButtonClicked bindTo { openDialogWithSlide() } + } + + private fun openDialog() { + executor.execute(Show(AmazingDialogRoute())) + } + + private fun openDialogWithFade() { + executor.execute(Show(AmazingDialogRoute(), StyledAnimations(R.style.FadeDialogAnimation))) + } + + private fun openDialogWithSlide() { + executor.execute(Show(AmazingDialogRoute(), StyledAnimations(R.style.SlideDialogAnimation))) + } +} \ No newline at end of file diff --git a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsRoute.kt b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsRoute.kt new file mode 100644 index 000000000..f00b205ad --- /dev/null +++ b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsRoute.kt @@ -0,0 +1,8 @@ +package ru.surfstudio.android.navigation.sample_standard.screen.dialogs + +import androidx.appcompat.app.AppCompatActivity +import ru.surfstudio.android.navigation.route.activity.ActivityRoute + +class DialogsRoute : ActivityRoute() { + override fun getScreenClass(): Class = DialogsActivityView::class.java +} \ No newline at end of file diff --git a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsScreenConfigurator.kt b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsScreenConfigurator.kt new file mode 100644 index 000000000..c481ad70f --- /dev/null +++ b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/DialogsScreenConfigurator.kt @@ -0,0 +1,42 @@ +package ru.surfstudio.android.navigation.sample_standard.screen.dialogs + +import android.content.Intent +import dagger.Component +import dagger.Module +import dagger.Provides +import ru.surfstudio.android.core.mvp.configurator.BindableScreenComponent +import ru.surfstudio.android.core.mvp.configurator.ScreenComponent +import ru.surfstudio.android.dagger.scope.PerScreen +import ru.surfstudio.android.navigation.sample_standard.di.ui.ActivityComponent +import ru.surfstudio.android.navigation.sample_standard.di.ui.configurator.ActivityScreenConfigurator +import ru.surfstudio.android.navigation.sample_standard.di.ui.screen.ScreenModule +import ru.surfstudio.android.sample.dagger.ui.base.dagger.screen.DefaultActivityScreenModule + +/** + * Конфигуратор активити главного экрана + */ +class DialogsScreenConfigurator(intent: Intent) : ActivityScreenConfigurator(intent) { + @PerScreen + @Component(dependencies = [ActivityComponent::class], + modules = [DefaultActivityScreenModule::class, DialogsScreenModule::class]) + internal interface DialogsScreenComponent + : BindableScreenComponent + + @Module + internal class DialogsScreenModule : ScreenModule() { + + @Provides + @PerScreen + fun providePresenters(presenter: DialogsPresenter) = Any() + } + + override fun createScreenComponent(defaultActivityComponent: ActivityComponent, + defaultActivityScreenModule: DefaultActivityScreenModule, + intent: Intent): ScreenComponent<*> { + return DaggerDialogsScreenConfigurator_DialogsScreenComponent.builder() + .activityComponent(defaultActivityComponent) + .defaultActivityScreenModule(defaultActivityScreenModule) + .dialogsScreenModule(DialogsScreenModule()) + .build() + } +} diff --git a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/amazing/AmazingDialog.kt b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/amazing/AmazingDialog.kt new file mode 100644 index 000000000..3aa04ca9d --- /dev/null +++ b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/amazing/AmazingDialog.kt @@ -0,0 +1,21 @@ +package ru.surfstudio.android.navigation.sample_standard.screen.dialogs.amazing + +import android.app.AlertDialog +import android.app.Dialog +import android.os.Bundle +import ru.surfstudio.android.navigation.sample_standard.screen.base.dialog.simple.BaseSimpleDialogRoute +import ru.surfstudio.android.navigation.sample_standard.screen.base.dialog.simple.BaseSimpleDialogView +import ru.surfstudio.android.navigation.sample_standard.screen.base.dialog.simple.SimpleDialogResult + +class AmazingDialog: BaseSimpleDialogView() { + + override val route: BaseSimpleDialogRoute = AmazingDialogRoute() + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + return AlertDialog.Builder(requireContext()) + .setTitle("Amazing title") + .setMessage("Gorgeous message") + .setPositiveButton("Ok") { _, _ -> closeWithResult(SimpleDialogResult.DISMISS) } + .create() + } +} \ No newline at end of file diff --git a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/amazing/AmazingDialogRoute.kt b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/amazing/AmazingDialogRoute.kt new file mode 100644 index 000000000..a988d861b --- /dev/null +++ b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/dialogs/amazing/AmazingDialogRoute.kt @@ -0,0 +1,12 @@ +package ru.surfstudio.android.navigation.sample_standard.screen.dialogs.amazing + +import androidx.fragment.app.DialogFragment +import ru.surfstudio.android.navigation.sample_standard.screen.base.dialog.simple.BaseSimpleDialogRoute + +class AmazingDialogRoute : BaseSimpleDialogRoute() { + + override fun getScreenClass(): Class? { + return AmazingDialog::class.java + } + +} \ No newline at end of file diff --git a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuideBindModel.kt b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuideBindModel.kt index 1d0e00705..725004d80 100644 --- a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuideBindModel.kt +++ b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuideBindModel.kt @@ -9,4 +9,5 @@ class GuideBindModel @Inject constructor() { val bottomNavClicked = Action() val sharedElementClicked = Action() + val dialogsClicked = Action() } \ No newline at end of file diff --git a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuideFragmentView.kt b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuideFragmentView.kt index 2af48873c..287119a11 100644 --- a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuideFragmentView.kt +++ b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuideFragmentView.kt @@ -26,6 +26,7 @@ class GuideFragmentView : BaseRxFragmentView() { bm.bottomNavClicked.accept() } guide_shared_transition_btn.clicks() bindTo { bm.sharedElementClicked.accept() } + guide_dialogs_btn.clicks() bindTo { bm.dialogsClicked.accept() } } } \ No newline at end of file diff --git a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuidePresenter.kt b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuidePresenter.kt index 7d3f4dd43..7858d25cf 100644 --- a/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuidePresenter.kt +++ b/navigation/sample-standard/src/main/java/ru/surfstudio/android/navigation/sample_standard/screen/guide/GuidePresenter.kt @@ -3,10 +3,12 @@ package ru.surfstudio.android.navigation.sample_standard.screen.guide import ru.surfstudio.android.core.mvp.binding.rx.ui.BaseRxPresenter import ru.surfstudio.android.core.mvp.presenter.BasePresenterDependency import ru.surfstudio.android.dagger.scope.PerScreen +import ru.surfstudio.android.navigation.command.activity.Start import ru.surfstudio.android.navigation.command.fragment.Replace import ru.surfstudio.android.navigation.executor.NavigationCommandExecutor import ru.surfstudio.android.navigation.sample_standard.screen.base.presenter.CommandExecutionPresenter import ru.surfstudio.android.navigation.sample_standard.screen.bottom_nav.BottomNavRoute +import ru.surfstudio.android.navigation.sample_standard.screen.dialogs.DialogsRoute import javax.inject.Inject @PerScreen @@ -20,5 +22,8 @@ class GuidePresenter @Inject constructor( bm.bottomNavClicked.bindTo { Replace(BottomNavRoute()).execute() } + bm.dialogsClicked bindTo { + Start(DialogsRoute()).execute() + } } } \ No newline at end of file diff --git a/navigation/sample-standard/src/main/res/layout/activity_dialogs.xml b/navigation/sample-standard/src/main/res/layout/activity_dialogs.xml new file mode 100644 index 000000000..91259c0de --- /dev/null +++ b/navigation/sample-standard/src/main/res/layout/activity_dialogs.xml @@ -0,0 +1,29 @@ + + + +