Change delete string
[apps/osp/ImageViewer.git] / src / IvImageViewerForm.cpp
index 4018c05..3dcd141 100644 (file)
@@ -44,7 +44,8 @@ using namespace Tizen::Ui;
 using namespace Tizen::Ui::Controls;
 using namespace Tizen::Ui::Scenes;
 
-static const unsigned int COLOR_HEADER_CONTORL_PANEL = Color32<0, 0, 0, 100>::Value;
+static const unsigned int COLOR_HEADER_CONTROL_LABEL = Color32<0, 0, 0, 0>::Value;
+static const unsigned int COLOR_HEADER_CONTROL_PANEL = Color32<0, 0, 0, 100>::Value;
 static const unsigned int COLOR_HEADER_BUTTON1 = Color32<0, 0, 0, 100>::Value;
 static const unsigned int COLOR_DELETE_BUTTON_NORMAL = Color32<208, 82, 82>::Value;
 static const unsigned int COLOR_DELETE_BUTTON_PRESSED = Color32<194, 71, 71>::Value;
@@ -94,27 +95,31 @@ static const int DETAIL_MAIN_FONT_SIZE = 36;
 static const int DETAIL_COUNT_MAX = 9;
 
 ImageViewerForm::ImageViewerForm(void)
-: __initializeDisplayModeCurrent(APPCONTROL_MODE_NORMAL)
-, __pLabel(null)
-, __pFooter(null)
-, __pScrollPanel(null)
-, __pDetail_Label(null)
-, __pLabelMessage(null)
-, __pPlayButton(null)
-, __pRenameButton(null)
-, __pDetailFooterItem(null)
-, __pGallery(null)
-, __pTimer(null)
-, __pContextMenuMore(null)
-, __pContextMenuCopy(null)
-, __pContextMenuSetAs(null)
-, __pContextMenuShare(null)
-, __pDeletePopup(null)
-, __visible(true)
-, __detail(true)
-, __startSlide(false)
-, __requestId(0)
-, __pPresentationModel(null)
+       : __shuffelStartIndex(0)
+       , __initializeDisplayModeCurrent(APPCONTROL_MODE_NORMAL)
+       , __pLabel(null)
+       , __pFooter(null)
+       , __pScrollPanel(null)
+       , __pDetail_Label(null)
+       , __pLabelMessage(null)
+       , __pPlayButton(null)
+       , __pRenameButton(null)
+       , __pDetailFooterItem(null)
+       , __pGallery(null)
+       , __pTimer(null)
+       , __pShuffelTimer(null)
+       , __pContextMenuMore(null)
+       , __pContextMenuCopy(null)
+       , __pContextMenuSetAs(null)
+       , __pContextMenuShare(null)
+       , __pDeletePopup(null)
+       , __visible(true)
+       , __detail(true)
+       , __startSlide(false)
+       , __shuffle(false)
+       , __requestId(0)
+       , __pShuffledList(null)
+       , __pPresentationModel(null)
 {
        AppLogDebug("ENTER");
        AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
@@ -198,7 +203,7 @@ ImageViewerForm::OnInitializing(void)
        {
                return E_FAILURE;
        }
-       __pLabel->SetBackgroundColor(COLOR_HEADER_CONTORL_PANEL);
+       __pLabel->SetBackgroundColor(COLOR_HEADER_CONTROL_LABEL);
        SetControlAlwaysOnTop(*__pLabel,true);
        int allCount = __pPresentationModel->GetFileCount();
        int index = 1 ;
@@ -513,6 +518,8 @@ ImageViewerForm::DeleteImageFile()
 
        GetLabelText(__pGallery->GetCurrentItemIndex(), strItemIdxText);
 
+       __pLabel->SetText(strItemIdxText);
+
        if (__visible == true)
        {
                ImageViewerMediaType mediaType = CommonUtil::GetMediaType(filePath);
@@ -571,7 +578,8 @@ ImageViewerForm::CreateGallery(void)
        case SLIDE_SHOW_TRANSITION_EFFECT_ZOOM:
                __pGallery->SetSlideShowAnimation(Controls::GALLERY_ANIMATION_ZOOM);
                break;
-       case SLIDE_SHOW_TRANSITION_EFFECT_SLIDE:
+       case SLIDE_SHOW_TRANSITION_EFFECT_PAGE:
+               __pGallery->SetSlideShowAnimation(Controls::GALLERY_ANIMATION_PAGE);
                break;
        }
 
@@ -656,7 +664,7 @@ ImageViewerForm::InitializePanelDetail()
                __pDetail_FileInfo_Value_Label[i]->SetTextConfig(DETAIL_MAIN_FONT_SIZE, LABEL_TEXT_STYLE_BOLD);
        }
 
