d469b6e4c2e361a0c48ab94146cd614cb71adeee
[apps/osp/Internet.git] / src / IntInternetApp.cpp
1 //
2
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Flora License, Version 1.1 (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 //!Internet
19 /*@file:        Internet.cpp
20  *@brief:       provides basic features necessary to define an UiApp.
21  */
22
23 #include "IntBookmarkData.h"
24 #include "IntBookmarkPresentationModel.h"
25 #include "IntCommonLib.h"
26 #include "IntFaviconManager.h"
27 #include "IntHistoryPresentationModel.h"
28 #include "IntInternetApp.h"
29 #include "IntMainFrame.h"
30 #include "IntMainForm.h"
31 #include "IntMultipleWindowPresentationModel.h"
32 #include "IntSceneRegister.h"
33 #include "IntSettingPresentationModel.h"
34
35 using namespace Tizen::App;
36 using namespace Tizen::Base;
37 using namespace Tizen::Base::Collection;
38 using namespace Tizen::System;
39 using namespace Tizen::Ui;
40 using namespace Tizen::Ui::Controls;
41 using namespace Tizen::Ui::Scenes;
42
43 static const wchar_t* APPCONTROL_SELECT_KEY_IMAGE = L"http://tizen.org/appcontrol/data/image/crop_mode";
44 static const wchar_t* APPCONTROL_SELECT_VALUE_IMAGE = L"fit_to_screen";
45 static const wchar_t* APPCONTROL_PROVIDER_ID_IMAGE_VIEWER = L"tizen.imageviewer";
46 static const wchar_t* APPCONTROL_OPERATION_ID_IMAGE_VIEWER = L"http://tizen.org/appcontrol/operation/view";
47 const int MIN_MEMORY_NEEDED = 1048576;
48
49 InternetApp::InternetApp(void)
50 : __pMultiWindowManager(NULL),__pNewWindowInfo(null)
51 {
52 }
53
54 InternetApp::~InternetApp(void)
55 {
56         if (__pNewWindowInfo != NULL)
57         {
58                 delete __pNewWindowInfo;
59                 __pNewWindowInfo = NULL;
60         }
61 }
62
63 UiApp*
64 InternetApp::CreateInstance(void)
65 {
66         // Create the instance through the constructor.
67         return new(std::nothrow) InternetApp();
68 }
69
70 void
71 InternetApp::ShowPopup(String& pTitle, String& pText)
72 {
73         MessageBox messageBox;
74         messageBox.Construct(pTitle, pText,MSGBOX_STYLE_OK,3000);
75         int modalResult = 0;
76
77         messageBox.ShowAndWait(modalResult);
78         switch (modalResult)
79         {
80         case MSGBOX_RESULT_OK:
81         {
82
83         }
84         break;
85         default:
86                 break;
87         }
88 }
89
90 bool
91 InternetApp::OnAppInitializing(AppRegistry& appRegistry)
92 {
93         AppLog("ABC::Internet::OnAppInitializing entered");
94         AppControlProviderManager* pAppMgr = AppControlProviderManager::GetInstance();
95         if (pAppMgr != null)
96         {
97                 result r = pAppMgr->SetAppControlProviderEventListener(this);
98                 AppLogDebug("SetAppControlProviderEventListener result %s",GetErrorMessage(r));
99         }
100         return true;
101 }
102
103 bool
104 InternetApp::OnAppInitialized(void)
105 {
106         result r = E_SUCCESS;
107
108         long long mem = GetAvailableMemory();
109         AppLogDebug("%lld",mem);
110         if(mem < MIN_MEMORY_NEEDED)
111         {
112                 MessageBox LowMemory;
113                 String msg = L"";
114                 LowMemory.Construct(CommonUtil::GetString(L"IDS_LOW_MEMORY_MSG_TITLE"), CommonUtil::GetString(L"IDS_LOW_MEMORY_MSG"), MSGBOX_STYLE_NONE,1000);
115                 int modalResult = 0;
116                 // Calls ShowAndWait() : Draws and Shows itself and processes events
117                 LowMemory.ShowAndWait(modalResult);
118
119                 return false;
120
121         }
122         String title1 = L"URL1";
123         String title2 = L"URL2";
124         String folder1 = L"Folder 1";
125         String strSite1 = "Site 1";
126
127         BookmarkPresentationModel::GetInstance();
128         HistoryPresentationModel::GetInstance();
129         FaviconManager::GetInstance();
130         SettingPresentationModel::GetInstance();
131
132 //      MultipleWindowPresentationModel::GetInstance();
133
134         SettingInfo::AddSettingEventListener(*this);
135         __pMultiWindowManager = MultipleWindowPresentationModel::GetInstance();
136         AppLogDebug("window count %d",__pMultiWindowManager->GetAllWindowArrayList()->GetCount());
137
138
139
140         // Create a Frame
141         MainFrame* pSceneManagementFrame = new(std::nothrow) MainFrame();
142         pSceneManagementFrame->Construct();
143         pSceneManagementFrame->SetName(L"SceneManagement");
144         AddFrame(*pSceneManagementFrame);
145         // Goto the first scene.
146
147         SceneManager* pSceneManager = SceneManager::GetInstance();
148         if (pSceneManager == null)
149         {
150                 AppLogDebug("pSceneManager is null returning");
151                 return false;
152         }
153
154         String homePage = SettingPresentationModel::GetInstance()->GetHomepage();
155         if (homePage == (L"IDS_BR_BODY_MOST_VISITED_SITES") || homePage == (L"IDS_BR_BODY_BLANK_PAGE"))
156         {
157                 homePage = L"";
158         }
159         else if (homePage == CommonUtil::GetString(L"IDS_BR_BODY_USER_HOMEPAGE"))
160         {
161                 AppLog("InternetApp::OnAppInitialized homaepage = userhomepage");
162                 homePage = SettingPresentationModel::GetInstance()->GetFavoriteUrl();
163                 AppLog("InternetApp::OnAppInitialized fav URL = %ls ",homePage.GetPointer());
164         }
165
166         if (__pNewWindowInfo == null)//if the application is launched normally
167         {
168                 __pNewWindowInfo = MultipleWindowPresentationModel::GetInstance()->CreateNewMainViewSceneN(homePage);
169         }
170
171         if (__pNewWindowInfo == null)
172         {
173                 return false;
174         }
175
176         ArrayList* pArgList = new(std::nothrow) ArrayList();
177         pArgList->Construct();
178         pArgList->Add(*__pNewWindowInfo);
179         /*
180          * The GoForward call cannot be moved into the MainFrame::OnInitializing
181          * because when the application is launched from the appcontol, the data(URL)
182          * is not available for Mainframe, and we cannot pass the url information to
183          * the Mainframe because logically MainFrame should not know the URL information.
184          */
185         if (E_SUCCESS != pSceneManager->GoForward(ForwardSceneTransition(__pNewWindowInfo->sceneID, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList))
186         {
187                 AppLogDebug("CustomAppControl::OnAppInitializing Result = %s", GetLastResult());
188                 delete pArgList;
189                 __pNewWindowInfo = null;
190                 return false;
191         }
192
193         delete pArgList;
194         pArgList = null;
195         __pNewWindowInfo = null;
196
197         return true;
198 }
199
200 bool
201 InternetApp::OnAppWillTerminate(void)
202 {
203         return true;
204 }
205
206
207 bool
208 InternetApp::OnAppTerminating(AppRegistry& appRegistry, bool forcedTermination)
209 {
210         AppLogDebug("Internet::OnAppTerminating");
211
212         SettingInfo::RemoveSettingEventListener(*this);
213
214         return true;
215 }
216
217 void
218 InternetApp::OnForeground(void)
219 {
220         AppLog("InternetApp::OnForeground");
221
222         AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry();
223         String sliderKey("SliderValue");
224
225         int sliderValue = 0;
226
227
228         result r = pAppRegistry->Get(sliderKey, sliderValue);
229         r = PowerManager::SetScreenBrightness(sliderValue);
230 //      r = PowerManager::RestoreScreenBrightness();
231
232         AppLog("Settingscreenbrightness to %d result %s",sliderValue , GetErrorMessage(r));
233
234
235         Form* pCurrentForm = (SceneManager::GetInstance()->GetCurrentScene()->GetForm());
236         if (pCurrentForm)
237         {
238                 pCurrentForm->SendUserEvent(FORE_GROUND_APP_EVENT, NULL);
239         }
240 }
241
242 void
243 InternetApp::OnBackground(void)
244 {
245         Form* pCurrentForm = (SceneManager::GetInstance()->GetCurrentScene()->GetForm());
246         if(pCurrentForm)
247         {
248                 pCurrentForm->SendUserEvent(BACK_GROUND_APP_EVENT, NULL);
249         }
250 }
251
252 void
253 InternetApp::OnLowMemory(void)
254 {
255
256 }
257
258 void
259 InternetApp::OnBatteryLevelChanged(BatteryLevel batteryLevel)
260 {
261
262 }
263
264 void
265 InternetApp::OnScreenOn(void)
266 {
267
268 }
269
270 void
271 InternetApp::OnScreenOff(void)
272 {
273         // TODO:
274         // Unless there is a strong reason to do otherwise, release resources (such as 3D, media, and sensors) to allow the device
275         // to enter the sleep mode to save the battery.
276         // Invoking a lengthy asynchronous method within this listener method can be risky, because it is not guaranteed to invoke a
277         // callback before the device enters the sleep mode.
278         // Similarly, do not perform lengthy operations in this listener method. Any operation must be a quick one.
279 }
280
281 void
282 InternetApp::OnSettingChanged(Tizen::Base::String& key)
283 {
284         AppLog("InternetApp::OnSettingChanged: %ls", key.GetPointer());
285         if (key == L"http://tizen.org/setting/locale.language" || key == L"http://tizen.org/setting/font.size")
286         {
287                 Terminate();
288         }
289 }
290
291 void
292 InternetApp::OnAppControlRequestReceived(RequestId reqId, const String &operationId, const String* pUriScheme, const String *pDataType, const IMap *pArgs)
293 {
294         AppLogDebug("ABC::Internet::OnAppControlRequestReceivedN entered %ls",operationId.GetPointer());
295
296         if (operationId.CompareTo(L"http://tizen.org/appcontrol/operation/view") == 0)
297         {
298                 String urlData;
299                 if (pUriScheme)
300                 {
301                         urlData = *pUriScheme;
302                 }
303                 else
304                 {
305                         int argCount = pArgs->GetCount();
306                         AppLog("argCount == %d", argCount);
307
308                         IList *pValues = pArgs->GetValuesN();
309                         if(pValues == null)
310                         {
311                                 AppLog("pValues == null");
312                                 return;
313                         }
314
315                         String url = L"url";
316                         String* pUrl = dynamic_cast<String*>(const_cast<Object*>(pArgs->GetValue(url)));
317                         if(pUrl == null)
318                         {
319                                 delete pValues;
320                                 AppLog("pUrl == null");
321                                 return;
322                         }
323                         urlData = *pUrl;
324                 }
325                 AppLog("URL received %ls", urlData.GetPointer());
326
327                 if (__pNewWindowInfo == null)
328                 {
329                         __pNewWindowInfo = MultipleWindowPresentationModel::GetInstance()->CreateNewMainViewSceneN(urlData, true);
330                 }
331                 if (__pNewWindowInfo == null)
332                 {
333                         if (MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList()->GetCount() >= 9)
334                         {
335                                 String strTitle = L"";//CommonUtil::GetString(L"IDS_COM_SK_MAX_LIMIT_REACHED");
336                                 String strText = CommonUtil::GetString(L"IDS_BR_BODY_COULD_NOT_OPEN_NEW_WINDOW_BECAUSE_YOU_HAVE_ALREADY_OPENED_MAXIMUM_NUMBER");
337                                 ShowPopup(strTitle, strText);
338                         }
339                         return;
340                 }
341                 if (__pMultiWindowManager != null && __pMultiWindowManager->GetAllWindowArrayList()->GetCount() != 0)
342                 {
343                         //if the application is running in background and it receives an appcontrol request it will launch a new(std::nothrow) window here,
344                         //otherwise appcontrol request will be handled by OnAppInitialized method
345                         SceneManager* pSceneManager = SceneManager::GetInstance();
346                         if (pSceneManager == null)
347                         {
348                                 return;
349                         }
350
351                         ArrayList* pArgList = new(std::nothrow) ArrayList();
352                         pArgList->Construct();
353                         pArgList->Add(*__pNewWindowInfo);
354
355                         if (E_SUCCESS != pSceneManager->GoForward(ForwardSceneTransition(__pNewWindowInfo->sceneID, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList))
356                         {
357                                 AppLogDebug("CustomAppControl::OnAppInitializing Result = %s", GetLastResult());
358                                                 delete pArgList;
359                                 __pNewWindowInfo = null;
360                                 return;
361                         }
362
363                         delete pArgList;
364
365                         __pNewWindowInfo = null;
366                 }
367         }
368         else if (operationId.CompareTo(L"http://tizen.org/appcontrol/operation/main") == 0)
369         {
370                 if (pArgs)
371                 {
372                         const String* pVal = (String *) pArgs->GetValue(String(L"http://tizen.org/appcontrol/data/notification"));
373                         if (pVal && pVal->GetLength() > 0)
374                         {
375                                 HashMap extraData;
376                                 extraData.Construct();
377                                 String typeKey = APPCONTROL_SELECT_KEY_IMAGE;
378                                 String typeVal = APPCONTROL_SELECT_VALUE_IMAGE;
379                                 extraData.Add(&typeKey, &typeVal);
380
381                                 AppControl* pAc = AppManager::FindAppControlN(APPCONTROL_PROVIDER_ID_IMAGE_VIEWER,
382                                                 APPCONTROL_OPERATION_ID_IMAGE_VIEWER);
383                                 if (pAc)
384                                 {
385                                         if (pAc->Start(pVal, null, null, null) == E_SUCCESS)
386                                         {
387                                                 delete pAc;
388                                         }
389                                 }
390                         }
391                 }
392         }
393
394         AppLogDebug("ABC::Internet::OnAppControlRequestReceivedN Exit");
395         return;
396 }
397
398
399 long long
400 InternetApp::GetAvailableMemory(void)
401 {
402     result r = E_SUCCESS;
403
404     String key(L"http://tizen.org/runtime/storage.available.internal");
405     long long allocatedMemory = 0;
406
407     r = RuntimeInfo::GetValue(key, allocatedMemory);
408     TryCatch(r == E_SUCCESS, , "MyRuntimeInfo: Failed to get value");
409
410     return allocatedMemory;
411
412    CATCH:
413     return 0;
414 }
415