diff -r 000000000000 -r 72b543305e3a mobilemessaging/postcard/postcarduisrc/PostcardUi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/postcard/postcarduisrc/PostcardUi.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,507 @@ +/* +* Copyright (c) 2005 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 Postcard MTM UI methods. +* +*/ + + + +// INCLUDE FILES + +#include // RApaLsSession +#include // DiskSpaceBelow.., MsvUiServiceUtil.. +#include // MtmUiFlags +#include // KUidMsgTypeMultimedia +#include // Client MTM +#include // MMS Engine settings +#include +#include // FileExists +#include +#include +#include + +#include "PostcardMtmConst.h" +#include "PostcardUi.h" +#include "PostcardUiPanic.h" + +// MACROS + +// LOCAL CONSTANTS AND MACROS +_LIT( KPostcardUiResourceFile,"PostcardUi.rsc"); +_LIT( KPostcardDriveZ,"z:"); + +const TInt KZero = 0; //constant for memory check + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// ==================== LOCAL FUNCTIONS ==================== + +// --------------------------------------------------------- +// NewPostcardUiL +// Factory function +// --------------------------------------------------------- +// +EXPORT_C CBaseMtmUi* NewPostcardUiL( CBaseMtm& aMtm, CRegisteredMtmDll& aRegisteredDll ) + { + // Get supported features from feature manager. + FeatureManager::InitializeLibL(); + if ( !FeatureManager::FeatureSupported( KFeatureIdMmsPostcard ) ) + { + FeatureManager::UnInitializeLib(); + User::Leave( KErrNotSupported ); + } + FeatureManager::UnInitializeLib(); + + return CPostcardUi::NewL( aMtm, aRegisteredDll ); + } + +// --------------------------------------------------------- +// Panic +// PostcardUi Panic function +// --------------------------------------------------------- +// +GLDEF_C void Panic( TPostcardUiPanic aPanic ) + { + User::Panic( _L("PostcardUi"), aPanic ); + } + + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CPostcardUi::CPostcardUi +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------- +// +CPostcardUi::CPostcardUi( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll ) + : CBaseMtmUi( aBaseMtm, aRegisteredMtmDll ), iPocaAppId( KUidPostcardId ) + { + } + +// --------------------------------------------------------- +// CPostcardUi::ConstructL +// Symbian OS default constructor can leave. +// --------------------------------------------------------- +// +void CPostcardUi::ConstructL() + { + LOGTEXT( _L8( "PostcardUi::ConstructL" ) ); + CBaseMtmUi::ConstructL(); + LOGTEXT( _L8( "PostcardUi::ConstructL Base construct OK" ) ); + iSettingsHandler = CMmsSettingsHandler::NewL( static_cast( iBaseMtm ) ); + LOGTEXT( _L8( "PostcardUi::ConstructL End" ) ); + } + +// --------------------------------------------------------- +// CPostcardUi::NewL +// Two-phased constructor. +// --------------------------------------------------------- +// +CPostcardUi* CPostcardUi::NewL( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll ) + { + LOGTEXT( _L8( "PostcardUi::NewL" ) ); + CPostcardUi* self = new ( ELeave ) CPostcardUi( aBaseMtm, aRegisteredMtmDll ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + LOGTEXT( _L8( "PostcardUi::NewL end" ) ); + return self; + } + + +// --------------------------------------------------------- +// CPostcardUi::~CPostcardUi +// Destructor +// --------------------------------------------------------- +// +CPostcardUi::~CPostcardUi() + { + LOGTEXT( _L8( "PostcardUi::~CPostcardUi" ) ); + delete iSettingsHandler; + } + +// --------------------------------------------------------- +// CPostcardUi::CreateL +// Launches MMS editor for creating a new message. +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::CreateL( const TMsvEntry& aEntry, + CMsvEntry& aParent, + TRequestStatus& aStatus ) + { + LOGTEXT( _L8( "PostcardUi::CreateL" ) ); + __ASSERT_DEBUG( aEntry.iMtm == Type(), Panic( EPostcardWrongMtmType ) ); + __ASSERT_DEBUG( aEntry.iType == KUidMsvMessageEntry, Panic( EPostcardNotAMessage ) ); + + 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 ); + } + } + +// --------------------------------------------------------- +// CPostcardUi::CheckSettingsL() const +// Check MMS service settings +// --------------------------------------------------------- +// +TBool CPostcardUi::CheckSettingsL( CMmsSettingsDialog::TMmsExitCode& aExitCode ) const + { + // reload the settings + iSettingsHandler->RefreshSettingsL( ); + return iSettingsHandler->CheckSettingsL( aExitCode ); + } + +// --------------------------------------------------------- +// CPostcardUi::OpenL +// Handles request to open existing message server entry (message/service) +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::OpenL( TRequestStatus& /*aStatus*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------- +// CPostcardUi::OpenL +// Opens the first entry in a selection +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::OpenL( TRequestStatus& /*aStatus*/, + const CMsvEntrySelection& /*aSelection*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------- +// CPostcardUi::CloseL +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::CloseL( TRequestStatus& /*aStatus*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------- +// CPostcardUi::CloseL +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::CloseL( TRequestStatus& /*aStatus*/, + const CMsvEntrySelection& /*aSelection*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------- +// CPostcardUi::EditL +// Opens a message (editor) or service (settings dialog) for editing. +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::EditL( TRequestStatus& aStatus ) + { + LOGTEXT(_L8("PostcardUi::EditL")); + TMsvEntry entry = iBaseMtm.Entry().Entry(); + __ASSERT_DEBUG( entry.iMtm == Type(), Panic( EPostcardWrongMtmType ) ); + __ASSERT_DEBUG( entry.iType == KUidMsvMessageEntry, Panic( EPostcardNotAMessage ) ); + CMsvOperation* msvoperation = NULL; + + switch ( entry.iType.iUid ) + { + case KUidMsvMessageEntryValue: + { + LOGTEXT(_L8("PostcardUi::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 = KUidMsgSubTypeMmsPostcard.iUid; + cEntry->ChangeL( tEntry ); + CleanupStack::PopAndDestroy( cEntry ); + + LOGTEXT( _L8( "PostcardUi::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; + } + + LOGTEXT(_L8("PostcardUi::EditL end")); + return msvoperation; + } + +// --------------------------------------------------------- +// CPostcardUi::EditL +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::EditL( TRequestStatus& aStatus, + const CMsvEntrySelection& aSelection ) + { + BaseMtm().SwitchCurrentEntryL( aSelection[0] ); + return EditL( aStatus ); + } + +// --------------------------------------------------------- +// CPostcardUi::ViewL +// Opens the message for reading in Viewer. +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::ViewL( TRequestStatus& /*aStatus*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------- +// CPostcardUi::ViewL +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::ViewL( TRequestStatus& /*aStatus*/, + const CMsvEntrySelection& /*aSelection*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// ----------------------------------------------------------------------------- +// CPostcardUi::LaunchEditorApplicationL() +// Does the actual opening. +// ----------------------------------------------------------------------------- +// +CMsvOperation* CPostcardUi::LaunchEditorApplicationL( TRequestStatus& aStatus, + CMsvSession& aSession, + TEditorType aEditorType ) + { + LOGTEXT(_L8("PostcardUi::LaunchEditorApplicationL")); + + TEditorParameters temp; + temp.iSpecialAppId = iPocaAppId; // We want to use the special Poca application + + 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 ); + + LOGTEXT(_L8("PostcardUi::LaunchEditorApplicationL just before calling EditorLauncher")); + return MsgEditorLauncher::LaunchEditorApplicationL( aSession, KUidMsgTypeMultimedia, aStatus, temp, _L(""), paramPack ); + } + +// --------------------------------------------------------- +// CPostcardUi::ForwardL +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::ForwardL( TMsvId /*aDestination*/, + TMsvPartList /*aPartList*/, + TRequestStatus& /*aCompletionStatus*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------- +// CPostcardUi::ReplyL +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::ReplyL( TMsvId /*aDestination*/, + TMsvPartList /*aPartList*/, + TRequestStatus& /*aCompletionStatus*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------- +// CPostcardUi::CancelL +// Suspends sending of the selected messages (if possible) +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::CancelL( TRequestStatus& /*aStatus*/, + const CMsvEntrySelection& /*aSelection*/ ) + { + User::Leave( KErrNotSupported ); + return NULL; + } + + +// --------------------------------------------------------- +// CPostcardUi::GetResourceFileName +// --------------------------------------------------------- +// +void CPostcardUi::GetResourceFileName( TFileName& aFileName ) const + { + TFileName tmpName; + + // Append the Resource Files Directory + tmpName.Append( KDC_MTM_RESOURCE_DIR ); + // Append the Ressource File Name + tmpName.Append( KPostcardUiResourceFile ); + + // Obtain the drive where the DLL is installed + TFileName dllDrive; + Dll::FileName( dllDrive ); + + // Obtain the Complete path for the Resource File + TParse parse; + parse.Set( dllDrive, NULL, NULL ); + parse.Set( parse.Drive(), &tmpName, NULL ); + TFileName fileName; + fileName.Append( parse.FullName()); + + // Get language of resource file + BaflUtils::NearestLanguageFile( Session().FileSession( ), fileName ); + + if( !BaflUtils::FileExists( Session().FileSession( ), fileName) ) + { // If it's not on dll drive -> try Z + fileName.Replace( 0, 2, KPostcardDriveZ ); + BaflUtils::NearestLanguageFile( Session().FileSession( ), fileName ); + } + + aFileName = fileName; + + return; + } + +// --------------------------------------------------------- +// CMsvOperation* CPostcardUi::OpenServiceSettingsDialogL(TRequestStatus& aCompletionStatus) +// Handles MMS service settings +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::OpenServiceSettingsDialogL( TRequestStatus& aCompletionStatus ) + { + return iSettingsHandler->OpenServiceSettingsDialogL( aCompletionStatus ); + } + +// --------------------------------------------------------- +// CMsvOperation* CPostcardUi::CompleteSettingsOperationL( +// TRequestStatus& aCompletionStatus, const CMmsSettingsDialog::TMmsExitCode& aExitCode) +// Creates completed operation after settings dialog closing with appropriate parameters. +// --------------------------------------------------------- +// +CMsvOperation* CPostcardUi::CompleteSettingsOperationL( + TRequestStatus& aCompletionStatus, + const CMmsSettingsDialog::TMmsExitCode& aExitCode /* = CMmsSettingsDialog::EMmsExternalInterrupt */ ) + { + return iSettingsHandler->CompleteSettingsOperationL( + aCompletionStatus, + aExitCode ); + } + +// --------------------------------------------------------- +// TInt CPostcardUi::LaunchSettingsDialogL( +// CMmsSettingsDialog::TMmsExitCode& aExitCode ) +// Opens either MMS Service Settings or MMS Sending Settings dialog. +// --------------------------------------------------------- +// +void CPostcardUi::LaunchSettingsDialogL( + CMmsSettingsDialog::TMmsExitCode& aExitCode ) const + { + iSettingsHandler->LaunchSettingsDialogL( aExitCode ); + } + +// --------------------------------------------------------- +// CPostcardUi::ApExistsL +// --------------------------------------------------------- +// +TBool CPostcardUi::ApExistsL( TUint32 aAp ) + { + return iSettingsHandler->ApExistsL( aAp ); + } + +// --------------------------------------------------------- +// CPostcardUi::CheckDiskSpaceL +// --------------------------------------------------------- +// +void CPostcardUi::CheckDiskSpaceL( ) + { + if( MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelL( + Session( ), + KZero ) ) + { + User::Leave( KErrDiskFull ); + } + } + +// End of File