-       __pScrollPanel->SetBackgroundColor(COLOR_HEADER_CONTORL_PANEL);
+       __pScrollPanel->SetBackgroundColor(COLOR_HEADER_CONTROL_PANEL);
        __pScrollPanel->SetShowState(false);
 
        __pRenameButton = new (std::nothrow) Button();
@@ -711,7 +719,7 @@ ImageViewerForm::InitializePopup(void)
 
                Label* pLabel = new (std::nothrow) Label();
                pLabel->Construct(Rectangle(0, 0, popupClientBounds.width, H_DELETE_LABEL),
-                               ResourceManager::GetString(L"IDS_COM_BODY_DELETE") + L"?");
+                               ResourceManager::GetString(L"IDS_COM_POP_DELETE_Q"));
 
                Button* pDeleteButton = new (std::nothrow) Button();
                pDeleteButton->Construct(
@@ -762,7 +770,7 @@ ImageViewerForm::InitializeContextMenuMore(void)
 
        __pContextMenuMore = new (std::nothrow) ContextMenu();
 
-       __pContextMenuMore->Construct(Point(X_MORE, GetClientAreaBounds().y + GetClientAreaBounds().height),
+       __pContextMenuMore->Construct(Point(X_MORE,  GetClientAreaBounds().height),
                        CONTEXT_MENU_STYLE_LIST, CONTEXT_MENU_ANCHOR_DIRECTION_UPWARD);
 
        if (mediaType == IMAGE_VIEWER_MEDIA_TYPE_IMAGE)
@@ -805,7 +813,8 @@ ImageViewerForm::InitializeContextMenuSetAs(void)
                        ACTION_ID_CONTEXTMENU_HOME);
        __pContextMenuSetAs->AddItem(ResourceManager::GetString(L"IDS_IV_HEADER_LOCK_SCREEN_WALLPAPER_ABB"),
                        ACTION_ID_CONTEXTMENU_LOCK);
-       __pContextMenuSetAs->AddItem(L"Home and lock screens", ACTION_ID_CONTEXTMENU_HOME_AND_LOCK);
+       __pContextMenuSetAs->AddItem(ResourceManager::GetString(L"IDS_IV_BODY_HOME_AND_LOCK_SCREENS"),
+                       ACTION_ID_CONTEXTMENU_HOME_AND_LOCK);
        __pContextMenuSetAs->AddItem(ResourceManager::GetString(L"IDS_IV_BODY_CALLER_IMAGE"),
                        ACTION_ID_CONTEXTMENU_CALLER);
        __pContextMenuSetAs->AddActionEventListener(*this);
@@ -864,7 +873,6 @@ ImageViewerForm::SetDetailInfo(void)
 
        Rectangle clientRect = GetClientAreaBounds();
        __pScrollPanel->SetBounds(0,__pLabel->GetHeight(), clientRect.width, clientRect.height - __pLabel->GetHeight());
-
        int currentIndex = __pGallery->GetCurrentItemIndex();
        String strFilePath = __pPresentationModel->GetFilePathAt(currentIndex);
 
@@ -978,7 +986,23 @@ ImageViewerForm::SetDetailInfo(void)
        for (int i = 0; i < DETAIL_COUNT_MAX; ++i)
        {
                __pDetail_FileInfo_Value_Label[i]->SetText(strResult[i]);
-               __pDetail_FileInfo_Value_Label[i]->RequestRedraw();
+
+               if (i == DETAIL_COUNT_MAX - 1)
+               {
+                       __pDetail_FileInfo_Value_Label[i]->SetBounds(
+                                       Rectangle(X_DETAIL_FILEINFO_LABEL,
+                                                       GAP_H_DETAIL_TEXT * (i + 1) + H_DETAIL_MAIN_TEXT + (H_DETAIL_MAIN_TEXT * i) + H_DETAIL_SUB_TEXT * (i + 1),
+                                                       clientRect.width - GAP_W_END_OF_LABEL, H_DETAIL_FILEINFO_VALUE_LABEL * 3));
+               }
+               else
+               {
+                       __pDetail_FileInfo_Value_Label[i]->SetBounds(
+                                       Rectangle(X_DETAIL_FILEINFO_LABEL,
+                                                       GAP_H_DETAIL_TEXT * (i + 1) + H_DETAIL_MAIN_TEXT + (H_DETAIL_MAIN_TEXT * i) + H_DETAIL_SUB_TEXT * (i + 1),
+                                                       clientRect.width - GAP_W_END_OF_LABEL, H_DETAIL_FILEINFO_VALUE_LABEL));
+               }
+
+               __pDetail_FileInfo_Value_Label[i]->Invalidate(true);
        }
 
        if (__initializeDisplayModeCurrent == APPCONTROL_MODE_WEB_LINK)
@@ -1002,11 +1026,15 @@ ImageViewerForm::ShowPanelDetail(bool showStatus)
        if (showStatus)
        {
                SetDetailInfo();
+               __pLabel->SetBackgroundColor(COLOR_HEADER_CONTROL_PANEL);
+               __pLabel->Invalidate(true);
                __pScrollPanel->SetShowState(true);
                __detail = false;
        }
        else
        {
+               __pLabel->SetBackgroundColor(COLOR_HEADER_CONTROL_LABEL);
+               __pLabel->Invalidate(true);
                __pScrollPanel->SetShowState(false);
                __detail = true;
        }
@@ -1087,9 +1115,17 @@ ImageViewerForm::CreateItem(int index)
        AppLogDebug("ENTER : index(%d)", index);
        GalleryItem* pGallery = new (std::nothrow) GalleryItem();
 
-       String filePath = __pPresentationModel->GetFilePathAt(index);
-       ImageInfo* pImageInfo = __pPresentationModel->GetImageCacheAt(index);
+       int curIndex = index;
+
+       if (__shuffle == true && __pShuffledList != null)
+       {
+               curIndex = __pShuffledList[index];
+       }
+
+       String filePath = __pPresentationModel->GetFilePathAt(curIndex);
+       ImageInfo* pImageInfo = __pPresentationModel->GetImageCacheAt(curIndex);
        Bitmap* pBitmap = pImageInfo->GetBitmapN();
+
        if (pBitmap == null)
        {
                pBitmap = GetQuickThumbnailN(filePath);
@@ -1110,8 +1146,16 @@ ImageViewerForm::CreateItem(int index)
 bool
 ImageViewerForm::DeleteItem(int index, GalleryItem* pItem)
 {
-       AppLogDebug("ENTER index(%d)", index);
-       ImageInfo* pImageInfo = __pPresentationModel->GetImageCacheAt(index);
+       AppLogDebug("ImageViewerForm::DeleteItem ENTER index(%d)", index);
+       int curIndex = index;
+
+       if(__shuffle == true && __pShuffledList != null)
+       {
+               curIndex = __pShuffledList[index];
+       }
+
+
+       ImageInfo* pImageInfo = __pPresentationModel->GetImageCacheAt(curIndex);
        pImageInfo->ClearBitmap();
        delete pItem;
        AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
@@ -1122,7 +1166,7 @@ ImageViewerForm::DeleteItem(int index, GalleryItem* pItem)
 void
 ImageViewerForm::OnGalleryCurrentItemChanged(Gallery& view, int index)
 {
-       AppLogDebug("ENTER index(%d)", index);
+       AppLogDebug("ImageViewerForm::OnGalleryCurrentItemChanged index(%d)", index);
 
        String filePath = __pPresentationModel->GetFilePathAt(index);
        AppLogDebug("ENTER index(%d) filePath(%ls)", index, filePath.GetPointer());
@@ -1222,9 +1266,35 @@ ImageViewerForm::OnGallerySlideShowStarted(Gallery& gallery)
 void
 ImageViewerForm::OnGallerySlideShowStopped(Gallery& gallery)
 {
-       AppLogDebug("ENTER");
+       AppLogDebug("ImageViewerForm::OnGallerySlideShowStopped");
+
+       int index;
+
+       if(__shuffle == true)
+       {
+
+               if(__pShuffelTimer == null)
+               {
+                       __pShuffelTimer = new (std::nothrow) Timer();
+                       __pShuffelTimer->Construct(*this);
+               }
+               __pShuffelTimer->Start(1);
+       }
+       else
+       {
+               index = __pGallery->GetCurrentItemIndex();
+               SlideShowStopped(index);
+       }
+
+
+       AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
+}
+
+void
+ImageViewerForm::SlideShowStopped(int index)
+{
+       AppLog("ImageViewerForm::SlideShowStopped");
        PowerManager::KeepScreenOnState(false, true);
-       int index = __pGallery->GetCurrentItemIndex();
 
        if (__visible == false)
        {
@@ -1253,7 +1323,6 @@ ImageViewerForm::OnGallerySlideShowStopped(Gallery& gallery)
        __pGallery->SetBounds(Rectangle(0, -clientRect.y, rect.width, rect.height));
 
        Invalidate(true);
-       AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
 }
 
 void
@@ -1273,6 +1342,13 @@ ImageViewerForm::OnTerminating(void)
                __pTimer = null;
        }
 
+       if(__pShuffelTimer)
+       {
+               __pShuffelTimer->Cancel();
+               delete __pShuffelTimer;
+               __pShuffelTimer = null;
+       }
+
        __pPresentationModel->ClearImageRequests();
        __pPresentationModel->RemoveListener(*this);
        __pPresentationModel->RemoveFileUpdateListener(*this);
@@ -1307,6 +1383,12 @@ ImageViewerForm::OnTerminating(void)
                __pContextMenuMore = null;
        }
 
+       if(__pShuffledList != null)
+       {
+               free(__pShuffledList);
+               __pShuffledList = null;
+       }
+
        AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
 
        return E_SUCCESS;
@@ -1358,9 +1440,28 @@ ImageViewerForm::OnActionPerformed(const Control& source, int actionId)
        case ACTION_ID_FOOTER_BUTTON_CROP:
        {
                String filePath;
-               ArrayList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
                filePath = __pPresentationModel->GetFilePathAt(__pGallery->GetCurrentItemIndex());
+               ImageBuffer imagebuffer;
+               result r = imagebuffer.Construct(filePath);
+               if (r != E_SUCCESS)
+               {
+                       return;
+               }
+               int imageWidth = imagebuffer.GetWidth();
+               int imageHeight = imagebuffer.GetHeight();
+               if (imageWidth <= (CROP_RECTANGLE_HEIGHT * 3) || imageHeight <= (CROP_RECTANGLE_HEIGHT * 3))
+               {
+                       MessageBox messageBox;
+                       String messageText = ResourceManager::GetString(L"IDS_IMGE_POP_IMAGE_IS_TOO_SMALL");
+                       messageBox.Construct(L"", messageText, MSGBOX_STYLE_OK, 3000);
+                       int modalResult = 0;
+                   messageBox.ShowAndWait(modalResult);
+                   return;
+               }
+               String cropMode = L"auto";
+               ArrayList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
                pList->Add(new (std::nothrow) String(filePath));
+               pList->Add(new (std::nothrow) String(cropMode));
                pSceneManager->GoForward(ForwardSceneTransition(IDSCN_IMAGE_CROP), pList);
        }
        break;
@@ -1369,13 +1470,9 @@ ImageViewerForm::OnActionPerformed(const Control& source, int actionId)
                int currentIndex = __pGallery->GetCurrentItemIndex();
                String filePath = __pPresentationModel->GetFilePathAt(currentIndex);
                RotateMode rotateMode = ROTATE_MODE_RIGHT;
-               __pPresentationModel->SetImageRotateStatus(true);
                RotateImage(filePath, rotateMode);
                __pPresentationModel->RequestImage(filePath);
-               //Invalidate(true);
-               ContentManager contentManager;
-               contentManager.Construct();
-               contentManager.ScanFile(filePath);
+               ContentManager::ScanFile(filePath);
        }
        break;
        case ACTION_ID_FOOTER_BUTTON_ROTATE_LEFT:
@@ -1383,13 +1480,9 @@ ImageViewerForm::OnActionPerformed(const Control& source, int actionId)
                int currentIndex = __pGallery->GetCurrentItemIndex();
                String filePath = __pPresentationModel->GetFilePathAt(currentIndex);
                RotateMode rotateMode = ROTATE_MODE_LEFT;
-               __pPresentationModel->SetImageRotateStatus(true);
                RotateImage(filePath, rotateMode);
                __pPresentationModel->RequestImage(filePath);
-               //Invalidate(true);
-               ContentManager contentManager;
-               contentManager.Construct();
-               contentManager.ScanFile(filePath);
+               ContentManager::ScanFile(filePath);
        }
        break;
        case ACTION_ID_FOOTER_BUTTON_DETAILS:
@@ -1415,20 +1508,24 @@ ImageViewerForm::OnActionPerformed(const Control& source, int actionId)
        }
        case ACTION_ID_CONTEXTMENU_HOME:
        {
+               String filePath = __pPresentationModel->GetFilePathAt(__pGallery->GetCurrentItemIndex());
+               String cropMode = "fit-to-screen";
                ArrayList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
-               pList->Add(new (std::nothrow) Integer(__pGallery->GetCurrentItemIndex()));
+               pList->Add(new (std::nothrow) String(filePath));
+               pList->Add(new (std::nothrow) String(cropMode));
                pList->Add(new (std::nothrow) Integer(SET_AT_TYPE_HOME_SCREEN_WALLPAPER));
-               __pPresentationModel->SetSetterIndex(__pGallery->GetCurrentItemIndex());
-               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_IMAGE_SETTER), pList);
+               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_IMAGE_CROP), pList);
                break;
        }
        case ACTION_ID_CONTEXTMENU_LOCK:
        {
+               String filePath = __pPresentationModel->GetFilePathAt(__pGallery->GetCurrentItemIndex());
+               String cropMode = "fit-to-screen";
                ArrayList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
-               pList->Add(new (std::nothrow) Integer(__pGallery->GetCurrentItemIndex()));
+               pList->Add(new (std::nothrow) String(filePath));
+               pList->Add(new (std::nothrow) String(cropMode));
                pList->Add(new (std::nothrow) Integer(SET_AT_TYPE_LOCK_SCREEN_WALLPAPER));
-               __pPresentationModel->SetSetterIndex(__pGallery->GetCurrentItemIndex());
-               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_IMAGE_SETTER), pList);
+               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_IMAGE_CROP), pList);
                break;
        }
        case ACTION_ID_CONTEXTMENU_CALLER:
