9699e000486413c6ca6cb158d73246da7670e408
[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         void OnApplicationTerminated(void);
83
84         _ConnectionState GetConnectionState(void) const;
85         bool GetWaitingStatus(void) const;
86         Tizen::App::AppId GetAppId(void) const;
87         int GetClientId(void) const;
88
89         _AppWidgetContext* FindAppWidget(const Tizen::Base::String& instanceId) const;
90         int GetProviderCount(void) const;
91
92         result RequestUpdateInstance(const Tizen::Base::String& instanceId, const Tizen::Base::String& argument);
93         result AcquireRemoteBuffer(const Tizen::Base::String& instanceId, int width, int height, int& bufferId);
94         result AcquireRemoteBufferForPD(const Tizen::Base::String& instanceId, int width, int height, int& bufferId);
95         result SyncRemoteBuffer(const Tizen::Base::String& instanceId, int width, int height);
96         result SyncRemoteBufferForPD(const Tizen::Base::String& instanceId);
97         result SendAccessStatus(const Tizen::Base::String& instanceId, int accessStatus);
98         void HandleUserEvent(Tizen::Base::Collection::IList* pArgs);
99
100 private:
101         void SetConnectionState(_ConnectionState state);
102         static const wchar_t* GetConnectionStateString(_ConnectionState state);
103         void SetWaitingStatus(bool status);
104         _AppWidgetContext* FindInvalidAppWidget(void) const;
105
106 private:
107         struct PendingEvent
108         {
109                 PendingEvent(const Tizen::Base::String& operation, Tizen::Base::Collection::HashMap* pHashMap)
110                  : operation(operation), pArgs(pHashMap) {  }
111
112                 ~PendingEvent(void)
113                 {
114                         if (pArgs)
115                         {
116                                 pArgs->RemoveAll(true);
117                                 delete pArgs;
118                         }
119                 }
120
121                 Tizen::Base::String operation;
122                 Tizen::Base::Collection::HashMap* pArgs;
123         };
124
125         const Tizen::App::AppId __appId;
126         bool __isWaitingResult;
127         int __ipcClientId;
128         _ConnectionState __connectionState;
129         Tizen::Base::Collection::HashMapT<Tizen::Base::String, _AppWidgetContext*> __appWidgetContexts;
130         Tizen::Base::Collection::ArrayListT<PendingEvent*>* __pPendingEventList;
131 };
132
133 }}} // Tizen::Shell::App
134
135 #endif // _FSHELL_INTERNAL_APP_CONTEXT_H_