# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1271250013 -10800 # Node ID bb90e4148332b939fed79babf2bd07c3144e1c21 # Parent 45ab7373901d6351ac9335e01b3ad597ccabff49 Revision: 201012 Kit: 201015 diff -r 45ab7373901d -r bb90e4148332 voicerecorder/AppSrc/CVRAppUI.cpp --- a/voicerecorder/AppSrc/CVRAppUI.cpp Wed Mar 31 21:35:17 2010 +0300 +++ b/voicerecorder/AppSrc/CVRAppUI.cpp Wed Apr 14 16:00:13 2010 +0300 @@ -466,6 +466,19 @@ return ConeUtils::FileExists( aDocumentName ); } +// --------------------------------------------------------------------------- +// CVRAppUi::HandleApplicationSpecificEventL +// +// --------------------------------------------------------------------------- +// +void CVRAppUi::HandleApplicationSpecificEventL(TInt aType,const TWsEvent& aEvent) + { + if( aType == EAknSoftkeyExit ) + { + Exit(); + } + CEikAppUi::HandleApplicationSpecificEventL(aType, aEvent); + } // --------------------------------------------------------------------------- // CVRAppUi::SetEmbeddedObserver diff -r 45ab7373901d -r bb90e4148332 voicerecorder/AppSrc/CVRAppUi.h --- a/voicerecorder/AppSrc/CVRAppUi.h Wed Mar 31 21:35:17 2010 +0300 +++ b/voicerecorder/AppSrc/CVRAppUi.h Wed Apr 14 16:00:13 2010 +0300 @@ -98,6 +98,13 @@ TBool ProcessCommandParametersL( TApaCommand aCommand, TFileName& aDocumentName, const TDesC8& aTail ); + /** + * Handles events from window group + * @param aType The type of event + */ + + void HandleApplicationSpecificEventL(TInt aType, const TWsEvent& aEvent); + private: // new methods /** diff -r 45ab7373901d -r bb90e4148332 voicerecorder/RecViewSrc/CVRMediaRemovalMonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voicerecorder/RecViewSrc/CVRMediaRemovalMonitor.cpp Wed Apr 14 16:00:13 2010 +0300 @@ -0,0 +1,161 @@ +/* +* Copyright (c) 2006 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" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Monitors for Media removal +* +*/ + + +#include +#include +#include "CVRMediaRemovalMonitor.h" + +// --------------------------------------------------------------------------- +// C++ Constructor +// --------------------------------------------------------------------------- +// +CVRMediaRemovalMonitor::CVRMediaRemovalMonitor + ( TInt aDrive, RFs& aFs, MVRMediaRemovalObserver* aObserver ) + : CActive(EPriorityHigh), + iDrive( aDrive ), + iFs( aFs ), + iDiskRemoved( EFalse ), + iObserver( aObserver ) + + { + CActiveScheduler::Add(this); + } + + +// --------------------------------------------------------------------------- +// 2nd Phase Constructor +// --------------------------------------------------------------------------- +// +void CVRMediaRemovalMonitor::ConstructL() + { + + // Initial state + TDriveInfo drive; + User::LeaveIfError(iFs.Drive(drive, TInt(iDrive))); + iDiskRemoved = (drive.iType == EMediaNotPresent); + + // Start listening + TNotifyType notType(ENotifyDisk); + iFs.NotifyChange( notType, iStatus ); + SetActive(); + } + + +// --------------------------------------------------------------------------- +// Two-Phased Constructor +// --------------------------------------------------------------------------- +// +CVRMediaRemovalMonitor* CVRMediaRemovalMonitor::NewL + ( TInt aDrive, RFs& aFs, MVRMediaRemovalObserver* aObserver ) + { + CVRMediaRemovalMonitor* self + = CVRMediaRemovalMonitor::NewLC( aDrive, + aFs, + aObserver ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Two-Phased Constructor +// --------------------------------------------------------------------------- +// +CVRMediaRemovalMonitor* CVRMediaRemovalMonitor::NewLC + ( TInt aDrive, RFs& aFs, MVRMediaRemovalObserver* aObserver ) + { + CVRMediaRemovalMonitor* self = + new( ELeave ) CVRMediaRemovalMonitor( aDrive, + aFs, + aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CVRMediaRemovalMonitor::~CVRMediaRemovalMonitor() + { + Cancel(); + } + + +// --------------------------------------------------------------------------- +// Service the request +// --------------------------------------------------------------------------- +// +void CVRMediaRemovalMonitor::RunL() + { + // Re-subscribe to event. + TNotifyType notType(ENotifyDisk); + iFs.NotifyChange( notType, iStatus ); + SetActive(); + + // Check state + TDriveInfo drive; + User::LeaveIfError(iFs.Drive(drive, TInt(iDrive))); + + // Notify Observer + switch(drive.iType) + { + case EMediaNotPresent: + { + if (!iDiskRemoved) + { + iObserver->HandleMMCEjectEventL( ); + } + iDiskRemoved = ETrue; + break; + } + default: + { + if ( iDiskRemoved && + ( drive.iMediaAtt & ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) != + ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) + { + //do nothing + iDiskRemoved = EFalse; + } + break; + } + } + + } + +// --------------------------------------------------------------------------- +// Cancel NotifyChange request from file system +// --------------------------------------------------------------------------- +// +void CVRMediaRemovalMonitor::DoCancel() + { + iFs.NotifyChangeCancel(); + } + +// ---------------------------------------------------------------------------- +// Handles a leave occurring in the request completion event handler RunL() +// Don't care if client has a User::Leave() in RunL(), keep monitoring for events +// ---------------------------------------------------------------------------- +// +TInt CVRMediaRemovalMonitor::RunError(TInt aError) + { + return KErrNone; + } diff -r 45ab7373901d -r bb90e4148332 voicerecorder/RecViewSrc/CVRMediaRemovalMonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voicerecorder/RecViewSrc/CVRMediaRemovalMonitor.h Wed Apr 14 16:00:13 2010 +0300 @@ -0,0 +1,102 @@ +/* +* Copyright (c) 2007 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" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Monitors for media removal events +* +*/ + + +#ifndef CVRMEDIAREMOVALMONITER_H +#define CVRMEDIAREMOVALMONITER_H + +#include +#include "MVRMediaRemovalObserver.h" + +/** + * Class to monitors for File System dismount events + * @lib Harvester + * @since S60 3.0 + */ +class CVRMediaRemovalMonitor : public CActive + { + +public: + + /** + * Two-phase constructor + * @param aDrive drive to monitor + * @param aFs file server session + * @param aObserver observer to the event + */ + static CVRMediaRemovalMonitor* NewL( TInt aDrive, + RFs& aFs, + MVRMediaRemovalObserver* aObserver ); + /** + * Two-phase constructor + * @param aDrive drive to monitor + * @param aFs file server session + * @param aObserver observer to the event + */ + static CVRMediaRemovalMonitor* NewLC( TInt aDrive, + RFs& aFs, + MVRMediaRemovalObserver* aObserver ); + + /** + * Virtual destructor + */ + virtual ~CVRMediaRemovalMonitor(); + +protected: // From base class + + /* + * From CActive + */ + void RunL(); + + /* + * From CActive + */ + void DoCancel(); + + /** + * From CActive + */ + TInt RunError(TInt aError); + +private: + + /** + * C++ constructor + * @param aDrive drive to monitor + * @param aFs file server session + * @param aObserver observer to the event + */ + CVRMediaRemovalMonitor( TInt aDrive, + RFs& aFs, + MVRMediaRemovalObserver* aObserver ); + + void ConstructL(); + +private: // data + + TInt iDrive; // Drive that is being monitored + RFs& iFs; // File Session, not owned + TBool iDiskRemoved; // Is the disk inserted + + /* + * Observer interface to callback to an observer + */ + MVRMediaRemovalObserver* iObserver; + }; + +#endif // CVRMEDIAREMOVALMONITER_H diff -r 45ab7373901d -r bb90e4148332 voicerecorder/RecViewSrc/CVRRecViewModel.cpp --- a/voicerecorder/RecViewSrc/CVRRecViewModel.cpp Wed Mar 31 21:35:17 2010 +0300 +++ b/voicerecorder/RecViewSrc/CVRRecViewModel.cpp Wed Apr 14 16:00:13 2010 +0300 @@ -54,6 +54,7 @@ #include "VRConsts.h" #include "CVRSystemEventHandler.h" #include "CVRUSBEventHandler.h" +#include "CVRMediaRemovalMonitor.h" #include "VRUtils.h" #include "CVRRecViewModel.h" #include @@ -115,6 +116,8 @@ delete iCurrentUSBHandler; + delete iCurrentMMCEjectHandler; + } @@ -135,6 +138,8 @@ iCurrentUSBHandler->Listen( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, this ); + //listen MMC eject + iCurrentMMCEjectHandler = CVRMediaRemovalMonitor::NewL(EDriveF, CEikonEnv::Static()->FsSession(), this); if ( FeatureManager::FeatureSupported( KFeatureIdKeypadNoVoiceKey ) && FeatureManager::FeatureSupported( @@ -2445,3 +2450,29 @@ // End of file + + +// --------------------------------------------------------------------------- +// CVRRecViewModel::HandleMMCEjectEventL +// +// --------------------------------------------------------------------------- +// +void CVRRecViewModel::HandleMMCEjectEventL() + { + + // Actions to take when recording + TInt storageDrive = VRUtils::MemoDriveL(); + if ( storageDrive == EDriveF) + { + //exit for mmc dismount + TWsEvent event; + event.SetType( EAknSoftkeyExit ); + event.SetTimeNow(); + event.SetHandle( CCoeEnv::Static()->WsSession().WsHandle() ); + CCoeEnv::Static()->WsSession().SendEventToWindowGroup( CEikonEnv::Static()->RootWin().Identifier(), event ); + return; + } + } + + +// End of file diff -r 45ab7373901d -r bb90e4148332 voicerecorder/RecViewSrc/CVRRecViewModel.h --- a/voicerecorder/RecViewSrc/CVRRecViewModel.h Wed Mar 31 21:35:17 2010 +0300 +++ b/voicerecorder/RecViewSrc/CVRRecViewModel.h Wed Apr 14 16:00:13 2010 +0300 @@ -39,6 +39,8 @@ #include "MVRSystemEventObserver.h" #include "MVRUSBEventObserver.h" +#include "MVRMediaRemovalObserver.h" + #include "TVRContext.h" #include "voicerecorder.hrh" @@ -55,6 +57,7 @@ class TVRState; class CVRSystemEventHandler; class CVRUSBEventHandler; +class CVRMediaRemovalMonitor; // CLASS DEFINITION @@ -68,7 +71,7 @@ public MVRStateInfoModel, public MVRObserver, public MVRKeyObserver, public MVRVolumeChangeObserver, public MVRSystemEventObserver, - public MVRUSBEventObserver + public MVRUSBEventObserver, public MVRMediaRemovalObserver { private: // nested classes @@ -315,6 +318,9 @@ void HandleUSBEventL(); + + void HandleMMCEjectEventL(); + public: // new methods /** @@ -654,6 +660,8 @@ * For listening USB events. Owned. */ CVRUSBEventHandler* iCurrentUSBHandler; + + CVRMediaRemovalMonitor* iCurrentMMCEjectHandler; /** diff -r 45ab7373901d -r bb90e4148332 voicerecorder/RecViewSrc/MVRMediaRemovalObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voicerecorder/RecViewSrc/MVRMediaRemovalObserver.h Wed Apr 14 16:00:13 2010 +0300 @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2002-2006 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" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This class can be used to observe changes that has been happened in +* CVRMediaRemovalHandler class +* +*/ + + +#ifndef __MVRMEDIAREMOVALOBSERVER_H +#define __MVRMEDIAREMOVALOBSERVER_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION +/** +* __MVRMEDIAREMOVALOBSERVER_H +*/ +class MVRMediaRemovalObserver + { + public: // Constructors and destructor + + virtual void HandleMMCEjectEventL( ) = 0; + + }; + +#endif + +// __MVRMEDIAREMOVALOBSERVER_H + +// End of File diff -r 45ab7373901d -r bb90e4148332 voicerecorder/group/RecView.mmp --- a/voicerecorder/group/RecView.mmp Wed Mar 31 21:35:17 2010 +0300 +++ b/voicerecorder/group/RecView.mmp Wed Apr 14 16:00:13 2010 +0300 @@ -48,7 +48,8 @@ SOURCE CVRRemConObserver.cpp SOURCE CVRTonePlayer.cpp SOURCE CVRDiskSpaceWatcher.cpp -SOURCE CVRUSBEventHandler.cpp +SOURCE CVRUSBEventHandler.cpp +SOURCE CVRMediaRemovalMonitor.cpp USERINCLUDE ../RecViewSrc USERINCLUDE ../RecViewInc @@ -81,6 +82,7 @@ LIBRARY platformenv.lib // PathInfo LIBRARY apgrfx.lib // RApaLsSession LIBRARY apmime.lib // TDataType +LIBRARY ws32.lib LIBRARY CdlEngine.lib LIBRARY AknIcon.lib