Added ref/unref tbm_surface
[platform/core/uifw/dali-adaptor.git] / adaptors / tizen / tts-player-impl-tizen.cpp
index 282861c..9b9a2c6 100644 (file)
@@ -22,7 +22,6 @@
 #include <tts.h>
 #include <stdio.h>
 
-// INTERNAL INCLUDES
 #include <dali/public-api/object/type-registry.h>
 
 
@@ -37,13 +36,37 @@ namespace Adaptor
 
 namespace // unnamed namespace
 {
-// Type Registration
-Dali::BaseHandle Create()
+
+/**
+ * Helper function to convert Tizen-specific TTS state to external state.
+ * @param state The Tizen TTS state.
+ * @return The external TTS state.
+ */
+Dali::TtsPlayer::State InternalToExternalState( tts_state_e state )
 {
-  return Dali::TtsPlayer::Get() ;
+  switch( state )
+  {
+    case TTS_STATE_CREATED:
+    {
+      return Dali::TtsPlayer::UNAVAILABLE;
+    }
+    case TTS_STATE_READY:
+    {
+      return Dali::TtsPlayer::READY;
+    }
+    case TTS_STATE_PLAYING:
+    {
+      return Dali::TtsPlayer::PLAYING;
+    }
+    case TTS_STATE_PAUSED:
+    {
+      return Dali::TtsPlayer::PAUSED;
+    }
+  }
+
+  return Dali::TtsPlayer::UNAVAILABLE;
 }
 
-Dali::TypeRegistration mType( typeid(Dali::TtsPlayer), typeid(Dali::BaseHandle), Create ) ;
 } // unnamed namespace
 
 #if defined(DEBUG_ENABLED)
@@ -234,9 +257,50 @@ void TtsPlayer::Resume()
   }
 }
 
+Dali::TtsPlayer::State TtsPlayer::GetState()
+{
+  Dali::TtsPlayer::State ttsState = Dali::TtsPlayer::UNAVAILABLE;
+
+  if(mInitialized)
+  {
+    // Check the current TTS state
+    tts_state_e state;
+    int retVal = tts_get_state(mTtsHandle, &state);
+    if(retVal != TTS_ERROR_NONE)
+    {
+      LogErrorCode(static_cast<tts_error_e>(retVal));
+    }
+    else
+    {
+      ttsState = InternalToExternalState( state );
+    }
+  }
+
+  return ttsState;
+}
+
+Dali::TtsPlayer::StateChangedSignalType& TtsPlayer::StateChangedSignal()
+{
+  return mStateChangedSignal;
+}
+
+void TtsPlayer::EmitStateChangedSignal( tts_state_e previous, tts_state_e current )
+{
+  // Convert the previous and current states to external states and emit them as a signal.
+  if( !mStateChangedSignal.Empty() )
+  {
+    mStateChangedSignal.Emit( InternalToExternalState( previous ), InternalToExternalState( current ) );
+  }
+}
+
 void TtsPlayer::StateChangedCallback(tts_h tts, tts_state_e previous, tts_state_e current, void *userData)
 {
+  // Get the implementation (this is a static function).
   TtsPlayer* obj = static_cast<TtsPlayer*>(userData);
+
+  // Emit the signal.
+  obj->EmitStateChangedSignal( previous, current );
+
   if(!obj->mInitialized && current == TTS_STATE_READY)
   {
     obj->mInitialized = true;