@@ -1443,18 +1540,19 @@ ImageViewerForm::OnActionPerformed(const Control& source, int actionId)
                                new (std::nothrow) String(APPCONTROL_DATA_ITEM_ID));
 
                __pPresentationModel->StartAppControl(APPCONTROL_PROVIDER_ID_CONTACTS,
-                               APPCONTROL_OPERATION_ID_PICK, null, null, pDataList, this);
+                               APPCONTROL_OPERATION_ID_SOCIAL_PICK, null, null, pDataList, this);
                break;
        }
 
        case ACTION_ID_CONTEXTMENU_HOME_AND_LOCK:
        {
+               String filePath = __pPresentationModel->GetFilePathAt(__pGallery->GetCurrentItemIndex());
+               String cropMode = "fit-to-screen";
                ArrayList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
-               pList->Add(new (std::nothrow) Integer(__pGallery->GetCurrentItemIndex()));
+               pList->Add(new (std::nothrow) String(filePath));
+               pList->Add(new (std::nothrow) String(cropMode));
                pList->Add(new (std::nothrow) Integer(SET_AT_TYPE_HOME_AND_LOCK_SCREEN_WALLPAPER));
-               __pPresentationModel->SetSetterIndex(__pGallery->GetCurrentItemIndex());
-               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_IMAGE_SETTER), pList);
-               break;
+               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_IMAGE_CROP), pList);
                break;
        }
 
