--- /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 <apgcli.h>
+#include <MuiuMsvUiServiceUtilities.h>
+#include <MtmExtendedCapabilities.hrh>
+#include <mmsconst.h>
+#include <mmsclient.h>
+#include <mmssettings.h>
+#include <mmssettingsdialog.h>
+#include <featmgr.h>
+
+#include "AudioMessageLogging.h"
+#include "audiomessageui.h"
+#include "audiomessageuipanic.h"
+
+#define iMmsClient ( static_cast<CMmsClientMtm&>( 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<TEditorParameters> 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 );
+ }
+ }
+