diff -r 951aeeb3da43 -r eea20ed08f4b coreapplicationuis/SysAp/Src/hbdevicepowermenusymbian.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/coreapplicationuis/SysAp/Src/hbdevicepowermenusymbian.cpp Tue Jun 29 10:40:11 2010 +0300 @@ -0,0 +1,434 @@ +/* + * Copyright (c) 2010 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 +#include +#include +#include "hbdevicepowermenusymbian.h" + + +//These Keys will be used in CHbSymbianVariantMap +//Donot Change these strings +_LIT(KVolumeLevel, "VolumeLevel"); +_LIT(KSilenceLatchOn, "SilenceLatchOn"); //Used to latch silencebutton +_LIT(KCypherOff, "CypherOff"); //used to poweroffButtonEnabled/Disabled +_LIT(KVibrationEnable, "VibrationEnable"); +_LIT(KOfflineEnable, "OfflineEnable"); +_LIT(KShutDown, "ShutDown"); + +//used to load plugin +_LIT(KPluginIdentifier, "com.nokia.hb.devicepowermenu/1.0"); + + +NONSHARABLE_CLASS(CHbDevicePowerMenuPrivate) : public CBase, public MHbDeviceDialogObserver +{ +public: + static CHbDevicePowerMenuPrivate* NewL(CHbDevicePowerMenuSymbian* aDialog); + virtual ~CHbDevicePowerMenuPrivate(); + + void ShowL(); + void AddVariantL(const TDesC& aKey, const TAny* aData, CHbSymbianVariant::TType aDataType); + + //Set Methods + void SetVolume(TInt aVolume); + void SetSilenceMode(TBool aEnable); + void SetOfflineMode(TBool aChecked); + void SetVibrationEnabled(TBool aEnable); + void SetPowerOffEnabled(TBool aEnable); + +public: + // MHbDeviceDialogObserver + void DataReceived(CHbSymbianVariantMap& aData); + void DeviceDialogClosed(TInt aCompletionCode); + +private: + CHbDevicePowerMenuPrivate(); + void ConstructL(CHbDevicePowerMenuSymbian* aDialog); + +private: + //symbian FW client intreface to load Qt.plugin + CHbDeviceDialogSymbian* iDeviceDialog; + //Parameter for loading qt.plugin + CHbSymbianVariantMap* iVariantMap; + //Symbian client interface for Powermenu + CHbDevicePowerMenuSymbian* iPowerMenuManager; + + //Variants used in VariantMap + TInt iVolumeLevel; //Volume level ranges 1 to 10 + TBool iSilenceLatchOn; //Silence Enabled or Disbaled + TBool iVibrationEnable; //Master Vibarate enabled/Disabled + TBool iOfflineEnable; //Oflline Mode enabled or Disabled + TBool iCypherOff; //Encryption/Decryption ON/OFF +}; + +/** + * Create an object of CHbDevicePowerMenuPrivate + */ +CHbDevicePowerMenuPrivate* CHbDevicePowerMenuPrivate::NewL(CHbDevicePowerMenuSymbian* aDialog) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::NewL: START") ) ); + CHbDevicePowerMenuPrivate* self = new (ELeave) CHbDevicePowerMenuPrivate(); + CleanupStack::PushL(self); + self->ConstructL(aDialog); + CleanupStack::Pop(self); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::NewL: END") ) ); + return self; + } + +/** + * Constructor + */ +CHbDevicePowerMenuPrivate::CHbDevicePowerMenuPrivate() + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::Constructor") ) ); + //Do nothing + } + +/** + * Destructor + */ +CHbDevicePowerMenuPrivate::~CHbDevicePowerMenuPrivate() + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::Destructor: START") ) ); + delete iDeviceDialog; + delete iVariantMap; + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::Destructor: END") ) ); + } + +/** + * Constrcuts all its member variables + */ +void CHbDevicePowerMenuPrivate::ConstructL(CHbDevicePowerMenuSymbian* aDialog) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::ConstructL: START") ) ); + iPowerMenuManager = aDialog; + iDeviceDialog = CHbDeviceDialogSymbian::NewL(); + iVariantMap = CHbSymbianVariantMap::NewL(); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::ConstructL: END") ) ); + } + +/** + * Builds all parameters required for showing the PowerMenu Dialog. + * Loads the required powermenu plugin and calls show on DeviceDialog. + * This Displays the Customized PowerMenu Widget. + */ +void CHbDevicePowerMenuPrivate::ShowL() + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::ShowL: START") ) ); + AddVariantL(KVolumeLevel, &iVolumeLevel, CHbSymbianVariant::EInt); + AddVariantL(KSilenceLatchOn, &iSilenceLatchOn, CHbSymbianVariant::EBool); + AddVariantL(KVibrationEnable, &iVibrationEnable, CHbSymbianVariant::EBool); + AddVariantL(KOfflineEnable, &iOfflineEnable, CHbSymbianVariant::EBool); + AddVariantL(KCypherOff, &iCypherOff, CHbSymbianVariant::EBool); + //No shutdown varinat will be added to showL + User::LeaveIfError(iDeviceDialog->Show(KPluginIdentifier, *iVariantMap, this)); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::ShowL: END") ) ); + } + +/** + * Sets Volume to aVolume + */ +void CHbDevicePowerMenuPrivate::SetVolume(TInt aVolume) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::SetVolume: START") ) ); + iVolumeLevel = aVolume; + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::SetVolume: END") ) ); + } + +/** + * Sets SilenceMode to Enable/Disable + */ +void CHbDevicePowerMenuPrivate::SetSilenceMode(TBool aEnable) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::SetSilenceMode: START") ) ); + iSilenceLatchOn = aEnable; + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::SetSilenceMode: END") ) ); + } + +/** + * Sets OfflineMode to Checked/UnChecked + */ +void CHbDevicePowerMenuPrivate::SetOfflineMode(TBool aChecked) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::SetOfflineMode: START") ) ); + iOfflineEnable = aChecked; + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::SetOfflineMode: END") ) ); + } + +/** + * Sets VibrationEnabled to Checked/UnChecked + */ +void CHbDevicePowerMenuPrivate::SetVibrationEnabled(TBool aChecked) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::SetVibrationEnabled: START") ) ); + iVibrationEnable = aChecked; + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::SetVibrationEnabled: END") ) ); + } + +/** + * Sets PowerOffEnabled to Enable/Disable + */ +void CHbDevicePowerMenuPrivate::SetPowerOffEnabled(TBool aEnable) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::SetPowerOffEnabled: START") ) ); + iCypherOff = aEnable; + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::SetPowerOffEnabled: END") ) ); + } + +/** + * Data received from HBDeviceDialog will hit by emit deviceDialogData in plugin + * The values received from UI will set to ControlPanel. + */ +void CHbDevicePowerMenuPrivate::DataReceived(CHbSymbianVariantMap& aData) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived: START") ) ); + // Updates received from the plugin. + //1. Volume + const CHbSymbianVariant* volumeVariant = aData.Get(KVolumeLevel); + if(volumeVariant) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived: volumeVariant::Start") ) ); + TInt* volumeValue = volumeVariant->Value(); + if(volumeValue) + { + iVolumeLevel = *volumeValue; + iPowerMenuManager->iProfileEngine->SetMasterVolumeL( iVolumeLevel ); + } + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived:volumeVariant::End") ) ); + } + + //2. Silence + const CHbSymbianVariant* SilenceVariant = aData.Get(KSilenceLatchOn); + if(SilenceVariant) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived: SilenceVariant::Start") ) ); + TBool* LatchValue = SilenceVariant->Value(); + if(LatchValue) + { + iSilenceLatchOn = *LatchValue; + iPowerMenuManager->iProfileEngine->SetSilenceModeL( iSilenceLatchOn );//member in CHbDevicePowerMenuSymbian + } + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived: SilenceVariant::End") ) ); + } + + //3. Vibration + const CHbSymbianVariant* VibrationVariant = aData.Get(KVibrationEnable); + if(VibrationVariant) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived: VibrationVariant::Start") ) ); + TBool* VibrationValue = VibrationVariant->Value(); + if(VibrationValue) + { + iVibrationEnable = *VibrationValue; + iPowerMenuManager->iProfileEngine->SetMasterVibraL( iVibrationEnable );//member in CHbDevicePowerMenuSymbian + } + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived: VibrationVariant::End") ) ); + } + + //4.Offline + const CHbSymbianVariant* OfflineVariant = aData.Get(KOfflineEnable); + if(OfflineVariant) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived: OfflineVariant::Start") ) ); + TBool* OfflineValue = OfflineVariant->Value(); + if(OfflineValue) + { + iOfflineEnable = *OfflineValue; + User::LeaveIfError( iPowerMenuManager->iCenrepOffline->Set( KSettingsAirplaneMode, iOfflineEnable ) ); + } + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived: OfflineVariant::End") ) ); + } + + //5.shutdown + const CHbSymbianVariant* ShutDownVariant = aData.Get(KShutDown); + if(ShutDownVariant) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived: ShutDownVariant::Start") ) ); + TBool* ShutDownValue = ShutDownVariant->Value(); + if(ShutDownValue) + { + TBool shutDown = *ShutDownValue; + if (shutDown) + { + iPowerMenuManager->iSysApServer.HandleLongPowerKeyPressedL(); + } + + } + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived: ShutDownVariant::End") ) ); + } + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DataReceived: END") ) ); + return; + } + +/** + * DeviceDialogClosed will be executed by the event emit deviceDialogClosed in plugin. + * This will be executed when 1. Tap out side the Dialog to Close + * 2. When Power Off Button is clicked. + */ +void CHbDevicePowerMenuPrivate::DeviceDialogClosed(TInt /*aCompletionCode*/) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::DeviceDialogClosed") ) ); + // Inform sysap to release the memory of power menu custom dialog. + RProperty::Set( KPSUidCoreApplicationUIs, KCoreAppUIsPowerMenuCustomDialogStatus, ECoreAppUIsPowerMenuCustomDialogOn ); + } + +/** + * Contrcuts VariantMap + */ +void CHbDevicePowerMenuPrivate::AddVariantL(const TDesC& aKey, const TAny* aData, CHbSymbianVariant::TType aDataType) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::AddVariantL: START") ) ); + CHbSymbianVariant *variant = CHbSymbianVariant::NewL(aData, aDataType); + CleanupStack::PushL(variant); + //iVariantMap takes the ownerhip of variant + User::LeaveIfError(iVariantMap->Add(aKey, variant)); + CleanupStack::Pop(variant); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuPrivate::AddVariantL: End") ) ); + } + +/* + * Creates an object of CHbDevicePowerMenuSymbian +*/ +CHbDevicePowerMenuSymbian* CHbDevicePowerMenuSymbian::NewL(CSysApAppUi& aSysApServer) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::NewL: START") ) ); + CHbDevicePowerMenuSymbian* self = new (ELeave) CHbDevicePowerMenuSymbian(aSysApServer); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::NewL: END") ) ); + return self; + } + +/* + * Destructs the class. +*/ +CHbDevicePowerMenuSymbian::~CHbDevicePowerMenuSymbian() + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::Destructor: START") ) ); + delete iCenrepProfile; + delete iCenrepOffline; + iProfileEngine->Release(); + delete iPowerMenuPrivate; + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::Destructor: End") ) ); + } + +/* + * Executes the dialog asynchronously. +*/ +void CHbDevicePowerMenuSymbian::ShowL() + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::ShowL: START") ) ); + iPowerMenuPrivate->ShowL(); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::ShowL: End") ) ); + } + +/** + * Sets Volume to aVolume + */ +void CHbDevicePowerMenuSymbian::SetVolume(TInt aVolume) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::SetVolume: START") ) ); + iPowerMenuPrivate->SetVolume(aVolume); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::SetVolume: End") ) ); + } + +/** + * Sets SilenceMode to Enable/Disable + */ +void CHbDevicePowerMenuSymbian::SetSilenceMode(TBool aEnable) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::SetSilenceMode: START") ) ); + iPowerMenuPrivate->SetSilenceMode(aEnable); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::SetSilenceMode: END") ) ); + } + +/** + * Sets OfflineMode to Checked/UnChecked + */ +void CHbDevicePowerMenuSymbian::SetOfflineMode(TBool aChecked) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::SetOfflineMode: START") ) ); + iPowerMenuPrivate->SetOfflineMode(aChecked); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::SetOfflineMode: End") ) ); + } + +/** + * Sets VibrationEnabled to Checked/UnChecked + */ +void CHbDevicePowerMenuSymbian::SetVibrationEnabled(TBool aEnable) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::SetVibrationEnabled: START") ) ); + iPowerMenuPrivate->SetVibrationEnabled(aEnable); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::SetVibrationEnabled: End") ) ); + } + +/** + * Sets PowerOffEnabled to Enable/Disable + */ +void CHbDevicePowerMenuSymbian::SetPowerOffEnabled(TBool aEnable) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::SetPowerOffEnabled: START") ) ); + iPowerMenuPrivate->SetPowerOffEnabled(aEnable); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::SetPowerOffEnabled: END") ) ); + } + +/* + * Constructor. +*/ +CHbDevicePowerMenuSymbian::CHbDevicePowerMenuSymbian(CSysApAppUi& aSysApServer) + :iSysApServer(aSysApServer) + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::Constructor") ) ); + //Do Nothing + } + +/* + * 2nd Constructor. + * Constructs and initializes all its meber variables +*/ +void CHbDevicePowerMenuSymbian::ConstructL() + { + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::ConstructL: START") ) ); + iProfileEngine = ::CreateProfileEngineExtended2L(); + iCenrepOffline = CRepository::NewL( KCRUidCommunicationSettings ); + iCenrepProfile = CRepository::NewL( KCRUidProfileEngine ); + iPowerMenuPrivate = CHbDevicePowerMenuPrivate::NewL(this); + + //To Sync with Contro panel + TBool airplaneMode(0); + User::LeaveIfError( iCenrepOffline->Get( KSettingsAirplaneMode, airplaneMode ) ); + SetOfflineMode(airplaneMode); + + TInt masterVolume(0); + User::LeaveIfError( iCenrepProfile->Get( KProEngMasterVolume, masterVolume ) ); + SetVolume(masterVolume); + + TBool masterVibrate(0); + User::LeaveIfError( iCenrepProfile->Get( KProEngMasterVibra, masterVibrate ) ); + SetVibrationEnabled(masterVibrate); + + TBool silenceMode(EFalse); + User::LeaveIfError( iCenrepProfile->Get( KProEngSilenceMode, silenceMode ) ); + SetSilenceMode(silenceMode); + + //Cypheroff is True when No encryption/Decryption is happening + TBool cypherOff(!(iSysApServer.IsEncryptionOperationOngoingL())); + SetPowerOffEnabled(cypherOff); + TRACES( RDebug::Print( _L("CHbDevicePowerMenuSymbian::ConstructL: END") ) ); + } +