diff -r 000000000000 -r 72b543305e3a mobilemessaging/audiomsg/uisrc/audiomessageui.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/audiomsg/uisrc/audiomessageui.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,409 @@ +/* +* Copyright (c) 2005-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: Provides AudioMessage MTM UI methods. +* +*/ + + + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "AudioMessageLogging.h" +#include "audiomessageui.h" +#include "audiomessageuipanic.h" + +#define iMmsClient ( static_cast( iBaseMtm ) ) + +_LIT( KAMSUiResourceFile,"AudioMessageMtm"); +_LIT( KAMSEmpty,"" ); +_LIT( KAmsUiMtmPanicText,"AMSUi" ); +const TInt KZero = 0; //constant for memory check + +const TUid KUidAMSId = {0x1020745A}; + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewAudioMessageUiL +// Factory function +// --------------------------------------------------------------------------- +// +EXPORT_C CBaseMtmUi* NewAudioMessageUiL( CBaseMtm& aMtm, CRegisteredMtmDll& aRegisteredDll ) + { + FeatureManager::InitializeLibL(); + if ( !FeatureManager::FeatureSupported( KFeatureIdAudioMessaging ) ) + { + FeatureManager::UnInitializeLib(); + User::Leave( KErrNotSupported ); + } + FeatureManager::UnInitializeLib(); + + return CAudioMessageUi::NewL( aMtm, aRegisteredDll ); + } + +// --------------------------------------------------------------------------- +// Panic +// CAudioMessageUi Panic function +// --------------------------------------------------------------------------- +// +GLDEF_C void Panic( TAMSUiPanic aPanic ) + { + User::Panic( KAmsUiMtmPanicText, aPanic ); + } + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------- +// +CAudioMessageUi::CAudioMessageUi( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll ) + : CBaseMtmUi( aBaseMtm, aRegisteredMtmDll ), iAmsAppId( KUidAMSId ) + { + } + +void CAudioMessageUi::ConstructL() + { + AMSLOGGER_WRITE( "CAudioMessageUi::ConstructL" ); + CBaseMtmUi::ConstructL(); + AMSLOGGER_WRITE( "CAudioMessageUi::ConstructL Base construct OK" ) ; + iSettingsHandler = CMmsSettingsHandler::NewL( iMmsClient ); + AMSLOGGER_WRITE( "CAudioMessageUi::ConstructL End" ); + } + +CAudioMessageUi* CAudioMessageUi::NewL( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll ) + { + AMSLOGGER_WRITE( "CAudioMessageUi::NewL" ); + CAudioMessageUi* self = new ( ELeave ) CAudioMessageUi( aBaseMtm, aRegisteredMtmDll ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + AMSLOGGER_WRITE( "CAudioMessageUi::NewL end" ); + return self; + } + + +CAudioMessageUi::~CAudioMessageUi() + { + AMSLOGGER_WRITE( "AMSUi::~CAudioMessageUi" ); + delete iSettingsHandler; + } + +// --------------------------------------------------------------------------- +// Launches Ams for creating a new message. +// --------------------------------------------------------------------------- +// +CMsvOperation* CAudioMessageUi::CreateL( const TMsvEntry& aEntry, + CMsvEntry& aParent, + TRequestStatus& aStatus ) + { + AMSLOGGER_WRITE( "CAudioMessageUi::CreateL" ); + + __ASSERT_DEBUG( aEntry.iMtm == Type(), Panic( EAMSWrongMtmType ) ); + __ASSERT_DEBUG( aEntry.iType == KUidMsvMessageEntry, Panic( EAMSNotAMessage ) ); + + CheckDiskSpaceL( ); + + CMmsSettingsDialog::TMmsExitCode exitCode = + CMmsSettingsDialog::EMmsExternalInterrupt; + + if ( !CheckSettingsL( exitCode ) ) + { + TUint32 ap = iSettingsHandler->MmsSettings()->AccessPoint( 0 ); + if( exitCode==CMmsSettingsDialog::EMmsBack && ApExistsL( ap ) ) + { //settings saved + return LaunchEditorApplicationL( aStatus, aParent.Session(), ECreateNewMessage ); + } + else + { //user selects exit and settings not saved + return CompleteSettingsOperationL( aStatus, exitCode ); + } + } + else + { + // OK - open the editor + return LaunchEditorApplicationL( aStatus, aParent.Session(), ECreateNewMessage ); + } + } + +TBool CAudioMessageUi::CheckSettingsL( CMmsSettingsDialog::TMmsExitCode& aExitCode ) const + { + // reload the settings + iSettingsHandler->RefreshSettingsL( ); + return iSettingsHandler->CheckSettingsL( aExitCode ); + } + +// --------------------------------------------------------------------------- +// Handles request to open existing message server entry (message/service) +// --------------------------------------------------------------------------- +// +CMsvOperation* CAudioMessageUi::OpenL( TRequestStatus& /*aStatus*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------------------------- +// Opens the first entry in a selection +// --------------------------------------------------------------------------- +// +CMsvOperation* CAudioMessageUi::OpenL( TRequestStatus& /*aStatus*/, + const CMsvEntrySelection& /*aSelection*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +CMsvOperation* CAudioMessageUi::CloseL( TRequestStatus& /*aStatus*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +CMsvOperation* CAudioMessageUi::CloseL( TRequestStatus& /*aStatus*/, + const CMsvEntrySelection& /*aSelection*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------------------------- +// Opens a message (editor) or service (settings dialog) for editing. +// --------------------------------------------------------------------------- +// +CMsvOperation* CAudioMessageUi::EditL( TRequestStatus& aStatus ) + { + AMSLOGGER_WRITE( "CAudioMessageUi::EditL" ); + + TMsvEntry entry = iBaseMtm.Entry().Entry(); + __ASSERT_DEBUG( entry.iMtm == Type(), Panic( EAMSWrongMtmType ) ); + __ASSERT_DEBUG( entry.iType == KUidMsvMessageEntry, Panic( EAMSNotAMessage ) ); + CMsvOperation* msvoperation = NULL; + + switch ( entry.iType.iUid ) + { + case KUidMsvMessageEntryValue: + { + AMSLOGGER_WRITE( "CAudioMessageUi::EditL dealing with message" ); + + CheckDiskSpaceL( ); + + CMmsSettingsDialog::TMmsExitCode exitCode = + CMmsSettingsDialog::EMmsExternalInterrupt; + + if ( !CheckSettingsL( exitCode ) ) + { + TUint32 ap = iSettingsHandler->MmsSettings()->AccessPoint( 0 ); + //settings saved with valid access point + if( !( exitCode==CMmsSettingsDialog::EMmsBack && ApExistsL( ap ) ) ) + { + return CompleteSettingsOperationL( aStatus, exitCode ); + } + } + + + if ( iBaseMtm.Entry().Entry().Connected() ) + { + User::Leave( KErrLocked ); + } + + CMsvEntry* cEntry = Session().GetEntryL( iBaseMtm.Entry().Entry().Id() ); + CleanupStack::PushL( cEntry ); + + TMsvEntry tEntry = cEntry->Entry(); + tEntry.iMtm = KUidMsgTypeMultimedia; + tEntry.iBioType = KUidMsgSubTypeMmsAudioMsg.iUid; + + cEntry->ChangeL( tEntry ); + CleanupStack::PopAndDestroy( cEntry ); + + AMSLOGGER_WRITE( "CAudioMessageUi::EditL launching editor" ); + msvoperation = LaunchEditorApplicationL( aStatus, iBaseMtm.Entry().Session() ); + } + break; + + case KUidMsvServiceEntryValue: + case KUidMsvAttachmentEntryValue: // flow through + case KUidMsvFolderEntryValue: // flow through + default: + User::Leave( KErrNotSupported ); + break; + } + + AMSLOGGER_WRITE( "AMSUi::EditL end" ); + return msvoperation; + } + +CMsvOperation* CAudioMessageUi::EditL( TRequestStatus& aStatus, + const CMsvEntrySelection& aSelection ) + { + BaseMtm().SwitchCurrentEntryL( aSelection[0] ); + return EditL( aStatus ); + } + +// --------------------------------------------------------------------------- +// Opens the message for reading in Viewer. +// --------------------------------------------------------------------------- +// +CMsvOperation* CAudioMessageUi::ViewL( TRequestStatus& /*aStatus*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +CMsvOperation* CAudioMessageUi::ViewL( TRequestStatus& /*aStatus*/, + const CMsvEntrySelection& /*aSelection*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------------------------- +// Does the actual opening. +// --------------------------------------------------------------------------- +// +CMsvOperation* CAudioMessageUi::LaunchEditorApplicationL( TRequestStatus& aStatus, + CMsvSession& aSession, + TEditorType aEditorType ) + { + AMSLOGGER_WRITE( "AMSUi::LaunchEditorApplicationL" ); + + TEditorParameters temp; + + temp.iSpecialAppId =iAmsAppId; + if ( iBaseMtm.HasContext() ) + { + temp.iId = iBaseMtm.Entry().EntryId(); + } + + switch( aEditorType ) + { + case ECreateNewMessage: + temp.iFlags|=EMsgCreateNewMessage ; + temp.iId=KMsvDraftEntryIdValue; + break; + case EEditExisting: // No need for action + case EReadOnly: // Never happens + default: + break; + }; + + temp.iFlags &= ~( EMtmUiFlagEditorPreferEmbedded|EMtmUiFlagEditorNoWaitForExit ); + + temp.iFlags |= ( Preferences() & EMtmUiFlagEditorPreferEmbedded?EMsgLaunchEditorEmbedded:0 ); + + TPckgC paramPack( temp ); + + AMSLOGGER_WRITE( "CAudioMessageUi::LaunchEditorApplicationL just before calling EditorLauncher" ); + return MsgEditorLauncher::LaunchEditorApplicationL( aSession, + KUidMsgTypeMultimedia, aStatus, temp, KAMSEmpty, paramPack ); + } + +CMsvOperation* CAudioMessageUi::ForwardL( TMsvId /*aDestination*/, + TMsvPartList /*aPartList*/, + TRequestStatus& /*aCompletionStatus*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +CMsvOperation* CAudioMessageUi::ReplyL( TMsvId /*aDestination*/, + TMsvPartList /*aPartList*/, + TRequestStatus& /*aCompletionStatus*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------------------------- +// Suspends sending of the selected messages (if possible) +// --------------------------------------------------------------------------- +// +CMsvOperation* CAudioMessageUi::CancelL( TRequestStatus& /*aStatus*/, + const CMsvEntrySelection& /*aSelection*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +void CAudioMessageUi::GetResourceFileName( TFileName& aFileName ) const + { + aFileName = KAMSUiResourceFile; + } + +// --------------------------------------------------------------------------- +// Handles MMS service settings +// --------------------------------------------------------------------------- +// +CMsvOperation* CAudioMessageUi::OpenServiceSettingsDialogL( TRequestStatus& + aCompletionStatus ) + { + return iSettingsHandler->OpenServiceSettingsDialogL( aCompletionStatus ); + } + +// --------------------------------------------------------------------------- +// Creates completed operation after settings dialog closing with appropriate +// parameters. +// --------------------------------------------------------------------------- +// +CMsvOperation* CAudioMessageUi::CompleteSettingsOperationL( + TRequestStatus& aCompletionStatus, + const CMmsSettingsDialog::TMmsExitCode& aExitCode ) + { + return iSettingsHandler->CompleteSettingsOperationL( + aCompletionStatus, + aExitCode ); + } + +// --------------------------------------------------------------------------- +// Opens either MMS Service Settings or MMS Sending Settings dialog. +// --------------------------------------------------------------------------- +// +void CAudioMessageUi::LaunchSettingsDialogL( + CMmsSettingsDialog::TMmsExitCode& aExitCode ) const + { + iSettingsHandler->LaunchSettingsDialogL( aExitCode ); + } + +// --------------------------------------------------------------------------- +// CAudioMessageUi::ApExistsL +// --------------------------------------------------------------------------- +// +TBool CAudioMessageUi::ApExistsL( TUint32 aAp ) + { + return iSettingsHandler->ApExistsL( aAp ); + } + +void CAudioMessageUi::CheckDiskSpaceL( ) + { + if( MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelL( + Session( ), + KZero ) ) + { + User::Leave( KErrDiskFull ); + } + } +