2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
19 #ifndef TIZENAPIS_PLATFORM_APPLICATION_H_
20 #define TIZENAPIS_PLATFORM_APPLICATION_H_
25 #include <Commons/Emitters.h>
26 #include "IApplicationManager.h"
27 #include "ApplicationFactory.h"
29 //#include <app_manager.h>
30 #include <app_service.h>
32 #include "AppManagerWrapper.h"
35 namespace Application {
37 class ApplicationManager: public IApplicationManager, public IAppManagerAppListChangedCallbacks {
38 friend class ApplicationFactory;
42 virtual ~ApplicationManager();
43 virtual void getCurrentApplication(const EventApplicationGetCurrAppPtr& event);
44 virtual void launch(const EventApplicationLaunchPtr& event);
45 virtual void kill(const EventApplicationKillPtr& event);
46 virtual void launchAppControl(const EventApplicationLaunchAppControlPtr& event);
47 virtual void findAppControl(const EventApplicationFindAppControlPtr& event);
48 virtual void getAppsContext(const EventApplicationGetAppsContextPtr& event);
49 virtual void getAppContext(const EventApplicationGetAppContextPtr& event);
50 virtual void getAppsInfo(const EventApplicationGetAppsInfoPtr& event);
51 virtual void getAppInfo(const EventApplicationGetAppInfoPtr& event);
52 virtual void addAppInfoEventListener(const EventApplicationAddAppInfoEventListenerPtr& event);
53 virtual void removeAppInfoEventListener(const EventApplicationRemoveAppInfoEventListenerPtr& event);
54 virtual void getAppCerts(const EventApplicationGetAppCertsPtr& event);
55 virtual void getAppSharedURI(const EventApplicationGetAppSharedURIPtr& event);
57 void invokeManualAnswerLaunchAppControl(service_h request, service_h reply, service_result_e result,
58 EventApplicationLaunchAppControlReplyPtr &event);
59 //void InstalledApplicationChanged(app_manger_event_type_e event_type,const char *package);
60 void invokeManualAnswerKill(int pid);
62 static bool service_extra_data_callback(service_h service, const char *key, void* user_data);
65 virtual void OnRequestReceived(const EventApplicationGetCurrAppPtr& event);
66 virtual void OnRequestReceived(const EventApplicationLaunchPtr& event);
67 virtual void OnRequestReceived(const EventApplicationKillPtr& event);
68 virtual void OnRequestReceived(const EventApplicationLaunchAppControlPtr& event);
69 virtual void OnRequestReceived(const EventApplicationLaunchAppControlReplyPtr& event);
70 virtual void OnRequestReceived(const EventApplicationFindAppControlPtr& event);
71 virtual void OnRequestReceived(const EventApplicationGetAppsContextPtr& event);
72 virtual void OnRequestReceived(const EventApplicationGetAppContextPtr& event);
73 virtual void OnRequestReceived(const EventApplicationGetAppsInfoPtr& event);
74 virtual void OnRequestReceived(const EventApplicationGetAppInfoPtr& event);
75 virtual void OnRequestReceived(const EventApplicationAddAppInfoEventListenerPtr& event);
76 virtual void OnRequestReceived(const EventApplicationRemoveAppInfoEventListenerPtr& event);
77 virtual void OnRequestReceived(const EventApplicationGetAppCertsPtr& event);
78 virtual void OnRequestReceived(const EventApplicationGetAppSharedURIPtr& event);
80 // inherited from IAppManagerAppListChangedCallbacks
81 virtual void onAppManagerEventInstalled(const char *appId);
82 virtual void onAppManagerEventUninstalled(const char *appId);
83 virtual void onAppManagerEventUpdated(const char *appId);
88 DPL::Mutex m_initializationMutex;
91 std::map<int, EventApplicationKillPtr> m_killEventMap;
92 mutable DPL::Mutex m_killMapLock;
94 typedef WrtDeviceApis::Commons::Emitters<EventApplicationAppInfoEventListenerEmitter> EventApplicationAppInfoEventListenerEmitters;
95 typedef std::map<long, EventApplicationAppInfoEventListenerEmitter::IdType> WatchIdMap;
97 EventApplicationAppInfoEventListenerEmitters m_installedApplicationsEmitters;
98 WatchIdMap m_watchIdMap;
100 ApplicationPtr m_app;
103 class LaunchAppControlPendingEvent
106 LaunchAppControlPendingEvent(void *thisObject, const EventApplicationLaunchAppControlReplyPtr &event) :
107 m_thisObject(thisObject),
112 virtual ~LaunchAppControlPendingEvent()
116 void* getThisObject() const { return m_thisObject; }
117 EventApplicationLaunchAppControlReplyPtr getEvent() const { return m_event; }
121 EventApplicationLaunchAppControlReplyPtr m_event;
125 template <class KeyType, class DataType>
129 typedef unsigned int DataKeyType;
130 typedef DataType * DataPtrType;
131 typedef std::pair<KeyType, DataPtrType> KeyDataPairType;
132 typedef std::map<DataKeyType, KeyDataPairType> DataMapType;
133 typedef std::set<DataKeyType> DataKeySetType;
134 typedef std::map<KeyType, DataKeySetType> KeyMapType;
135 typedef std::list<DataPtrType> DataPtrListType;
142 DataKeyType insert(const KeyType &key, const DataPtrType &dataPtr)
144 DataKeyType dataKey = ++m_keyAcc;
146 KeyDataPairType pair(key, dataPtr);
147 m_dataMap.insert(std::pair<DataKeyType, KeyDataPairType>(dataKey, pair));
149 typename KeyMapType::iterator keyMapIter = m_keyMap.find(key);
150 if(keyMapIter == m_keyMap.end())
152 DataKeySetType newKeySet;
153 m_keyMap.insert(std::pair<KeyType, DataKeySetType>(key, newKeySet));
154 keyMapIter = m_keyMap.find(key);
157 DataKeySetType &dataKeySet = keyMapIter->second;
159 dataKeySet.insert(dataKey);
164 DataPtrType getData(const DataKeyType &dataKey) const
166 typename DataMapType::const_iterator dataMapIter = m_dataMap.find(dataKey);
168 if(dataMapIter == m_dataMap.end())
169 return static_cast<DataPtrType>(NULL);
171 return dataMapIter->second.second;
174 DataPtrListType getDataPtrList(const KeyType &key)
176 DataPtrListType dataPtrList;
178 typename KeyMapType::const_iterator keyMapIter = m_keyMap.find(key);
179 if(keyMapIter == m_keyMap.end())
182 DataKeySetType keySet = keyMapIter->second;
183 DataKeySetType::iterator keySetIter = keySet.begin();
184 for(; keySetIter != keySet.end(); keySetIter++)
186 DataPtrType dataPtr = getData(*keySetIter);
189 LoggerW("No data for " << *keySetIter);
193 dataPtrList.push_back(dataPtr);
199 void eraseData(const DataKeyType &dataKey)
201 typename DataMapType::iterator dataKeyIter = m_dataMap.find(dataKey);
203 if(dataKeyIter == m_dataMap.end())
205 LoggerD("No data for " << dataKey);
209 KeyType key = dataKeyIter->second.first;
211 m_dataMap.erase(dataKeyIter);
213 typename KeyMapType::iterator keyMapIter = m_keyMap.find(key);
214 if(keyMapIter == m_keyMap.end())
216 LoggerW("No data for Key");
220 DataKeySetType &keySet = keyMapIter->second;
221 DataKeySetType::iterator keySetIter = keySet.find(dataKey);
222 if(keySetIter == keySet.end())
224 LoggerW("No data for " << dataKey);
228 keySet.erase(keySetIter);
231 void eraseKey(const KeyType &key)
233 typename KeyMapType::iterator keyMapIter = m_keyMap.find(key);
234 if(keyMapIter == m_keyMap.end())
236 LoggerD("No data to erase.");
240 DataKeySetType &keySet = keyMapIter->second;
241 DataKeySetType::iterator keySetIter = keySet.begin();
242 for(; keySetIter != keySet.end(); keySetIter++)
244 typename DataMapType::iterator dataKeyIter = m_dataMap.find(*keySetIter);
245 if(dataKeyIter == m_dataMap.end())
247 LoggerW("No data to erase.");
251 m_dataMap.erase(dataKeyIter);
254 m_keyMap.erase(keyMapIter);
258 DataKeyType m_keyAcc;
260 DataMapType m_dataMap;