@@ -1510,40 +1608,35 @@ void
 ImageViewerForm::RotateImage(String& filePath, RotateMode rotateMode)
 {
        result r = E_SUCCESS;
+       ImageBuffer rotateBuffer;
        ImageBuffer* pRotatedBuffer = null;
-       ImageBuffer* pRotatedBuffer1 = null;
        ImageFormat imageFormat;
-       int width = 0;
-       int height = 0;
-       pRotatedBuffer = new (std::nothrow) ImageBuffer();
-       r = pRotatedBuffer->Construct(filePath);
-       pRotatedBuffer->GetImageInfo(filePath, imageFormat, width, height);
+       Image img;
+       r = img.Construct();
+
+       if (r == E_SUCCESS)
+       {
+               imageFormat = img.GetImageFormat(filePath);
+       }
+
+       r = rotateBuffer.Construct(filePath);
        if (r == E_SUCCESS)
        {
                if (rotateMode == ROTATE_MODE_RIGHT)
                {
-                       pRotatedBuffer1 = pRotatedBuffer->RotateN(IMAGE_ROTATION_90);
+                       pRotatedBuffer = rotateBuffer.RotateN(IMAGE_ROTATION_90);
                }
                else
                {
-                       pRotatedBuffer1 = pRotatedBuffer->RotateN(IMAGE_ROTATION_270);
+                       pRotatedBuffer = rotateBuffer.RotateN(IMAGE_ROTATION_270);
                }
        }
-       TryCatch(pRotatedBuffer1 != null, r = GetLastResult(), "RotateN failed:%s", GetErrorMessage(GetLastResult()));
-       pRotatedBuffer1->EncodeToFile(filePath, imageFormat, true, 100);
-       delete pRotatedBuffer1;
-       delete pRotatedBuffer;
-       return;
 
-       CATCH:
-       if (pRotatedBuffer != null) //this buffer is no longer used
+       if (pRotatedBuffer != null)
        {
+               r = pRotatedBuffer->EncodeToFile(filePath, imageFormat, true, 100);
                delete pRotatedBuffer;
        }
-       if (pRotatedBuffer1 != null) //this buffer is no longer used
-       {
-               delete pRotatedBuffer1;
-       }
        return;
 }
 
