diff -r fa1df4b99609 -r ebe688cedc25 messagingapp/msgsettings/settingsview/src/mmssettingsprivate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgsettings/settingsview/src/mmssettingsprivate.cpp Tue Aug 31 15:11:31 2010 +0300 @@ -0,0 +1,483 @@ +/* + * Copyright (c) 2009 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: This provides the messaging mw interface for MMS + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include //For client reg +#include //For MMS client +#include + +#include "debugtraces.h" + + +#include "mmssettingprivate.h" + +/** + * Message Server session event handler + */ +class CEventHandler : public MMsvSessionObserver +{ +public: + void HandleSessionEvent(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, + TAny* aArg3); + void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, + TAny* aArg3); +}; +void CEventHandler::HandleSessionEvent(TMsvSessionEvent /*aEvent*/, + TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) +{ +} +void CEventHandler::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, + TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) +{ +} + +//two phase constructor +MmsSettingsPrivate* MmsSettingsPrivate::NewL() +{ + MmsSettingsPrivate* self = new (ELeave) MmsSettingsPrivate(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; +} + +//--------------------------------------------------------------- +// MmsSettingsPrivate::MmsSettingsPrivate +// @see header +//--------------------------------------------------------------- +MmsSettingsPrivate::MmsSettingsPrivate() +{ + //do nothing +} + +//2nd phase constructor +void MmsSettingsPrivate::ConstructL() +{ + //for debug only + //createRepositoryL(); +} + +//--------------------------------------------------------------- +// MmsSettingsPrivate::~MmsSettingsPrivate +// @see header +//--------------------------------------------------------------- +MmsSettingsPrivate::~MmsSettingsPrivate() +{ + // do nothing +} + +//--------------------------------------------------------------- +// MmsSettingsPrivate::createRepository +// @see header +//--------------------------------------------------------------- +void MmsSettingsPrivate::createRepositoryL() +{ + CEventHandler* pObserver = new (ELeave) CEventHandler(); + CleanupStack::PushL(pObserver); + + CMsvSession* iMsvSession = CMsvSession::OpenSyncL(*pObserver); + CleanupStack::PushL(iMsvSession); + + CMmsSettings* mmsSetting = CMmsSettings::NewL(); + CleanupStack::PushL(mmsSetting); + + mmsSetting->LoadSettingsL(); + + TMsvId entryToBeKilled = KMsvNullIndexEntryId; + // Get access to root index + CMsvEntry* cEntry = iMsvSession->GetEntryL(KMsvRootIndexEntryId); + CleanupStack::PushL(cEntry); + + entryToBeKilled = mmsSetting->Service(); + cEntry->SetSortTypeL(TMsvSelectionOrdering(KMsvNoGrouping, + EMsvSortByNone, + ETrue)); + if (entryToBeKilled == KMsvNullIndexEntryId) + { + mmsSetting->CreateNewServiceL(*iMsvSession); + } + + CleanupStack::PopAndDestroy(); // cEntry + + mmsSetting->SetReceivingModeHome(EMmsReceivingAutomatic); + mmsSetting->SetReceivingModeForeign(EMmsReceivingAutomatic); + + mmsSetting->SaveSettingsL(); + + CleanupStack::PopAndDestroy(3); // settings +} + +void MmsSettingsPrivate::setMMSRetrievalL(MsgSettingEngine::MmsRetrieval aRetrieval) +{ + CEventHandler* pObserver = new (ELeave) CEventHandler(); + CleanupStack::PushL(pObserver); + + CMsvSession* mMsvSession = CMsvSession::OpenSyncL(*pObserver); + CleanupStack::PushL(mMsvSession); + + CClientMtmRegistry* mMtmReg = CClientMtmRegistry::NewL(*mMsvSession); + CleanupStack::PushL(mMtmReg); + + CMmsClientMtm* mMmsClient = static_cast + (mMtmReg->NewMtmL(KUidMsgTypeMultimedia)); + CleanupStack::PushL(mMmsClient); + + CMmsSettings* mMmsSetting = CMmsSettings::NewL(); + CleanupStack::PushL(mMmsSetting); + + //Load settings + mMmsClient->RestoreSettingsL(); + mMmsSetting->CopyL( mMmsClient->MmsSettings() ); + + switch ( aRetrieval ) + { + case MsgSettingEngine::AutomInHomeNetwork: + { + mMmsSetting->SetReceivingModeHome( EMmsReceivingAutomatic ); + mMmsSetting->SetReceivingModeForeign( EMmsReceivingManual ); + break; + } + case MsgSettingEngine::AlwaysAutomatic: + { + mMmsSetting->SetReceivingModeHome( EMmsReceivingAutomatic ); + mMmsSetting->SetReceivingModeForeign( EMmsReceivingAutomatic ); + break; + } + case MsgSettingEngine::Manual: + { + mMmsSetting->SetReceivingModeHome( EMmsReceivingManual ); + mMmsSetting->SetReceivingModeForeign( EMmsReceivingManual ); + break; + } + case MsgSettingEngine::Off: + { + mMmsSetting->SetReceivingModeHome( EMmsReceivingPostpone ); + mMmsSetting->SetReceivingModeForeign( EMmsReceivingPostpone ); + break; + } + case MsgSettingEngine::No: + { + mMmsSetting->SetReceivingModeHome( EMmsReceivingReject ); + mMmsSetting->SetReceivingModeForeign( EMmsReceivingReject ); + break; + } + default: + break; + } + + + //save the settings + mMmsClient->SetSettingsL( *mMmsSetting ); + //TODO:User Input should be blocked when save is being done + //This should be called as this takes care of automatic + //downloading of messages upon change of retrieval mode + mMmsClient->StoreSettingsL(); + + CleanupStack::PopAndDestroy(5); +} + +void MmsSettingsPrivate::setAnonymousMessagesL(TBool aAnonymous) +{ + CMmsAccount* mMmsAccount = CMmsAccount::NewL(); + CleanupStack::PushL(mMmsAccount); + + CMmsSettings* mMmsSetting = CMmsSettings::NewL(); + CleanupStack::PushL(mMmsSetting); + + mMmsAccount->LoadSettingsL(*mMmsSetting); + + //do your operation + mMmsSetting->SetAcceptAnonymousMessages(aAnonymous); + + //save the settings + mMmsAccount->SaveSettingsL(*mMmsSetting); + CleanupStack::PopAndDestroy(2); +} + +void MmsSettingsPrivate::setReceiveMMSAdvertsL(TBool aReceiveAdvert) +{ + CMmsAccount* mMmsAccount = CMmsAccount::NewL(); + CleanupStack::PushL(mMmsAccount); + + CMmsSettings* mMmsSetting = CMmsSettings::NewL(); + CleanupStack::PushL(mMmsSetting); + + mMmsAccount->LoadSettingsL(*mMmsSetting); + + //do your operation + mMmsSetting->SetAcceptAdvertisementMessages(aReceiveAdvert); + + //save the settings + mMmsAccount->SaveSettingsL(*mMmsSetting); + CleanupStack::PopAndDestroy(2); +} + +void MmsSettingsPrivate::advanceMmsSettingsL( + MsgSettingEngine::MmsRetrieval& aRetrieval, + TBool& aAnonymousStatus, + TBool& aMmsAdvertsStatus) +{ + CMmsAccount* mMmsAccount = CMmsAccount::NewL(); + CleanupStack::PushL(mMmsAccount); + + CMmsSettings* mMmsSetting = CMmsSettings::NewL(); + CleanupStack::PushL(mMmsSetting); + + mMmsAccount->LoadSettingsL(*mMmsSetting); + + TMmsReceivingMode receveModeHome = mMmsSetting->ReceivingModeHome(); + TMmsReceivingMode receveModeForeign = mMmsSetting->ReceivingModeForeign(); + + + // if default value is not acceptable, choose next by keeping costs low + if ( receveModeHome == EMmsReceivingAutomatic && + receveModeForeign == EMmsReceivingAutomatic ) + { + aRetrieval = MsgSettingEngine::AlwaysAutomatic; + } + else if ( receveModeHome == EMmsReceivingManual && + receveModeForeign == EMmsReceivingManual ) + { + aRetrieval = MsgSettingEngine::Manual; + } + else if ( receveModeHome == EMmsReceivingReject && + receveModeForeign == EMmsReceivingReject ) + { + aRetrieval = MsgSettingEngine::No; + } + else if ( receveModeHome == EMmsReceivingPostpone && + receveModeForeign == EMmsReceivingPostpone ) + { + aRetrieval = MsgSettingEngine::Off; + } + // Should always be automatic@home & manaul@roam + else + { + aRetrieval = MsgSettingEngine::AutomInHomeNetwork; + } + aAnonymousStatus = mMmsSetting->AcceptAnonymousMessages(); + + aMmsAdvertsStatus = mMmsSetting->AcceptAdvertisementMessages(); + + CleanupStack::PopAndDestroy(2); +} + +//--------------------------------------------------------------- +// SmsSettings::iAPSelector +// @see header +//--------------------------------------------------------------- +void MmsSettingsPrivate::getAllAccessPointsL( + RPointerArray& aAccessPoints, + TInt& aDefaultIndex) +{ +#ifdef _DEBUG_TRACES_ + qDebug() << "Enter MmsSettingsPrivate::getAllAccessPoints: Index= " << aDefaultIndex; +#endif + + CCommsDatabase *db; + CCommsDbTableView *view; + TInt result, err; + + //select the access point and store it in cenrep + CMmsAccount* mmsAccount = CMmsAccount::NewL(); + CleanupStack::PushL(mmsAccount); + + CMmsSettings* mMmsSetting = CMmsSettings::NewL(); + CleanupStack::PushL(mMmsSetting); + + mmsAccount->LoadSettingsL(*mMmsSetting); + + //select the default access point + TInt32 defaultId = mMmsSetting->AccessPoint(0); + + TBuf iapName; + TBuf serviceType; + TUint32 iapId = 0; + db = CCommsDatabase::NewL(EDatabaseTypeIAP); + CleanupStack::PushL(db); + view = db->OpenTableLC(TPtrC(IAP)); + + // Walk through records + result = view->GotoFirstRecord(); + TInt recordIndex = 0; + while (result == KErrNone) + { + TRAP(err, view->ReadTextL(TPtrC(COMMDB_NAME), iapName)); + TRAP(err, view->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType)); +#ifdef __WINSCW__ + if (serviceType.CompareF(TPtrC(LAN_SERVICE)) == 0) + { + HBufC* accessPointName = iapName.Alloc(); + aAccessPoints.AppendL(accessPointName); + TRAP(err, view->ReadUintL(TPtrC(COMMDB_ID), iapId)); + + // check to see if this is default set for MMsAccesspoint + if (defaultId == iapId) + { + aDefaultIndex = recordIndex; + } + recordIndex++; + } +#else + if(serviceType.CompareF(TPtrC(OUTGOING_GPRS)) == 0) + { + HBufC* accessPointName = iapName.Alloc(); + aAccessPoints.AppendL(accessPointName); + TRAP(err, view->ReadUintL(TPtrC(COMMDB_ID), iapId)); + + // check to see if this is default set for MMsAccesspoint + if (defaultId == iapId) + { + aDefaultIndex = recordIndex; + } + recordIndex++; + } +#endif + TRAP(err, result = view->GotoNextRecord()); + } + CleanupStack::PopAndDestroy(4); // nMmsSettings, db,view +#ifdef _DEBUG_TRACES_ + qDebug() << "Exit MmsSettingsPrivate::getAllAccessPoints: Index=" + << aDefaultIndex + << "\n"; +#endif + +} + +//--------------------------------------------------------------- +// MmsSettingsPrivate::setMMSAccesspoint +// @see header +//--------------------------------------------------------------- +void MmsSettingsPrivate::setMMSAccesspointL(TInt& aDefaultIndex) +{ +#ifdef _DEBUG_TRACES_ + qDebug() << "Enter MmsSettingsPrivate::setMMSAccesspoint: Index=" + << aDefaultIndex + << "\n"; +#endif + + + //select the access point and store it in cenrep + CMmsAccount* mmsAccount = CMmsAccount::NewL(); + CleanupStack::PushL(mmsAccount); + + CMmsSettings* mMmsSetting = CMmsSettings::NewL(); + CleanupStack::PushL(mMmsSetting); + + mmsAccount->LoadSettingsL(*mMmsSetting); + + CCommsDatabase *db; + CCommsDbTableView *view; + TInt result, err; + + TCommDbConnPref prefs; + + TBuf iapName; + TBuf serviceType; + TUint32 iapId = 0; + db = CCommsDatabase::NewL(EDatabaseTypeIAP); + CleanupStack::PushL(db); + view = db->OpenTableLC(TPtrC(IAP)); + + // Walk through records + result = view->GotoFirstRecord(); + TInt serviceCounter = 0; + while (result == KErrNone) + { + TRAP(err, view->ReadTextL(TPtrC(COMMDB_NAME), iapName)); + TRAP(err, view->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType)); + +#ifdef __WINSCW__ + if (serviceType.CompareF(TPtrC(LAN_SERVICE)) == 0 && serviceCounter + == aDefaultIndex) + { + TRAP(err, view->ReadUintL(TPtrC(COMMDB_ID), iapId)); + prefs.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); + prefs.SetDirection(ECommDbConnectionDirectionOutgoing); + prefs.SetIapId(iapId); + + while (mMmsSetting->AccessPointCount()) + { + mMmsSetting->DeleteAccessPointL(0); + } + if (iapId != 0) + { +#ifdef _DEBUG_TRACES_ + qDebug() << "Set MMs Accesspoint IAP ID:" + << iapId; +#endif + + + mMmsSetting->AddAccessPointL(iapId, 0); + } + mmsAccount->SaveSettingsL(*mMmsSetting); + serviceCounter++; + } + else if (serviceType.CompareF(TPtrC(LAN_SERVICE)) == 0) + { + serviceCounter++; + } +#else + if(serviceType.CompareF(TPtrC(OUTGOING_GPRS)) == 0 && + serviceCounter == aDefaultIndex) + { + TRAP(err, view->ReadUintL(TPtrC(COMMDB_ID), iapId)); + prefs.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); + prefs.SetDirection(ECommDbConnectionDirectionOutgoing); + prefs.SetIapId(iapId); + + while ( mMmsSetting->AccessPointCount() ) + { +#ifdef _DEBUG_TRACES_ + qDebug() << "Set MMs Accesspoint IAP ID:" + << iapId; +#endif + + mMmsSetting->DeleteAccessPointL( 0 ); + } + if ( iapId != 0 ) + { + mMmsSetting->AddAccessPointL(iapId, 0); + } + mmsAccount->SaveSettingsL(*mMmsSetting); + serviceCounter++; + } + else if(serviceType.CompareF(TPtrC(OUTGOING_GPRS)) == 0) + { + serviceCounter++; + } +#endif + TRAP(err, result = view->GotoNextRecord()); + } + + CleanupStack::PopAndDestroy(4); // mMmsSetting, db,view +#ifdef _DEBUG_TRACES_ + qDebug() << "Exit MmsSettingsPrivate::setMMSAccesspoint: Index=" + << aDefaultIndex + << "\n"; +#endif + +} + +//eof +