--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/mcesettings/src/MceSettingsDialog.cpp Wed Nov 03 09:52:46 2010 +0530
@@ -0,0 +1,633 @@
+/*
+* 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 "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:
+* Message centre's settings dialog.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include <eikapp.h>
+#include <MuiuMsvUiServiceUtilities.h> //MsvUiServiceUtilities
+#include <MtmExtendedCapabilities.hrh>
+#include <msvuids.h>
+#include <mtudreg.h>
+#include <MTMStore.h>
+#include <aknnotewrappers.h>
+#include <aknradiobuttonsettingpage.h>
+#include <aknViewAppUi.h>
+
+#include <apgcli.h>
+#include <MceSettings.rsg>
+#include "MceSettingsDialog.h"
+#include "MceSettingsGeneralSettingsDialog.h"
+#include "MceSettingsArrays.h"
+#include "MceSettingsSessionObserver.h"
+#include "MceSettingsIds.hrh"
+#include "MceSettingsMultipleServicesDialog.h"
+
+#include <featmgr.h>
+#include <hlplch.h> // For HlpLauncher
+#include <csxhelp/mce.hlp.hrh>
+#include <SenduiMtmUids.h>
+
+#include <bldvariant.hrh>
+#include <data_caging_path_literals.hrh>
+
+#include "MceSettingsUtils.h"
+#include <RCustomerServiceProfileCache.h>
+// CONSTANTS
+
+_LIT( KMceDirAndFile,"MceSettings.rsc" );
+
+#define KMceApplicationUidValue 0x100058C5
+const TUid KMceApplicationUid = {KMceApplicationUidValue};
+
+const TUid KCBSApplicationId = {0x101F4CD3};
+const TUid KCBSApplicationSettingsViewId = {6};
+const TInt KMceSettingsExtraItems = 2;
+const TInt KMceSettingsCBS = 2;
+const TInt KMceSettingsCBSUid = 42;
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// C++ default constructor can NOT contain any code that
+// might leave.
+//
+CMceSettingsDialog::CMceSettingsDialog()
+: CMceSettingsTitlePaneHandlerDialog(),
+ iResources( *CCoeEnv::Static() ),
+ iLaunchedFromMce( EFalse ),
+ iDialogOpen(EFalse)
+ {
+ }
+
+// ----------------------------------------------------
+// CMceSettingsDialog::Constructor
+// ----------------------------------------------------
+CMceSettingsDialog::CMceSettingsDialog(
+ CMceUidNameArray& aSettingsItemsArray,
+ MMceSettingsAccountManager* aManager,
+ CMsvSession* aSession )
+: CMceSettingsTitlePaneHandlerDialog(),
+ iResources( *CCoeEnv::Static() ),
+ iMsgTypesSettings( &aSettingsItemsArray ),
+ iAccountManager( aManager ),
+ iSession( aSession ),
+ iLaunchedFromMce( ETrue ),
+ iDialogOpen(EFalse)
+ {
+ }
+
+
+// ----------------------------------------------------
+// CMceSettingsDialog::Destructor
+// ----------------------------------------------------
+EXPORT_C CMceSettingsDialog::~CMceSettingsDialog()
+ {
+ iResources.Close();
+ if ( !iLaunchedFromMce )
+ {
+ // if launched from mce then mce owns this array!
+ delete iMsgTypesSettings;
+ }
+ delete iSessionObserver;
+ // dont delete iSession, it is not owed by this class
+ // dont delete iAccountManager, it is not owed by this class
+ }
+
+// ----------------------------------------------------
+// CMceSettingsDialog::ConstructL
+// ----------------------------------------------------
+void CMceSettingsDialog::ConstructL()
+ {
+ TParse fp;
+ fp.Set( KMceDirAndFile, &KDC_RESOURCE_FILES_DIR , NULL );
+ TFileName fileName = fp.FullName();
+
+ iResources.OpenL( fileName );
+ CAknDialog::ConstructL( R_MCE_SETTINGS_DIALOG_MENUBAR );
+
+ iSessionObserver = CMceSettingsSessionObserver::NewL( iSession );
+ if ( !iAccountManager )
+ {
+ iAccountManager = iSessionObserver;
+ }
+ if ( !iSession )
+ {
+ iSession = &iSessionObserver->Session();
+ }
+ if ( !iMsgTypesSettings )
+ {
+ iMsgTypesSettings = CMceUidNameArray::NewL();
+ }
+ FeatureManager::InitializeLibL();
+ if ( FeatureManager::FeatureSupported( KFeatureIdSelectableEmail ) )
+ {
+ iProductIncludesSelectableEmail = ETrue;
+ }
+ else
+ {
+ iProductIncludesSelectableEmail = EFalse;
+ }
+ FeatureManager::UnInitializeLib();
+ }
+
+// ----------------------------------------------------
+// CMceSettingsDialog::ConstructL
+// ----------------------------------------------------
+EXPORT_C CMceSettingsDialog* CMceSettingsDialog::NewL()
+ {
+ CMceSettingsDialog* dialog = new (ELeave) CMceSettingsDialog();
+ CleanupStack::PushL( dialog );
+ dialog->ConstructL();
+ CleanupStack::Pop( dialog );
+ return dialog;
+ }
+
+// ----------------------------------------------------
+// CMceSettingsDialog::ConstructL
+// ----------------------------------------------------
+EXPORT_C CMceSettingsDialog*
+ CMceSettingsDialog::NewL( CMceUidNameArray& aSettingsItemsArray,
+ MMceSettingsAccountManager* aManager, CMsvSession* aSession )
+ {
+ CMceSettingsDialog* dialog = new (ELeave) CMceSettingsDialog(
+ aSettingsItemsArray, aManager, aSession );
+ CleanupStack::PushL( dialog );
+ dialog->ConstructL();
+ CleanupStack::Pop( dialog );
+ return dialog;
+ }
+
+// ----------------------------------------------------
+// CMceSettingsDialog::OkToExitL
+// ----------------------------------------------------
+EXPORT_C TInt CMceSettingsDialog::OkToExitL( TInt aButtonId )
+ {
+ TBool okToExit = CAknDialog::OkToExitL( aButtonId );
+ if ( aButtonId == EMceSettingsCmdSettingsDialogOpen )
+ {
+ // Middle soft key pressed
+ ProcessCommandL( aButtonId );
+ okToExit = EFalse; // Cannot exit, since MSK was pressed
+ }
+ else if ( aButtonId != EEikBidCancel && okToExit )
+ {
+ RestoreTitleTextL();
+ }
+ return okToExit;
+ }
+
+// ----------------------------------------------------
+// CMceSettingsDialog::ProcessCommandL
+// ----------------------------------------------------
+EXPORT_C void CMceSettingsDialog::ProcessCommandL( TInt aCommandId )
+ {
+ CAknDialog::ProcessCommandL( aCommandId ); // hides menu
+ if ( aCommandId == EMceSettingsCmdSettingsDialogExit )
+ {
+ if (iAvkonViewAppUi->ExitHidesInBackground())
+ {
+ iAvkonViewAppUi->ProcessCommandL( EAknCmdHideInBackground );
+ }
+ else
+ {
+ iAvkonViewAppUi->ProcessCommandL( EAknCmdExit );
+ }
+
+ return;
+ }
+
+
+ switch ( aCommandId )
+ {
+ case EMceSettingsCmdSettingsDialogOpen:
+ OpenSubSettingsL();
+ break;
+
+ case EMceSettingsCmdSettingsDialogHelp:
+ {
+ LaunchHelpL();
+ }
+ break;
+
+ default :
+ break;
+ }
+ }
+
+// ----------------------------------------------------
+// CMceSettingsDialog::DynInitMenuPaneL
+// ----------------------------------------------------
+EXPORT_C void CMceSettingsDialog::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+ {
+ if ( aResourceId == R_MCE_SETTINGS_DIALOG_MENUPANE )
+ {
+ aMenuPane->SetItemDimmed( EMceSettingsCmdSettingsDialogHelp,
+ !FeatureManager::FeatureSupported( KFeatureIdHelp ) );
+
+ }
+ }
+
+// ----------------------------------------------------
+// CMceSettingsDialog::PreLayoutDynInitL
+// ----------------------------------------------------
+EXPORT_C void CMceSettingsDialog::PreLayoutDynInitL( )
+ {
+ TBool csp = MceSettingsUtils::CspBitsL();
+ iCbs = EFalse;
+ if ( FeatureManager::FeatureSupported( KFeatureIdCellBroadcast ) )
+ {
+ iCbs = ETrue;
+ if ( csp )
+ {
+ iCbs = CheckCspBitL();
+ }
+ }
+ StoreTitleTextAndSetNewL( R_MCE_SETTINGS_TITLE );
+
+ if ( !iLaunchedFromMce )
+ {
+ LoadAllMtmsL();
+ }
+
+ CEikTextListBox* list=STATIC_CAST( CEikTextListBox*,
+ Control( EMceSettingsDialogChoiceList ) );
+ // Scrollbar
+ list->CreateScrollBarFrameL(ETrue);
+ list->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+ CTextListBoxModel* model=list->Model();
+ model->SetItemTextArray( iMsgTypesSettings );
+ model->SetOwnershipType( ELbmDoesNotOwnItemArray );
+ list->SetListBoxObserver( this );
+ }
+
+
+// ----------------------------------------------------
+// CMceSettingsDialog::ExecuteLD
+// ----------------------------------------------------
+EXPORT_C TInt CMceSettingsDialog::ExecuteLD( )
+ {
+
+ TInt returnValue = CAknDialog::ExecuteLD( R_MCE_SETTINGS_DIALOG );
+
+
+ return returnValue;
+ }
+
+// ----------------------------------------------------
+// CMceSettingsDialog::LoadAllMtmsL
+// ----------------------------------------------------
+void CMceSettingsDialog::LoadAllMtmsL()
+ {
+ iMsgTypesSettings->Reset();
+ CMtmUiDataRegistry* uiRegistry = iSessionObserver->UiRegistry(); // owed by iSessionObserver
+ CMtmStore* mtmStore = iSessionObserver->MtmStore(); // owed by iSessionObserver
+ const TInt count = uiRegistry->NumRegisteredMtmDlls();
+ TInt loop = 0;
+ for ( loop = 0; loop < count; loop++ )
+ {
+ LoadMtmL( uiRegistry->MtmTypeUid( loop ), *mtmStore, *uiRegistry );
+ }
+
+ CMsvEntry* rootEntry = iSession->GetEntryL( KMsvRootIndexEntryIdValue );
+ CleanupStack::PushL( rootEntry );
+
+ // Then add MTMs which have service but cannot create messages (wap push in practice)
+ CMsvEntrySelection* sel =
+ MsvUiServiceUtilities::GetListOfAccountsL( *iSession );
+ CleanupStack::PushL( sel );
+ TMsvId id;
+ const TInt numAccounts=sel->Count();
+ for ( loop = 0; loop<numAccounts; loop++)
+ {
+ id = sel->At(loop);
+ TMsvEntry tentry;
+ TMsvId serviceId;
+ TInt err = iSession->GetEntry( id, serviceId, tentry );
+
+ if ( err == KErrNone && uiRegistry->IsPresent( tentry.iMtm ) )
+ {
+ TUid techType = uiRegistry->TechnologyTypeUid( tentry.iMtm );
+ TBool found = EFalse;
+
+ for ( TInt loop2 = iMsgTypesSettings->Count()-1 ;loop2 >= 0; loop2-- )
+ {
+ TUid uidAlreadyAdded = (*iMsgTypesSettings)[loop2].iUid;
+ if ( uiRegistry->TechnologyTypeUid( uidAlreadyAdded ) == techType )
+ {
+ found = ETrue;
+ break;
+ }
+ }
+
+ if ( !found )
+ {
+ iMsgTypesSettings->AppendL( TUidNameInfo(
+ tentry.iMtm,
+ uiRegistry->RegisteredMtmDllInfo( tentry.iMtm ).HumanReadableName()
+ ));
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy( sel );
+ CleanupStack::PopAndDestroy( rootEntry );
+
+ // this is not used anywhere, two last items in the list are
+ // ALWAYS cbs settings and mce general settings
+
+ SortAndChangeSmsMmsEmailFirstL();
+
+ TUid uid;
+ uid.iUid = KMceSettingsCBSUid;
+
+ if(iCbs)
+ {
+ HBufC* text = StringLoader::LoadL( R_MCE_CBS_SETTINGS_TEXT, iEikonEnv );
+ TUidNameInfo cbsSettings( uid, *text );
+ delete text;
+ iMsgTypesSettings->AppendL( cbsSettings );
+ }
+
+ HBufC* text = StringLoader::LoadL( R_MCE_GENERAL_SETTINGS_TEXT, iEikonEnv );
+ TUidNameInfo generalSettings( uid, *text );
+ delete text;
+ iMsgTypesSettings->AppendL( generalSettings );
+
+ }
+
+
+// ----------------------------------------------------
+// CMceSettingsDialog::LoadMtmL
+// ----------------------------------------------------
+void CMceSettingsDialog::LoadMtmL(
+ const TUid aMtmType,
+ CMtmStore& aMtmStore,
+ const CMtmUiDataRegistry& aUiRegistry )
+ {
+ CBaseMtmUiData* uiData = NULL;
+ TRAPD( err, ( uiData = &(aMtmStore.MtmUiDataL(aMtmType)) ) );
+ if( err != KErrNone )
+ {
+ return;
+ }
+
+ TInt response;
+ TUid canSend={KUidMtmQueryCanCreateNewMsgValue};
+ TInt canSendResponse=uiData->QueryCapability( canSend, response );
+
+ TBool foundSettings = EFalse;
+ const CArrayFix<CBaseMtmUiData::TMtmUiFunction>& funcs =
+ uiData->MtmSpecificFunctions();
+ const TInt numFuncs = funcs.Count();
+ for (TInt funcIndex = 0; funcIndex < numFuncs && !foundSettings; funcIndex++ )
+ {
+ CBaseMtmUiData::TMtmUiFunction func = funcs.At( funcIndex );
+ if ( func.iFunctionId == KMtmUiMceSettings )
+ {
+ iMsgTypesSettings->AppendL( TUidNameInfo(
+ aMtmType,
+ func.iCaption ) );
+ foundSettings = ETrue;
+ }
+ } // end for
+ if ( canSendResponse == KErrNone && !foundSettings )
+ {
+ iMsgTypesSettings->AppendL( TUidNameInfo(
+ aMtmType,
+ aUiRegistry.RegisteredMtmDllInfo(aMtmType).HumanReadableName()
+ ));
+ }
+ }
+
+
+// ----------------------------------------------------
+// CMceSettingsDialog::HandleListBoxEventL
+// ----------------------------------------------------
+void CMceSettingsDialog::HandleListBoxEventL(
+ CEikListBox* /*aListBox*/,
+ TListBoxEvent aEventType )
+ {
+ switch(aEventType)
+ {
+ case EEventEnterKeyPressed:
+ case EEventItemSingleClicked:
+ ProcessCommandL( EMceSettingsCmdSettingsDialogOpen );
+ break;
+ default:
+ break;
+ }
+ }
+
+
+// ----------------------------------------------------
+// CMceSettingsDialog::OpenSubSettingsL
+// ----------------------------------------------------
+void CMceSettingsDialog::OpenSubSettingsL()
+ {
+ CEikTextListBox* list=STATIC_CAST( CEikTextListBox*,
+ Control( EMceSettingsDialogChoiceList ) );
+ const TInt numberOfItems = list->Model()->NumberOfItems();
+ TInt choice = list->CurrentItemIndex();
+
+ // Run time Cell Broadcast variant.
+ TInt removedSettingItems = 0;
+ if ( !iCbs )
+ {
+ removedSettingItems++;
+ }
+
+ if ( choice < numberOfItems - KMceSettingsExtraItems + removedSettingItems )
+ {
+ TBool canCreateNewAccount = iAccountManager->CanCreateNewAccountL(
+ (*iMsgTypesSettings)[choice].iUid );
+
+ if ( canCreateNewAccount )
+ {
+ if(iDialogOpen)
+ {
+ return;
+ }
+ iDialogOpen = ETrue;
+ if ( iProductIncludesSelectableEmail )
+ {
+ CMceSettingsMultipleServicesDialog::LaunchDialogL(
+ *iAccountManager,
+ ( *iMsgTypesSettings )[choice].iUid,
+ *iSession,
+ R_MCE_SETTINGS_MULTIPLE_SERVICES_DIALOG_MENUBAR_WITH_SELECTABLE_EMAIL,
+ R_MCE_SETTINGS_MULTIPLE_SERVICES_DIALOG );
+ }
+ else
+ {
+ CMceSettingsMultipleServicesDialog::LaunchDialogL(
+ *iAccountManager,
+ ( *iMsgTypesSettings )[choice].iUid,
+ *iSession,
+ R_MCE_SETTINGS_MULTIPLE_SERVICES_DIALOG_MENUBAR,
+ R_MCE_SETTINGS_MULTIPLE_SERVICES_DIALOG );
+ }
+ iDialogOpen = EFalse;
+ }
+ else
+ {
+ // mtm cannot create new accounts, edit only FIRST service if exists
+ CMsvEntrySelection* sel =
+ MsvUiServiceUtilities::GetListOfAccountsWithMTML( *iSession,
+ (*iMsgTypesSettings)[choice].iUid );
+
+ CleanupStack::PushL( sel );
+
+ if ( sel->Count() > 0 )
+ {
+ iAccountManager->EditAccountL( (*sel)[0] );
+ }
+ else
+ { // service disappeared?
+
+ }
+ CleanupStack::PopAndDestroy( sel );
+ }
+ } // end if ( choice < numberOfItems )
+ else if ( iCbs && choice == numberOfItems - KMceSettingsCBS )
+ {
+ // CBS settings are second from the end of the list
+ TVwsViewId viewId( KCBSApplicationId, KCBSApplicationSettingsViewId );
+ STATIC_CAST( CCoeAppUi*, ControlEnv()->AppUi())->ActivateViewL( viewId );
+ }
+ else
+ {
+ // general settings are list item in the list
+ CMceGeneralSettingsDialog* generalSettingsDlg =
+ new (ELeave) CMceGeneralSettingsDialog( iSession, *iSessionObserver, iAccountManager );
+ CleanupStack::PushL( generalSettingsDlg );
+ generalSettingsDlg->ConstructL( R_MCE_GENERAL_SETTINGS_CHOICE_MENUBAR );
+ CleanupStack::Pop( generalSettingsDlg ); // generalSettingsDlg
+ generalSettingsDlg->ExecuteLD( R_MCE_GENERAL_SETTINGS );
+ }
+
+ }
+
+
+// ---------------------------------------------------------
+// CMceSettingsDialog::SortAndChangeSmsMmsEmailFirstL
+// ---------------------------------------------------------
+//
+void CMceSettingsDialog::SortAndChangeSmsMmsEmailFirstL()
+ {
+ iMsgTypesSettings->Sort(ECmpFolded);
+
+ ChangeMsgTypeTopL( *iMsgTypesSettings, KSenduiMtmPostcardUid );
+ ChangeMsgTypeTopL( *iMsgTypesSettings, KSenduiMtmSyncMLEmailUid );
+ ChangeMsgTypeTopL( *iMsgTypesSettings, KSenduiMtmSmtpUid );
+ ChangeMsgTypeTopL( *iMsgTypesSettings, KSenduiMtmAudioMessageUid );
+ // SMS & MMS still have own settings although the editor is common.
+ ChangeMsgTypeTopL( *iMsgTypesSettings, KSenduiMtmMmsUid );
+ ChangeMsgTypeTopL( *iMsgTypesSettings, KSenduiMtmSmsUid );
+ }
+
+// ---------------------------------------------------------
+// CMceSettingsDialog::ChangeMsgTypeTopL
+// ---------------------------------------------------------
+//
+void CMceSettingsDialog::ChangeMsgTypeTopL( CUidNameArray& aArray, TUid aMsgType ) const
+ {
+ TInt loop = 0;
+ // first change email to the top
+ for (loop=1; loop < aArray.Count(); loop++)
+ {
+ if (aArray[loop].iUid == aMsgType)
+ {
+ TUidNameInfo info = aArray[loop];
+ aArray.InsertL( 0, info );
+ aArray.Delete( loop+1 );
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------
+// CMceSettingsDialog::LaunchHelpL
+// Launch help using context
+//
+// ----------------------------------------------------
+void CMceSettingsDialog::LaunchHelpL() const
+ {
+ CCoeAppUi* appUi = STATIC_CAST(CCoeAppUi*, ControlEnv()->AppUi());
+ CArrayFix<TCoeHelpContext>* helpContext = appUi->AppHelpContextL();
+ HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext );
+ }
+
+
+// ----------------------------------------------------
+// CMceSettingsDialog::GetHelpContext
+// returns helpcontext as aContext
+//
+// ----------------------------------------------------
+void CMceSettingsDialog::GetHelpContext
+ (TCoeHelpContext& aContext) const
+ {
+ aContext.iMajor = KMceApplicationUid;
+ aContext.iContext = KMCE_HLP_SETTINGS;
+ }
+
+// ----------------------------------------------------
+// CMceSettingsDialog::CheckCspBitL
+// returns ETrue if Cell Broadcast csp bit is on
+//
+// ----------------------------------------------------
+TBool CMceSettingsDialog::CheckCspBitL( ) const
+ {
+ RCustomerServiceProfileCache csp;
+
+ TInt error = csp.Open();
+ if ( error )
+ {
+ return ETrue;
+ }
+
+ RMobilePhone::TCspTeleservices params;
+ TInt retVal = csp.CspTeleServices( params );
+ csp.Close();
+
+ if ( retVal == KErrNone )
+ {
+ if ( ( params&RMobilePhone::KCspSMCB ) != 0 )
+ {
+ // Cell Broadcast CSP bit is on
+ return ETrue;
+ }
+ else
+ {
+ // Cell Broadcast CSP bit is off
+ return EFalse;
+ }
+ }
+ else
+ {
+ // Error: By default show CBS service
+ return ETrue;
+ }
+
+ }
+
+// End of File