2 * Copyright (c) 2014, TOYOTA MOTOR CORPORATION.
4 * This program is licensed under the terms and conditions of the
5 * Apache License, version 2.0. The full text of the Apache License is at
6 * http://www.apache.org/licenses/LICENSE-2.0
14 #include "CicoOnScreen.h"
15 #include "CicoOSPopWindow.h"
17 #include <Ecore_Wayland.h>
18 #include "CicoOSClient.h"
22 //==========================================================================
24 //==========================================================================
25 CicoOnScreen * CicoOnScreen::os_instance=NULL;
26 uint32_t CicoOnScreen::surfaceid = 0;
28 //==========================================================================
30 //==========================================================================
32 //--------------------------------------------------------------------------
34 * @brief CicoOnScreen::CicoOnScreen
40 //--------------------------------------------------------------------------
41 CicoOnScreen::CicoOnScreen(void)
43 ICO_TRA("CicoOnScreen::CicoOnScreen Enter");
47 ICO_TRA("CicoOnScreen::CicoOnScreen Leave");
50 //--------------------------------------------------------------------------
52 * @brief CicoOnScreen::~CicoOnScreen
58 //--------------------------------------------------------------------------
59 CicoOnScreen::~CicoOnScreen(void)
61 // ICO_TRA("CicoOnScreen::~CicoOnScreen Enter");
62 list<CicoOSPopWindow*>::iterator p = m_mngWin.begin();
63 while (p != m_mngWin.end()) {
64 CicoOSPopWindow* pt = *p;
65 pt->removeMainWindow();
69 p = m_waitMngWin.begin();
70 while (p != m_waitMngWin.end()) {
71 CicoOSPopWindow* pt = *p;
72 pt->removeMainWindow();
80 // ICO_TRA("CicoOnScreen::~CicoOnScreen Leave");
83 //--------------------------------------------------------------------------
85 * @brief CicoOnScreen::StartOnScreen
90 * @return true on success, false on error
92 //--------------------------------------------------------------------------
94 CicoOnScreen::StartOnScreen(void)
98 ico_syc_connect(EventCallBack, NULL);
99 // save instance pointer
105 CicoOSClient* cosc = CicoOSClient::getInstance();
109 if (NULL == m_reserve) {
110 m_reserve = new CicoOSPopWindow(NOTIFICATION_TYPE_NONE);
111 m_reserve->createMainWindow();
114 // set notification callback function
115 notiservice_.SetCallback(NotificationCallback, this);
117 ICO_TRA("Leave(true)");
121 bool CicoOnScreen::insertNoti(notification_h noti_h)
124 CicoOSPopWindow* w = new CicoOSPopWindow(noti_h);
126 ICO_ERR("FAIL new class");
127 ICO_TRA("Leave (false)");
131 if (NOTIFICATION_TYPE_NOTI == w->GetType()) {
132 m_waitMngWin.push_back(w);
138 ICO_TRA("Leave (false)");
141 ICO_TRA("Leave (true)");
145 bool CicoOnScreen::deleteNoti(int priv_id)
148 list<CicoOSPopWindow*>::iterator p = m_mngWin.begin();
149 for (; p != m_mngWin.end(); ++p) {
150 CicoOSPopWindow* w = *p;
151 if (priv_id == w->GetPrivId()) {
155 list<CicoOSPopWindow*> tmp;
156 p = m_waitMngWin.begin();
157 for (; p != m_waitMngWin.end(); ++p) {
158 CicoOSPopWindow* w = *p;
159 if (priv_id == w->GetPrivId()) {
164 for (; p != tmp.end(); ++p) {
165 CicoOSPopWindow* w = *p;
166 m_waitMngWin.remove(w);
169 if (NULL != m_request) {
170 if (priv_id == m_request->GetPrivId()) {
174 ICO_TRA("Leave (true)");
178 //--------------------------------------------------------------------------
180 * @brief CicoOnScreen::NotificationCallback
181 * Notification callback function
183 * @param[in] data The user data passed from the callback
184 * registration function
185 * @param[in] type The type of notification
188 //--------------------------------------------------------------------------
190 CicoOnScreen::NotificationCallback(void *data, notification_type_e type,
191 notification_op *op_list, int num_op)
194 bool bInsFlag = false;
195 for (int i = 0; i < num_op; i++) {
196 notification_op_type_e op_type = op_list[i].type;
197 int priv_id = op_list[i].priv_id;
198 notification_h noti_h = op_list[i].noti;
199 ICO_DBG("RECV notification op_type=%d priv_id=%d noti=0x%08x",
200 op_type, priv_id, noti_h);
203 case NOTIFICATION_OP_INSERT :
205 ICO_DBG("NOTIFICATION_OP_INSERT");
206 if (true == os_instance->insertNoti(noti_h)) {
209 break; // break of switch op_type
211 case NOTIFICATION_OP_UPDATE :
212 ICO_DBG("NOTIFICATION_OP_UPDATE");
213 break; // break of switch op_type
214 case NOTIFICATION_OP_DELETE:
216 ICO_DBG("NOTIFICATION_OP_DELETE");
217 os_instance->deleteNoti(priv_id);
218 break; // break of switch op_type
220 case NOTIFICATION_OP_DELETE_ALL:
221 ICO_DBG("NOTIFICATION_OP_DELETE_ALL");
222 break; // break of switch op_type
223 case NOTIFICATION_OP_REFRESH:
224 ICO_DBG("NOTIFICATION_OP_REFRESH");
225 break; // break of switch op_type
226 case NOTIFICATION_OP_SERVICE_READY:
227 ICO_DBG("NOTIFICATION_OP_SERVICE_READY");
228 break; // break of switch op_type
230 ICO_DBG("UNKOWN OP_TYPE(%d)", (int)op_type);
231 break; // break of switch op_type
235 if (true == bInsFlag) {
236 os_instance->requestShowSC();
242 //--------------------------------------------------------------------------
244 * @brief CicoOnScreen::GetResourceId
245 * Get resource id (sourface id)
248 * @return resource id
250 //--------------------------------------------------------------------------
252 CicoOnScreen::GetResourceId(void)
254 return CicoOnScreen::surfaceid;
257 bool CicoOnScreen::requestShowSC()
260 if (NULL != m_request) {
261 ICO_TRA("Leave false(request now)");
264 if (m_waitMngWin.empty()) {
265 ICO_TRA("Leave false(nothing window)");
269 list<CicoOSPopWindow*>::iterator p;
273 p = m_waitMngWin.begin();
275 m_waitMngWin.remove(m_request);
276 r = m_request->showPopup();
278 r = m_request->acquireRes();
281 m_request->hidePopup();
286 ICO_ERR("_____ Fail Acquire Resource(%d)", m_request->GetPrivId());
290 ICO_ERR("_____ Fail SHOW POP REQUEST(%d)", m_request->GetPrivId());
292 if (true == r) break;
295 if (m_waitMngWin.empty()) break;
297 ICO_TRA("Leave %s", r ? "true": "false");
301 //--------------------------------------------------------------------------
303 * @brief callback for system controller
305 * @param [in] event kind of event
306 * @param [in] detail detail
307 * @param [in] user_data user data
309 //--------------------------------------------------------------------------
311 CicoOnScreen::EventCallBack(const ico_syc_ev_e event,
312 const void *detail, void *user_data)
314 ICO_TRA("Enter(event %d, %x, %x)", (int)event, detail, user_data);
316 ico_syc_res_info_t *ri = (ico_syc_res_info_t*) detail;
318 ICO_ERR("____ CALLBACK NG PARAM");
322 case ICO_SYC_EV_RES_ACQUIRE:
323 ICO_TRA("_____ ICO_SYC_EV_RES_ACQUIRE");
324 break; // break of switch event
325 case ICO_SYC_EV_RES_DEPRIVE:
326 ICO_TRA("_____ ICO_SYC_EV_RES_DEPRIVE");
327 break; // break of switch event
328 case ICO_SYC_EV_RES_WAITING:
329 ICO_TRA("_____ ICO_SYC_EV_RES_WAITING");
330 break; // break of switch event
331 case ICO_SYC_EV_RES_REVERT:
332 ICO_TRA("_____ ICO_SYC_EV_RES_REVERT");
333 break; // break of switch event
334 case ICO_SYC_EV_RES_RELEASE:
336 ICO_TRA("_____ ICO_SYC_EV_RES_RELEASE");
337 if (NULL == ri->window) {
338 ICO_TRA("_____ no WINDOW");
339 break; // break of switch event
341 os_instance->releaseWindow(ri->window->resourceId);
342 break; // break of switch event
344 case ICO_SYC_EV_RES_WINDOW_ID:
346 ICO_TRA("_____ ICO_SYC_EV_RES_WINDOW_ID");
347 if (NULL == ri->window) {
348 ICO_TRA("_____ no WINDOW");
349 break; // break of switch event
351 CicoOnScreen::surfaceid = ri->window->resourceId;
352 ICO_TRA("_____ surfaceid=%08x", CicoOnScreen::surfaceid);
353 break; // break of switch event
356 ICO_TRA("_____ UNKNOWN event(%d)", (int)event);
357 break; // break of switch event
363 CicoOnScreen::releaseWindow(uint32_t resourceId)
365 ICO_TRA("Enter(%08x)", resourceId);
368 list<CicoOSPopWindow*> tmp;
370 list<CicoOSPopWindow*>::iterator p = m_mngWin.begin();
371 for (; p != m_mngWin.end(); ++p) {
372 CicoOSPopWindow* w = *p;
373 if (resourceId == w->m_resourceId) {
378 for (; p != tmp.end(); ++p) {
379 CicoOSPopWindow* w = *p;
380 if (w == m_request) {
394 (void) requestShowSC();
396 ICO_TRA("Leave %s", bR? "true": "false");
399 // vim: set expandtab ts=4 sw=4: