qtinternetradio/ui/src/irviewmanager.cpp
branchGCC_SURGE
changeset 13 c9471d26c7f2
parent 12 608f67c22514
child 14 896e9dbc5f19
--- a/qtinternetradio/ui/src/irviewmanager.cpp	Mon Jun 21 22:33:45 2010 +0100
+++ b/qtinternetradio/ui/src/irviewmanager.cpp	Thu Jul 22 16:31:41 2010 +0100
@@ -17,6 +17,10 @@
 #include <hbaction.h>
 #include <QApplication>
 #include <QTimer>
+#include <HbApplication>
+#include <HbActivityManager>
+#include <xqserviceutil.h>
+
 
 #include "irviewmanager.h"
 #include "irapplication.h"
@@ -46,6 +50,9 @@
 static bool crossLineReady(const QLineF &aLine);
 static bool crossLineIntersected(const QLineF &aLineA, const QLineF &aLineB);
 
+static const QString KActivityMainView("InternetRadioMainView");
+static const QString KActivityPlayingView("InternetRadioNowPlayingView");
+
 enum CrossLineAngleType
 {
     EPositiveAngle = 0,  // Line within 1,3 quadrant
@@ -124,6 +131,38 @@
     return NULL;
 }
 
+TIRViewId IRViewManager::getExitingView()
+{
+    if(0 == views().count())
+    {
+        return EIRView_InvalidId;
+    }
+    else
+    {
+        IRBaseView* lastView = static_cast<IRBaseView*>(currentView());
+        if(lastView->testFlag(IRBaseView::EViewFlag_StickyViewEnabled))
+        {
+            return lastView->id();
+        }
+        
+        if(iViewStack.empty())
+        {
+            return EIRView_InvalidId;
+        }
+        
+        for(int i = iViewStack.size()-1; i >= 0 ; i--)
+        {
+            IRBaseView* lastView = iViewStack.at(i);
+            if(lastView->testFlag(IRBaseView::EViewFlag_StickyViewEnabled))
+            {
+                return lastView->id();
+            }
+        }    
+ 
+        return EIRView_InvalidId;
+    }
+}
+
 /*
  * Description : Judge if a view is in the view stack.
  * Parameters  : aViewId : the view's id
@@ -176,14 +215,14 @@
     
     if (view)
     {
-        if (EViewFlag_ClearStackWhenActivate == view->flag())
+        if (view->testFlag(IRBaseView::EViewFlag_ClearStackWhenActivate))
         {
             clearStack();
         }
         else
         {    if (aPushCurrentView)
              {
-                 if (baseView && EViewFlag_UnStackable != baseView->flag())
+                 if (baseView && !baseView->testFlag(IRBaseView::EViewFlag_UnStackable))
                  {
                      iViewStack.push(baseView);
                  }
@@ -317,7 +356,96 @@
     Q_ASSERT(curView);
     iViewStack.push(curView);
 }
- 
+
+void IRViewManager::saveScreenShot()
+{
+    //if capture screen shot immediately for first view, can't get correct result
+    //use timer as a temp solution, will raise error to Orbit
+    QTimer::singleShot(200, this, SLOT(handleSaveScreenShot()));
+}
+
+void IRViewManager::saveActivity()
+{
+    HbActivityManager *activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+    
+    //for embedded applications, don't publish activity. If backup activity is available, need to restore
+    if (XQServiceUtil::isEmbedded())
+    {
+        if (!iActivityBackup.activityId.isEmpty())
+        {
+            QVariantHash metadata;
+            metadata.insert("screenshot", iActivityBackup.screenShot);
+            
+            QByteArray serializedActivity;
+            QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
+            stream<<iActivityBackup.viewId;
+            activityManager->addActivity(iActivityBackup.activityId, serializedActivity, metadata);
+        }
+        return;
+    }
+    
+    removeActivity();
+    
+    
+    QVariantHash metadata;
+        
+    QByteArray serializedActivity;
+    QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
+    
+    TIRViewId viewId = getExitingView();
+    switch (viewId)
+    {
+    case EIRView_MainView:
+    case EIRView_FavoritesView:
+    case EIRView_CategoryView:
+        stream<<viewId;
+        metadata.insert("screenshot", iScreenShots[viewId]);
+        activityManager->addActivity(KActivityMainView, serializedActivity, metadata);
+        break;
+        
+    case EIRView_PlayingView:
+        stream<<viewId;
+        metadata.insert("screenshot", iScreenShots[viewId]);
+        activityManager->addActivity(KActivityPlayingView, serializedActivity, metadata);
+        break;
+        
+    default:
+        break;
+    }
+}
+
+void IRViewManager::removeActivity()
+{
+    if (XQServiceUtil::isEmbedded())
+    {
+        backupActivity();
+    }
+    
+    HbActivityManager *activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+    activityManager->removeActivity(KActivityMainView);
+    activityManager->removeActivity(KActivityPlayingView);
+}
+
+void IRViewManager::backupActivity()
+{
+    HbApplication *hbApp = qobject_cast<HbApplication*>(qApp);
+    HbActivityManager *activityManager = hbApp->activityManager();
+    QList<QVariantHash> params = activityManager->activities();
+    TInt count = params.count();
+    if (count > 0)
+    {
+        QVariantHash activity = params[0];        
+        QString path = activity.value(activity.keys().at(2)).toString();
+        iActivityBackup.screenShot = QPixmap(path);
+        iActivityBackup.activityId = activity.value(activity.keys().at(1)).toString();
+        
+        QByteArray serializedModel = activityManager->activityData(iActivityBackup.activityId).toByteArray();
+        QDataStream stream(&serializedModel, QIODevice::ReadOnly);
+        int id = 0;
+        stream>>id;
+        iActivityBackup.viewId = TIRViewId(id);
+    }
+}
 
 //                                     slot functions
 
@@ -448,7 +576,7 @@
     IRBaseView *topView = static_cast<IRBaseView*>(currentView());
     if (topView)
     {
-        if (EViewFlag_ClearStackWhenActivate == topView->flag())
+        if (topView->testFlag(IRBaseView::EViewFlag_ClearStackWhenActivate))
         {
             topView->setNavigationAction(iExitAction);
         }
@@ -459,6 +587,15 @@
     }
 }
 
+void IRViewManager::handleSaveScreenShot()
+{
+    if (!XQServiceUtil::isEmbedded())
+    {
+        TIRViewId id = currentViewId();
+        iScreenShots[id] = QPixmap::grabWidget(this, rect());
+    }
+}
+
 void IRViewManager::mousePressEvent(QMouseEvent *aEvent)
 {
     if(iCrossLineEnable)
@@ -559,7 +696,11 @@
 {
     crossLineReset();
     viewport()->repaint();
+#ifdef SUBTITLE_STR_BY_LOCID
     HbMessageBox::information(hbTrId("txt_common_info_exiting"), (QObject*)NULL, NULL);
+#else
+    HbMessageBox::information(hbTrId("Exiting..."), (QObject*)NULL, NULL);    
+#endif
     qApp->quit();
     iExiting = true;
 }