--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushMtmUi.cpp Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,632 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: Ui Mtm class definition
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include <bldvariant.hrh>
+#include "PushMtmUi.h"
+#include "PushMtmUiPanic.h"
+#include "PushMtmUiDef.h"
+#include "PushViewerDef.h"
+#include "PushMtmCommands.hrh"
+#include "PushMtmSettings.h"
+#include "PushSettingsDialog.h"
+#include "PushMessageInfoOp.h"
+#include "PushLoadServiceOp.h"
+#ifdef __SERIES60_PUSH_SP
+#include "PushViewServiceOp.h"
+#endif // __SERIES60_PUSH_SP
+#include "PushViewMessageOp.h"
+#include "PushMtmLog.h"
+#include "PushMtmDef.h"
+#include <PushEntry.h>
+#include <msvids.h>
+#include <msvuids.h>
+#include <msvapi.h>
+#include <mtmuidef.hrh>
+#include <MTMExtendedCapabilities.hrh>
+#include <MuiuMsgEditorLauncher.h>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmUi::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmUi* CPushMtmUi::NewL( CBaseMtm& aBaseMtm,
+ CRegisteredMtmDll& aRegisteredMtmDll )
+ {
+ CPushMtmUi* ui = new (ELeave) CPushMtmUi( aBaseMtm, aRegisteredMtmDll );
+ CleanupStack::PushL( ui );
+ ui->ConstructL();
+ CleanupStack::Pop(); // ui
+ return ui;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::~CPushMtmUi
+// ---------------------------------------------------------
+//
+CPushMtmUi::~CPushMtmUi()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CPushMtmUi
+// ---------------------------------------------------------
+//
+CPushMtmUi::CPushMtmUi( CBaseMtm& aBaseMtm,
+ CRegisteredMtmDll& aRegisteredMtmDll )
+: CBaseMtmUi( aBaseMtm, aRegisteredMtmDll )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::SetProgressSuccess
+// ---------------------------------------------------------
+//
+void CPushMtmUi::SetProgressSuccess
+( TPckgBuf<TMsvLocalOperationProgress>& aProgress, TMsvId aId )
+ {
+ aProgress().iTotalNumberOfEntries = 1;
+ aProgress().iNumberCompleted = 1;
+ aProgress().iId = aId;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CompletedOperationL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CompletedOperationL
+( TRequestStatus& aObserverStatus )
+ {
+ TPckgBuf<TMsvLocalOperationProgress> progress;
+ SetProgressSuccess( progress, BaseMtm().Entry().Entry().Id() );
+ CMsvCompletedOperation* operation =
+ CMsvCompletedOperation::NewL( Session(), Type(), progress,
+ KMsvLocalServiceIndexEntryId, aObserverStatus );
+
+ return operation;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::EnsureServiceEntryL
+// ---------------------------------------------------------
+//
+void CPushMtmUi::EnsureServiceEntryL() const
+ {
+ PUSHLOG_ENTERFN("CPushMtmUi::EnsureServiceEntryL")
+
+ // Get root entry.
+ CMsvEntry* rootMsvEntry = Session().GetEntryL( KMsvRootIndexEntryId );
+ CleanupStack::PushL( rootMsvEntry );
+
+ // The Push MTM service entry is invisible. Set selection ordering
+ // to find the invisible entries also.
+ TMsvSelectionOrdering msvSelectionOrdering = rootMsvEntry->SortType();;
+ msvSelectionOrdering.SetShowInvisibleEntries( ETrue );
+ rootMsvEntry->SetSortTypeL( msvSelectionOrdering );
+
+ // The service entry is the child entry of the root entry.
+ // KUidMtmWapPush is used to identify the mtm type of the service entry!
+ CMsvEntrySelection* msvEntrySelection =
+ rootMsvEntry->ChildrenWithMtmL( KUidMtmWapPush );
+ CleanupStack::PushL( msvEntrySelection );
+
+ const TInt serviceEntryCount = msvEntrySelection->Count();
+ PUSHLOG_WRITE_FORMAT(" serviceEntryCount <%d>",serviceEntryCount)
+ __ASSERT_DEBUG( serviceEntryCount <= 1,
+ UiPanic( EPushMtmUiPanTooManyServiceEntries ) );
+ // If there is no push service entry in Message Server, create one.
+ // If there is more than one, then delete the unnecessary entries.
+ if ( serviceEntryCount == 0 )
+ {
+ TMsvEntry newEntryData;
+ newEntryData.iType = KUidMsvServiceEntry;
+ newEntryData.iMtm = KUidMtmWapPush;
+ newEntryData.SetVisible( EFalse );
+ rootMsvEntry->CreateL( newEntryData );
+ }
+ else if ( 1 < serviceEntryCount )
+ {
+ for ( TInt i = 1; i < serviceEntryCount; ++i ) // i starts from 1.
+ {
+ rootMsvEntry->DeleteL( msvEntrySelection->At(i) );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( 2, rootMsvEntry );
+ // msvEntrySelection, rootMsvEntry
+
+ PUSHLOG_LEAVEFN("CPushMtmUi::EnsureServiceEntryL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CreateL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CreateL(
+ const TMsvEntry& /*aEntry*/,
+ CMsvEntry& /*aParent*/,
+ TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::OpenL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::OpenL( TRequestStatus& aStatus )
+ {
+ __ASSERT_DEBUG( BaseMtm().Entry().Entry().iMtm == Type(),
+ UiPanic( EPushMtmUiPanBadMtm ) );
+
+ const TUid type( BaseMtm().Entry().Entry().iType );
+
+ CMsvOperation* operation = NULL;
+
+ if ( type == KUidMsvMessageEntry )
+ {
+ operation = ViewL( aStatus );
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ return operation;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CloseL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CloseL( TRequestStatus& aStatus )
+ {
+ __ASSERT_DEBUG( BaseMtm().Entry().Entry().iType == KUidMsvMessageEntry,
+ UiPanic( EPushMtmUiPanBadType ) );
+ return CompletedOperationL( aStatus );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::EditL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::EditL( TRequestStatus& aStatus )
+ {
+ __ASSERT_DEBUG( BaseMtm().Entry().Entry().iMtm == Type(),
+ UiPanic( EPushMtmUiPanBadMtm ) );
+
+ if ( BaseMtm().Entry().Entry().iType != KUidMsvServiceEntry )
+ {
+ // All push messages are read only ones.
+ User::Leave( KErrNotSupported );
+ }
+
+ CPushSettingsDialog* dlg = new (ELeave) CPushSettingsDialog( Session() );
+ dlg->ExecuteLD();
+ return CompletedOperationL( aStatus );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::ViewL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::ViewL( TRequestStatus& aStatus )
+ {
+ const TMsvEntry tEntry( BaseMtm().Entry().Entry() );
+
+ __ASSERT_DEBUG( tEntry.iMtm == Type(), UiPanic( EPushMtmUiPanBadMtm ) );
+ __ASSERT_DEBUG( tEntry.iType == KUidMsvMessageEntry,
+ UiPanic( EPushMtmUiPanBadType ) );
+
+ if ( tEntry.iType != KUidMsvMessageEntry )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ CMsvOperation* operation = NULL;
+
+ if (
+ tEntry.iBioType == KUidWapPushMsgSI.iUid
+#ifdef __SERIES60_PUSH_SL
+ || tEntry.iBioType == KUidWapPushMsgSL.iUid
+#endif // __SERIES60_PUSH_SL
+ )
+ {
+ TEditorParameters editorParameters;
+ editorParameters.iId = tEntry.Id();
+ editorParameters.iFlags = EMsgLaunchEditorThenWait |
+ EMsgReadOnly |
+ EMsgLaunchEditorEmbedded;
+
+ // Get the application name.
+ HBufC* appFileName =
+ MsvUiEditorUtilities::ResolveAppFileNameL( KUidPushViewerApp );
+ CleanupStack::PushL( appFileName );
+
+ operation = MsgEditorLauncher::LaunchEditorApplicationL
+ ( BaseMtm().Session(),
+ tEntry.iMtm,
+ aStatus,
+ editorParameters,
+ *appFileName );
+
+ CleanupStack::PopAndDestroy( appFileName ); // appFileName
+ }
+
+#ifdef __SERIES60_PUSH_SP
+
+ else if ( tEntry.iBioType == KUidWapPushMsgUnknown.iUid )
+ {
+ // Don't launch the PushViewer, but the embedded viewer.
+ // It's unnecessary to call
+ // BaseMtm().SwitchCurrentEntryL( tEntry.Id() );
+ TBuf8<1> dummyPar;
+ CMsvEntrySelection* dummySel = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( dummySel );
+
+ operation = InvokeAsyncFunctionL( EPushMtmCmdViewService,
+ *dummySel,
+ aStatus,
+ dummyPar );
+
+ CleanupStack::PopAndDestroy( dummySel ); // dummySel
+ }
+
+#endif // __SERIES60_PUSH_SP
+
+ else
+ {
+ __ASSERT_DEBUG( EFalse, UiPanic( EPushMtmUiPanBadBioType ) );
+ User::Leave( KErrNotSupported );
+ }
+
+ return operation;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::OpenL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::OpenL
+( TRequestStatus& /*aStatus*/, const CMsvEntrySelection& /*aSelection*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CloseL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CloseL
+( TRequestStatus& /*aStatus*/, const CMsvEntrySelection& /*aSelection*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::EditL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::EditL
+( TRequestStatus& /*aStatus*/, const CMsvEntrySelection& /*aSelection*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::ViewL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::ViewL
+( TRequestStatus& /*aStatus*/, const CMsvEntrySelection& /*aSelection*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CancelL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CancelL
+( TRequestStatus& /*aStatus*/, const CMsvEntrySelection& /*aSelection*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::DeleteFromL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::DeleteFromL
+( const CMsvEntrySelection& /*aSelection*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::UnDeleteFromL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::UnDeleteFromL
+( const CMsvEntrySelection& /*aSelection*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::DeleteServiceL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::DeleteServiceL
+( const TMsvEntry& /*aService*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::ReplyL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::ReplyL(
+ TMsvId /*aDestination*/,
+ TMsvPartList /*aPartlist*/,
+ TRequestStatus& /*aCompletionStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::ForwardL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::ForwardL(
+ TMsvId /*aDestination*/,
+ TMsvPartList /*aPartlist*/,
+ TRequestStatus& /*aCompletionStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::CopyToL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CopyToL
+( const CMsvEntrySelection& /*aSelection*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CPushMtmUi::MoveToL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::MoveToL
+( const CMsvEntrySelection& /*aSelection*/, TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CPushMtmUi::CopyFromL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::CopyFromL(
+ const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aTargetId*/,
+ TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::MoveFromL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::MoveFromL(
+ const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aTargetId*/,
+ TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::QueryCapability
+// ---------------------------------------------------------
+//
+TInt CPushMtmUi::QueryCapability( TUid aCapability, TInt& aResponse )
+ {
+ TInt ret( KErrNone );
+
+ switch ( aCapability.iUid )
+ {
+ case KUidMsvMtmUiQueryMessagingInitialisation:
+ case KUidMsvMtmQueryFactorySettings:
+ case KUidMsvMtmQueryMessageInfo:
+ {
+ aResponse = ETrue;
+ break;
+ }
+ default:
+ {
+ ret = BaseMtm().QueryCapability( aCapability, aResponse );
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::InvokeSyncFunctionL
+// ---------------------------------------------------------
+//
+void CPushMtmUi::InvokeSyncFunctionL( TInt aFunctionId,
+ const CMsvEntrySelection& /*aSelection*/,
+ TDes8& /*aParameter*/ )
+ {
+ PUSHLOG_WRITE_FORMAT
+ ("CPushMtmUi::InvokeSyncFunctionL <%d>",aFunctionId)
+
+ if ( aFunctionId == KMtmUiMessagingInitialisation ||
+ aFunctionId == KMtmUiFunctionRestoreFactorySettings )
+ {
+ // Restore the settings...
+ CPushMtmSettings* pushMtmSettings = CPushMtmSettings::NewLC();
+ pushMtmSettings->RestoreFactorySettingsL();
+ CleanupStack::PopAndDestroy( pushMtmSettings ); // pushMtmSettings
+ // ...and ensure that a service entry exists with which
+ // the settings can be reached from a messaging application.
+ EnsureServiceEntryL();
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::InvokeAsyncFunctionL
+// ---------------------------------------------------------
+//
+CMsvOperation* CPushMtmUi::InvokeAsyncFunctionL
+ ( TInt aFunctionId,
+ const CMsvEntrySelection& aSelection,
+ TRequestStatus& aCompletionStatus,
+ TDes8& aParameter )
+ {
+ PUSHLOG_WRITE_FORMAT
+ ("CPushMtmUi::InvokeAsyncFunctionL <%d>",aFunctionId)
+
+ CMsvOperation* operation = NULL;
+
+ switch ( aFunctionId )
+ {
+ case KMtmUiFunctionMessageInfo:
+ {
+ TBool dontShowNotification = EFalse;
+ if ( 0 < aParameter.Length() )
+ {
+ TMessageInfoParam par;
+ TMessageInfoParamPckg parPckg( par );
+ parPckg.Set( aParameter );
+ dontShowNotification = par.iDontShowNotification;
+ }
+
+ CPushMessageInfoOp* op = new (ELeave) CPushMessageInfoOp
+ ( Session(),
+ BaseMtm().Entry().EntryId(),
+ dontShowNotification,
+ aCompletionStatus );
+ CleanupStack::PushL( op );
+ op->StartL();
+ operation = op;
+ CleanupStack::Pop( op ); // op
+ break;
+ }
+
+ case EPushMtmCmdLoadService:
+ {
+ CPushLoadServiceOp* op = CPushLoadServiceOp::NewL
+ ( Session(),
+ BaseMtm().Entry().EntryId(),
+ aCompletionStatus );
+ CleanupStack::PushL( op );
+ op->StartL();
+ operation = op;
+ CleanupStack::Pop( op ); // op
+ break;
+ }
+
+#ifdef __SERIES60_PUSH_SP
+
+ case EPushMtmCmdViewService:
+ {
+ CPushViewServiceOp* op = new (ELeave) CPushViewServiceOp
+ ( Session(),
+ BaseMtm().Entry().EntryId(),
+ aCompletionStatus );
+ CleanupStack::PushL( op );
+ op->StartL();
+ operation = op;
+ CleanupStack::Pop( op ); // op
+ break;
+ }
+
+#endif // __SERIES60_PUSH_SP
+
+ case EPushMtmCmdViewMessage:
+ {
+ CPushViewMessageOp* op = CPushViewMessageOp::NewL
+ ( Session(),
+ BaseMtm().Entry().EntryId(),
+ aCompletionStatus );
+ CleanupStack::PushL( op );
+ op->StartL();
+ operation = op;
+ CleanupStack::Pop( op ); // op
+ break;
+ }
+
+ default:
+ {
+ operation = CBaseMtmUi::InvokeAsyncFunctionL
+ ( aFunctionId, aSelection, aCompletionStatus, aParameter );
+ break;
+ }
+ }
+
+ return operation;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmUi::GetResourceFileName
+// ---------------------------------------------------------
+//
+void CPushMtmUi::GetResourceFileName( TFileName& aFileName ) const
+ {
+ // Extract the file name and extension from the constant
+ TParsePtrC fileParser( KPushMtmUiResourceFileAndDrive );
+ aFileName = fileParser.NameAndExt();
+ }
+
+// End of File