@@ -1585,6 +1678,18 @@ ImageViewerForm::OnSceneActivatedN(const SceneId& previousSceneId,
                Invalidate(true);
        }
 
+       if (previousSceneId == IDSCN_IMAGE_CROP && pArgs != null)
+       {
+               String filePath;
+               filePath = *(static_cast<String*>(pArgs->GetAt(0)));
+               delete pArgs;
+               int count = __pPresentationModel->GetFileCount();
+               __pPresentationModel->AddImageCache(filePath);
+               __pGallery->UpdateGallery();
+               __pGallery->SetCurrentItemIndex(count);
+               __pPresentationModel->RequestImage(filePath);
+       }
+
        if (__pGallery->GetCurrentItemIndex() < 0)
        {
                SetFooterItemState(false);
@@ -1622,23 +1727,32 @@ ImageViewerForm::OnAppControlCompleteResponseReceived(const AppId& appId,
        AppLogDebug("ENTER");
 
        if (appId == APPCONTROL_PROVIDER_ID_CONTACTS
-                       && operationId == APPCONTROL_OPERATION_ID_PICK
+                       && operationId == APPCONTROL_OPERATION_ID_SOCIAL_PICK
                        && appControlResult == APP_CTRL_RESULT_SUCCEEDED)
        {
-               const String* pContactId =
-                               static_cast<const String*>(pExtraData->GetValue(String(APPCONTROL_KEY_SOCIAL_ITEM_ID)));
-               SceneManager* pSceneManager = SceneManager::GetInstance();
+               const ArrayList* pResultList =
+                               static_cast<const ArrayList*>(pExtraData->GetValue(String(APPCONTROL_KEY_SOCIAL_ITEM_ID)));
+               const String* pContactId = null;
+
+               if (pResultList != null)
+               {
+                       pContactId = static_cast<const String*>(pResultList->GetAt(0));
+               }
+
                long long lresult = 0;
                if (pContactId != null && pContactId->GetLength() > 0)
                {
                        LongLong::Parse(*pContactId, lresult);
+                       String filePath = __pPresentationModel->GetFilePathAt(__pGallery->GetCurrentItemIndex());
+                       String cropMode = "fit-to-screen";
+                       ArrayList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+                       pList->Add(new (std::nothrow) String(filePath));
+                       pList->Add(new (std::nothrow) String(cropMode));
+                       pList->Add(new (std::nothrow) Integer(SET_AT_TYPE_CALLER_IMAGE));
+                       pList->Add(new (std::nothrow) LongLong(lresult));
+                       SceneManager* pSceneManager = SceneManager::GetInstance();
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_IMAGE_CROP), pList);
                }
-               ArrayList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
-               pList->Add(new (std::nothrow) Integer(__pGallery->GetCurrentItemIndex()));
-               pList->Add(new (std::nothrow) Integer(SET_AT_TYPE_CALLER_IMAGE));
-               pList->Add(new (std::nothrow) LongLong(lresult));
-               __pPresentationModel->SetSetterIndex(__pGallery->GetCurrentItemIndex());
-               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_IMAGE_SETTER), pList);
        }
 
        ImageViewerApp* pImageViewerApp = static_cast<ImageViewerApp*>(ImageViewerApp::GetInstance());
