mobilemessaging/postcard/postcarduisrc/PostcardUi.cpp
changeset 0 72b543305e3a
--- /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 <apgcli.h>                         // RApaLsSession
+#include <MuiuMsvUiServiceUtilities.h>      // DiskSpaceBelow.., MsvUiServiceUtil..
+#include <MtmExtendedCapabilities.hrh>      // MtmUiFlags
+#include <mmsconst.h>						// KUidMsgTypeMultimedia
+#include <mmsclient.h>                      // Client MTM
+#include <mmssettings.h> 					// MMS Engine settings
+#include <mmssettingsdialog.h>
+#include <bautils.h>						// FileExists
+#include <data_caging_path_literals.hrh> 
+#include <featmgr.h>
+#include <bldvariant.hrh>
+
+#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<CMmsClientMtm&>( 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<TEditorParameters> 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