diff -r 3fec62e6e7fc -r 90fe62538f66 controlpanelui/src/cpprofilewrapper/src/cpprofilemodel_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/controlpanelui/src/cpprofilewrapper/src/cpprofilemodel_p.cpp Tue Aug 31 15:15:28 2010 +0300 @@ -0,0 +1,703 @@ +/* +* 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: +* +*/ + +#include "cpprofilemodel_p.h" +#include "cpprofilemodel.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +/* + * Constructor + */ +CpProfileModelPrivate::CpProfileModelPrivate() + : mEngine(0), + mProfileNames(0), + q_ptr(0) +{ + +} + +/* + * Initialize the profile engine and available profile list for profile wrapper. + */ +void CpProfileModelPrivate::initialize(CpProfileModel *parent) +{ + q_ptr = parent; + CPFW_LOG("CpProfileModelPrivate::CpProfileModelPrivate(), START."); + TRAP_IGNORE( + mEngine = CreateProfileEngineExtended2L(); + mProfileNames = mEngine->ProfilesNamesArrayLC(); + CleanupStack::Pop(); // pop the pointer of mProfileNames + /* + * Currently, engine part will return all previous version of profile + * so some invalid profile will be added in the new list, to avoid this + * use hard code to get the right list of profile. + */ + /*MProfilesNamesArray* nameList = mEngine->ProfilesNamesArrayLC(); + int profileCount = nameList->MdcaCount(); + for (int i = 0; iProfileName(i); + mProfileList.insert(profileName->Id(), mEngine->Profile2L(profileName->Id())); + } + CleanupStack::PopAndDestroy(*nameList);*/ + ); + mProfileList.append(static_cast(EProfileWrapperGeneralId)); // general id + mProfileList.append(static_cast(EProfileWrapperMeetingId)); // meeting id + CPFW_LOG("CpProfileModelPrivate::CpProfileModelPrivate(), END"); +} + +/* + * Destructor + */ +CpProfileModelPrivate::~CpProfileModelPrivate() +{ + if (mEngine!=0) { + mEngine->Release(); + } + if (mProfileNames) { + delete mProfileNames; + } + mProfileList.clear(); +} + +/* + * Get profile name with its id + */ +QString CpProfileModelPrivate::profileName(int profileId) const +{ + CPFW_LOG("CpProfileModelPrivate::profileName(), START."); + // Return an empty string if id is not valid. + if (!isValidProfile(profileId)) { + return QString(); + } + + const MProfileName* name = mProfileNames->ProfileName(profileId); + QString profileName; + if (name != 0) { + profileName = XQConversions::s60DescToQString(name->Name()); + } + CPFW_LOG("CpProfileModelPrivate::profileName(), END."); + return profileName; +} + +/* + * Get available profiles' name list. + */ +QStringList CpProfileModelPrivate::profileNames() const +{ + CPFW_LOG("CpProfileModelPrivate::profileNames(), START."); + QStringList nameList; + + foreach(int profileId, mProfileList) { + const MProfileName *name = mProfileNames->ProfileName(profileId); + if (name != 0) { + nameList.append(XQConversions::s60DescToQString(name->Name())); + } + } + + CPFW_LOG("CpProfileModelPrivate::profileNames(), END."); + return nameList; +} + + +/* + * Activate a profile with its id, return the result. + */ +int CpProfileModelPrivate::activateProfile(int profileId) +{ + CPFW_LOG("CpProfileModelPrivate::activateProfile(), START."); + // currently, only two profile remains: general and meeting, + // But profile engine also support the old profile like: + // silence, out ... + // so filter the invalid profile id first. + if (!isValidProfile(profileId)) { + return KErrNotFound; + } + TRAPD( err, + mEngine->SetActiveProfileL( profileId ); + ); + CPFW_LOG("CpProfileModelPrivate::activateProfile(), END."); + return err; +} + +/* + * Get active profile's id + */ +int CpProfileModelPrivate::activeProfileId() const +{ + return mEngine->ActiveProfileId(); +} + +/* + * Return all profile settings according to profile's id + */ +void CpProfileModelPrivate::profileSettings(int profileId, + CpProfileSettings& profileSettings) +{ + if (!isValidProfile(profileId)) { + return; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + + const MProfileTones &setTones = profileExtend->ProfileTones(); + const TProfileToneSettings &toneSettings = setTones.ToneSettings(); + const MProfileExtraTones2 &extTones = profileExtend->ProfileExtraTones2(); + const MProfileVibraSettings &vibraSettings = + profileExtend->ProfileVibraSettings(); + const MProfileExtraSettings &extraSettings = + profileExtend->ProfileExtraSettings(); + const MProfileFeedbackSettings &feedbackSettings = + extraSettings.ProfileFeedbackSettings(); + + profileSettings.mRingTone = XQConversions::s60DescToQString(setTones.RingingTone1()); + profileSettings.mMessageTone = XQConversions::s60DescToQString(setTones.MessageAlertTone()); + profileSettings.mEmailTone = XQConversions::s60DescToQString(extTones.EmailAlertTone()); + profileSettings.mReminderTone = XQConversions::s60DescToQString(extTones.ReminderTone()); + profileSettings.mNotificationTone = toneSettings.iWarningAndGameTones; + + // only use Keypad Volume as a base value for display in key & touch screen setting option + profileSettings.mKeyTouchScreenTone = toneSettings.iKeypadVolume; + profileSettings.mKeyTouchScreenVibra = feedbackSettings.TactileFeedback(); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ); +} +/* + * set profile settings + */ +void CpProfileModelPrivate::setProfileSettings(int profileId, CpProfileSettings& profileSettings) +{ + if (!isValidProfile(profileId)) { + return; + } + + QT_TRAP_THROWING ( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + + MProfileSetTones &setTones = profileExtend->ProfileSetTones(); + TProfileToneSettings &toneSettings = setTones.SetToneSettings(); + MProfileSetExtraTones2 &setExtTones = + profileExtend->ProfileSetExtraTones2(); + MProfileSetVibraSettings &setVibraSettings = + profileExtend->ProfileSetVibraSettings(); + MProfileSetExtraSettings &extraSettings = + profileExtend->ProfileSetExtraSettings(); + MProfileSetFeedbackSettings &setFeedbackSettings = + extraSettings.ProfileSetFeedbackSettings(); + + + setTones.SetRingingTone1L(*XQConversions::qStringToS60Desc( + profileSettings.mRingTone)); + setTones.SetMessageAlertToneL(*XQConversions::qStringToS60Desc( + profileSettings.mMessageTone)); + setExtTones.SetEmailAlertToneL(*XQConversions::qStringToS60Desc( + profileSettings.mEmailTone)); + setExtTones.SetReminderToneL(*XQConversions::qStringToS60Desc( + profileSettings.mReminderTone)); + + toneSettings.iWarningAndGameTones + = profileSettings.mNotificationTone; + // Change the keypad volume and touch screen tone together + toneSettings.iKeypadVolume + = static_cast (profileSettings.mKeyTouchScreenTone); + setFeedbackSettings.SetAudioFeedback( + static_cast (profileSettings.mKeyTouchScreenTone)); + setFeedbackSettings.SetTactileFeedback( + static_cast (profileSettings.mKeyTouchScreenVibra)); + + mEngine->CommitChangeL(*profileExtend); + CleanupStack::Pop(); // profileExtend + ) +} + +/* + * Get the active profile's ring tone name + */ +QString CpProfileModelPrivate::ringTone() const +{ + // return empty string when active profile id is invalid, + // some old application still set the profile which is not available now, + // this check can be removed when every application use a correct profile id + + QString ringTone; + if (!isValidProfile(activeProfileId())) { + return ringTone; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(activeProfileId()); + CleanupStack::PushL(profileExtend); + const MProfileTones &setTones = profileExtend->ProfileTones(); + + ringTone = XQConversions::s60DescToQString(setTones.RingingTone1()); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) + + return ringTone; +} + +/* + * Set the ring tone for all profiles + */ +void CpProfileModelPrivate::setRingTone(const QString& filePath) +{ + for (TInt i = 0; i < mProfileList.count(); ++i) { + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(mProfileList.at(i)); + CleanupStack::PushL(profileExtend); + + MProfileSetTones &setTones = profileExtend->ProfileSetTones(); + + setTones.SetRingingTone1L( *XQConversions::qStringToS60Desc(filePath) ); + mEngine ->CommitChangeL(*profileExtend); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) + } +} + +/* + * Get the ringing volume value + */ +int CpProfileModelPrivate::masterVolume() const +{ + int masterVolume = 0; + QT_TRAP_THROWING(masterVolume = mEngine->MasterVolumeL();) + return masterVolume; +} + +/* + * Set the ringing volume + */ +void CpProfileModelPrivate::setMasterVolume(int volume) +{ + // the volume range 1-10 + if (volume >= EProfileRingingVolumeLevel1 && volume <= EProfileRingingVolumeLevel10) { + QT_TRAP_THROWING(mEngine->SetMasterVolumeL( volume );) + } +} +/* + * Get the master vibra's status + */ +bool CpProfileModelPrivate::masterVibra() const +{ + bool masterVibra = false; + QT_TRAP_THROWING(masterVibra = mEngine->MasterVibraL();) + return masterVibra; +} + +/* + * Set master vibra's status + */ +void CpProfileModelPrivate::setMasterVibra(bool isVibra) +{ + QT_TRAP_THROWING(mEngine->SetMasterVibraL( isVibra );) +} + +/* + * Get the status of silence mode. + */ +bool CpProfileModelPrivate::silenceMode() const +{ + bool isSlience = false; + QT_TRAP_THROWING(isSlience = mEngine->SilenceModeL();) + return isSlience; +} + +/* + * Set the status of silence mode + */ +void CpProfileModelPrivate::setSilenceMode(bool isSilence) +{ + QT_TRAP_THROWING(mEngine->SetSilenceModeL( isSilence );) +} + +/* + * Return the ring tone of a profile, if the profile id is invalid, always + * return an empty string + */ +QString CpProfileModelPrivate::ringTone(int profileId) const +{ + QString ringTone; + if(!isValidProfile(profileId)) { + return ringTone; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + + const MProfileTones &setTones = profileExtend->ProfileTones(); + + ringTone = XQConversions::s60DescToQString(setTones.RingingTone1()); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) + return ringTone; +} + +/* + * Set the ring tone for a profile, if the profile id is invalid, nothing happens + */ +void CpProfileModelPrivate::setRingTone(int profileId, const QString& filePath) +{ + if(!isValidProfile(profileId)) { + return; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + + MProfileSetTones &setTones = profileExtend->ProfileSetTones(); + + setTones.SetRingingTone1L(*XQConversions::qStringToS60Desc(filePath)); + mEngine->CommitChangeL(*profileExtend); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) +} + +/* + * Get the message tone of a profile, if the profile id is invalid, always return + * an empty string + */ +QString CpProfileModelPrivate::messageTone(int profileId) const +{ + QString messageTone; + if(!isValidProfile(profileId)) { + return messageTone; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + + const MProfileTones &setTones = profileExtend->ProfileTones(); + + messageTone = XQConversions::s60DescToQString(setTones.MessageAlertTone()); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) + + return messageTone; +} + +/* + * Set the message tone of a profile, if the profile id is invalid, nothing happens + */ +void CpProfileModelPrivate::setMessageTone(int profileId, const QString& filePath) +{ + if(!isValidProfile(profileId)) { + return; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + MProfileSetTones &setTones = + profileExtend->ProfileSetTones(); + setTones.SetMessageAlertToneL(*XQConversions::qStringToS60Desc(filePath)); + mEngine->CommitChangeL(*profileExtend); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) +} + +/* + * Get the email tone of a profile, if profile id is invalid, return an empty string + */ +QString CpProfileModelPrivate::emailTone(int profileId) const +{ + QString emailTone; + + if(!isValidProfile(profileId)) { + return emailTone; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + const MProfileExtraTones2 &extTones = + profileExtend->ProfileExtraTones2(); + + emailTone = XQConversions::s60DescToQString(extTones.EmailAlertTone()); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) + return emailTone; +} + +/* + * Set the email tone for a profile, if the profile id is invalid, nothing happens + */ +void CpProfileModelPrivate::setEmailTone(int profileId, const QString& filePath) +{ + if(!isValidProfile(profileId)) { + return ; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + MProfileSetExtraTones2 &setExtTones = + profileExtend->ProfileSetExtraTones2(); + setExtTones.SetEmailAlertToneL(*XQConversions::qStringToS60Desc(filePath)); + mEngine->CommitChangeL(*profileExtend); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) +} + +/* + * Get a reminder tone for a profile, if the profile id is invalid, + * always return an emtpy string + */ +QString CpProfileModelPrivate::reminderTone(int profileId) const +{ + QString reminderTone; + if(!isValidProfile(profileId)) { + return reminderTone; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + const MProfileExtraTones2 &extTones = profileExtend->ProfileExtraTones2(); + + reminderTone = XQConversions::s60DescToQString(extTones.ReminderTone()); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) + return reminderTone; +} + +/* + * Set a reminder tone for a profile, if the profile id is invalid, + * nothing happens + */ +void CpProfileModelPrivate::setReminderTone(int profileId, const QString& filePath) +{ + if(!isValidProfile(profileId)) { + return; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + + MProfileSetExtraTones2 &setExtTones = profileExtend->ProfileSetExtraTones2(); + setExtTones.SetReminderToneL( *XQConversions::qStringToS60Desc(filePath) ); + mEngine->CommitChangeL(*profileExtend); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) +} + +/* + * Get the status of notification tone, if the profile id is invalid, + * always return false + */ +bool CpProfileModelPrivate::notificationTone(int profileId) const +{ + bool ret = false; + if(!isValidProfile(profileId)) { + return false; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + + const MProfileTones &setTones = profileExtend->ProfileTones(); + const TProfileToneSettings &toneSettings = setTones.ToneSettings(); + ret = toneSettings.iWarningAndGameTones; + + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) + return ret; +} + +/* + * Set the status of notification tone, if the profile id is + * invalid, nothing happens + */ +void CpProfileModelPrivate::setNotificationTone(int profileId, bool isActive) +{ + if(!isValidProfile(profileId)) { + return ; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + MProfileSetTones &setTones = profileExtend->ProfileSetTones(); + TProfileToneSettings &toneSettings = setTones.SetToneSettings(); + + toneSettings.iWarningAndGameTones = isActive; + + mEngine->CommitChangeL(*profileExtend); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) +} +/* + * Get key & touch screen tone's value, if the profile id + * is invalid, always return 0 + */ +int CpProfileModelPrivate::keyTouchScreenTone(int profileId) const +{ + int level = 0; + if(!isValidProfile(profileId)) { + return level; + } + + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + + const MProfileTones &setTones = profileExtend->ProfileTones(); + const TProfileToneSettings &toneSettings = setTones.ToneSettings(); + + // Return only keypad volume, but touch tone volume will be synchronized in + // SetKeyTouchScreenTone(), these two settings also have the same default value + // in cenrep key + level = toneSettings.iKeypadVolume; + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) + return level; +} +/* + * set key & touch screen tone, if the profile id + * is invalid, nothing happens + */ +void CpProfileModelPrivate::setKeyTouchScreenTone(int profileId, int level) +{ + if(!isValidProfile(profileId)) { + return ; + } + QT_TRAP_THROWING( + + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + MProfileSetTones &setTones = + profileExtend->ProfileSetTones(); + TProfileToneSettings &toneSettings = + setTones.SetToneSettings(); + + MProfileSetExtraSettings &extraSettings = + profileExtend->ProfileSetExtraSettings(); + MProfileSetFeedbackSettings &setFeedbackSettings = + extraSettings.ProfileSetFeedbackSettings(); + + // Update the key pad volume and touch tone volume together + toneSettings.iKeypadVolume + = static_cast (level); + + setFeedbackSettings.SetAudioFeedback( + static_cast (level)); + + mEngine->CommitChangeL(*profileExtend); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) +} + +/* + * Get key touch screen vibra's value of a profile, return 0 if the + * profile id is invalid + */ +int CpProfileModelPrivate::keyTouchScreenVibra(int profileId)const +{ + int level = 0; + if(!isValidProfile(profileId)) { + return level; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + const MProfileExtraSettings &extraSettings = + profileExtend->ProfileExtraSettings(); + const MProfileFeedbackSettings &feedbackSettings = + extraSettings.ProfileFeedbackSettings(); + level = feedbackSettings.TactileFeedback(); + + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) + + return level; +} + +/* + * Set key & touch screen vibra for a profile, + * if the profile id is invalid, nothing happens + */ +void CpProfileModelPrivate::setKeyTouchScreenVibra(int profileId, int level) +{ + if(!isValidProfile(profileId)) { + return ; + } + QT_TRAP_THROWING( + MProfileExtended2 *profileExtend = mEngine->Profile2L(profileId); + CleanupStack::PushL(profileExtend); + + MProfileSetExtraSettings &extraSettings = + profileExtend->ProfileSetExtraSettings(); + MProfileSetFeedbackSettings &setFeedbackSettings = + extraSettings.ProfileSetFeedbackSettings(); + setFeedbackSettings.SetTactileFeedback( + static_cast (level)); + mEngine->CommitChangeL(*profileExtend); + CleanupStack::Pop(); // profileExtend + profileExtend->Release(); + ) +} + +/* + * Judge the profile is valid or not + */ + +bool CpProfileModelPrivate::isValidProfile(int profileId) const +{ + return mProfileList.contains(profileId); +} + +// End of file + +