# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1284701233 -10800 # Node ID a289dde0a1d614704bcf7d1f23a15621fa5aa093 # Parent 01e205c615b9ac308fcdeb0e0a85627716ded349 Revision: 201035 Kit: 201037 diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/conf/backup_registration.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraxui/cxengine/conf/backup_registration.xml Fri Sep 17 08:27:13 2010 +0300 @@ -0,0 +1,22 @@ + + + + + + + diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/cxengine.pro --- a/camerauis/cameraxui/cxengine/cxengine.pro Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/cxengine.pro Fri Sep 17 08:27:13 2010 +0300 @@ -94,7 +94,7 @@ BLD_INF_RULES.prj_exports += "$$CXENGINE_DIR/data/videoStop.wav /epoc32/data/z/system/sounds/digital/videoStop.wav" } -# confml, crml files +# confml, crml files, backup registration definition symbian { CXENGINE_DIR = $$section(PWD,":",1) BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include " @@ -102,6 +102,7 @@ BLD_INF_RULES.prj_exports += "$$CXENGINE_DIR/conf/camerax_20027017.crml APP_LAYER_CRML(camerax_20027017.crml) BLD_INF_RULES.prj_exports += "$$CXENGINE_DIR/conf/cameraxvariation.confml APP_LAYER_CONFML(cameraxvariation.confml) BLD_INF_RULES.prj_exports += "$$CXENGINE_DIR/conf/cameraxvariation_20027018.crml APP_LAYER_CRML(cameraxvariation_20027018.crml) + BLD_INF_RULES.prj_exports += "$$CXENGINE_DIR/conf/backup_registration.xml /epoc32/data/z/private/20027017/backup_registration.xml" } diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/inc/api/cxutils.h --- a/camerauis/cameraxui/cxengine/inc/api/cxutils.h Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/inc/api/cxutils.h Fri Sep 17 08:27:13 2010 +0300 @@ -69,7 +69,7 @@ #define CX_ASSERT_ALWAYS(x) ASSERT(x) #else // !Q_OS_SYMBIAN #define CX_ASSERT_ALWAYS(x) Q_ASSERT(x) - #define OstTrace0(x,y,z) + #define OstTrace0(x,y,z) #endif // Q_OS_SYMBIAN #endif // _DEBUG diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/inc/cxestillcapturecontroldesktop.h --- a/camerauis/cameraxui/cxengine/inc/cxestillcapturecontroldesktop.h Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/inc/cxestillcapturecontroldesktop.h Fri Sep 17 08:27:13 2010 +0300 @@ -19,6 +19,7 @@ #include #include +#include #include "cxestillcapturecontrol.h" #include "cxeimagedataqueuedesktop.h" @@ -91,6 +92,9 @@ // Autofocus events void handleAutofocusStateChanged(CxeAutoFocusControl::State newState, CxeError::Id error); +private slots: + void startViewfinder(); + private: // helper functions void updateFlashSetting(QVariant newValue); void updateISOSetting(QVariant newValue); @@ -117,6 +121,8 @@ CxeAutoFocusControl::State mAfState; QList mImages; CxeFileSaveThread &mSaveThread; + + QTimer mViewFinderStartTimer; int mNextSnapshotIndex; int mNextImageDataIndex; diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/inc/cxevideocapturecontroldesktop.h --- a/camerauis/cameraxui/cxengine/inc/cxevideocapturecontroldesktop.h Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/inc/cxevideocapturecontroldesktop.h Fri Sep 17 08:27:13 2010 +0300 @@ -109,6 +109,7 @@ private slots: void handleElapseTimeout(); + void startViewfinder(); private: // private data @@ -129,6 +130,7 @@ //timer for simulating elapsing time QTimer mRecordElapseTimer; + QTimer mViewFinderStartTimer; //elapsed recording time in seconds int mElapsedTime; diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/inc/cxeviewfindercontroldesktop.h --- a/camerauis/cameraxui/cxengine/inc/cxeviewfindercontroldesktop.h Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/inc/cxeviewfindercontroldesktop.h Fri Sep 17 08:27:13 2010 +0300 @@ -25,8 +25,8 @@ class CxeViewfinderControlDesktop : public CxeViewfinderControl { Q_OBJECT + public: - CxeViewfinderControlDesktop(CxeCameraDeviceDesktop &cameraDevice); virtual ~CxeViewfinderControlDesktop(); @@ -41,6 +41,9 @@ virtual QSize deviceDisplayResolution() const; private: + void createViewfinderWidget(); + +private: State mState; WId mWindowId; QSize mResolution; diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/src/cxecameradevicedesktop.cpp --- a/camerauis/cameraxui/cxengine/src/cxecameradevicedesktop.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxecameradevicedesktop.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -100,6 +100,8 @@ { CX_DEBUG_ENTER_FUNCTION(); QDir currentDir(".","*.jpg"); + CX_DEBUG(("Searching images from %s", qPrintable(currentDir.absolutePath()))); + CX_DEBUG(("Number of images found %d", currentDir.count())); if (!currentDir.count()) { mPictureList.append(QPixmap(360, 640)); diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/src/cxegeotaggingtrail_symbian_p.cpp --- a/camerauis/cameraxui/cxengine/src/cxegeotaggingtrail_symbian_p.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxegeotaggingtrail_symbian_p.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -29,6 +29,7 @@ { // in milliseconds const int STOP_TRAIL_INTERVAL = 10*1000; + const int START_TRAIL_ATTEMPTS = 5; } /*! @@ -89,32 +90,39 @@ CX_DEBUG_ENTER_FUNCTION(); int err = KErrNone; + int retryTrail = START_TRAIL_ATTEMPTS; // In case RLocationTrail::StartLocationTrail() fail, we will retry int settingValue = Cxe::GeoTaggingOff; settingValue = mSettings.get(CxeSettingIds::GEOTAGGING, settingValue); if (settingValue == Cxe::GeoTaggingOn) { - // geotagging setting is ON, trying to start location trail - if (state() == CxeGeoTaggingTrail::NotConnected) { - err = mLocationTrail.Connect(); - if (!err) { - CX_DEBUG(("CxeGeoTaggingTrail <> location trail connected")); - setState(CxeGeoTaggingTrail::Connected); + while(retryTrail) { + // geotagging setting is ON, trying to start location trail + if (state() == CxeGeoTaggingTrail::NotConnected) { + err = mLocationTrail.Connect(); + if (!err) { + CX_DEBUG(("CxeGeoTaggingTrail <> location trail connected")); + setState(CxeGeoTaggingTrail::Connected); + } + } + // KErrAlreadyExists error means no harm to us + if (state() == CxeGeoTaggingTrail::Connected && + (!err || err == KErrAlreadyExists)) { + err = mLocationTrail.StartLocationTrail(RLocationTrail::ECaptureAll); + if (!err || err == KErrAlreadyExists) { + CX_DEBUG(("CxeGeoTaggingTrail <> starting location trail")); + mStopLocationTrailTimer.stop(); // stop location timer. + setState(CxeGeoTaggingTrail::TrailStarted); + } + } + if (err && err != KErrAlreadyExists) { + CX_DEBUG(("CxeGeoTaggingTrailPrivate::start <> FAILED: error = %d . Retries left = %d", err, retryTrail)); + mLocationTrail.Close(); + retryTrail--; + } + else { + retryTrail = 0; } } - - if (state() == CxeGeoTaggingTrail::Connected && !err) { - err = mLocationTrail.StartLocationTrail(RLocationTrail::ECaptureAll); - if (!err) { - CX_DEBUG(("CxeGeoTaggingTrail <> starting location trail")); - mStopLocationTrailTimer.stop(); // stop location timer. - setState(CxeGeoTaggingTrail::TrailStarted); - } - } - - if (err) { - CX_DEBUG(("CxeGeoTaggingTrailPrivate::start <> FAILED: error = %d ", err)); - mLocationTrail.Close(); - } } else { // geotagging setting off, do nothing. CX_DEBUG(("CxeGeoTaggingTrail <> start -- Geotagging setting OFF, do nothing..")); diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/src/cxequalitypresetssymbian.cpp --- a/camerauis/cameraxui/cxengine/src/cxequalitypresetssymbian.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxequalitypresetssymbian.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -184,9 +184,8 @@ int numLevels = levels->Count(); for(int i = 0; i < numLevels; i++) { mIcm->GetVideoQualitySet(set, levels->At(i), displayId); - - // Disable all video sizes larger than VGA - if (set.iCamcorderVisible > 0 && set.iVideoWidth <= 864) { + + if (set.iCamcorderVisible > 0) { // create new quality preset CxeVideoDetails newPreset = createVideoPreset(set); diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/src/cxesoundplayersymbian.cpp --- a/camerauis/cameraxui/cxengine/src/cxesoundplayersymbian.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxesoundplayersymbian.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -92,8 +92,8 @@ emit playComplete(KErrNone); } - } else if( state() == NotReady ) { - // Here sound loading has failed. + } else { + // Here sound loading has failed or has not finished yet. // Emit signal with error code. emit playComplete(KErrNotReady); } diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/src/cxestillcapturecontroldesktop.cpp --- a/camerauis/cameraxui/cxengine/src/cxestillcapturecontroldesktop.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxestillcapturecontroldesktop.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -32,8 +32,11 @@ #include "cxecameradevicedesktop.h" // constants -const int KMaintainAspectRatio = false; - +namespace +{ + static const int KMaintainAspectRatio = false; + static const int VIEWFINDER_START_TIMEOUT = 500; // 0.5 second +} /** @@ -62,6 +65,10 @@ initializeStates(); reset(); + mViewFinderStartTimer.setSingleShot(true); + mViewFinderStartTimer.setInterval(VIEWFINDER_START_TIMEOUT); + connect(&mViewFinderStartTimer, SIGNAL(timeout()), this, SLOT(startViewfinder())); + mImageDataQueue = new CxeImageDataQueueDesktop(); CX_DEBUG_EXIT_FUNCTION(); @@ -131,6 +138,10 @@ CX_DEBUG_EXIT_FUNCTION(); return; } + + mViewFinderStartTimer.stop(); + mViewfinderControl.stop(); + mState = Uninitialized; CX_DEBUG_EXIT_FUNCTION(); } @@ -173,8 +184,8 @@ } if (!err) { - // If viewfinder is already running, this call does nothing - mViewfinderControl.start(); + // Start viewfinder with delay. + mViewFinderStartTimer.start(); // inform zoom control to prepare zoom emit prepareZoomForStill(ecamStillResolutionIndex); } else { @@ -573,6 +584,17 @@ CX_DEBUG_EXIT_FUNCTION(); } +/*! +* Slot for starting viewfinder after a delay. +* Delay helps viewfinder widget to find the right, visible transparent window to attach to. +*/ +void CxeStillCaptureControlDesktop::startViewfinder() +{ + CX_DEBUG_ENTER_FUNCTION(); + mViewfinderControl.start(); + CX_DEBUG_EXIT_FUNCTION(); +} + /*! * Returns supported image qualities based on the camera index diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/src/cxestillcapturecontrolsymbian.cpp --- a/camerauis/cameraxui/cxengine/src/cxestillcapturecontrolsymbian.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxestillcapturecontrolsymbian.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -190,9 +190,15 @@ OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_INIT_IN, "msg: e_CX_STILL_CAPCONT_INIT 1"); if (state() == Uninitialized) { + + // prepare for still capture. prepare(); + // Initialize orientation sensor and other sensors mSensorEventHandler.init(); + + // inform zoom control to prepare zoom + emit prepareZoomForStill(mSizeIndex); } OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_INIT_OUT, "msg: e_CX_STILL_CAPCONT_INIT 0"); @@ -285,9 +291,6 @@ // We can safely set state to READY. setState(Ready); - // inform zoom control to prepare zoom - emit prepareZoomForStill(mSizeIndex); - } catch (const std::exception &e) { // Exception encountered, free resources. CX_DEBUG(("Image Prepare FAILED! symbian error = %d", qt_symbian_exception2Error(e))); diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/src/cxethumbnailmanagersymbian.cpp --- a/camerauis/cameraxui/cxengine/src/cxethumbnailmanagersymbian.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxethumbnailmanagersymbian.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -119,6 +119,7 @@ Q_UNUSED(thumbnail); Q_UNUSED(data); + Q_UNUSED(error); CX_DEBUG(("CxeThumbnailManagerSymbian::thumbnailReady error = %d", error)); diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/src/cxevideocapturecontroldesktop.cpp --- a/camerauis/cameraxui/cxengine/src/cxevideocapturecontroldesktop.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxevideocapturecontroldesktop.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -30,6 +30,7 @@ { // Unit is milliseconds static const int CXENGINE_ELAPSED_TIME_TIMEOUT = 1000; // 1 second + static const int VIEWFINDER_START_TIMEOUT = 500; // 0.5 second // Unit is seconds static const int CXENGINE_MAXIMUM_VIDEO_TIME = 90*60; // 90 minutes @@ -60,6 +61,11 @@ qRegisterMetaType (); initializeStates(); setupElapseTimer(); + + mViewFinderStartTimer.setSingleShot(true); + mViewFinderStartTimer.setInterval(VIEWFINDER_START_TIMEOUT); + connect(&mViewFinderStartTimer, SIGNAL(timeout()), this, SLOT(startViewfinder())); + CX_DEBUG_EXIT_FUNCTION(); } @@ -108,6 +114,10 @@ CX_DEBUG_EXIT_FUNCTION(); return; } + + mViewFinderStartTimer.stop(); + mViewfinderControl.stop(); + // stop video-recording in-case if its ongoing. stop(); @@ -224,7 +234,8 @@ emit prepareZoomForVideo(); } - mViewfinderControl.start(); + // Start viewfinder with delay. + mViewFinderStartTimer.start(); setState(Ready); // emit video prepare status @@ -319,7 +330,7 @@ * @Return current video snapshot */ QPixmap CxeVideoCaptureControlDesktop::snapshot() const -{ +{ return mSnapshot; } @@ -341,7 +352,7 @@ if (state() == Ready || state() == Paused) { //we skip the playing of the sound in the desktop state for now - setState(Recording); + setState(Recording); mRecordElapseTimer.start(); } @@ -373,14 +384,13 @@ if (state() == Recording || state() == Paused) { mFilenameGenerator.raiseCounterValue(); - } + + mRecordElapseTimer.stop(); + mElapsedTime = 0; - mViewfinderControl.stop(); - mRecordElapseTimer.stop(); - mElapsedTime = 0; - - setState(Stopping); - setState(Initialized); + setState(Stopping); + setState(Initialized); + } CX_DEBUG_EXIT_FUNCTION(); } @@ -541,6 +551,18 @@ CX_DEBUG( ("CxeVideoCaptureControlDesktop::handleElapseTimeout() <> mElapsedTime: %d", mElapsedTime ) ); } +/*! +* Slot for starting viewfinder after a delay. +* Delay helps viewfinder widget to find the right, visible transparent window to attach to. +*/ +void CxeVideoCaptureControlDesktop::startViewfinder() +{ + CX_DEBUG_ENTER_FUNCTION(); + mViewfinderControl.start(); + CX_DEBUG_EXIT_FUNCTION(); +} + + void CxeVideoCaptureControlDesktop::setState(CxeVideoCaptureControl::State stateId, CxeError::Id error) { mState = stateId; diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/src/cxevideocapturecontrolsymbian.cpp --- a/camerauis/cameraxui/cxengine/src/cxevideocapturecontrolsymbian.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxevideocapturecontrolsymbian.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -159,6 +159,8 @@ if (state() == Idle) { // start initializing resources for video capture initVideoRecorder(); + // inform zoom control to prepare zoom. + emit prepareZoomForVideo(); } else if (state() == Initialized) { // video recorder already initalized. Continue to prepare video reocording. open(); @@ -329,8 +331,7 @@ // Settings have been applied successfully, start to prepare. mVideoRecorder->prepare(); - // Prepare zoom only when there are no errors during prepare. - emit prepareZoomForVideo(); + // Inform client emit videoPrepareComplete(CxeError::None); } catch (const std::exception &e) { // Handle error. @@ -444,14 +445,18 @@ void CxeVideoCaptureControlSymbian::pause() { CX_DEBUG_ENTER_FUNCTION(); - try { - mVideoRecorder->pause(); - setState(CxeVideoCaptureControl::Paused); - // play the sound, but not changing the state - mVideoStopSoundPlayer->play(); - } catch (const std::exception &e) { - handleComposeFailed(qt_symbian_exception2Error(e)); + + if (state() == Recording) { + try { + mVideoRecorder->pause(); + setState(CxeVideoCaptureControl::Paused); + // play the sound, but not changing the state + mVideoStopSoundPlayer->play(); + } catch (const std::exception &e) { + handleComposeFailed(qt_symbian_exception2Error(e)); + } } + CX_DEBUG_EXIT_FUNCTION(); } diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/src/cxeviewfindercontroldesktop.cpp --- a/camerauis/cameraxui/cxengine/src/cxeviewfindercontroldesktop.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxeviewfindercontroldesktop.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -16,6 +16,7 @@ */ #include +#include #include #include #include @@ -52,21 +53,9 @@ if (state() != Running) { mState = Ready; emit stateChanged(mState, CxeError::None); - CX_DEBUG_EXIT_FUNCTION(); } - - HbMainWindow* mainWindow = qobject_cast(QWidget::find(mWindowId)); - - if (mainWindow) { - if( !mViewfinderWidget) { - mViewfinderWidget = new CxeViewfinderWidgetDesktop(); - connect(&mCameraDevice, SIGNAL(imageChanged(QPixmap)), mViewfinderWidget, SLOT(handleImageChange(QPixmap))); - } - HbView* view = mainWindow->currentView(); - view->scene()->addItem(mViewfinderWidget); - mViewfinderWidget->setZValue(-1.0); - } + CX_DEBUG_EXIT_FUNCTION(); } /*! @@ -76,6 +65,9 @@ CxeError::Id CxeViewfinderControlDesktop::start() { CX_DEBUG_ENTER_FUNCTION(); + + createViewfinderWidget(); + if (mState != Running) { mState = Running; emit stateChanged(mState, CxeError::None); @@ -113,4 +105,45 @@ return mResolution; } +/*! +* Create the viewfinder widget. +*/ +void CxeViewfinderControlDesktop::createViewfinderWidget() +{ + CX_DEBUG_ENTER_FUNCTION(); + HbMainWindow* mainWindow = qobject_cast(QWidget::find(mWindowId)); + if (mainWindow) { + CX_DEBUG(("Found main window.")); + // Remove the current viewfinder from previous view scene. + // Ownership is returned, so delete it now. + if (mViewfinderWidget) { + mViewfinderWidget->setParentItem(0); + mainWindow->scene()->removeItem(mViewfinderWidget); + delete mViewfinderWidget; + mViewfinderWidget = 0; + } + + // Find the visible transparent window and place our viewfinder widget as it's child. + HbView* view = mainWindow->currentView(); + const QList itemList(view->scene()->items()); + foreach (QGraphicsItem *item, itemList) { + if (item->type() == Hb::ItemType_TransparentWindow) { + CX_DEBUG(("Found transparent window, name: %s", + item->toGraphicsObject() + ? qPrintable(item->toGraphicsObject()->objectName()) + : qPrintable(QString("")))); + bool visible(item->isVisible()); + CX_DEBUG(("Is found transparent window visible: %s", qPrintable(QVariant::fromValue(visible).toString()))); + if (visible) { + mViewfinderWidget = new CxeViewfinderWidgetDesktop(); + connect(&mCameraDevice, SIGNAL(imageChanged(QPixmap)), mViewfinderWidget, SLOT(handleImageChange(QPixmap))); + mViewfinderWidget->setParentItem(item); + break; + } + } + } + } + CX_DEBUG_EXIT_FUNCTION(); +} + // end of file diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettings.cpp --- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettings.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettings.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -59,7 +59,7 @@ } else { err = CxeError::NotFound; } - + return err; //int variation = mVariationKeyHash[key]; //value = QVariant(variation); @@ -96,7 +96,6 @@ QHash CxeFakeSettings::loadVariationSettings() { QHash settings; - CxeError::Id err = CxeError::None; QVariantList list; QVariant data; diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/tsrc/unit/system_include/thumbnailmanager_qt.cpp --- a/camerauis/cameraxui/cxengine/tsrc/unit/system_include/thumbnailmanager_qt.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/tsrc/unit/system_include/thumbnailmanager_qt.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -54,8 +54,9 @@ int ThumbnailManager::getThumbnail(const QString& filename, void * clientData, int priority) { CX_DEBUG_ENTER_FUNCTION(); + Q_UNUSED(clientData); Q_UNUSED(priority); - + int id = 0; if (filename.isNull() || filename.isEmpty()) { @@ -116,7 +117,7 @@ // get the current thumbnail id int id = mCurrentThumbnailId - 1; int status = KErrNone; - + if (id == -1) { // if there are no valid thumbnails status = KErrNotFound; diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxecameradevicecontrolsymbian/unittest_cxecameradevicecontrolsymbian.cpp --- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxecameradevicecontrolsymbian/unittest_cxecameradevicecontrolsymbian.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxecameradevicecontrolsymbian/unittest_cxecameradevicecontrolsymbian.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -26,6 +26,7 @@ UnitTestCxeCameraDeviceControlSymbian::UnitTestCxeCameraDeviceControlSymbian() : mDeviceControl(NULL) { + qRegisterMetaType("CxeError::Id"); } UnitTestCxeCameraDeviceControlSymbian::~UnitTestCxeCameraDeviceControlSymbian() @@ -80,8 +81,10 @@ mDeviceControl->switchCamera(Cxe::SecondaryCameraIndex); + // Reserve can last long and we have had hacks with extra delay. + // Hence using quite large time out value. QVERIFY(CxeTestUtils::waitForState( - *mDeviceControl, CxeCameraDeviceControl::Ready, 1000)); + *mDeviceControl, CxeCameraDeviceControl::Ready, 3000)); QVERIFY(mDeviceControl->cameraIndex() == Cxe::SecondaryCameraIndex); } @@ -90,8 +93,9 @@ { mDeviceControl->reserve(); + // Using quite large time out value. See testSwitchCamera() comments. QVERIFY(CxeTestUtils::waitForState( - *mDeviceControl, CxeCameraDeviceControl::Ready, 1000)); + *mDeviceControl, CxeCameraDeviceControl::Ready, 3000)); } // main() function diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefeaturemanagerimp/unittest_cxefeaturemanagerimp.pro --- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefeaturemanagerimp/unittest_cxefeaturemanagerimp.pro Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefeaturemanagerimp/unittest_cxefeaturemanagerimp.pro Fri Sep 17 08:27:13 2010 +0300 @@ -17,7 +17,8 @@ cxefeaturemanagerimp.cpp \ cxesettingsmappersymbian.cpp \ cxesettingsimp.cpp \ - cxefakesettings.cpp + cxefakesettings.cpp \ + cxescenemodestore.cpp HEADERS *= unittest_cxefeaturemanagerimp.h \ cxefeaturemanagerimp.h \ cxeerror.h \ @@ -25,4 +26,6 @@ cxesettingsmappersymbian.h \ cxesettings.h \ cxesettingsimp.h \ - cxefakesettings.h + cxefakesettings.h \ + cxescenemodestore.h + diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilenamegeneratorsymbian/unittest_cxefilenamegeneratorsymbian.cpp --- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilenamegeneratorsymbian/unittest_cxefilenamegeneratorsymbian.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilenamegeneratorsymbian/unittest_cxefilenamegeneratorsymbian.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -43,7 +43,7 @@ void UnitTestCxeFilenameGeneratorSymbian::init() { mFakeSettings = new CxeFakeSettings(); - + mFakeSettings->set(CxeSettingIds::FNAME_MONTH_FOLDER, QDate::currentDate().toString("yyyyMM")); mFakeSettings->set(CxeSettingIds::FNAME_IMAGE_COUNTER, 0); mFakeSettings->set(CxeSettingIds::FNAME_VIDEO_COUNTER, 0); @@ -112,6 +112,8 @@ QString UnitTestCxeFilenameGeneratorSymbian::generateSequenceImageFileName(int counter, int burstIndex) { + Q_UNUSED(burstIndex); + // For now, burst image names are created like normal unique names QString filename = generateImageFileName(counter); // get the file name suffix diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilesavethreadsymbian/unittest_cxefilesavethreadsymbian.pro --- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilesavethreadsymbian/unittest_cxefilesavethreadsymbian.pro Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilesavethreadsymbian/unittest_cxefilesavethreadsymbian.pro Fri Sep 17 08:27:13 2010 +0300 @@ -14,8 +14,8 @@ include(../unittest.pri) -INCLUDEPATH *= ../system_include -DEPENDPATH *= ../system_include +INCLUDEPATH = . ../utils ../system_include ../../fakeclasses ../../../traces +DEPENDPATH = . ../utils ../system_include ../../fakeclasses ../../../traces TARGET = unittest_cxefilesavethreadsymbian @@ -23,37 +23,38 @@ LIBS *= -lplatformenv LIBS *= -lefsrv LIBS *= -lcone -LIBS *= -lthumbnailmanagerqt -SOURCES *= unittest_cxefilesavethreadsymbian.cpp \ +SOURCES *= ./unittest_cxefilesavethreadsymbian.cpp \ thumbnailmanager_qt.cpp \ harvesterclient.cpp \ - cxefilesavethread.cpp \ - cxefilesavethreadsymbian.cpp \ + ../../../src/cxefilesavethread.cpp \ + ../../../src/cxefilesavethreadsymbian.cpp \ cxefakeimagedataitem.cpp \ - cxeimagedataitemsymbian.cpp \ - cxeharvestercontrolsymbian.cpp \ - cxethumbnailmanagersymbian.cpp \ - cxesysutil.cpp \ - cxestatemachinebase.cpp \ - cxestatemachine.cpp \ - cxestate.cpp \ - cxeerrormappingsymbian.cpp + ../../../src/cxeimagedataitemsymbian.cpp \ + ../../../src/cxeharvestercontrolsymbian.cpp \ + ../../../src/cxethumbnailmanagersymbian.cpp \ + ../../../src/cxesysutil.cpp \ + ../../../src/cxestatemachinebase.cpp \ + ../../../src/cxestatemachine.cpp \ + ../../../src/cxestate.cpp \ + cxetestutils.cpp \ + ../../../src/cxeerrormappingsymbian.cpp -HEADERS *= unittest_cxefilesavethreadsymbian.h \ +HEADERS *= ./unittest_cxefilesavethreadsymbian.h \ thumbnailmanager_qt.h \ harvesterclient.h \ - cxefilesavethread.h \ - cxefilesavethreadsymbian.h \ + ../../../inc/cxefilesavethread.h \ + ../../../inc/cxefilesavethreadsymbian.h \ cxefakeimagedataitem.h \ - cxeimagedataitemsymbian.h \ - cxeimagedataitem.h \ - cxeerror.h \ - cxeharvestercontrolsymbian.h \ - cxethumbnailmanagersymbian.h \ - cxesysutil.h \ - cxestatemachinebase.h \ - cxestatemachine.h \ - cxestate.h \ - cxeerrormappingsymbian.h + ../../../inc/cxeimagedataitemsymbian.h \ + ../../../inc/api/cxeimagedataitem.h \ + ../../../inc/api/cxeerror.h \ + ../../../inc/cxeharvestercontrolsymbian.h \ + ../../../inc/cxethumbnailmanagersymbian.h \ + ../../../inc/cxesysutil.h \ + ../../../inc/cxestatemachinebase.h \ + ../../../inc/cxestatemachine.h \ + ../../../inc/cxestate.h \ + cxetestutils.h \ + ../../../inc/cxeerrormappingsymbian.h diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/unittest_cxememorymonitor.cpp --- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/unittest_cxememorymonitor.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/unittest_cxememorymonitor.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -25,8 +25,8 @@ #include "unittest_cxememorymonitor.h" UnitTestCxeMemoryMonitor::UnitTestCxeMemoryMonitor() - : mMemoryMonitor(NULL), - mFakeFeatureManager(NULL) + : mFakeFeatureManager(NULL), + mMemoryMonitor(NULL) { } diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingsimp/unittest_cxesettingsimp.cpp --- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingsimp/unittest_cxesettingsimp.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingsimp/unittest_cxesettingsimp.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -27,14 +27,13 @@ const char* FAIL_TEST_SETTING = "Fail test"; const char* EMPTY_STRING = ""; -const int CAMERA_MODE_STILL = 0; -const int CAMERA_MODE_VIDEO = 1; //Default EV compensation value for auto still and auto video scene mode const int SCENE_AUTO_EV_VALUE = 0; const int SIGNAL_TIMEOUT = 3000; //milliseconds -UnitTestCxeSettingsImp::UnitTestCxeSettingsImp() : - mSettingsImp(NULL), mSettingsStore(NULL) +UnitTestCxeSettingsImp::UnitTestCxeSettingsImp() + : mSettingsStore(NULL), + mSettingsImp(NULL) { qRegisterMetaType("CxeScene"); qRegisterMetaType("CxeError::Id"); @@ -130,7 +129,6 @@ void UnitTestCxeSettingsImp::testGet() { CX_DEBUG_ENTER_FUNCTION(); - CxeError::Id err = CxeError::None; // The idea of this test case is to test as much of different type of settings // as possible @@ -146,7 +144,6 @@ QString message = "Exception thrown, error id = "; message.append(exception.error()); QFAIL(message.toAscii()); - return; } mSettingsStore->get(CxeSettingIds::BRIGHTNESS, testValue); @@ -161,7 +158,6 @@ QString message = "Exception thrown, error id = "; message.append(exception.error()); QFAIL(message.toAscii()); - return; } QVariant colorTone2; @@ -177,7 +173,6 @@ QString message = "Exception thrown, error id = "; message.append(exception.error()); QFAIL(message.toAscii()); - return; } mSettingsStore->get(CxeSettingIds::CONTRAST, testValue); @@ -192,7 +187,6 @@ QString message = "Exception thrown, error id = "; message.append(exception.error()); QFAIL(message.toAscii()); - return; } mSettingsStore->get(CxeSettingIds::FNAME_FOLDER_SUFFIX, testValue); @@ -211,7 +205,6 @@ QString message = "Exception thrown, error id = "; message.append(exception.error()); QFAIL(message.toAscii()); - return; } QCOMPARE(sceneData[CxeSettingIds::EV_COMPENSATION_VALUE].toInt(), SCENE_AUTO_EV_VALUE); @@ -226,7 +219,6 @@ QString message = "Exception thrown, error id = "; message.append(exception.error()); QFAIL(message.toAscii()); - return; } QCOMPARE(sceneData[CxeSettingIds::EV_COMPENSATION_VALUE].toInt(), SCENE_AUTO_EV_VALUE); @@ -332,7 +324,6 @@ QString message = "Exception thrown, error id = "; message.append(exception.error()); QFAIL(message.toAscii()); - return; } mSettingsStore->get(CxeSettingIds::COLOR_TONE, value); QCOMPARE(value.toInt(), (int)Cxe::ColortoneBlackAndWhite); @@ -346,7 +337,6 @@ QString message = "Exception thrown, error id = "; message.append(exception.error()); QFAIL(message.toAscii()); - return; } mSettingsStore->get(CxeSettingIds::FNAME_FOLDER_SUFFIX, value); QCOMPARE(value.toString(), stringValue); @@ -360,7 +350,6 @@ QString message = "Exception thrown, error id = "; message.append(exception.error()); QFAIL(message.toAscii()); - return; } mSettingsStore->get(CxeSettingIds::STILL_SHOWCAPTURED, value); QCOMPARE(value.toBool(), boolValue); @@ -374,7 +363,6 @@ QString message = "Exception thrown, error id = "; message.append(exception.error()); QFAIL(message.toAscii()); - return; } mSettingsStore->get(CxeSettingIds::EV_COMPENSATION_VALUE, value); QCOMPARE(value.toReal(), qrealValue); diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxethumbnailmanagersymbian/unittest_cxethumbnailmanagersymbian.cpp --- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxethumbnailmanagersymbian/unittest_cxethumbnailmanagersymbian.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxethumbnailmanagersymbian/unittest_cxethumbnailmanagersymbian.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -23,8 +23,6 @@ #include "cxutils.h" #include "cxetestutils.h" -const int SIGNAL_TIMEOUT = 3000; //milliseconds - UnitTestCxeThumbnailManagerSymbian::UnitTestCxeThumbnailManagerSymbian() { @@ -52,36 +50,11 @@ { CX_DEBUG_ENTER_FUNCTION(); - QSignalSpy thumbnailReadySpy(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int))); - QString filename; - - QVERIFY(thumbnailReadySpy.isValid()); - - // case 1: testing with wrong dummy file, we should get an error code with thumbnailready - // since filename is invalid - // DISABLE FOR NOW - // TODO: Create a fake implementation for the thumbnailmanager - // what is used by cxethumbnailmanagersymbian. - //mThumbnailManager->createThumbnail(filename, QImage()); - - // we should not get any call back when we have invalid file name. - //QCOMPARE(thumbnailReadySpy.count(), 0); + // case 1: Testing with wrong dummy file. Check only that call is made successfully. + mThumbnailManager->createThumbnail(QString(""), QImage()); - - // case 1: testing with proper file name, we shouldnt get an error code with thumbnailready - // since filename is valid - filename = QString("c:\\test.jpg"); - mThumbnailManager->createThumbnail(filename, QImage()); - - QVERIFY(CxeTestUtils::waitForSignal(thumbnailReadySpy, SIGNAL_TIMEOUT)); - - - //QCOMPARE( thumbnailReadySpy.count(), 1 ); - if (thumbnailReadySpy.count() > 0) { - QList initModeArguments = thumbnailReadySpy.takeFirst(); - // we are only interested in error code in this case 1 - QCOMPARE(initModeArguments.at(1).toInt(), KErrNone); - } + // case 2: Testing with proper file name. + mThumbnailManager->createThumbnail(QString("C:\\test.jpg"), QImage()); CX_DEBUG_EXIT_FUNCTION(); } @@ -91,8 +64,17 @@ { CX_DEBUG_ENTER_FUNCTION(); + // case 1: Cancel with empty string. + mThumbnailManager->cancelThumbnail(QString()); + + // case 2: Cancel non-existent file / request. mThumbnailManager->cancelThumbnail(QString("filename")); + // case 3: Cancel actual request. + QString file("C:\\test2.jpg"); + mThumbnailManager->createThumbnail(file, QImage()); + mThumbnailManager->cancelThumbnail(file); + CX_DEBUG_EXIT_FUNCTION(); } diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxethumbnailmanagersymbian/unittest_cxethumbnailmanagersymbian.pro --- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxethumbnailmanagersymbian/unittest_cxethumbnailmanagersymbian.pro Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxethumbnailmanagersymbian/unittest_cxethumbnailmanagersymbian.pro Fri Sep 17 08:27:13 2010 +0300 @@ -1,4 +1,4 @@ -# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). # All rights reserved. # This component and the accompanying materials are made available # under the terms of "Eclipse Public License v1.0" @@ -15,16 +15,15 @@ TARGET = unittest_cxethumbnailmanagersymbian -INCLUDEPATH *= ../system_include -DEPENDPATH *= ../system_include - -LIBS *= -lthumbnailmanagerqt +# Override include paths so that our stub implementation of system classes is used. +DEPENDPATH = . ../system_include ../utils +INCLUDEPATH = . ../system_include ../utils HEADERS *= unittest_cxethumbnailmanagersymbian.h \ - cxethumbnailmanagersymbian.h \ + ../../../inc/cxethumbnailmanagersymbian.h \ thumbnailmanager_qt.h \ - cxutils.h + ../../../inc/api/cxutils.h SOURCES *= unittest_cxethumbnailmanagersymbian.cpp \ thumbnailmanager_qt.cpp \ - cxethumbnailmanagersymbian.cpp + ../../../src/cxethumbnailmanagersymbian.cpp diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/unittest_cxevideocapturecontrolsymbian.cpp --- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/unittest_cxevideocapturecontrolsymbian.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/unittest_cxevideocapturecontrolsymbian.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -138,7 +138,9 @@ doPrepareStuff(); QCOMPARE(mCxeVideoCaptureControlSymbian->state(), CxeVideoCaptureControl::Ready); + mCxeVideoCaptureControlSymbian->record(); + QTest::qWait(1000); // Wait for recording to start. QCOMPARE(mCxeVideoCaptureControlSymbian->state(), CxeVideoCaptureControl::Recording); CX_DEBUG_EXIT_FUNCTION(); @@ -150,6 +152,7 @@ doPrepareStuff(); mCxeVideoCaptureControlSymbian->record(); + QTest::qWait(1000); // Wait for recording to start. mCxeVideoCaptureControlSymbian->pause(); QCOMPARE(mCxeVideoCaptureControlSymbian->state(), CxeVideoCaptureControl::Paused); @@ -162,6 +165,7 @@ doPrepareStuff(); mCxeVideoCaptureControlSymbian->record(); + QTest::qWait(1000); // Wait for recording to start. mCxeVideoCaptureControlSymbian->stop(); QVERIFY((mCxeVideoCaptureControlSymbian->state() == CxeVideoCaptureControl::Stopping) || (mCxeVideoCaptureControlSymbian->state() == CxeVideoCaptureControl::Initialized) @@ -200,7 +204,7 @@ doPrepareStuff(); mCxeVideoCaptureControlSymbian->record(); - QTest::qWait(1000); + QTest::qWait(2000); mCxeVideoCaptureControlSymbian->stop(); // just call to see if it doesn't crash mCxeVideoCaptureControlSymbian->reset(); diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxui/inc/cxuiprecaptureview.h --- a/camerauis/cameraxui/cxui/inc/cxuiprecaptureview.h Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxui/inc/cxuiprecaptureview.h Fri Sep 17 08:27:13 2010 +0300 @@ -142,6 +142,7 @@ private slots: void disableGeotaggingDisclaimer(); void launchGeoTaggingSetting(); + void blinkGeoTaggingIcon(); protected: void toggleControls(); @@ -185,6 +186,7 @@ HbAction *mSettingsDialogOkAction; HbAction *mSliderSettingsDialogOkAction; + QTimer *mGeoTaggingBlinkTimer; // for blinking geotagging icon }; #endif // CXUIPRECAPTUREVIEW_H diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxui/inc/cxuistillprecaptureview.h --- a/camerauis/cameraxui/cxui/inc/cxuistillprecaptureview.h Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxui/inc/cxuistillprecaptureview.h Fri Sep 17 08:27:13 2010 +0300 @@ -109,6 +109,7 @@ void updateQualityIcon(); void closeDialogs(); void updateFaceTrackingIcon(); + void updateGeotaggingIcon(); private: void reloadIndicatorWidgets(); diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxui/layouts/image_setting.xml --- a/camerauis/cameraxui/cxui/layouts/image_setting.xml Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxui/layouts/image_setting.xml Fri Sep 17 08:27:13 2010 +0300 @@ -92,7 +92,7 @@ preview="0" type="SingleLineListBox" setting_icon=""> - + diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxui/src/cxuiprecaptureview.cpp --- a/camerauis/cameraxui/cxui/src/cxuiprecaptureview.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxui/src/cxuiprecaptureview.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -72,6 +72,8 @@ using namespace CxUiSettings; using namespace CxUiInternal; +const int CXUI_GEOTAGGING_BLINK_INTERVAL = 500; //milliseconds, for geotagging icon + // --------------------------------------------------------------------------- // CxuiPrecaptureView::CxuiPrecaptureView @@ -156,6 +158,9 @@ mHideControlsTimeout.setSingleShot(true); mHideControlsTimeout.setInterval(CXUI_HIDE_CONTROLS_TIMEOUT); + mGeoTaggingBlinkTimer = new QTimer(this); + connect(mGeoTaggingBlinkTimer, SIGNAL(timeout()), this, SLOT(blinkGeoTaggingIcon())); + hideControls(); if (CxuiServiceProvider::isCameraEmbedded()) { @@ -888,21 +893,43 @@ void CxuiPrecaptureView::updateLocationIndicator(CxeGeoTaggingTrail::State newState, CxeError::Id error) { CX_DEBUG( ("CxuiPrecaptureView::updateLocationIndicator <> error: %d ", error)); - - if (mGeoTaggingIndicatorIcon) { + Cxe::GeoTagging currentValue = mEngine->settings().get(CxeSettingIds::GEOTAGGING); + if(currentValue == Cxe::GeoTaggingOn && mGeoTaggingIndicatorIcon) { if (newState == CxeGeoTaggingTrail::DataAvailable && error == CxeError::None) { CX_DEBUG(("CxuiPrecaptureView::updateLocationIndicator GPS data available, showing icon")); - mGeoTaggingIndicatorIcon->setIcon(HbIcon("qtg_mono_geotag")); mGeoTaggingIndicatorIcon->show(); + mGeoTaggingBlinkTimer->stop(); } else { - CX_DEBUG(("CxuiPrecaptureView::handleIconChanged GPS data not available")); - mGeoTaggingIndicatorIcon->hide(); + // blinking geotagging indicator while acquiring GPS data + CX_DEBUG(("CxuiPrecaptureView::updateLocationIndicator waiting for GPS data, blinking icon")); + mGeoTaggingBlinkTimer->setInterval(CXUI_GEOTAGGING_BLINK_INTERVAL); + mGeoTaggingBlinkTimer->start(); } } + else { + CX_DEBUG(("CxuiPrecaptureView::handleIconChanged GPS data not available")); + mGeoTaggingBlinkTimer->stop(); + } CX_DEBUG_EXIT_FUNCTION(); } +/*! + * Private method for blinking geotagging icon + */ +void CxuiPrecaptureView::blinkGeoTaggingIcon() +{ + if (mGeoTaggingIndicatorIcon) { + if (mGeoTaggingIndicatorIcon->isVisible()) { + mGeoTaggingIndicatorIcon->setVisible(false); + } else { + mGeoTaggingIndicatorIcon->setVisible(true); + } + } +} + +void CxuiPrecaptureView::toolbarExtensionAppearEffectFinished(const HbEffect::EffectStatus &status) { +} void CxuiPrecaptureView::toolbarExtensionDisappearEffectFinished(const HbEffect::EffectStatus &status) { if (mSettingsGrid) { @@ -910,11 +937,6 @@ } } -void CxuiPrecaptureView::toolbarExtensionAppearEffectFinished(const HbEffect::EffectStatus &status) { -} - - - /*! * Lauches "Geotagging first-time use" notification to the user */ diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxui/src/cxuiscenemodeview.cpp --- a/camerauis/cameraxui/cxui/src/cxuiscenemodeview.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxui/src/cxuiscenemodeview.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -194,11 +194,18 @@ QVariantMap data; QVariantHash params; - //@todo: add pre-capture icon as screenshot if (mEngine->mode() == Cxe::ImageMode) { + HbIcon activityScreenshot("qtg_graf_taskswitcher_camera"); + QPixmap screenshot = activityScreenshot.pixmap(); + params.insert("screenshot", screenshot); + mActivityManager->removeActivity(CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY); mActivityManager->addActivity(CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY, data, params); } else { + HbIcon activityScreenshot("qtg_graf_taskswitcher_camcorder"); + QPixmap screenshot = activityScreenshot.pixmap(); + params.insert("screenshot", screenshot); + mActivityManager->removeActivity(CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY); mActivityManager->addActivity(CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY, data, params); } diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxui/src/cxuisettingradiobuttonlistmodel.cpp --- a/camerauis/cameraxui/cxui/src/cxuisettingradiobuttonlistmodel.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxui/src/cxuisettingradiobuttonlistmodel.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -117,6 +117,17 @@ { CX_DEBUG_ENTER_FUNCTION(); mItems = items; + + // Notify radio button list that the data content has changed. + if (mItems.size() > 0) { + const QModelIndex start = index(0, 0); + const QModelIndex end = index(mItems.size() - 1, 0); + emit dataChanged(start, end); + } + + // Relayouting needed. + emit layoutChanged(); + CX_DEBUG_EXIT_FUNCTION(); } diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxui/src/cxuisettingsinfo.cpp --- a/camerauis/cameraxui/cxui/src/cxuisettingsinfo.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxui/src/cxuisettingsinfo.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -238,7 +238,7 @@ qualityIcon = "qtg_mono_12mp"; } else if (quality.mMpxCount == "9") { qualityIcon = "qtg_mono_9mp"; - } else if (quality.mMpxCount == "3") { + } else if (quality.mMpxCount == "3.1") { qualityIcon = "qtg_mono_3mp"; } else if (quality.mMpxCount == "1.2") { qualityIcon = "qtg_mono_1_3mp"; diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxui/src/cxuistillprecaptureview.cpp --- a/camerauis/cameraxui/cxui/src/cxuistillprecaptureview.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxui/src/cxuistillprecaptureview.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -157,6 +157,10 @@ CX_DEBUG_ENTER_FUNCTION(); CX_ASSERT_ALWAYS(mDocumentLoader); + // delete old indicator container and indicators before creating new ones + delete mIndicators; + mIndicators = NULL; + bool ok = false; mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_INDICATORS_SECTION, &ok); CX_ASSERT_ALWAYS(ok); @@ -224,7 +228,12 @@ // create background for indicator container createWidgetBackgroundGraphic(mIndicators, TRANSPARENT_BACKGROUND_GRAPHIC); - + + // Update the icons that are possibly changed during reloading + updateQualityIcon(); + updateFaceTrackingIcon(); + updateGeotaggingIcon(); + mIndicators->setVisible(true); CX_DEBUG_EXIT_FUNCTION(); @@ -652,16 +661,13 @@ switch (newstate) { case CxeAutoFocusControl::Failed: case CxeAutoFocusControl::Ready: + case CxeAutoFocusControl::Unknown: if (mCapturePending) { // focus and capture were grouped together, capture straight away - capture(); - } - break; - case CxeAutoFocusControl::Unknown: - // Capture key was pressed, focus has been cancelled, - // continue with capturing. - if(mCapturePending) { CX_DEBUG(("mCapturePending is true, starting capture now")); + OstTrace0(camerax_performance, CXUISTILLPRECAPTUREVIEW_SHOT_TO_SHOT2, "msg: e_CX_SHOT_TO_SHOT 1"); + OstTrace0(camerax_performance, CXUISTILLPRECAPTUREVIEW_SHOT_TO_SNAP2, "msg: e_CX_SHOT_TO_SNAPSHOT 1"); + OstTrace0(camerax_performance, CXUISTILLPRECAPTUREVIEW_SHOT_TO_SAVE2, "msg: e_CX_SHOT_TO_SAVE 1"); capture(); } break; @@ -775,6 +781,8 @@ updateImagesLeftLabel(); updateQualityIcon(); updateFaceTrackingIcon(); + updateGeotaggingIcon(); + // cancel selftimer when returning to precapture // since selftimer needs to be turned off after capturing an image @@ -924,22 +932,18 @@ \sa CxuiStillPrecaptureView::handleSceneChanged(CxeScene &scene) */ -void CxuiStillPrecaptureView::handleSettingValueChanged(const QString& key, QVariant newValue) +void CxuiStillPrecaptureView::handleSettingValueChanged(const QString &key, QVariant newValue) { CX_DEBUG_ENTER_FUNCTION(); if (mEngine->mode() == Cxe::ImageMode) { - // update images left and image quality icons if (key == CxeSettingIds::IMAGE_QUALITY) { - // update the quality indicator on screen - updateQualityIcon(); + reloadIndicatorWidgets(); // update images left when quality values are changed updateImagesLeftLabel(); - } else if (key == CxeSettingIds::FACE_TRACKING) { - reloadIndicatorWidgets(); - updateFaceTrackingIcon(); - } else if (key == CxeSettingIds::GEOTAGGING) { + } else if (key == CxeSettingIds::FACE_TRACKING || + key == CxeSettingIds::GEOTAGGING) { reloadIndicatorWidgets(); } @@ -1048,4 +1052,25 @@ CX_DEBUG_EXIT_FUNCTION(); } +/*! + Update the geotagging icon +*/ +void CxuiStillPrecaptureView::updateGeotaggingIcon() +{ + CX_DEBUG_ENTER_FUNCTION(); + if (mGeoTaggingIndicatorIcon && mEngine) { + QString key = ""; + QString icon = ""; + + key = CxeSettingIds::GEOTAGGING; + + int currentValue = mEngine->settings().get(key, -1); + icon = getSettingItemIcon(key, currentValue); + + mGeoTaggingIndicatorIcon->setIcon(HbIcon(icon)); + mGeoTaggingIndicatorIcon->setVisible(true); + } + CX_DEBUG_EXIT_FUNCTION(); +} + // end of file diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxui/src/cxuivideoprecaptureview.cpp --- a/camerauis/cameraxui/cxui/src/cxuivideoprecaptureview.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxui/src/cxuivideoprecaptureview.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -33,6 +33,7 @@ #include #include #include +#include #include "cxuivideoprecaptureview.h" #include "cxeengine.h" @@ -68,8 +69,6 @@ static const int CXUI_RECORD_ANIMATION_DURATION = 3000; // milliseconds static const int CXUI_PAUSE_TIMEOUT = 60*1000; // 60 seconds - //!@todo Localization? - static const char* VIDEO_TIME_FORMAT = "%02d:%02d"; const int POSTCAPTURE_ON = -1; } @@ -715,14 +714,41 @@ int elapsedTime, int remainingTime) { - // Convert time (seconds) into mm:ss - // HbExtendedLocale wraps minutes at 60 so we can't use that. - // We need to show times over 1 hour, e.g. "90:00". - QString elapsed, remaining; - elapsed.sprintf(VIDEO_TIME_FORMAT, elapsedTime/60, elapsedTime%60); - remaining.sprintf(VIDEO_TIME_FORMAT, remainingTime/60, remainingTime%60); + QString elapsed; + QString remaining; + QString number; + + // Convert time (seconds) into mm:ss in localised form + // Since we need to show also times over 1 hour (upto "90:00") + // we cannot use time to string conversions directly + + HbExtendedLocale locale = HbExtendedLocale::system(); - label->setPlainText(hbTrId("txt_cam_info_redorcding_time").arg(elapsed).arg(remaining)); + number = locale.toString(elapsedTime/60); + if (number.length() <= 1) { + number.prepend(locale.zeroDigit()); + } + elapsed.append(number); + elapsed.append(locale.timeSeparator(2)); + number = locale.toString(elapsedTime%60); + if (number.length() <= 1) { + number.prepend(locale.zeroDigit()); + } + elapsed.append(number); + + number = locale.toString(remainingTime/60); + if (number.length() <= 1) { + number.prepend(locale.zeroDigit()); + } + remaining.append(number); + remaining.append(locale.timeSeparator(2)); + number = locale.toString(remainingTime%60); + if (number.length() <= 1) { + number.prepend(locale.zeroDigit()); + } + remaining.append(number); + + label->setPlainText(hbTrId("txt_cam_info_recording_time").arg(elapsed).arg(remaining)); } bool CxuiVideoPrecaptureView::getElapsedTime() diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxui/src/cxuiview.cpp --- a/camerauis/cameraxui/cxui/src/cxuiview.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxui/src/cxuiview.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -435,8 +435,7 @@ */ void CxuiView::mousePressEvent(QGraphicsSceneMouseEvent *event) { - //! @todo temporary workaround for title bar mouse event handling bug - if (event->type() == QEvent::GraphicsSceneMousePress && event->scenePos().y() > 70 && + if (event->type() == QEvent::GraphicsSceneMousePress && isFeedbackEnabled()) { mControlsFeedback.setModalities(HbFeedback::All); mControlsFeedback.play(); @@ -451,8 +450,7 @@ */ void CxuiView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - //! @todo temporary workaround for title bar mouse event handling bug - if (event->type() == QEvent::GraphicsSceneMouseRelease && event->scenePos().y() > 70 && + if (event->type() == QEvent::GraphicsSceneMouseRelease && isFeedbackEnabled()) { mControlsFeedback.setModalities(HbFeedback::Tactile); mControlsFeedback.play(); @@ -461,13 +459,15 @@ } } -void CxuiView::zoomDisappearEffectFinished(const HbEffect::EffectStatus &status) { +void CxuiView::zoomDisappearEffectFinished(const HbEffect::EffectStatus &status) +{ if (mSlider) { mSlider->hide(); } } -void CxuiView::zoomAppearEffectFinished(const HbEffect::EffectStatus &status) { +void CxuiView::zoomAppearEffectFinished(const HbEffect::EffectStatus &status) +{ } // End of file diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/rom/camerax.iby --- a/camerauis/cameraxui/rom/camerax.iby Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/rom/camerax.iby Fri Sep 17 08:27:13 2010 +0300 @@ -41,4 +41,7 @@ // Stub sis for update support data = DATAZ_\system\install\camerax_stub.sis \system\install\camerax_stub.sis +// register for backup/restore of settings. +data = DATAZ_\private\20027017\backup_registration.xml private\20027017\backup_registration.xml + #endif // CAMERAX_IBY diff -r 01e205c615b9 -r a289dde0a1d6 package_definition.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/package_definition.xml Fri Sep 17 08:27:13 2010 +0300 @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff -r 01e205c615b9 -r a289dde0a1d6 package_map.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/package_map.xml Fri Sep 17 08:27:13 2010 +0300 @@ -0,0 +1,1 @@ +