diff --git a/gradle.properties b/gradle.properties index b273445d1..38bedbee7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 org.gradle.caching=true org.gradle.parallel=true -VERSION_NAME=0.40.2 +VERSION_NAME=0.40.3 android.useAndroidX=true android.defaults.buildfeatures.buildconfig=true diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/core/Node.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/core/Node.kt index 84893fa55..d376112ba 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/core/Node.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/core/Node.kt @@ -18,6 +18,7 @@ import com.badoo.ribs.core.modality.BuildContext import com.badoo.ribs.core.modality.BuildParams import com.badoo.ribs.core.plugin.AndroidLifecycleAware import com.badoo.ribs.core.plugin.BackPressHandler +import com.badoo.ribs.core.plugin.GlobalNodeLifecycleAware import com.badoo.ribs.core.plugin.NodeAware import com.badoo.ribs.core.plugin.NodeLifecycleAware import com.badoo.ribs.core.plugin.Plugin @@ -100,7 +101,7 @@ open class Node @VisibleForTesting internal constructor( } val plugins: List = - buildContext.defaultPlugins(this) + plugins + if (this is Plugin) listOf(this) else emptyList() + buildContext.defaultPlugins(this) + RIBs.globalPlugins + plugins + if (this is Plugin) listOf(this) else emptyList() internal open val activationMode: ActivationMode = buildContext.activationMode @@ -136,6 +137,7 @@ open class Node @VisibleForTesting internal constructor( internal fun onBuildFinished() { plugins.filterIsInstance().forEach { it.onBuild() } + plugins.filterIsInstance().forEach { it.onBuild(this) } parent?.onChildBuilt(this) } @@ -148,6 +150,9 @@ open class Node @VisibleForTesting internal constructor( plugins .filterIsInstance() .forEach { it.onCreate(lifecycleManager.ribLifecycle.lifecycle) } + plugins + .filterIsInstance() + .forEach { it.onCreate(this, lifecycleManager.ribLifecycle.lifecycle) } lifecycleManager.onCreate() } @@ -218,6 +223,7 @@ open class Node @VisibleForTesting internal constructor( lifecycleManager.onDestroy() plugins.filterIsInstance().forEach { it.onDestroy() } + plugins.filterIsInstance().forEach { it.onDestroy(this) } if (!isRecreating) { retainedInstanceStore.removeAll(identifier) } @@ -247,6 +253,7 @@ open class Node @VisibleForTesting internal constructor( internal fun onAttachFinished() { plugins.filterIsInstance().forEach { it.onAttach() } + plugins.filterIsInstance().forEach { it.onAttach(this) } } open fun onAttachChildNode(child: Node<*>) { @@ -407,6 +414,8 @@ open class Node @VisibleForTesting internal constructor( override val lifecycle: Lifecycle get() = lifecycleManager.lifecycle + fun getView() : V? = view + fun

plugins(pClass: Class

): List

= plugins.filterIsInstance(pClass) diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/Plugin.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/Plugin.kt index 8f0ee39bd..9277f33f8 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/Plugin.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/core/plugin/Plugin.kt @@ -30,6 +30,16 @@ interface NodeLifecycleAware : Plugin { fun onDestroy() {} } +interface GlobalNodeLifecycleAware : Plugin { + fun onBuild(node: Node<*>) {} + + fun onCreate(node: Node<*>, nodeLifecycle: Lifecycle) {} + + fun onAttach(node: Node<*>) {} + + fun onDestroy(node: Node<*>) {} +} + interface ViewAware : Plugin { fun onViewCreated(view: V, viewLifecycle: Lifecycle) {} } diff --git a/libraries/rib-base/src/main/java/com/badoo/ribs/util/RIBs.kt b/libraries/rib-base/src/main/java/com/badoo/ribs/util/RIBs.kt index 1b92322ed..abaf6138f 100644 --- a/libraries/rib-base/src/main/java/com/badoo/ribs/util/RIBs.kt +++ b/libraries/rib-base/src/main/java/com/badoo/ribs/util/RIBs.kt @@ -3,6 +3,7 @@ package com.badoo.ribs.util import android.util.Log import androidx.annotation.VisibleForTesting import com.badoo.ribs.android.requestcode.RequestCodeBasedEventStream +import com.badoo.ribs.core.plugin.Plugin object RIBs { @@ -28,6 +29,11 @@ object RIBs { } } + /** + * Plugins that are applied to all Nodes. + */ + var globalPlugins: List = emptyList() + @VisibleForTesting fun clearErrorHandler() { _errorHandler = null