Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / FUi_AccessibilityTtsPlayer.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://floralicense.org/license/
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 #include <dlfcn.h>
19 #include <FLclLocale.h>
20 #include <FBaseSysLog.h>
21 #include <FUixSpeechTextToSpeech.h>
22 #include "FUi_AccessibilityTtsPlayer.h"
23 #include "FUi_AccessibilityManager.h"
24
25 using namespace Tizen::Uix::Speech;
26
27 namespace Tizen { namespace Ui {
28
29 _AccessibilityTtsPlayer::_AccessibilityTtsPlayer(_AccessibilityManager& manager)
30         : __pTts(null)
31         ,__grammar(L"")
32         ,__localeIdx(-1)
33         ,__status(ACCESSIBILITY_SCREEN_READER_STATUS_ERROR)
34         ,__pManager(&manager)
35 {
36 }
37 _AccessibilityTtsPlayer::~_AccessibilityTtsPlayer(void)
38 {
39         delete __pTts;
40         __pTts = null;
41 }
42 result
43 _AccessibilityTtsPlayer::ReadGrammar(const Tizen::Base::String& grammar, bool bInit)
44 {
45         if(grammar.GetLength() == 0)
46         {
47                 return E_SUCCESS;
48         }
49         if(bInit && GetStatus() == ACCESSIBILITY_SCREEN_READER_STATUS_PLAYING)
50         {
51                 StopReading();
52         }
53         SetStatus(ACCESSIBILITY_SCREEN_READER_STATUS_PLAYING);
54         __grammar = grammar;
55         if (__pTts)
56         {
57                 __pTts->Speak(grammar, TEXT_TO_SPEECH_REQUEST_MODE_REPLACE);
58         }
59         return E_SUCCESS;
60 }
61 result
62 _AccessibilityTtsPlayer::StopReading(void)
63 {
64         if (__pTts)
65         {
66                 __pTts->Stop();
67         }
68
69         return E_SUCCESS;
70 }
71 AccessibilityScreenReaderStatus
72 _AccessibilityTtsPlayer::GetStatus(void)
73 {
74         return __status;
75 }
76 Tizen::Base::String
77 _AccessibilityTtsPlayer::GetCurrentGrammar(void)
78 {
79         return __grammar;
80 }
81 result
82 _AccessibilityTtsPlayer::Activate(void)
83 {
84         result r = E_FAILURE;
85         if (__pTts)
86         {
87                 return E_SUCCESS;
88         }
89         __pTts = new (std::nothrow) TextToSpeech;
90         SysTryReturn(NID_UI, __pTts != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation is failed");
91         r = __pTts->Construct(*this);
92         SysTryCatch(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] System error");
93         __pTts->Initialize();
94
95         return E_SUCCESS;
96
97 CATCH:
98         delete __pTts;
99         __pTts = null;
100         return E_SYSTEM;
101 }
102 result
103 _AccessibilityTtsPlayer::Deactivate(void)
104 {
105         StopReading();
106         delete __pTts;
107         __pTts = null;
108         return E_SUCCESS;
109 }
110 void
111 _AccessibilityTtsPlayer::OnTextToSpeechInitialized(void)
112 {
113         result r = E_SUCCESS;
114         Tizen::Locales::Locale locale(Tizen::Locales::LANGUAGE_ENG,Tizen::Locales::COUNTRY_US);
115         if (__pTts)
116         {
117                 r=__pTts->SetLocale(locale);
118                 SysTryReturn(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] System error");
119         }
120 }
121
122 void
123 _AccessibilityTtsPlayer::OnTextToSpeechCompleted(void)
124 {
125         SetStatus(ACCESSIBILITY_SCREEN_READER_STATUS_READY);
126         __pManager->OnFinishReading(__grammar);
127 }
128
129 void
130 _AccessibilityTtsPlayer::OnTextToSpeechErrorOccurred (TextToSpeechError error)
131 {
132         Deactivate();
133         Activate();
134 }
135 void
136 _AccessibilityTtsPlayer::OnTextToSpeechStatusChanged (TextToSpeechStatus status)
137 {
138         switch(status)
139         {
140                 case TEXT_TO_SPEECH_STATUS_SYNTHESIZING:
141                         SetStatus(ACCESSIBILITY_SCREEN_READER_STATUS_PLAYING);
142                         __pManager->OnStartReading(__grammar);
143                         break;
144                 case TEXT_TO_SPEECH_STATUS_PLAYING:
145                         SetStatus(ACCESSIBILITY_SCREEN_READER_STATUS_PLAYING);
146                         break;
147                 case TEXT_TO_SPEECH_STATUS_PAUSED:
148                         break;
149                 default:
150                         break;
151
152         }
153 }
154 void
155 _AccessibilityTtsPlayer::SetStatus(AccessibilityScreenReaderStatus status)
156 {
157         __status = status;
158 }
159
160 }}
161