+ void AddLifecycleObserver(LifecycleObserver& observer)
+ {
+ mLifecycleObserver = &observer;
+ }
+
+ void RemoveLifecycleObserver(LifecycleObserver& observer)
+ {
+ mLifecycleObserver = nullptr;
+ }
+
+private: // From PropertyOwner::Observer
+ /**
+ * @copydoc PropertyOwner::Observer::PropertyOwnerConnected( PropertyOwner& owner )
+ */
+ void PropertyOwnerConnected(PropertyOwner& owner) final
+ {
+ mEnabled = true;
+ }
+
+ /**
+ * @copydoc PropertyOwner::Observer::PropertyOwnerDisconnected( BufferIndex bufferIndex, PropertyOwner& owner )
+ */
+ void PropertyOwnerDisconnected(BufferIndex bufferIndex, PropertyOwner& owner) final
+ {
+ // If we are active, then bake the value if required
+ if(mAnimationPlaying && mDisconnectAction != Dali::Animation::DISCARD)
+ {
+ // Bake to target-value if BakeFinal, otherwise bake current value
+ Update(bufferIndex, (mDisconnectAction == Dali::Animation::BAKE ? mCurrentProgress : 1.0f), true);
+ }
+
+ mEnabled = false;
+ }
+
+ /**
+ * @copydoc PropertyOwner::Observer::PropertyOwnerDestroyed( PropertyOwner& owner )
+ */
+ void PropertyOwnerDestroyed(PropertyOwner& owner) final
+ {
+ mPropertyOwner = nullptr;
+ }
+
+public: