diff -r 238255e8b033 -r 84d9eb65b26f messagingapp/msgsettings/settingsview/src/mmssettingsprivate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgsettings/settingsview/src/mmssettingsprivate.cpp Mon May 03 12:29:07 2010 +0300 @@ -0,0 +1,452 @@ +/* + * 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::setMMSRetrieval(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() ); + + //do your operation + TMmsReceivingMode receveMode = EMmsReceivingAutomatic; + + if (aRetrieval == MsgSettingEngine::Maual) + receveMode = EMmsReceivingManual; + else if (aRetrieval == MsgSettingEngine::Off) + receveMode = EMmsReceivingPostpone; + else if (aRetrieval == MsgSettingEngine::No) + receveMode = EMmsReceivingReject; + + if (aRetrieval == MsgSettingEngine::AlwaysAutomatic) + { + mMmsSetting->SetReceivingModeForeign(receveMode); + } + else + { + mMmsSetting->SetReceivingModeForeign(EMmsReceivingManual); + } + + mMmsSetting->SetReceivingModeHome(receveMode); + + //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::setAnonymousMessages(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::setReceiveMMSAdverts(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::advanceMmsSettings( + 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 receveMode = mMmsSetting->ReceivingModeHome(); + + if (receveMode == EMmsReceivingManual) + aRetrieval = MsgSettingEngine::Maual; + else if (receveMode == EMmsReceivingPostpone) + aRetrieval = MsgSettingEngine::Off; + else if (receveMode == EMmsReceivingReject) + aRetrieval = MsgSettingEngine::No; + + receveMode = mMmsSetting->ReceivingModeForeign(); + if (receveMode == EMmsReceivingAutomatic) + { + aRetrieval = MsgSettingEngine::AlwaysAutomatic; + } + + aAnonymousStatus = mMmsSetting->AcceptAnonymousMessages(); + + aMmsAdvertsStatus = mMmsSetting->AcceptAdvertisementMessages(); + + CleanupStack::PopAndDestroy(2); +} + +//--------------------------------------------------------------- +// SmsSettings::iAPSelector +// @see header +//--------------------------------------------------------------- +void MmsSettingsPrivate::getAllAccessPoints( + 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::setMMSAccesspoint(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 +