@@ -1698,14 +1812,51 @@ ImageViewerForm::InitShowGallery(void)
 void
 ImageViewerForm::OnTimerExpired(Timer &timer)
 {
-       int repeatValue = 0;
-       AppLogDebug("ENTER");
+       AppLog("ImageViewerForm::OnTimerExpired");
+
+       if(timer.Equals(*__pShuffelTimer) == true)
+       {
+               AppLog("OnTimerExpired __pShuffelTimer");
+               int curItemIndex = __pGallery->GetCurrentItemIndex();
+               int index = __pShuffledList[curItemIndex];
+
+               __shuffle = false;
+
+               __pGallery->UpdateGallery();
+
+               AppLog("ImageViewerForm::OnGallerySlideShowStopped index = %d, shuffelIndex = %d", curItemIndex, index);
+
+               __pGallery->SetCurrentItemIndex(index);
+               __pGallery->Draw();
+
+               SlideShowStopped(index);
+               return;
+       }
+
+       int repeatValue  = 0;
+       int shuffleValue = 0;
+
        if (__pPresentationModel->GetFileCount() > 1)
        {
                __pSettingPresentationModel->GetValue(SECTION_NAME_IMAGE_VIEWER,
-                               ENTRY_NAME_IMAGE_VIEWER_REPEAT_VALUE, repeatValue);
+                                                       ENTRY_NAME_IMAGE_VIEWER_REPEAT_VALUE, repeatValue);
 
-               if (repeatValue == 0)
+                __pSettingPresentationModel->GetValue(SECTION_NAME_IMAGE_VIEWER,
+                                                       ENTRY_NAME_IMAGE_VIEWER_SHUFFLE_VALUE, shuffleValue);
+
+               if (shuffleValue != 0)
+               {
+                       __shuffelStartIndex = __pGallery->GetCurrentItemIndex();
+                       CreateShuffledList(__pPresentationModel->GetFileCount());
+                       __shuffle = true;
+               }
+               else
+               {
+                       __shuffelStartIndex = 0;
+                       __shuffle = false;
+               }
+
+               if ( repeatValue == 0)
                {
                        __pGallery->StartSlideShow(false);
                }
@@ -1718,6 +1869,34 @@ ImageViewerForm::OnTimerExpired(Timer &timer)
 }
 
 void
