35fce29dba4afcaa4c0ceb266b5dfc03d17f304f
[apps/osp/Gallery.git] / src / GlFileListPresentationModel.cpp
1 //
2 // Copyright (c) 2012 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                GlFileListPresentationModel.cpp
19  * @brief               This is the implementation file for FileListPresentationModel class.
20  */
21
22 #include <cstdlib>
23 #include <FMedia.h>
24 #include <FSystem.h>
25 #include "GlCommonUtil.h"
26 #include "GlFileListPresentationModel.h"
27 #include "GlContentUpdateEventListener.h"
28 #include "GlGalleryApp.h"
29 #include "GlThumbnailEvent.h"
30 #include "GlThumbnailEventArg.h"
31 #include "GlThumbnailProvider.h"
32 #include "GlTypes.h"
33
34 using namespace Tizen::App;
35 using namespace Tizen::Base;
36 using namespace Tizen::Base::Collection;
37 using namespace Tizen::Base::Runtime;
38 using namespace Tizen::Base::Utility;
39 using namespace Tizen::Content;
40 using namespace Tizen::Graphics;
41 using namespace Tizen::Io;
42 using namespace Tizen::Media;
43 using namespace Tizen::System;
44
45 static const String CONTENT_INFO_ORDER = L"ContentFileName";
46
47 static const int SIZE_PAGE_NO = 1;
48 static const int SIZE_CONUNT_PER_PAGE = 3000;
49 static const int SIZE_ICON_LIST_CACHE = 50;
50 static const int W_DURATION_TEXT = 44;
51 static const int H_DURATION_TEXT = 4;
52 static const int W_DURATION = 171;
53 static const int H_DURATION = 32;
54 static const int W_DEFAULT_THUMBNAIL = 171;
55 static const int H_DEFAULT_THUMBNAIL = 127;
56 static const int W_WIDE_THUMBNAIL = 171;
57 static const int H_WIDE_THUMBNAIL = 127;
58 static const int W_PLAY_FG = 64;
59 static const int H_PLAY_FG = 64;
60 static const int GAP_W_PLAY_FG = (W_DEFAULT_THUMBNAIL -W_PLAY_FG)/2;
61 static const int GAP_H_PLAY_FG = (H_DEFAULT_THUMBNAIL - H_PLAY_FG)/2;
62 static const int GAP_H_DURATION = H_DEFAULT_THUMBNAIL - H_DURATION;
63 static const int ALPHA_DURATION = 70;
64 static const int FONT_SIZE_DURATION = 24;
65 static const Dimension DIMENSION_REAL_ICON (171,127);
66 static const Rectangle RECTANGLE_THUMBNAIL_OFFSET_POSION (1, 1, 171, 127);
67 static const Rectangle RECTANGLE_VIDEO_THUMBNAIL_OFFSET_POSION (1, 1, 171, 127);
68 static const Color COLOR_DURATION_BG (Color::GetColor(COLOR_ID_BLACK));
69 static const Color COLOR_TEXT_OUTLINE (Color::GetColor(COLOR_ID_WHITE));
70
71 static const String RESERVED_CAMERA_PATH = Environment::GetMediaPath() + L"Camera";
72 static const String RESERVED_CAMERA_PATH_EXT = Environment::GetExternalStoragePath() + L"Camera";
73 static const String RESERVED_DOWNLOAD_PATH = Environment::GetMediaPath() + L"Downloads";
74
75 FileListPresentationModel* FileListPresentationModel::__pPresentationModelInstance = null;
76 ThumbnailProvider* FileListPresentationModel::__pThumbnailProvider = null;
77 ThumbnailEvent* FileListPresentationModel::__pThumbnailEvent = null;
78 ArrayList* FileListPresentationModel::__pPresentationModelListener = null;
79 ArrayList* FileListPresentationModel::__pContentEventListener = null;
80 ArrayList* FileListPresentationModel::__pIconListViewCache = null;
81 IList* FileListPresentationModel::__pDirectoryList = null;
82 IList* FileListPresentationModel::__pContentInfoList = null;
83
84 FileListPresentationModel::FileListPresentationModel(void)
85         : __pContentManager(null)
86         , __albumContentType(CONTENT_TYPE_ALL)
87         , __appControlMode(APPCONTROL_MODE_MAIN)
88         , __appControlMediaType(APPCONTROL_MEDIA_TYPE_IMAGE)
89         , __appControlSelectionMode(APPCONTROL_SELECTION_MODE_SINGLE)
90         , __pContentIdList(null)
91         , __updateProgressStatus(false)
92 {
93         AppLogDebug("ENTER");
94         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
95 }
96
97 FileListPresentationModel::~FileListPresentationModel(void)
98 {
99         AppLogDebug("ENTER");
100         DeviceManager::RemoveDeviceEventListener(DEVICE_TYPE_STORAGE_CARD, *this);
101         if (__pContentIdList)
102         {
103                 __pContentIdList->RemoveAll(true);
104                 delete __pContentIdList;
105                 __pContentIdList = null;
106         }
107         delete __pContentManager;
108         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
109 }
110
111 FileListPresentationModel*
112 FileListPresentationModel::GetInstance(void)
113 {
114         AppLogDebug("ENTER");
115         if (__pPresentationModelInstance == null)
116         {
117                 CreateInstance();
118         }
119         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
120
121         return __pPresentationModelInstance;
122 }
123
124 result
125 FileListPresentationModel::Construct(void)
126 {
127         AppLogDebug("ENTER");
128
129         IThumbnailEventListener* pThumbnailEventListener = static_cast<IThumbnailEventListener*>(this);
130         __pThumbnailEvent = new (std::nothrow) ThumbnailEvent();
131         __pThumbnailEvent->AddListener(*pThumbnailEventListener, true);
132
133         DeviceManager::AddDeviceEventListener(DEVICE_TYPE_STORAGE_CARD, *this);
134
135         ContentUpdateEventListener::GetInstance();
136         __pContentManager = new (std::nothrow) ContentManager();
137         __pContentManager->Construct();
138
139         if (__pIconListViewCache != null)
140         {
141                 __pIconListViewCache->RemoveAll(true);
142                 delete __pIconListViewCache;
143                 __pIconListViewCache = null;
144         }
145         __pIconListViewCache = new (std::nothrow) ArrayList(SingleObjectDeleter);
146         __pIconListViewCache->Construct(SIZE_ICON_LIST_CACHE);
147
148         if (__pDirectoryList != null)
149         {
150                 delete __pDirectoryList;
151         }
152         __pDirectoryList = new (std::nothrow) ArrayList(SingleObjectDeleter);
153
154         if (__pContentInfoList != null)
155         {
156                 delete __pContentInfoList;
157         }
158         __pContentInfoList = new (std::nothrow) ArrayList(SingleObjectDeleter);
159
160         __pPresentationModelListener = new (std::nothrow) ArrayList();
161         __pPresentationModelListener->Construct();
162
163         __pContentEventListener = new (std::nothrow) ArrayList();
164         __pContentEventListener->Construct();
165
166         __pThumbnailProvider = ThumbnailProvider::GetInstance();
167
168         GalleryApp* pApp = static_cast<GalleryApp*>(GalleryApp::GetInstance());
169         const IMap* pArguments = pApp->GetAppControlArguments();
170         String operationId = pApp->GetAppControlOperationId();
171
172         if (operationId.CompareTo(APPCONTROL_OPERATION_ID_MAIN) == 0)
173         {
174                 __appControlMode = APPCONTROL_MODE_MAIN;
175         }
176         else if (operationId.CompareTo(APPCONTROL_OPERATION_ID_PICK) == 0)
177         {
178                 __appControlMode = APPCONTROL_MODE_PICK;
179
180                 String mimeType = pApp->GetMimeType();
181                 if (mimeType.IsEmpty() != true)
182                 {
183                         if (mimeType.StartsWith(APPCONTROL_DATA_VIDEO, 0) == true)
184                         {
185                                 __appControlMediaType = APPCONTROL_MEDIA_TYPE_VIDEO;
186                         }
187                 }
188                 if (pArguments != null)
189                 {
190                         const String* selectionMode = static_cast<const String*>(pArguments->GetValue(String(APPCONTROL_KEY_SELECTION_MODE)));
191
192                         if (pApp->GetMimeType().StartsWith(APPCONTROL_DATA_VIDEO, 0) == true)
193                         {
194                                 __appControlMediaType = APPCONTROL_MEDIA_TYPE_VIDEO;
195                         }
196
197                         if (selectionMode != null && selectionMode->CompareTo(APPCONTROL_DATA_MULTIPLE) == 0)
198                         {
199                                 __appControlSelectionMode = APPCONTROL_SELECTION_MODE_MULTIPLE;
200                         }
201                 }
202         }
203         else if (operationId.CompareTo(APPCONTROL_OPERATION_ID_CONFIGURE) == 0)
204         {
205                 __appControlMode = APPCONTROL_MODE_SETTING;
206         }
207
208         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
209
210         return E_SUCCESS;
211 }
212
213 void
214 FileListPresentationModel::CreateInstance(void)
215 {
216         AppLogDebug("ENTER");
217         __pPresentationModelInstance = new (std::nothrow) FileListPresentationModel();
218         result r = __pPresentationModelInstance->Construct();
219         if (IsFailed(r) == true)
220         {
221                 delete __pPresentationModelInstance;
222                 __pPresentationModelInstance = null;
223                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
224
225                 return;
226         }
227
228         std::atexit(DestroyInstance);
229         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
230 }
231
232 void
233 FileListPresentationModel::DestroyInstance(void)
234 {
235         AppLogDebug("ENTER");
236
237         delete __pThumbnailEvent;
238
239         if (__pIconListViewCache != null)
240         {
241                 __pIconListViewCache->RemoveAll(true);
242                 delete __pIconListViewCache;
243                 __pIconListViewCache = null;
244         }
245
246         if (__pDirectoryList != null)
247         {
248                 delete __pDirectoryList;
249                 __pDirectoryList = null;
250         }
251
252         if (__pContentInfoList != null)
253         {
254                 delete __pContentInfoList;
255                 __pContentInfoList = null;
256         }
257
258         if (__pPresentationModelListener != null)
259         {
260                 delete __pPresentationModelListener;
261                 __pPresentationModelListener = null;
262         }
263
264         if (__pContentEventListener != null)
265         {
266                 delete __pContentEventListener;
267                 __pContentEventListener = null;
268         }
269
270         delete __pPresentationModelInstance;
271         __pPresentationModelInstance = null;
272
273         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
274 }
275
276 String
277 FileListPresentationModel::GetFileNameFromFullPath(const String& fullPath, const bool withExt) const
278 {
279         AppLogDebug("ENTER");
280         if (fullPath.CompareTo(EMPTY_SPACE) == 0)
281         {
282                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
283
284                 return EMPTY_SPACE;
285         }
286
287         String delim(DIRECTORY_SEPARATOR);
288         StringTokenizer st(fullPath,delim);
289         String token;
290         while (st.HasMoreTokens())
291         {
292                 st.GetNextToken(token);
293         }
294
295         if (withExt == true)
296         {
297                 AppLogDebug("EXIT 2(%s)", GetErrorMessage(GetLastResult()));
298
299                 return token;
300         }
301         else
302         {
303                 String subDelim(FILE_EXT_SEPARATOR);
304                 StringTokenizer subSt(token, subDelim);
305                 String subToken;
306                 subSt.GetNextToken(subToken);
307                 AppLogDebug("EXIT 3(%s)", GetErrorMessage(GetLastResult()));
308
309                 return subToken;
310         }
311 }
312
313 String
314 FileListPresentationModel::GetDirecotyNameFromFullPath(const String& fullPath)const
315 {
316         AppLogDebug("ENTER");
317         if (fullPath == null)
318         {
319                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
320
321                 return null;
322         }
323         String delim(DIRECTORY_SEPARATOR);
324         StringTokenizer st(fullPath,delim);
325         String token;
326         while (st.HasMoreTokens())
327         {
328                 st.GetNextToken(token);
329         }
330         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
331
332         return token;
333 }
334
335 bool
336 FileListPresentationModel::IsContainContentInDirectory(const String& directoryPath, ContentType contentType) const
337 {
338         AppLogDebug("ENTER");
339         IListT<ContentType>* pContentTypeList = new (std::nothrow) ArrayListT<ContentType>();
340         if (&directoryPath == null || pContentTypeList == null)
341         {
342                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
343
344                 return false;
345         }
346
347         if (contentType == CONTENT_TYPE_IMAGE || contentType == CONTENT_TYPE_ALL)
348         {
349                 pContentTypeList->Add(CONTENT_TYPE_IMAGE);
350         }
351         if (contentType == CONTENT_TYPE_VIDEO || contentType == CONTENT_TYPE_ALL)
352         {
353                 pContentTypeList->Add(CONTENT_TYPE_VIDEO);
354         }
355
356         ContentDirectory contentDirectory;
357         result r = contentDirectory.Construct(*pContentTypeList);
358         if (pContentTypeList != null)
359         {
360                 delete pContentTypeList;
361         }
362         TryReturn(r == E_SUCCESS, false, "[%s] Unable to construct ContentDirectory", GetErrorMessage(r));
363
364         bool returnValue = false;
365         int pageNo = SIZE_PAGE_NO;
366         int countPerPage = SIZE_CONUNT_PER_PAGE;
367
368         IList* pContentList = contentDirectory.GetContentDirectoryItemListN(directoryPath, pageNo, countPerPage,
369                         CONTENT_INFO_ORDER, SORT_ORDER_ASCENDING);
370
371         if (pContentList == null || pContentList->GetCount() <= 0)
372         {
373                 returnValue = false;
374         }
375         else
376         {
377                 returnValue = true;
378         }
379
380         if (pContentList != null)
381         {
382                 delete pContentList;
383         }
384         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
385
386         return returnValue;
387 }
388
389 result
390 FileListPresentationModel::GetThumbnailInSyncCacheN(const int index, String*& pName, Bitmap*& pThumbnail)
391 {
392         AppLogDebug("ENTER : index(%d)", index);
393         Bitmap* pOriginalBitmap = null;
394         Bitmap* pDestinationBitmap = null;
395         ContentInfo* pContentInfo = null;
396
397         if (__pContentInfoList != null && index < __pContentInfoList->GetCount())
398         {
399                 pContentInfo = static_cast<ContentInfo*>(__pContentInfoList->GetAt(index));
400                 if (pContentInfo == null)
401                 {
402                         AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
403
404                         return E_FAILURE;
405                 }
406         }
407         else
408         {
409                 AppLogDebug("EXIT 2 __pContentInfoList(%x) index(%d)", __pContentInfoList, index);
410                 return E_FAILURE;
411         }
412
413         ThumbnailInfo* pThumbnailInfo = GetThumbnailInfoFromInternalBufferN(pContentInfo->GetContentId());
414         if (pThumbnailInfo != null)
415         {
416                 pName = new (std::nothrow) String(pThumbnailInfo->GetFilePath());
417                 pOriginalBitmap = pThumbnailInfo->GetBitmapN();
418         }
419
420         if ((pThumbnailInfo != null)&&(pThumbnailInfo->GetContentType() == CONTENT_TYPE_VIDEO))
421         {
422                 if (pOriginalBitmap != null)
423                 {
424                         pDestinationBitmap = CoverVideoOverlayedImageOnThumbnailN(*pOriginalBitmap, *pThumbnailInfo);
425                         delete pOriginalBitmap;
426                 }
427         }
428         else
429         {
430                 pDestinationBitmap = pOriginalBitmap;
431         }
432
433         if (pDestinationBitmap != null)
434         {
435                 Bitmap* pThumbnailBgBitmap = ResourceManager::GetBitmapN(IDB_VIDEOTHUMBNAIL_BG);
436                 Rectangle thumbnailRect(RECTANGLE_THUMBNAIL_OFFSET_POSION);
437                 pDestinationBitmap->Scale(Dimension(RECTANGLE_THUMBNAIL_OFFSET_POSION.width - RECTANGLE_THUMBNAIL_OFFSET_POSION.x
438                                 , RECTANGLE_THUMBNAIL_OFFSET_POSION.height - RECTANGLE_THUMBNAIL_OFFSET_POSION.y));
439                 if (pThumbnailBgBitmap != null)
440                 {
441                         pThumbnailBgBitmap->Scale(DIMENSION_REAL_ICON);
442                         pThumbnail = GetShadedBackgroundBitmapN(*pThumbnailBgBitmap, *pDestinationBitmap, thumbnailRect);
443                         delete pThumbnailBgBitmap;
444                         delete pDestinationBitmap;
445                 }
446                 else
447                 {
448                         pThumbnail = pDestinationBitmap;
449                 }
450         }
451         else
452         {
453                 pThumbnail = null;
454         }
455
456         if (pThumbnailInfo != null)
457         {
458                 delete pThumbnailInfo;
459         }
460
461         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
462
463         return E_SUCCESS;
464 }
465
466 result
467 FileListPresentationModel::GetThumbnailVideoInSyncCacheN(const int index,
468                 String*& pName, Bitmap*& pThumbnail, String*& pDuration) const
469 {
470         AppLogDebug("ENTER : index(%d)", index);
471         ContentInfo* pContentInfo = null;
472         Bitmap* pOriginalBitmap = null;
473
474         if (__pContentInfoList != null && index < __pContentInfoList->GetCount())
475         {
476                 pContentInfo = static_cast<ContentInfo*>(__pContentInfoList->GetAt(index));
477                 if (pContentInfo == null)
478                 {
479                         AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
480                         return E_FAILURE;
481                 }
482         }
483         else
484         {
485                 AppLogDebug("EXIT 2 __pContentInfoList(%x) index(%d)", __pContentInfoList, index);
486                 return E_FAILURE;
487         }
488
489         ThumbnailInfo* pThumbnailInfo = GetThumbnailInfoFromInternalBufferN(pContentInfo->GetContentId());
490         if (pThumbnailInfo != null)
491         {
492                 pName = new (std::nothrow) String(pThumbnailInfo->GetFilePath());
493                 pOriginalBitmap = pThumbnailInfo->GetBitmapN();
494                 pDuration = new (std::nothrow) String(CommonUtil::DurationToTimeString(pThumbnailInfo->GetDuration()));
495         }
496         else
497         {
498                 pName = new (std::nothrow) String(EMPTY_SPACE);
499                 pDuration = new (std::nothrow) String(CommonUtil::DurationToTimeString(0));
500         }
501
502         if (pOriginalBitmap != null)
503         {
504                 Bitmap* pThumbnailBgBitmap = ResourceManager::GetBitmapN(IDB_VIDEOTHUMBNAIL_BG);
505                 Rectangle thumbnailRect(RECTANGLE_VIDEO_THUMBNAIL_OFFSET_POSION);
506                 pOriginalBitmap->Scale(Dimension(RECTANGLE_VIDEO_THUMBNAIL_OFFSET_POSION.width - RECTANGLE_VIDEO_THUMBNAIL_OFFSET_POSION.x
507                                 , RECTANGLE_VIDEO_THUMBNAIL_OFFSET_POSION.height - RECTANGLE_VIDEO_THUMBNAIL_OFFSET_POSION.y));
508                 if (pThumbnailBgBitmap != null)
509                 {
510                         pThumbnailBgBitmap->Scale(Dimension(W_WIDE_THUMBNAIL, H_WIDE_THUMBNAIL));
511                         pThumbnail = GetShadedBackgroundBitmapN(*pThumbnailBgBitmap, *pOriginalBitmap, thumbnailRect);
512                         delete pThumbnailBgBitmap;
513                 }
514                 delete pOriginalBitmap;
515         }
516         else
517         {
518                 pThumbnail = null;
519         }
520
521         if (pThumbnail != null)
522         {
523                 pThumbnail->Scale(Dimension(W_WIDE_THUMBNAIL, H_WIDE_THUMBNAIL));
524         }
525
526         if (pThumbnailInfo != null)
527         {
528                 delete pThumbnailInfo;
529         }
530         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
531
532         return E_SUCCESS;
533 }
534
535 void
536 FileListPresentationModel::RequestThumbnail(const int index)
537 {
538         AppLogDebug("ENTER : index(%d)", index);
539         ContentInfo* pContentInfo = null;
540
541         if (__pContentInfoList != null && index < __pContentInfoList->GetCount())
542         {
543                 pContentInfo = static_cast<ContentInfo*>(__pContentInfoList->GetAt(index));
544                 if (pContentInfo == null)
545                 {
546                         AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
547                         return;
548                 }
549         }
550         else
551         {
552                 AppLogDebug("EXIT 2 __pContentInfoList(%x) index(%d)", __pContentInfoList, index);
553
554                 return;
555         }
556
557         __pThumbnailProvider->RequestThumbnail(pContentInfo->GetContentId(), __pThumbnailEvent);
558         AppLogDebug("EXIT");
559 }
560
561 void
562 FileListPresentationModel::ClearThumbnailRequests(const bool appTerminating)
563 {
564         AppLogDebug("ENTER");
565
566         if (__pThumbnailProvider != null)
567         {
568                 __pThumbnailProvider->ClearThumbnailRequests(appTerminating);
569         }
570
571         AppLogDebug("EXIT");
572 }
573
574 void
575 FileListPresentationModel::OnThumbnailReceivedN(IEventArg& eventArg)
576 {
577         AppLogDebug("ENTER");
578
579         if (&eventArg != null)
580         {
581                 ThumbnailEventArg* pThumbnailEventArg = static_cast<ThumbnailEventArg*>(&eventArg);
582                 if (pThumbnailEventArg == null)
583                 {
584                         AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
585
586                         return;
587                 }               
588                 ThumbnailInfo* pThumbnailInfo = pThumbnailEventArg->GetThumbnailInfoN();
589                 if (pThumbnailInfo == null)
590                 {
591                         AppLogDebug("EXIT 2(%s)", GetErrorMessage(GetLastResult()));
592
593                         return;
594                 }
595
596                 bool isMatch = false;
597                 ContentId contentId = pThumbnailInfo->GetContentId();
598
599                 if (__pIconListViewCache != null)
600                 {
601                         IEnumerator* pEnum = __pIconListViewCache->GetEnumeratorN();
602                         Bitmap* pBitmap = null;
603                         while (pEnum->MoveNext() == E_SUCCESS)
604                         {
605                                 ThumbnailInfo* pTempThumbnailInfo = static_cast<ThumbnailInfo*>(pEnum->GetCurrent());
606
607                                 if (contentId == pTempThumbnailInfo->GetContentId())
608                                 {
609                                         AppLogDebug("[CHASEFIRE] PM receive (%ls)", pThumbnailInfo->GetFilePath().GetPointer());
610                                         pBitmap = pThumbnailInfo->GetBitmapN();
611                                         pTempThumbnailInfo->SetBitmap(*pBitmap);
612                                         delete pBitmap;
613
614                                         pTempThumbnailInfo->SetContentType(pThumbnailInfo->GetContentType());
615                                         pTempThumbnailInfo->SetDuration(pThumbnailInfo->GetDuration());
616                                         delete pThumbnailInfo;
617                                         isMatch = true;
618                                         break;
619                                 }
620                         }
621
622                         delete pEnum;
623
624                         if (isMatch == false)
625                         {
626                                 if (SIZE_ICON_LIST_CACHE <= __pIconListViewCache->GetCount())
627                                 {
628                                         __pIconListViewCache->RemoveAt(0, true);
629                                 }
630                                 AppLogDebug("[CHASEFIRE] (all:%d) Add Thumbail(%ls)", __pIconListViewCache->GetCount(),
631                                                 pThumbnailInfo->GetFilePath().GetPointer());
632                                 __pIconListViewCache->Add(pThumbnailInfo);
633                         }
634                 }
635
636                 int index = -1;
637                 int loopCount = __pContentInfoList->GetCount();
638                 for (int i = 0; i < loopCount; ++i)
639                 {
640                         if (contentId == (static_cast<ContentInfo*>(__pContentInfoList->GetAt(i)))->GetContentId())
641                         {
642                                 index = i;
643                                 break;
644                         }
645                 }
646
647                 IAlbumEventListener* pInterface = null;
648                 IEnumerator* pEventEnum = __pPresentationModelListener->GetEnumeratorN();
649                 while (pEventEnum->MoveNext() == E_SUCCESS)
650                 {
651                         pInterface = static_cast<IAlbumEventListener*>(pEventEnum->GetCurrent());
652                         pInterface->OnThumbnailDecoded(index);
653                 }
654                 delete pEventEnum;
655         }
656         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
657 }
658
659 void
660 FileListPresentationModel::OnContentCreated(void)
661 {
662         AppLogDebug("ENTER");
663         if (__updateProgressStatus == true)
664         {
665                 AppLogDebug("EXIT update in application");
666                 return;
667         }
668         IFormContentUpdateEventListener* pInterface = null;
669         if (__pContentEventListener == null)
670         {
671                 AppLogDebug("EXIT");
672                 return;
673         }
674         IEnumerator* pEventEnum = __pContentEventListener->GetEnumeratorN();
675         while (pEventEnum->MoveNext() == E_SUCCESS)
676         {
677                 pInterface = static_cast<IFormContentUpdateEventListener*>(pEventEnum->GetCurrent());
678                 if (pInterface != null)
679                 {
680                         pInterface->OnContentUpdated();
681                 }
682         }
683         delete pEventEnum;
684         AppLogDebug("EXIT");
685 }
686
687 void
688 FileListPresentationModel::OnContentUpdated(void)
689 {
690         AppLogDebug("ENTER");
691         if (__updateProgressStatus == true)
692         {
693                 AppLogDebug("EXIT update in application");
694                 return;
695         }
696         //Clear the ImageCaches when content is updated like rotate.
697         if (__pContentEventListener->GetCount())
698         {
699                 ClearImageCache();
700         }
701
702         IFormContentUpdateEventListener* pInterface = null;
703         if (__pContentEventListener == null)
704         {
705                 AppLogDebug("EXIT");
706                 return;
707         }
708         IEnumerator* pEventEnum = __pContentEventListener->GetEnumeratorN();
709         while (pEventEnum->MoveNext() == E_SUCCESS)
710         {
711                 pInterface = static_cast<IFormContentUpdateEventListener*>(pEventEnum->GetCurrent());
712                 pInterface->OnContentUpdated();
713         }
714         delete pEventEnum;
715         AppLogDebug("EXIT");
716 }
717
718 void
719 FileListPresentationModel::OnContentDeleted(void)
720 {
721
722         ClearThumbnailRequests();
723
724         AppLogDebug("ENTER");
725         if (__updateProgressStatus == true)
726         {
727                 AppLogDebug("EXIT update in application");
728                 return;
729         }
730         IFormContentUpdateEventListener* pInterface = null;
731         if (__pContentEventListener == null)
732         {
733                 AppLogDebug("EXIT");
734                 return;
735         }
736         IEnumerator* pEventEnum = __pContentEventListener->GetEnumeratorN();
737         while (pEventEnum->MoveNext() == E_SUCCESS)
738         {
739                 pInterface = static_cast<IFormContentUpdateEventListener*>(pEventEnum->GetCurrent());
740                 pInterface->OnContentUpdated();
741         }
742         delete pEventEnum;
743         AppLogDebug("EXIT");
744 }
745
746 void
747 FileListPresentationModel::AddPresentationModelListener(const IAlbumEventListener* listener)
748 {
749         AppLogDebug("ENTER");
750         __pPresentationModelListener->Add((Object*)listener);
751         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
752 }
753
754 void
755 FileListPresentationModel::RemovePresentationModelListener(const IAlbumEventListener& listener)
756 {
757         AppLogDebug("ENTER");
758         __pPresentationModelListener->Remove(listener);
759         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
760 }
761
762 void
763 FileListPresentationModel::AddContentEventListener(const IFormContentUpdateEventListener* listener)
764 {
765         AppLogDebug("ENTER");
766         if (__pContentEventListener != null)
767         {
768                 __pContentEventListener->RemoveAll();
769                 __pContentEventListener->Add((Object*)listener);
770                 AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
771         }
772 }
773
774 void
775 FileListPresentationModel::RemoveContentEventListener(const IFormContentUpdateEventListener* listener)
776 {
777         AppLogDebug("ENTER");
778         __pContentEventListener->Remove(*listener);
779         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
780 }
781
782 ThumbnailInfo*
783 FileListPresentationModel::GetThumbnailInfoFromInternalBufferN(const ContentId& contentId) const
784 {
785         AppLogDebug("ENTER");
786         ThumbnailInfo* pThumbnailInfo = null;
787         ThumbnailInfo* pTempThumbnailInfo = null;
788         if (__pIconListViewCache != null)
789         {
790                 int loopCount = __pIconListViewCache->GetCount();
791                 for (int i = 0; i < loopCount; ++i)
792                 {
793                         pTempThumbnailInfo = static_cast<ThumbnailInfo*>(__pIconListViewCache->GetAt(i));
794                         if (contentId == pTempThumbnailInfo->GetContentId())
795                         {
796
797                                 pThumbnailInfo = new (std::nothrow) ThumbnailInfo();
798                                 Bitmap* pBitmap = pTempThumbnailInfo->GetBitmapN();
799                                 pThumbnailInfo->Construct(pTempThumbnailInfo->GetContentId(), pTempThumbnailInfo->GetFilePath(),
800                                                 *pBitmap, pTempThumbnailInfo->GetContentType(), pTempThumbnailInfo->GetDuration());
801                                 delete pBitmap;
802                                 break;
803                         }
804                 }
805         }
806         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
807
808         return pThumbnailInfo;
809 }
810
811 result
812 FileListPresentationModel::DeleteContentFileList(const IList& contentIndexList)
813 {
814         AppLogDebug("ENTER");
815         if (&contentIndexList == null || contentIndexList.GetCount() <= 0)
816         {
817                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
818
819                 return E_SUCCESS;
820         }
821
822         IList * pContentIdList = new (std::nothrow) ArrayList(SingleObjectDeleter);
823         int loopCount = contentIndexList.GetCount();
824         for (int i = 0; i < loopCount; ++i)
825         {
826                 const Integer* pIndex = static_cast<const Integer*>(contentIndexList.GetAt(i));
827
828                 if ((pIndex != null) && (pIndex->ToInt())>=0 && __pContentInfoList->GetCount() > pIndex->ToInt())
829                 {
830                         pContentIdList->Add(new (std::nothrow) ContentId((static_cast<ContentInfo*>
831                                         (__pContentInfoList->GetAt(pIndex->ToInt())))->GetContentId()));
832                 }
833         }
834
835         loopCount = pContentIdList->GetCount();
836         for (int i = 0; i < loopCount; ++i)
837         {
838                 ContentId* pContentId = static_cast<ContentId*>(pContentIdList->GetAt(i));
839                 if (pContentId != null)
840                 {
841                         DeleteContentFile(*pContentId);
842                 }
843         }
844         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
845
846         return E_SUCCESS;
847 }
848
849 IList*
850 FileListPresentationModel::GetCollisionIndexListN(const IList& contentIndexList, const String& destDirectory)
851 {
852         AppLogDebug("ENTER");
853         if (&contentIndexList == null || contentIndexList.GetCount() <= 0 || &destDirectory == null
854                         || destDirectory.IsEmpty() == true)
855         {
856                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
857
858                 return null;
859         }
860
861         if (File::IsFileExist(destDirectory) == false)
862         {
863                 AppLogDebug("EXIT 2(%s)", GetErrorMessage(GetLastResult()));
864
865                 return null;
866         }
867
868         IList * pCollisionInfoList = new (std::nothrow) ArrayList(SingleObjectDeleter);
869         ContentInfo* pContentInfo = null;
870         int loopCount = contentIndexList.GetCount();
871         for (int i = 0; i < loopCount; ++i)
872         {
873                 const Integer* pIndex = static_cast<const Integer*>(contentIndexList.GetAt(i));
874
875                 if ((pIndex != null) && (pIndex->ToInt()) >= 0 && __pContentInfoList->GetCount() > pIndex->ToInt())
876                 {
877                         pContentInfo = const_cast<ContentInfo*>(static_cast<const ContentInfo*>(__pContentInfoList->GetAt(pIndex->ToInt())));
878                         String filePath = pContentInfo->GetContentPath();
879                         String fileName = GetFileNameFromFullPath(filePath, true);
880
881                         String destPath;
882                         if (destDirectory.EndsWith(DIRECTORY_SEPARATOR) == true)
883                         {
884                                 destPath.Append(destDirectory);
885                                 destPath.Append(fileName);
886                         }
887                         else
888                         {
889                                 destPath.Append(destDirectory);
890                                 destPath.Append(DIRECTORY_SEPARATOR);
891                                 destPath.Append(fileName);
892                         }
893
894                         if (File::IsFileExist(destPath) == true)
895                         {
896                                 pCollisionInfoList->Add(*(new (std::nothrow) String(pIndex->ToString() + MULTI_ITEM_SEPARATOR + fileName)));
897                         }
898                 }
899         }
900         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
901
902         return pCollisionInfoList;
903 }
904
905 result
906 FileListPresentationModel::MoveToContentFileList(const IList& contentIndexList, const String& destDirectory)
907 {
908         AppLogDebug("ENTER");
909         result r = E_SUCCESS;
910         if (&contentIndexList == null || contentIndexList.GetCount() <= 0 || &destDirectory == null || destDirectory.IsEmpty() == true)
911         {
912                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
913
914                 return r;
915         }
916
917         if (File::IsFileExist(destDirectory) == false)
918         {
919                 Directory::Create(destDirectory, true);
920         }
921
922         delete __pContentIdList;
923         __pContentIdList = new (std::nothrow) ArrayList(SingleObjectDeleter);
924         int loopCount = contentIndexList.GetCount();
925         for (int i = 0; i < loopCount; ++i)
926         {
927                 const Integer* pIndex = static_cast<const Integer*>(contentIndexList.GetAt(i));
928
929                 if ((pIndex != null) && (pIndex->ToInt())>=0 && __pContentInfoList->GetCount() > pIndex->ToInt())
930                 {
931                         __pContentIdList->Add(new (std::nothrow) ContentId((static_cast<ContentInfo*>(__pContentInfoList->GetAt(pIndex->ToInt())))->GetContentId()));
932                 }
933         }
934
935
936         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
937
938         return E_SUCCESS;
939 }
940
941 result
942 FileListPresentationModel::DeleteContentFile(const ContentId& contentId)
943 {
944         AppLogDebug("ENTER");
945         if (&contentId == null)
946         {
947                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
948
949                 return E_SUCCESS;
950         }
951         result r = __pContentManager->DeleteContent(contentId);
952
953         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
954
955         return r;
956 }
957
958 result
959 FileListPresentationModel::MoveToContentFile(const ContentId& contentId, const String& destDirectory, const bool isCopyOperation)
960 {
961         AppLogDebug("ENTER");
962         if (contentId.ToString().IsEmpty() == true || destDirectory.IsEmpty() == true)
963         {
964                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
965                 return E_FAILURE;
966         }
967         result r = E_SUCCESS;
968         ContentInfo* pContentInfo = __pContentManager->GetContentInfoN(contentId);
969         if (pContentInfo == null)
970         {
971                 AppLogDebug("Santhosh %s", destDirectory.GetPointer());
972                 AppLogDebug("EXIT 2(%s)", GetErrorMessage(GetLastResult()));
973                 return E_FAILURE;
974         }
975
976         String filePath = pContentInfo->GetContentPath();
977         if (filePath.GetLength() < 4)
978         {
979                 AppLogDebug("EXIT 3(%s)", GetErrorMessage(GetLastResult()));
980                 return E_SUCCESS;
981         }
982
983         String destPath;
984         if (destDirectory.EndsWith(DIRECTORY_SEPARATOR) == true)
985         {
986                 destPath.Append(destDirectory);
987                 destPath.Append(GetFileNameFromFullPath(filePath, true));
988         }
989         else
990         {
991                 destPath.Append(destDirectory);
992                 destPath.Append(DIRECTORY_SEPARATOR);
993                 destPath.Append(GetFileNameFromFullPath(filePath, true));
994         }
995
996         if (destPath.CompareTo(filePath) == 0)
997         {
998                 AppLogDebug("EXIT 4(%s)", GetErrorMessage(GetLastResult()));
999                 return E_SUCCESS;
1000         }
1001
1002         if (File::IsFileExist(destPath) == true)
1003         {
1004                 File::Remove(destPath);
1005         }
1006
1007         r = File::Copy(filePath, destPath, false);
1008
1009         if (r == E_STORAGE_FULL)
1010         {
1011                 File::Remove(destPath);
1012         }
1013         ContentManager::ScanFile(destPath);
1014
1015         if (r == E_SUCCESS)
1016         {
1017                 if (isCopyOperation == false)
1018                 {
1019                         File::Remove(filePath);               // if Move Op remove original file
1020                         ContentManager::ScanFile(filePath);
1021                 }
1022         }
1023
1024         delete pContentInfo;
1025
1026         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1027
1028         return r;
1029 }
1030
1031 void
1032 FileListPresentationModel::ClearProviderId(void)
1033 {
1034         __providerId.Clear();
1035 }
1036
1037 result
1038 FileListPresentationModel::StartAppControl(const String& providerId, const String& operationId,
1039                 const String* pUriData, const Tizen::Base::String* pMimeType, const HashMap* pDataList,
1040                 IAppControlResponseListener* pListener)
1041 {
1042         AppLogDebug("ENTER");
1043         AppControl* pAc = AppManager::FindAppControlN(providerId, operationId);
1044
1045         ClearProviderId();
1046         __providerId.Append(providerId);
1047
1048         if (pAc == null)
1049         {
1050                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
1051                 return E_FAILURE;
1052         }
1053         result r = pAc->Start(pUriData, pMimeType, pDataList, pListener);
1054
1055         if (r == E_SUCCESS)
1056         {
1057                 GalleryApp* pGalleryApp = static_cast<GalleryApp*>(GalleryApp::GetInstance());
1058                 pGalleryApp->SetFrameEnabled(false);
1059         }
1060
1061         delete pAc;
1062
1063         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1064
1065         return r;
1066 }
1067
1068 result
1069 FileListPresentationModel::SetCurrentAlbumInfo(const String& albumName, const IList& directoryList)
1070 {
1071         AppLogDebug("ENTER");
1072
1073         if (&directoryList != null)
1074         {
1075                 if (__pDirectoryList != null && __pDirectoryList->GetCount() > 0)
1076                 {
1077                         bool isMatched = false;
1078                         int outterLoopCount = __pDirectoryList->GetCount();
1079                         int innerLoopCount = 0;
1080                         for (int i = 0; i < outterLoopCount; ++i)
1081                         {
1082                                 isMatched = false;
1083                                 innerLoopCount = directoryList.GetCount();
1084                                 for (int j = 0; j < innerLoopCount; ++j)
1085                                 {
1086                                         if (static_cast<String*>(__pDirectoryList->GetAt(i))->CompareTo(
1087                                                         *(const_cast<String*>(static_cast<const String*>(directoryList.GetAt(j))))) == 0)
1088                                         {
1089                                                 isMatched = true;
1090                                                 break;
1091                                         }
1092                                 }
1093                         }
1094
1095                         outterLoopCount = directoryList.GetCount();
1096                         for (int i = 0; i < outterLoopCount; ++i)
1097                         {
1098                                 isMatched = false;
1099                                 innerLoopCount = __pDirectoryList->GetCount();
1100                                 for (int j = 0; j < innerLoopCount; ++j)
1101                                 {
1102                                         if (const_cast<String*>(static_cast<const String*>(directoryList.GetAt(i)))->CompareTo(
1103                                                         *(static_cast<String*>(__pDirectoryList->GetAt(j)))) == 0)
1104                                         {
1105                                                 isMatched = true;
1106                                                 break;
1107                                         }
1108                                 }
1109                         }
1110                 }
1111         }
1112
1113         __albumName = albumName;
1114         __providerId.Clear();
1115
1116         if (__pDirectoryList != null)
1117         {
1118                 delete __pDirectoryList;
1119         }
1120         __pDirectoryList = new (std::nothrow) ArrayList(SingleObjectDeleter);
1121
1122         int loopCount = directoryList.GetCount();
1123         for (int i = 0; i < loopCount; ++i)
1124         {
1125                 __pDirectoryList->Add(new (std::nothrow) String(*(const_cast<String*>
1126                         (static_cast<const String*>(directoryList.GetAt(i))))));
1127         }
1128
1129         if (__pContentInfoList != null)
1130         {
1131                 delete __pContentInfoList;
1132                 __pContentInfoList = null;
1133         }
1134
1135         if (GetAppControlMode() == APPCONTROL_MODE_PICK)
1136         {
1137                 AppControlMediaType appControlMediaType = GetAppControlMediaType();
1138                 if (appControlMediaType == APPCONTROL_MEDIA_TYPE_IMAGE)
1139                 {
1140                         __albumContentType = CONTENT_TYPE_IMAGE;
1141                 }
1142                 else if (appControlMediaType == APPCONTROL_MEDIA_TYPE_VIDEO)
1143                 {
1144                         __albumContentType = CONTENT_TYPE_VIDEO;
1145                 }
1146         }
1147         __pContentInfoList = GetContentInfoListInDirectoryListN(*__pDirectoryList, __albumContentType);
1148         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1149
1150         return E_SUCCESS;
1151 }
1152
1153 result
1154 FileListPresentationModel::RefreshCurrentAlbumContentInfoList(const ContentType contentType)
1155 {
1156         AppLogDebug("ENTER");
1157         result r = RefreshContentInfoList(contentType);
1158         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1159
1160         return r;
1161 }
1162
1163 void
1164 FileListPresentationModel::AddDirectoryIfNew(const String& dirName)
1165 {
1166
1167         bool isMatched = false;
1168         int dirCount = __pDirectoryList->GetCount();
1169         String fullDirName;
1170         fullDirName = Environment::GetMediaPath();
1171         fullDirName.Append(dirName);
1172
1173         if (__albumName != ResourceManager::GetString(L"IDS_MEDIABR_BODY_ALL_ALBUMS"))//we are not in All albums
1174         {
1175                 return;
1176         }
1177
1178         for (int i = 0; i < dirCount; ++i)
1179         {
1180                 if (static_cast<String*>(__pDirectoryList->GetAt(i))->CompareTo(fullDirName) == 0)
1181                 {
1182                         isMatched = true;
1183                         break;
1184                 }
1185         }
1186         
1187         if (!isMatched)
1188         {
1189                 __pDirectoryList->Add(new (std::nothrow) String(fullDirName));
1190         }
1191 }
1192
1193 result
1194 FileListPresentationModel::RefreshContentInfoList(const ContentType contentType)
1195 {
1196         AppLogDebug("ENTER");
1197         if ((contentType != CONTENT_TYPE_ALL) && (contentType != CONTENT_TYPE_IMAGE) && (contentType != CONTENT_TYPE_VIDEO))
1198         {
1199                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
1200
1201                 return E_FAILURE;
1202         }
1203
1204         if ((__pDirectoryList == null) || (__pDirectoryList->GetCount() <= 0))
1205         {
1206                 AppLogDebug("EXIT 2(%s)", GetErrorMessage(GetLastResult()));
1207
1208                 return E_SUCCESS;
1209         }
1210
1211         __albumContentType = contentType;
1212
1213         if (__pContentInfoList != null)
1214         {
1215                 delete __pContentInfoList;
1216                 __pContentInfoList = null;
1217         }
1218
1219         __pContentInfoList = GetContentInfoListInDirectoryListN(*__pDirectoryList, __albumContentType);
1220         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1221
1222         return E_SUCCESS;
1223 }
1224
1225 String
1226 FileListPresentationModel::GetCurrentAlbumName(void) const
1227 {
1228         AppLogDebug("ENTER");
1229         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1230
1231         return __albumName;
1232 }
1233
1234 void
1235 FileListPresentationModel::SetCurrentAlbumName(const String& albumName)
1236 {
1237         AppLogDebug("ENTER");
1238         if (&albumName == null)
1239         {
1240                 __albumName = EMPTY_SPACE;
1241         }
1242         else
1243         {
1244                 __albumName = albumName;
1245         }
1246         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1247 }
1248
1249 ContentType
1250 FileListPresentationModel::GetCurrentAlbumContentType(void) const
1251 {
1252         AppLogDebug("ENTER");
1253         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1254
1255         return __albumContentType;
1256 }
1257
1258 void
1259 FileListPresentationModel::SetCurrentAlbumContentType(const ContentType contentType)
1260 {
1261         AppLogDebug("ENTER");
1262         __albumContentType = contentType;
1263         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1264 }
1265
1266 IList*
1267 FileListPresentationModel::GetAlbumDirectoryListN(void) const
1268 {
1269         AppLogDebug("ENTER");
1270         IList* pAlbumDirectoryList = new (std::nothrow) ArrayList(SingleObjectDeleter);
1271         if (__pDirectoryList == null)
1272         {
1273                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
1274
1275                 return pAlbumDirectoryList;
1276         }
1277
1278         String* pDirectory = null;
1279         int loopCount = __pDirectoryList->GetCount();
1280         for (int i = 0; i < loopCount; ++i)
1281         {
1282                 pDirectory = static_cast<String*>(__pDirectoryList->GetAt(i));
1283                 pAlbumDirectoryList->Add(new (std::nothrow) String(*pDirectory));
1284         }
1285         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1286
1287         return pAlbumDirectoryList;
1288 }
1289
1290 IList*
1291 FileListPresentationModel::GetAlbumContentInfoList(void) const
1292 {
1293         AppLogDebug("ENTER");
1294         IList* pContentList = new (std::nothrow) ArrayList(SingleObjectDeleter);
1295         if (__pContentInfoList == null)
1296         {
1297                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
1298
1299                 return pContentList;
1300         }
1301
1302         ContentInfo* pContentInfo = null;
1303         int loopCount = __pContentInfoList->GetCount();
1304         for (int i = 0; i < loopCount; ++i)
1305         {
1306                 pContentInfo = static_cast<ContentInfo*>(__pContentInfoList->GetAt(i));
1307                 pContentList->Add(pContentInfo);
1308         }
1309         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1310
1311         return pContentList;
1312 }
1313
1314 ContentInfo*
1315 FileListPresentationModel::GetContentInfo(const int index) const
1316 {
1317         AppLogDebug("ENTER");
1318         if (__pContentInfoList == null || __pContentInfoList->GetCount() == 0)
1319         {
1320                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
1321
1322                 return null;
1323         }
1324
1325         if (index < 0 || index >= __pContentInfoList->GetCount())
1326         {
1327                 AppLogDebug("EXIT 2(%s)", GetErrorMessage(GetLastResult()));
1328
1329                 return null;
1330         }
1331         ContentInfo* pContentInfo = static_cast<ContentInfo*>(__pContentInfoList->GetAt(index));
1332         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1333
1334         return pContentInfo;
1335 }
1336
1337 IList* FileListPresentationModel::GetContentIdListAtIndexN(const IList& indexList) const
1338 {
1339         IList* pContentIdList = new (std::nothrow) ArrayList(SingleObjectDeleter);
1340         int loopCount = indexList.GetCount();
1341         for (int i = 0; i < loopCount; ++i)
1342         {
1343                 const Integer* pIndex = static_cast<const Integer*>(indexList.GetAt(i));
1344
1345                 if ((pIndex != null) && (pIndex->ToInt())>=0 && __pContentInfoList->GetCount() > pIndex->ToInt())
1346                 {
1347                         pContentIdList->Add(new (std::nothrow) ContentId((static_cast<ContentInfo*>(__pContentInfoList->GetAt(pIndex->ToInt())))->GetContentId()));
1348                 }
1349         }
1350
1351         return pContentIdList;
1352 }
1353
1354 int
1355 FileListPresentationModel::GetCurrentAlbumContentInfoCount(void) const
1356 {
1357         AppLogDebug("ENTER");
1358         if (__pContentInfoList == null)
1359         {
1360                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
1361
1362                 return 0;
1363         }
1364         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1365
1366         return __pContentInfoList->GetCount();
1367 }
1368
1369 ContentId
1370 FileListPresentationModel::GetContentInfoIndex(const int index) const
1371 {
1372         AppLogDebug("ENTER");
1373         if (__pContentInfoList == null || __pContentInfoList->GetCount() == 0)
1374         {
1375                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
1376
1377                 return 0;
1378         }
1379
1380         if (index < 0 || index >= __pContentInfoList->GetCount())
1381         {
1382                 AppLogDebug("EXIT 2(%s)", GetErrorMessage(GetLastResult()));
1383
1384                 return 0;
1385         }
1386         ContentInfo* pContentInfo = static_cast<ContentInfo*>(__pContentInfoList->GetAt(index));
1387         ContentId contentId = pContentInfo->GetContentId();
1388         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1389
1390         return contentId;
1391 }
1392
1393 String
1394 FileListPresentationModel::GetContentFilePath(const int index) const
1395 {
1396         AppLogDebug("ENTER index(%d)", index);
1397         if (__pContentInfoList == null || __pContentInfoList->GetCount() == 0)
1398         {
1399                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
1400
1401                 return EMPTY_SPACE;
1402         }
1403
1404         if (index < 0 || index >= __pContentInfoList->GetCount())
1405         {
1406                 AppLogDebug("EXIT 2(%s)", GetErrorMessage(GetLastResult()));
1407
1408                 return EMPTY_SPACE;
1409         }
1410
1411         ContentInfo* pContentInfo = static_cast<ContentInfo*>(__pContentInfoList->GetAt(index));
1412         String contentPath = pContentInfo->GetContentPath();
1413         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1414
1415         return contentPath;
1416 }
1417
1418 Bitmap*
1419 FileListPresentationModel::CoverVideoOverlayedImageOnThumbnailN(Bitmap& thumbnail,
1420                 const ThumbnailInfo& thumbmailInfo)
1421 {
1422         AppLogDebug("ENTER");
1423         Bitmap* pOverlayedImage = null;
1424
1425         if (&thumbmailInfo != null)
1426         {
1427                 long duration = thumbmailInfo.GetDuration();
1428
1429                 Canvas mainCanvas;
1430                 if (&thumbnail != null)
1431                 {
1432                         BufferInfo bufferInfo;
1433                         thumbnail.Lock(bufferInfo, INFINITE);
1434                         thumbnail.Unlock();
1435                         mainCanvas.Construct(bufferInfo);
1436                 }
1437                 else
1438                 {
1439                         Rectangle mainRect(0, 0, W_DEFAULT_THUMBNAIL, H_DEFAULT_THUMBNAIL);
1440                         mainCanvas.Construct(mainRect);
1441                         mainCanvas.FillRectangle(Color::GetColor(COLOR_ID_BLACK), mainRect);
1442                 }
1443
1444                 Rectangle playRect(GAP_W_PLAY_FG, GAP_H_PLAY_FG, W_PLAY_FG, H_PLAY_FG);
1445                 Bitmap* playBitmap = ResourceManager::GetBitmapN(IDB_VIDEOTHUMBNAIL_PLAY);
1446                 if (playBitmap != null)
1447                 {
1448                         mainCanvas.DrawBitmap(playRect, *playBitmap);
1449                         delete playBitmap;
1450                 }
1451
1452                 Canvas durCanvas;
1453                 Rectangle durSize(0, 0, W_DURATION, H_DURATION);
1454                 Rectangle durRect(0, GAP_H_DURATION, W_DURATION, H_DURATION);
1455                 Color durColor(COLOR_DURATION_BG);
1456                 durColor.SetAlpha(ALPHA_DURATION);
1457                 durCanvas.Construct(durSize);
1458                 durCanvas.FillRectangle(durColor, durSize);
1459                 Font durFont;
1460                 durFont.Construct(FONT_STYLE_PLAIN, FONT_SIZE_DURATION);
1461                 durCanvas.SetFont(durFont);
1462                 durCanvas.DrawText(Point(W_DURATION_TEXT, H_DURATION_TEXT),
1463                                 CommonUtil::DurationToTimeString(duration), COLOR_TEXT_OUTLINE);
1464                 Bitmap durBitmap;
1465                 durBitmap.Construct(durCanvas, durCanvas.GetBounds());
1466                 mainCanvas.DrawBitmap(durRect, durBitmap);
1467
1468                 pOverlayedImage = new (std::nothrow) Bitmap();
1469                 pOverlayedImage->Construct(mainCanvas, mainCanvas.GetBounds());
1470         }
1471         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1472
1473         return pOverlayedImage;
1474 }
1475
1476 Bitmap*
1477 FileListPresentationModel::GetShadedBackgroundBitmapN(Bitmap& bgBitmap,
1478                 const Bitmap& originalBitmap, const Rectangle& originalBitmapPosition) const
1479 {
1480         AppLogDebug("ENTER");
1481         if (&originalBitmap == null || &originalBitmap == null)
1482         {
1483                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
1484
1485                 return null;
1486         }
1487
1488         BufferInfo bufferInfo;
1489         bgBitmap.Lock(bufferInfo, INFINITE);
1490         bgBitmap.Unlock();
1491         Canvas mainCanvas;
1492         mainCanvas.Construct(bufferInfo);
1493         mainCanvas.Clear();
1494         mainCanvas.DrawBitmap(originalBitmapPosition, originalBitmap);
1495
1496         Bitmap* pMainImage = new (std::nothrow) Bitmap();
1497         pMainImage->Construct(mainCanvas,mainCanvas.GetBounds());
1498         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1499
1500         return pMainImage;
1501 }
1502
1503 IList*
1504 FileListPresentationModel::GetContentInfoListInDirectoryListN(const IList& contentDirectoryList,
1505                 ContentType contentType)const
1506 {
1507         AppLogDebug("ENTER");
1508         IList* pContentList = new (std::nothrow) ArrayList(SingleObjectDeleter);
1509
1510         if ((&contentDirectoryList == null) || (contentDirectoryList.GetCount() == 0)
1511                         || ((contentType != CONTENT_TYPE_IMAGE) && (contentType != CONTENT_TYPE_VIDEO) && (contentType != CONTENT_TYPE_ALL)))
1512         {
1513                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
1514                 return pContentList;
1515         }
1516
1517         ContentDirectory contentDirectory;
1518         IListT<ContentType>* pContentTypeList = new (std::nothrow) ArrayListT<ContentType>();
1519         if (contentType == CONTENT_TYPE_IMAGE || contentType == CONTENT_TYPE_ALL)
1520         {
1521                 pContentTypeList->Add(CONTENT_TYPE_IMAGE);
1522         }
1523         if (contentType == CONTENT_TYPE_VIDEO || contentType == CONTENT_TYPE_ALL)
1524         {
1525                 pContentTypeList->Add(CONTENT_TYPE_VIDEO);
1526         }
1527         result r = contentDirectory.Construct(*pContentTypeList);
1528         delete pContentTypeList;
1529
1530         if (r == E_SUCCESS)
1531         {
1532                 int pageNo = SIZE_PAGE_NO;
1533                 int countPerPage = SIZE_CONUNT_PER_PAGE;
1534                 String* pContentDirectory = null;
1535
1536                 int loopCount = contentDirectoryList.GetCount();
1537                 for (int i = 0; i < loopCount; ++i)
1538                 {
1539                         IList* pIList = null;
1540                         pContentDirectory = const_cast<String*>(static_cast<const String*>(contentDirectoryList.GetAt(i)));
1541                         if (pContentDirectory != null)
1542                         {
1543                                 pIList = contentDirectory.GetContentDirectoryItemListN(*pContentDirectory, pageNo, countPerPage,
1544                                                 CONTENT_INFO_ORDER, SORT_ORDER_NONE);
1545
1546                                 if (pIList != null)
1547                                 {
1548                                         pContentList->AddItems(*pIList);
1549                                 }
1550                         }
1551                 }
1552         }
1553         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1554
1555         return pContentList;
1556 }
1557
1558 String
1559 FileListPresentationModel::ConvertToAlbumName(const String& targetPath)const
1560 {
1561         AppLogDebug("ENTER");
1562         String albumName;
1563         if (&targetPath == null || targetPath.GetLength() == 0)
1564         {
1565                 return albumName;
1566         }
1567
1568         if (targetPath == RESERVED_CAMERA_PATH || targetPath == RESERVED_CAMERA_PATH_EXT)
1569         {
1570                 albumName = ResourceManager::GetString(L"IDS_MEDIABR_BODY_CAMERA_ROLL_ABB");
1571         }
1572         else if (targetPath == RESERVED_DOWNLOAD_PATH)
1573         {
1574                 albumName = ResourceManager::GetString(L"IDS_COM_BODY_DOWNLOADS");
1575         }
1576         else
1577         {
1578                 String directoryName = GetDirecotyNameFromFullPath(targetPath);
1579                 albumName = directoryName;
1580         }
1581
1582         return albumName;
1583 }
1584
1585 AppControlMode
1586 FileListPresentationModel::GetAppControlMode(void) const
1587 {
1588         AppLogDebug("Enter");
1589         AppLogDebug("Exit");
1590
1591         return __appControlMode;
1592 }
1593
1594 AppControlMediaType
1595 FileListPresentationModel::GetAppControlMediaType(void) const
1596 {
1597         AppLogDebug("Enter");
1598         AppLogDebug("Exit");
1599
1600         return __appControlMediaType;
1601 }
1602
1603 AppControlSelectionMode
1604 FileListPresentationModel::GetAppControlSelectionMode(void) const
1605 {
1606         AppLogDebug("Enter");
1607         AppLogDebug("Exit");
1608
1609         return __appControlSelectionMode;
1610 }
1611
1612 void
1613 FileListPresentationModel::SetUpdateProgressStatus(const bool status)
1614 {
1615         AppLogDebug("ENTER status = %d",status);
1616         __updateProgressStatus = status;
1617         AppLogDebug("EXIT");
1618 }
1619
1620 result
1621 FileListPresentationModel::RotateImage(int index, RotateMode rotateMode)
1622 {
1623         result r = E_SUCCESS;
1624         ImageBuffer rotateBuffer;
1625         ImageBuffer* pRotatedBuffer = null;
1626         ImageFormat imageFormat;
1627         Image img;
1628         String filePath = GetContentFilePath(index);
1629         ContentType contentType = ContentManagerUtil::CheckContentType(filePath);
1630         if (contentType == CONTENT_TYPE_VIDEO)
1631         {
1632                 return r;
1633         }
1634
1635         r = img.Construct();
1636
1637         if (r == E_SUCCESS)
1638         {
1639                 imageFormat = img.GetImageFormat(filePath);
1640
1641                 r = rotateBuffer.Construct(filePath);
1642                 if (r == E_SUCCESS)
1643                 {
1644                         if (rotateMode == ROTATE_MODE_RIGHT)
1645                         {
1646                                 pRotatedBuffer = rotateBuffer.RotateN(IMAGE_ROTATION_90);
1647                         }
1648                         else
1649                         {
1650                                 pRotatedBuffer = rotateBuffer.RotateN(IMAGE_ROTATION_270);
1651                         }
1652                 }
1653
1654                 if (pRotatedBuffer != null)
1655                 {
1656                         r = pRotatedBuffer->EncodeToFile(filePath, imageFormat, true, 100);
1657                         delete pRotatedBuffer;
1658                         ContentManager::ScanFile(filePath);
1659                 }
1660         }
1661
1662         return r;
1663 }
1664
1665 void
1666 FileListPresentationModel::ClearImageCache(void)
1667 {
1668         AppLogDebug("ENTER");
1669
1670         if(__pIconListViewCache != null)
1671         {
1672                 bool clearThumbnailReq = true;
1673                 while(__pIconListViewCache->GetCount() != 0)
1674                 {
1675                         //This is to Clear the Thumbnail Reuqests only Once
1676                         if(clearThumbnailReq == true)
1677                         {
1678                                 ClearThumbnailRequests();
1679                                 clearThumbnailReq = false;
1680                         }
1681                         __pIconListViewCache->RemoveAt(0, true);
1682                 }
1683         }
1684         AppLogDebug("EXIT");
1685 }
1686
1687 void
1688 FileListPresentationModel::OnDeviceStateChanged(DeviceType deviceType, const Tizen::Base::String& state)
1689 {
1690         AppLogDebug("ENTER");
1691         if (deviceType == DEVICE_TYPE_STORAGE_CARD && state == DEVICE_STORAGE_CARD_UNMOUNTED)
1692         {
1693                 IFormContentUpdateEventListener* pInterface = null;
1694                 IEnumerator* pEventEnum = __pContentEventListener->GetEnumeratorN();
1695                 while (pEventEnum->MoveNext() == E_SUCCESS)
1696                 {
1697                         pInterface = static_cast<IFormContentUpdateEventListener*>(pEventEnum->GetCurrent());
1698                         pInterface->OnContentUpdated();
1699                 }
1700                 delete pEventEnum;
1701         }
1702         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
1703 }