diff -r d0b4e67b3a60 -r f291796e213d ui/viewmanagement/statehandler/src/glxstatemanager.cpp --- a/ui/viewmanagement/statehandler/src/glxstatemanager.cpp Wed Jun 23 18:12:48 2010 +0300 +++ b/ui/viewmanagement/statehandler/src/glxstatemanager.cpp Tue Jul 06 14:16:16 2010 +0300 @@ -22,6 +22,8 @@ #include #include #include +#include +#include //user includes #include "glxstatemanager.h" @@ -67,10 +69,12 @@ mViewManager = new GlxViewManager(); } mTNObserver = new GlxTNObserver(); + mSaveActivity.clear(); connect ( this, SIGNAL( setupItemsSignal() ), this, SLOT( setupItems() ), Qt::QueuedConnection ); connect ( mViewManager, SIGNAL(actionTriggered( qint32 )), this, SLOT(actionTriggered( qint32 )), Qt::QueuedConnection ); connect ( mTNObserver, SIGNAL( leftTNCount( int ) ), this, SLOT( updateTNProgress( int ) ) ); + connect ( qobject_cast(qApp), SIGNAL (aboutToQuit()), this, SLOT(saveData())); //TO:DO TBD through exception when it is null } @@ -121,12 +125,18 @@ void GlxStateManager::launchApplication() { qDebug("GlxStateManager::launchApplication"); - + bool activitySuccess = false; //To:Do use it in future once performance code is removed nextState(GLX_GRIDVIEW_ID, ALL_ITEM_S) + HbApplication* app = qobject_cast(qApp); + if(app->activateReason() == Hb::ActivationReasonActivity) { + activitySuccess = launchActivity(); + } + if( !activitySuccess ) { mCurrentState = createState( GLX_GRIDVIEW_ID ); mCurrentState->setState( ALL_ITEM_S ); - - if ( mTNObserver->getTNLeftCount() > 0 ) { + + int leftCount = mTNObserver->getTNLeftCount() ; + if ( leftCount > 0 ) { mViewManager->launchApplication( GLX_GRIDVIEW_ID, mCurrentModel); launchProgressDialog(); } @@ -136,6 +146,41 @@ } mTNObserver->startTNObserving() ; + } + //Remove the previous activity + HbActivityManager* activityManager = app->activityManager(); + bool ok = activityManager->removeActivity("PhotosMainView"); + if ( !ok ) + { + qDebug("launchapplication::Remove activity failed" ); + } +} +bool GlxStateManager::launchActivity() +{ + HbApplication* app = qobject_cast(qApp); + bool ok = app->activityManager()->waitActivity(); + if ( !ok ) + { + qDebug("subscribing to activity manager failed" ); + //return false; TBD: waitActivity is always returning false. Could be some issue with AM. + } + QVariant data = app->activityManager()->activityData( "PhotosMainView" ); + QByteArray serializedModel = data.toByteArray(); + QDataStream stream(&serializedModel, QIODevice::ReadOnly); + //Fetch the data from the activity Manager + QMap fetchActivity; + stream >> fetchActivity; + qint32 stateId = fetchActivity.value("ID"); + mCurrentState = createState(stateId); + mCurrentState->setState( fetchActivity.value("InternalState") ); + createModel( stateId); + /*Model might not be populated yet to set the visibleWindowIndex right away. + *So, let us store the visible index as a temporary Variable, so that visible Window Index + *is set once the model is populated. + */ + mCurrentModel->setData(QModelIndex(), fetchActivity.value("VisibleIndex") , GlxTempVisualWindowIndex ); + mViewManager->launchApplication(stateId, mCurrentModel); + return true; } void GlxStateManager::launchFromExternal() @@ -171,10 +216,12 @@ void GlxStateManager::updateTNProgress( int count) { TRACER("GlxStateManager::updateTNProgress() "); - // this is case when progress bar is not showing - // in the case of rename of an image or capture the single item - // it is also launching the progress bar, to avoid this scenario add the check of count more than 5 - if ( mCurrentModel && count > 5 ) { +// mCurrentModel ------------this is case when progress bar is not showing +// count > 5 ----------------in the case of rename of an image or capture the single item +// it is also launching the progress bar, to avoid this scenario add the check of count more than 5 +// count == KErrNotReady ----A case when memory card is inserted but it is not harvest so it is given an error +// In that case also user should be block to browse the images + if ( mCurrentModel && ( count > 5 ) ) { goBack( GLX_GRIDVIEW_ID, ALL_ITEM_S ) ; cleanAllModel(); launchProgressDialog(); @@ -189,9 +236,46 @@ else { mViewManager->updateProgressDialog( count ); } + } +} + +void GlxStateManager::saveData() +{ + if( (mCurrentState->id() == GLX_GRIDVIEW_ID && mCurrentState->state() == ALL_ITEM_S) || mCurrentState->id() == GLX_LISTVIEW_ID ) { + mSaveActivity.insert("ID",mCurrentState->id()); + mSaveActivity.insert("InternalState",mCurrentState->state()); + + //Store the visual Index + if(mCurrentModel) + { + QVariant variant = mCurrentModel->data( mCurrentModel->index(0,0), GlxVisualWindowIndex ); + if ( variant.isValid() && variant.canConvert () ) { + mSaveActivity.insert("VisibleIndex",variant.value()); + } + } + else + mSaveActivity.insert("VisibleIndex",0); + + HbActivityManager* activityManager = qobject_cast(qApp)->activityManager(); + + //Take a screenshot + QVariantHash metadata; + HbMainWindow *window = hbInstance->allMainWindows().first(); + metadata.insert("screenshot", QPixmap::grabWidget(window, window->rect())); + + QByteArray serializedModel; + QDataStream stream(&serializedModel, QIODevice::WriteOnly | QIODevice::Append); + stream << mSaveActivity; + //Add the activity + bool ok = activityManager->addActivity("PhotosMainView", serializedModel, metadata); + if ( !ok ) + { + qDebug("SaveData::Add activity failed" ); } + } } + void GlxStateManager::nextState(qint32 state, int internalState) { qDebug("GlxStateManager::nextState next state = %u", state); @@ -226,7 +310,7 @@ if ( mCurrentState->previousState() == NULL ) { //In the case only one state in stack then exit from the application exitApplication() ; - mCurrentState = NULL; + return ; } else { //effect parameter should be set here other wise there is no way to know from where it come from @@ -618,13 +702,11 @@ void GlxStateManager::exitApplication() { - if ( mCurrentState->id( ) == GLX_FULLSCREENVIEW_ID && mCurrentState->state() == EXTERNAL_S ) { - emit externalCommand(EGlxPluginCmdBack); - } - else { + + //To:Do memory cleanup QApplication::quit(); - } + } GlxStateManager::~GlxStateManager() @@ -638,6 +720,7 @@ disconnect ( mViewManager, SIGNAL(externalCommand(int )), this, SIGNAL(externalCommand(int )) ); disconnect ( mTNObserver, SIGNAL( leftTNCount( int ) ), this, SLOT( updateTNProgress( int ) ) ); disconnect ( this, SIGNAL( setupItemsSignal() ), this, SLOT( setupItems() ) ); + disconnect ( qobject_cast(qApp), SIGNAL (aboutToQuit()), this, SLOT(saveData())); delete mTNObserver; delete mViewManager;