+ImageViewerForm::CreateShuffledList(int count)
+{
+       AppLogDebug("ImageViewerForm::CreateShuffledList ENTER");
+       if(__pShuffledList == null)
+       {
+               __pShuffledList = new (std::nothrow) int[count];
+               for(int i = 0; i < count; i++)
+               {
+                       __pShuffledList[i] = i;
+               }
+       }
+       for(int i = count - 1; i > 1; i--)
+       {
+               int randomNum = Math::Rand() % (i+1);
+               int t = __pShuffledList[randomNum];
+               __pShuffledList[randomNum] = __pShuffledList[i];
+               __pShuffledList[i] = t;
+       }
+
+       for(int i = 0; i < count; i++)
+       {
+               AppLogDebug("ShuffeldList i = %d & Val = %d", i, __pShuffledList[i]);
+       }
+
+       AppLogDebug("ImageViewerForm::CreateShuffledList EXIT");
+}
+
+void
 ImageViewerForm::OnContentTransferInProgress(RequestId requestId, int totalReceivedSize)
 {
        AppLogDebug("ENTER");
@@ -1833,10 +2012,10 @@ ImageViewerForm::OnRequestEmailAction(void)
        HashMap* pDataList = new (std::nothrow) HashMap(SingleObjectDeleter);
        pDataList->Construct();
 
-       IList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+       ArrayList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
        pList->Add(new (std::nothrow) String(filePath));
 
-       pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_PATH), (Object*)pList);
+       pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_PATH), pList);
 
        __pPresentationModel->StartAppControl(APPCONTROL_PROVIDER_ID_EMAIL, APPCONTROL_OPERATION_ID_COMPOSE,
                        new (std::nothrow) String(APPCONTROL_URI_MAIL_TO), null, pDataList, this);
@@ -1859,12 +2038,13 @@ ImageViewerForm::OnRequestMessagesAction(void)
 
        HashMap* pDataList = new (std::nothrow) HashMap(SingleObjectDeleter);
        pDataList->Construct();
-       IList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+       ArrayList* pList = new (std::nothrow) ArrayList(SingleObjectDeleter);
        pList->Add(new (std::nothrow) String(filePath));
-       pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_PATH), (Object*)pList);
+       pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_PATH), pList);
+       pDataList->Add(new (std::nothrow) String(APPCONTROL_KEY_MESSAGE_TYPE), new (std::nothrow) String(APPCONTROL_DATA_MMS));
 
-       __pPresentationModel->StartAppControl(APPCONTROL_PROVIDER_ID_MESSAGES, APPCONTROL_OPERATION_ID_COMPOSE,
-                       new (std::nothrow) String(APPCONTROL_URI_MMS_TO), null, pDataList, this);
+       __pPresentationModel->StartAppControl(APPCONTROL_PROVIDER_ID_MESSAGES, APPCONTROL_OPERATION_ID_COMPOSE, null,
+                       null, pDataList, this);
        AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
 }
 
@@ -1995,7 +2175,7 @@ ImageViewerForm::GetQuickThumbnailN(String& filePath)
                {
                        Canvas mainCanvas;
                        mainCanvas.Construct(DUMMY_IMAGE_RECTANGLE);
-                       mainCanvas.FillRectangle(Color::GetColor(COLOR_ID_WHITE), DUMMY_IMAGE_RECTANGLE);
+                       mainCanvas.FillRectangle(Color::GetColor(COLOR_ID_BLACK), DUMMY_IMAGE_RECTANGLE);
                        pBitmap = new (std::nothrow) Bitmap();
                        pBitmap->Construct(mainCanvas, DUMMY_IMAGE_RECTANGLE);
                }
