fix memory leak
[platform/framework/native/appwidget-service.git] / inc / FShell_AppContext.h
1 //
2 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.1 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://floralicense.org/license/
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 /**
18  * @file        FShell_AppContext.h
19  * @brief       This is the header file for the _AppContext class.
20  *
21  * This header file contains the declarations of the _AppContext class.
22  */
23
24 #ifndef _FSHELL_INTERNAL_APP_CONTEXT_H_
25 #define _FSHELL_INTERNAL_APP_CONTEXT_H_
26
27 #include <FAppTypes.h>
28 #include <FBaseColArrayListT.h>
29 #include <FBaseColHashMap.h>
30 #include <FBaseColHashMapT.h>
31
32 namespace Tizen { namespace Base  { namespace Collection
33 {
34 class IList;
35 }}}
36
37 namespace Tizen { namespace Shell  { namespace App
38 {
39
40 enum _ConnectionState
41 {
42         CONNECTION_STATE_NONE = 0,
43         CONNECTION_STATE_CONNECTING,
44         CONNECTION_STATE_CONNECTED,
45         CONNECTION_STATE_DISCONNECTED
46 };
47
48 class _AppWidgetContext;
49
50 /**
51  * @class       _AppContext
52  * @brief       Context of a AppWidget provider application.
53  */
54 class _AppContext
55         :public Tizen::Base::Object
56 {
57
58 public:
59         _AppContext(const Tizen::App::AppId& appId);
60         ~_AppContext(void);
61
62         result AddAppWidget(const Tizen::Base::String& userInfo, const Tizen::Base::String& providerId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority);
63         result UpdateAppWidget(const Tizen::Base::String& instanceId);
64         result DestroyAppWidget(const Tizen::Base::String& instanceId, bool isTriggeredByViewer = true);
65         result ResizeAppWidget(const Tizen::Base::String& instanceId, int width, int height);
66
67         result CreateAppWidgetPopup(const Tizen::Base::String& instanceId, double x, double y, int width, int height);
68         result DestroyAppWidgetPopup(const Tizen::Base::String& instanceId);
69
70         result OnAppWidgetBackground(const Tizen::Base::String& instanceId);
71         result OnAppWidgetForeground(const Tizen::Base::String& instanceId);
72         result OnAppWidgetBackgroundAll(void);
73         result OnAppWidgetForegroundAll(void);
74
75         result RequestUpdate(const Tizen::Base::String& providerName, const Tizen::Base::String& argument);
76         result RequestUpdateAllInactiveted(void);
77         result SendRequestToApp(const Tizen::App::AppId& providerAppId, const Tizen::Base::String& operation, Tizen::Base::Collection::HashMap* pArgs);
78         result SendPendingEvent(void);
79
80         void OnIpcConnected(int clientId);
81         void OnIpcDisconnected(void);
82         _ConnectionState GetConnectionState(void) const;
83         bool GetWaitingStatus(void) const;
84         Tizen::App::AppId GetAppId(void) const;
85         int GetClientId(void) const;
86
87         _AppWidgetContext* FindAppWidget(const Tizen::Base::String& instanceId) const;
88         int GetProviderCount(void) const;
89
90         result RequestUpdateInstance(const Tizen::Base::String& instanceId, const Tizen::Base::String& argument);
91         result AcquireRemoteBuffer(const Tizen::Base::String& instanceId, int width, int height, int& bufferId);
92         result AcquireRemoteBufferForPD(const Tizen::Base::String& instanceId, int width, int height, int& bufferId);
93         result SyncRemoteBuffer(const Tizen::Base::String& instanceId, int width, int height);
94         result SyncRemoteBufferForPD(const Tizen::Base::String& instanceId);
95         result SendAccessStatus(const Tizen::Base::String& instanceId, int accessStatus);
96         void HandleUserEvent(Tizen::Base::Collection::IList* pArgs);
97
98 private:
99         void SetConnectionState(_ConnectionState state);
100         void SetWaitingStatus(bool status);
101         _AppWidgetContext* FindInvalidAppWidget(void) const;
102
103 private:
104         struct PendingEvent
105         {
106                 PendingEvent(const Tizen::Base::String& operation, Tizen::Base::Collection::HashMap* pHashMap)
107                  : operation(operation), pArgs(pHashMap) {  }
108
109                 ~PendingEvent(void)
110                 {
111                         if (pArgs)
112                         {
113                                 pArgs->RemoveAll(true);
114                                 delete pArgs;
115                         }
116                 }
117
118                 Tizen::Base::String operation;
119                 Tizen::Base::Collection::HashMap* pArgs;
120         };
121
122         const Tizen::App::AppId __appId;
123         bool __isWaitingResult;
124         int __ipcClientId;
125         _ConnectionState __connectionState;
126         Tizen::Base::Collection::HashMapT<Tizen::Base::String, _AppWidgetContext*> __appWidgetContextList;
127         Tizen::Base::Collection::ArrayListT<PendingEvent*>* __pPendingEventList;
128 };
129
130 }}} // Tizen::Shell::App
131
132 #endif // _FSHELL_INTERNAL_APP_CONTEXT_H_