Flora license update
[apps/osp/Internet.git] / src / IntSharePopup.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 /*
19  * IntSharePopUp.cpp
20  *@file:        IntSharePopup.cpp
21  *@brief:       Share Popup for sharing bookmark via message, email etc
22  */
23
24 #include <FAppUiApp.h>
25 #include <FUi.h>
26 #include <FBase.h>
27 #include <FIo.h>
28
29 #include "IntCommonLib.h"
30 #include "IntSharePopup.h"
31
32 using namespace Tizen::App;
33 using namespace Tizen::Io;
34 using namespace Tizen::Base;
35 using namespace Tizen::Base::Collection;
36 using namespace Tizen::Graphics;
37 using namespace Tizen::Ui;
38 using namespace Tizen::Ui::Controls;
39 using namespace Tizen::Ui::Scenes;
40
41 const int SharePopup::IDA_CANCEL_BUTTON = 101;
42 const int SharePopup::ID_FORMAT_MESSAGE_STRING = 500;
43 const int SharePopup::ID_FORMAT_EMAIL_STRING = 501;
44 const int SharePopup::ID_FORMAT_FACEBOOK_STRING = 502;
45 const int SharePopup::ID_FORMAT_TWITTER_STRING = 503;
46
47 ShareInfo::     ShareInfo(void)
48 {
49         isImageAttached = false;
50 }
51
52 ShareInfo::     ~ShareInfo(void)
53 {
54
55 }
56
57 void
58 ShareInfo::SetPageTitle(Tizen::Base::String aPageTitle)
59 {
60         __pageTitle.Clear();
61         __pageTitle.Append(aPageTitle);
62 }
63
64 void
65 ShareInfo::SetPageUrl(Tizen::Base::String aPageURL)
66 {
67         __pageURL.Clear();
68         __pageURL.Append(aPageURL);
69 }
70
71 Tizen::Base::String
72 ShareInfo::GetPageTitle(void)
73 {
74         return __pageTitle;
75 }
76
77 Tizen::Base::String
78 ShareInfo::GetPageURL(void)
79 {
80         return __pageURL;
81 }
82
83 void
84 ShareInfo::SetImageAttached(bool imageAttached)
85 {
86         isImageAttached = imageAttached;
87 }
88
89 bool
90 ShareInfo::GetImageAttached()
91 {
92         return isImageAttached;
93 }
94
95 void
96 ShareInfo::SetImagePath(Tizen::Base::String aImagePath)
97 {
98         __imagePath.Clear();
99         __imagePath.Append(aImagePath);
100 }
101
102 Tizen::Base::String
103 ShareInfo::GetImagePath(void)
104 {
105         return __imagePath;
106 }
107
108 SharePopup::SharePopup(void)
109 :__pList(null),__pShareList(null)
110 {
111
112 }
113
114 SharePopup::~SharePopup(void)
115 {
116
117 }
118
119 bool
120 SharePopup::Initialize(void)
121 {
122         Button* pCancelButton = null;
123
124         Popup::Construct(L"IDL_SHARE_POPUP");
125         SetName(L"CommonPopup");
126
127         __pShareList = new(std::nothrow) ArrayList();
128         __pShareList->Construct();
129
130         __pList = static_cast<ListView*>(GetControl(L"IDC_LISTVIEW"));
131         if (__pList == null)
132         {
133                 return false;
134         }
135
136         __pList->SetItemProvider(*this);
137         __pList->AddListViewItemEventListener(*this);
138
139         pCancelButton = static_cast< Button* >(GetControl(L"IDC_BUTTON1", true));
140         if (pCancelButton)
141         {
142                 pCancelButton->AddActionEventListener(*this);
143                 pCancelButton->SetActionId(IDA_CANCEL_BUTTON);
144         }
145
146         return true;
147 }
148
149 result
150 SharePopup::OnTerminating(void)
151 {
152         result r = E_SUCCESS;
153         return r;
154 }
155
156 void
157 SharePopup::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
158 {
159         switch(actionId)
160         {
161         case IDA_CANCEL_BUTTON:
162         {
163                 Popup::SetShowState(false);
164                 Popup::Show();
165         }
166         break;
167         default:
168                 break;
169         }
170         return;
171 }
172
173 void
174 SharePopup::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state)
175 {
176         return;
177 }
178
179 void
180 SharePopup::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status)
181 {
182         switch (index)
183         {
184         case 0:
185         {
186
187                 // share via message
188                 StartMessageAppControl();
189                 Popup::SetShowState(false);
190                 Popup::Show();
191         }
192         break;
193         case 1:
194         {
195
196                 // share via email
197                 StartEmailAppControl();
198                 Popup::SetShowState(false);
199                 Popup::Show();
200         }
201         break;
202         default:
203                 break;
204         }
205 }
206
207 void
208 SharePopup::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction)
209 {
210         return;
211 }
212
213 void
214 SharePopup::OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback)
215 {
216         return;
217 }
218
219 Tizen::Ui::Controls::ListItemBase*
220 SharePopup::CreateItem(int index, int itemWidth)
221 {
222         result r = E_FAILURE;
223         ListAnnexStyle style = LIST_ANNEX_STYLE_NORMAL;
224         int textSize = 35;
225         int elementHeight = 50;
226         int listItemWidth = 80;
227
228         CustomItem* pItem = new(std::nothrow) CustomItem();
229         r = pItem->Construct(Dimension(GetClientAreaBounds().width, listItemWidth), style);
230         if (IsFailed(r))
231         {
232                 AppLogDebug("Create Item Failed with error %s", GetErrorMessage(r));
233                 delete pItem;
234                 return null;
235         }
236
237         switch(index)
238         {
239         case 0:
240         {
241                 AppLogDebug("SharePopUp CreateItem 0");
242                 // IDS_SHARE_VIA_MESSAGE
243                 pItem->AddElement(Rectangle(45,0, GetClientAreaBounds().width, listItemWidth), ID_FORMAT_MESSAGE_STRING, CommonUtil::GetString(L"IDS_BR_OPT_SHARE_VIA_MESSAGES"), true);
244         }
245         break;
246         case 1:
247         {
248                 AppLogDebug("SharePopUp CreateItem 1");
249                 // IDS_SHARE_VIA_EMAIL
250                 pItem->AddElement(Rectangle(45, 0, GetClientAreaBounds().width, listItemWidth), ID_FORMAT_EMAIL_STRING, CommonUtil::GetString(L"IDS_BR_OPT_SHARE_VIA_EMAIL"), true);
251         }
252         break;
253         default:
254                 break;
255         }
256         return pItem;
257 }
258
259 bool
260 SharePopup::DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
261 {
262         return true;
263 }
264
265 int
266 SharePopup::GetItemCount(void)
267 {
268         return 2;
269 }
270
271 result
272 SharePopup::AddShareInfo(ShareInfo* pShareInfo)
273 {
274         result r = E_FAILURE;
275
276         if (__pShareList != NULL)
277         {
278                 r = __pShareList->Add(*pShareInfo);
279         }
280         return r;
281 }
282
283 void SharePopup::RemoveAllShareInfo()
284 {
285         __pShareList->RemoveAll();
286 }
287
288 void
289 SharePopup::StartEmailAppControl(void)
290 {
291    HashMap extraData;
292    ShareInfo* pShareInfo = null;
293    result r = E_FAILURE;
294    bool imageAttachment = false;
295
296    extraData.Construct();
297
298    if (__pShareList != null)
299         {
300                 pShareInfo = dynamic_cast<ShareInfo*>(__pShareList->GetAt(0));
301                 if (pShareInfo != null)
302                 {
303                         String testURL = pShareInfo->GetPageURL();
304                         AppLogDebug("getpageURL getpageURL is %ls", testURL.GetPointer());
305                 }
306         }
307
308    String textVal;
309
310         if (pShareInfo != null)
311         {
312                 textVal.Append(pShareInfo->GetPageTitle());
313                 textVal.Append(L" <");
314                 AppLog("share info url is %ls",pShareInfo->GetPageURL().GetPointer());
315                 textVal.Append(pShareInfo->GetPageURL().GetPointer());
316                 textVal.Append(L">");
317         }
318
319    String subjectKey = L"http://tizen.org/appcontrol/data/subject";
320    String subjectVal = L"";
321    String textKey = L"http://tizen.org/appcontrol/data/text";
322
323    String toKey = L"http://tizen.org/appcontrol/data/to";
324    String toVal = L"";
325    String ccKey = L"http://tizen.org/appcontrol/data/cc";
326    String ccVal = L"";
327    String bccKey = L"http://tizen.org/appcontrol/data/bcc";
328    String bccVal = L"";
329
330    //String attachKey = L"attachments";
331    String attachKey = L"http://tizen.org/appcontrol/data/path";
332    String attachVal;
333         if (pShareInfo != null)
334         {
335                 imageAttachment = pShareInfo->GetImageAttached();
336                 if (imageAttachment)
337                 {
338                         attachVal = pShareInfo->GetImagePath();
339                         AppLog("SharePopup::StartEmailAppControl imagePath is %S",attachVal.GetPointer());
340                 }
341                 else
342                 {
343                          attachVal = L"";
344                 }
345         }
346
347         ArrayList* pDataList = null;
348         pDataList = new (std::nothrow) ArrayList();
349         pDataList->Construct();
350         pDataList->Add(&attachVal);
351
352    extraData.Add(&subjectKey, &subjectVal);
353    extraData.Add(&textKey, &textVal);
354    extraData.Add(&toKey, &toVal);
355    extraData.Add(&ccKey, &ccVal);
356    extraData.Add(&bccKey, &bccVal);
357    if(attachVal.GetLength() > 0)
358    {
359            extraData.Add(&attachKey, pDataList);
360    }
361
362    AppControl* pAc = AppManager::FindAppControlN(L"tizen.email", L"http://tizen.org/appcontrol/operation/compose");
363    if (pAc)
364    {
365           r = pAc->Start(null, null, &extraData, this);
366            delete pAc;
367    }
368
369    if (pShareInfo != null)
370    {
371            delete pShareInfo;
372    }
373    delete pDataList;
374
375 }
376
377 void
378 SharePopup::StartMessageAppControl(void)
379 {
380         HashMap extraData;
381         ShareInfo* pShareInfo = null;
382         result r = E_FAILURE;
383         bool imageAttachment = false;
384
385         extraData.Construct();
386
387         String typeKey = L"http://tizen.org/appcontrol/data/message/type";
388         String typeVal;
389         String textKey = L"http://tizen.org/appcontrol/data/text";
390         String textVal;
391         String attachKey = L"http://tizen.org/appcontrol/data/path";
392         String attachVal;
393         ArrayList* pDataList = null;
394
395         if (__pShareList != null)
396         {
397                 pShareInfo = dynamic_cast<ShareInfo*>(__pShareList->GetAt(0));
398                 if (pShareInfo != null)
399                 {
400                         String testURL = pShareInfo->GetPageURL();
401                         AppLogDebug("getpageURL getpageURL is %ls", testURL.GetPointer());
402                 }
403         }
404
405         if (pShareInfo != null)
406         {
407                 textVal.Append(pShareInfo->GetPageTitle());
408                 if(pShareInfo->GetPageTitle().GetLength() > 0)
409                 {
410                         textVal.Append(L" <");
411                 }
412                 else
413                 {
414                         textVal.Append(L"<");
415                 }
416                 AppLog("share info url is %ls",pShareInfo->GetPageURL().GetPointer());
417                 textVal.Append(pShareInfo->GetPageURL().GetPointer());
418                 textVal.Append(L">");
419         }
420         if (pShareInfo != null)
421         {
422                 imageAttachment = pShareInfo->GetImageAttached();
423                 if (imageAttachment)
424                 {
425                         // type is mms
426                         typeVal = L"mms";
427                         attachVal = pShareInfo->GetImagePath();
428
429                         pDataList = new (std::nothrow) ArrayList();
430                         pDataList->Construct();
431                         pDataList->Add(&attachVal);
432                 }
433                 else
434                 {
435                         typeVal = L"sms";
436                         // type is sms
437                 }
438         }
439
440         extraData.Add(&typeKey, &typeVal);
441
442         if (imageAttachment)
443         {
444                 // type is MMMS, attach the image
445                 extraData.Add(&attachKey, pDataList);
446         }
447         else
448         {
449                 // type is SMS , attach the text
450                 extraData.Add(&textKey, &textVal);
451         }
452
453         AppControl* pAc = AppManager::FindAppControlN(L"tizen.messages", L"http://tizen.org/appcontrol/operation/compose");
454         if (pAc)
455         {
456                 r = pAc->Start(null, null, &extraData, this);
457                 delete pAc;
458         }
459
460         if (pShareInfo != null)
461         {
462                 delete pShareInfo;
463         }
464         if(pDataList)
465         {
466                 delete pDataList;
467         }
468 }
469
470 void
471 SharePopup::OnAppControlCompleted(const Tizen::Base::String& providerId, const Tizen::Base::String& operationId, const Tizen::Base::Collection::IList* pResultList)
472 {
473         AppLog("InternetApp::OnForeground called");
474         Frame* pCurrentFrame = null;
475         pCurrentFrame =  Application::GetInstance()->GetAppFrame()->GetFrame();
476
477         if (pCurrentFrame != null)
478         {
479                 pCurrentFrame->SetEnabled(true);
480                 pCurrentFrame->Invalidate(true);
481         }
482 }
483
484 void SharePopup::OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData)
485 {
486         AppLog("SharePopup::OnAppControlCompleteResponseReceived");
487         Frame* pCurrentFrame = null;
488         pCurrentFrame =  Application::GetInstance()->GetAppFrame()->GetFrame();
489
490         if (pCurrentFrame != null)
491         {
492                 pCurrentFrame->SetEnabled(true);
493                 pCurrentFrame->Invalidate(true);
494         }
495
496 }