@@ -2007,35 +2187,30 @@ ImageViewerForm::GetQuickThumbnailN(String& filePath)
 void ImageViewerForm::OnFormFileEventOccuered(const int index, const unsigned long eventId)
 {
        AppLogDebug(" ENTER");
-       bool eventDelete = (eventId & FILE_EVENT_TYPE_DELETE_SELF);
-       bool eventMove = (eventId & 0x8000);// (eventId & FILE_EVENT_TYPE_MOVE_SELF);
 
        int currentIndex = __pGallery->GetCurrentItemIndex();
-       int countPath = __pPresentationModel->GetFileCount();
+       int fileCount = __pPresentationModel->GetFileCount();
 
-       if (countPath == 0 && eventDelete)
+       if (fileCount == 0 && eventId == IV_FILE_DELETE)
        {
                UiApp* pApp = UiApp::GetInstance();
                pApp->Terminate();
                AppLogDebug("EXIT 2(%s)", GetErrorMessage(GetLastResult()));
        }
-       AppLogDebug(" countPath is %d", countPath);
-       AppLogDebug(" currentIndex is %d", currentIndex);
 
-       if (countPath == currentIndex && eventDelete)
+       if (fileCount <= currentIndex && eventId == IV_FILE_DELETE)
        {
-               __pGallery->SetCurrentItemIndex(--currentIndex);
+               currentIndex = fileCount - 1;
        }
-       else if (eventMove)
+       else if (eventId == IV_FILE_CREATE)
        {
                currentIndex = index;
-               __pGallery->SetCurrentItemIndex(currentIndex);
        }
 
-       String strItemIdxText(EMPTY_SPACE);
 
+       String strItemIdxText(EMPTY_SPACE);
+       __pGallery->SetCurrentItemIndex(currentIndex);
        __pGallery->UpdateGallery();
-       AppLogDebug(" UpdateGallery is %d", currentIndex);
        String filePath = __pPresentationModel->GetFilePathAt(currentIndex);
        __pPresentationModel->RequestImage(filePath);
 
@@ -2075,10 +2250,21 @@ ImageViewerForm::OnSlideSettingPopUpItemSelected(int index)
 
        if (index == 0)   // start slide show
        {
-               int repeatValue = 0;
+       int repeatValue = 0;
+               int interval = 0 ;
+               int transitioneffect = 0;
 
                if (__pPresentationModel->GetFileCount() > 1)
                {
+                       int shuffleValue;
+                       __pSettingPresentationModel->GetValue(SECTION_NAME_IMAGE_VIEWER,
+                                                                       ENTRY_NAME_IMAGE_VIEWER_SLIDESHOW_INTERVAL, interval);
+
+                               interval = interval * 1000;
+                       AppLogDebug("The slide interval is %d", interval);
+                               __pGallery->SetSlideShowViewDuration(interval);
+
+
                        __pGallery->UpdateGallery();
 
                        if (__detail == false)
@@ -2089,6 +2275,37 @@ ImageViewerForm::OnSlideSettingPopUpItemSelected(int index)
                        __pSettingPresentationModel->GetValue(SECTION_NAME_IMAGE_VIEWER,
                                        ENTRY_NAME_IMAGE_VIEWER_REPEAT_VALUE, repeatValue);
 
+                       __pSettingPresentationModel->GetValue(SECTION_NAME_IMAGE_VIEWER,
+                                       ENTRY_NAME_IMAGE_VIEWER_SHUFFLE_VALUE, shuffleValue);
+
+                        __pSettingPresentationModel->GetValue(SECTION_NAME_IMAGE_VIEWER,
+                                   ENTRY_NAME_IMAGE_VIEWER_SLIDESHOW_TRANSITION_EFFECT, transitioneffect);
+
+                        if (transitioneffect == 1)
+                        {
+                                __pGallery->SetSlideShowAnimation(GALLERY_ANIMATION_DISSOLVE);
+                        }
+                        else if (transitioneffect == 2)
+                        {
+                                __pGallery->SetSlideShowAnimation(GALLERY_ANIMATION_ZOOM);
+                        }
+                        else
+                        {
+                                __pGallery->SetSlideShowAnimation(GALLERY_ANIMATION_PAGE);
+                        }
+
+                       if (shuffleValue != 0)
+                       {
+                               __shuffelStartIndex = __pGallery->GetCurrentItemIndex();
+                               CreateShuffledList(__pPresentationModel->GetFileCount());
+                               __shuffle = true;
+                       }
+                       else
+                       {
+                               __shuffelStartIndex = 0;
+                               __shuffle = false;
+                       }
+
                        if (repeatValue == 0)
                        {
                                __pGallery->StartSlideShow(false);