# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1278415580 -10800 # Node ID 76883296a0d5394f35e4987b6624e890f3cba1d8 # Parent 2222076f5c60c3c445cc2599617bf840bcc4952f Revision: 201025 Kit: 2010127 diff -r 2222076f5c60 -r 76883296a0d5 appfw/apparchitecture/group/BLD.INF --- a/appfw/apparchitecture/group/BLD.INF Wed Jun 23 18:22:59 2010 +0300 +++ b/appfw/apparchitecture/group/BLD.INF Tue Jul 06 14:26:20 2010 +0300 @@ -29,7 +29,7 @@ // specify the source file followed by its destination here // copy will be used to copy the source file to its destination // If there's no destination then the source file will be copied -// to the same name in \epoc32\include +// to the same name in /epoc32/include // Files from aincc.prj ../inc/APACLN.H SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(apacln.h) @@ -95,7 +95,7 @@ ../group/apparc.iby /epoc32/rom/include/apparc.iby -// File from ..\inc (which is relocated from app-framework\aiftool\inc) +// File from ../inc (which is relocated from app-framework/aiftool/inc) ../inc/AIFTOOL.RH /epoc32/include/aiftool.rh //Backup and restore exports @@ -199,13 +199,13 @@ // testupdregappuninstallation is used in t_serviceregistry test. If any changes done to // this application, uncomment testupdregappuninstallation.mmp file and build it. -// Then comment it and copy the testupdregappuninstallation_reg.rsc file to ..\tdata folder. +// Then comment it and copy the testupdregappuninstallation_reg.rsc file to ../tdata folder. // Delete any testupdregappuninstallation* files from epoc32 directory. //../tef/testapp/testupdregappuninstallation/testupdregappuninstallation.mmp // testupgradeupdregappuninstallation is used in t_serviceregistry test. If any changes done to // this application, uncomment testupdregappuninstallation.mmp file and build it. -// Then comment it and copy the testupgradeupdregappuninstallation_reg.rsc file to ..\tdata folder. +// Then comment it and copy the testupgradeupdregappuninstallation_reg.rsc file to ../tdata folder. // Delete any testupdregappuninstallation* files from epoc32 directory. //../tef/testapp/testupgradeupdregappuninstallation/testupgradeupdregappuninstallation.mmp @@ -245,7 +245,7 @@ //***************************************************************************************************************************************************************************************************** //recupgrade_1 plug-in is used to upgrade the mime type recognizer during runtime in T_RecUpgrade test. -// It is build for armv5 and rename to recupgrade_armv5_rel.dll and copied to apparc\Tdata before actual code builds. If you are making any change in recupgrade_1.cpp then uncomment +// It is build for armv5 and rename to recupgrade_armv5_rel.dll and copied to apparc/Tdata before actual code builds. If you are making any change in recupgrade_1.cpp then uncomment // “recupgrade_1.MMP” , build , rename (.dll) and copy as mentioned above . //***************************************************************************************************************************************************************************************************** //../tef/TRecUpgrade_1/recupgrade_1.MMP @@ -253,7 +253,7 @@ // *************************************************************************************************************************************************************************************************** // recupgrade_2 plug-in is used to upgrade the mime type recognizer during runtime in T_RecUpgrade test. -// It is build for armv5 and rename to recupgrade2_armv5_rel.dll and copied to apparc\Tdata before actual code builds. If you are making any change in recupgrade_2.cpp then uncomment +// It is build for armv5 and rename to recupgrade2_armv5_rel.dll and copied to apparc/Tdata before actual code builds. If you are making any change in recupgrade_2.cpp then uncomment // “recupgrade_2.MMP” , build , rename (.dll) and copy as mentioned above . // *************************************************************************************************************************************************************************************************** //../tef/TRecUpgrade_2/recupgrade_2.MMP @@ -378,7 +378,7 @@ ../tef/tupgradeiconapp/tupgradeiconapp.mbm /epoc32/release/winscw/udeb/z/apparctestregfiles/tupgradeiconapp.mbm -// epoc32\data +// epoc32/data // export certificates for creating sis files ../tef/testpkg/Nokia_RnDCert_02.der /epoc32/tools/Nokia_RnDCert_02.der diff -r 2222076f5c60 -r 76883296a0d5 appfw/apparchitecture/tef/testapp/testforceregistrationapp1/testforceregistrationapp1.mmp --- a/appfw/apparchitecture/tef/testapp/testforceregistrationapp1/testforceregistrationapp1.mmp Wed Jun 23 18:22:59 2010 +0300 +++ b/appfw/apparchitecture/tef/testapp/testforceregistrationapp1/testforceregistrationapp1.mmp Tue Jul 06 14:26:20 2010 +0300 @@ -27,11 +27,11 @@ START RESOURCE testforceregistrationapp1_reg.rss - TARGETPATH \apparctest + TARGETPATH /apparctest END START RESOURCE testforceregistrationapp1_loc.rss - TARGETPATH \apparctest + TARGETPATH /apparctest END library euser.lib diff -r 2222076f5c60 -r 76883296a0d5 appfw/apparchitecture/tef/tssaac/tssaac.mmp --- a/appfw/apparchitecture/tef/tssaac/tssaac.mmp Wed Jun 23 18:22:59 2010 +0300 +++ b/appfw/apparchitecture/tef/tssaac/tssaac.mmp Tue Jul 06 14:26:20 2010 +0300 @@ -1,4 +1,4 @@ -// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2005-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" @@ -41,7 +41,7 @@ #else // startup with tssaac application for hardware START RESOURCE tssaac_hardware.rss -TARGETPATH \private\10205C44 +TARGETPATH /private/10205C44 END #endif diff -r 2222076f5c60 -r 76883296a0d5 appsupport.pro --- a/appsupport.pro Wed Jun 23 18:22:59 2010 +0300 +++ b/appsupport.pro Tue Jul 06 14:26:20 2010 +0300 @@ -21,4 +21,6 @@ symbian: { :BLD_INF_RULES.prj_mmpfiles += $$LITERAL_HASH"include \"group/bld.inf\"" SUBDIRS += coreapplicationuis\devicepowermenuplugin +SUBDIRS += systemsettings\accindicatorplugin +SUBDIRS += systemsettings\accindicatorplugin\accindicatorsettings } diff -r 2222076f5c60 -r 76883296a0d5 appsupport_plat/startup_configuration_api/inc/startupdomaincrkeys.h --- a/appsupport_plat/startup_configuration_api/inc/startupdomaincrkeys.h Wed Jun 23 18:22:59 2010 +0300 +++ b/appsupport_plat/startup_configuration_api/inc/startupdomaincrkeys.h Tue Jul 06 14:26:20 2010 +0300 @@ -263,6 +263,13 @@ */ const TUint32 KStartupDefaultTime = 0x00000016; +/** + * Enables or disables the FTU StartupSequence. This key is modified by ftu when user accepts the eterms + * Possible values true or false + */ +const TUint32 KFtuStartupEnabled = 0x0000001A; + + #endif // STARTUPDOMAINCRKEYS_H // End of File diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/alarmserver/Documentation/AlarmStateTransitionAndAlarmAlertCom.xls Binary file commonappservices/alarmserver/Documentation/AlarmStateTransitionAndAlarmAlertCom.xls has changed diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/alarmserver/doc_pub/AlarmStateTransitionAndAlarmAlertCom.xls Binary file commonappservices/alarmserver/doc_pub/AlarmStateTransitionAndAlarmAlertCom.xls has changed diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/alarmserver/doc_pub/SGL.GT0257.207_Rev1.1_Alarm_Server_Configuration_how_to.doc Binary file commonappservices/alarmserver/doc_pub/SGL.GT0257.207_Rev1.1_Alarm_Server_Configuration_how_to.doc has changed diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/appservicesdocs/app-services_documentation.history.xml --- a/commonappservices/appservicesdocs/app-services_documentation.history.xml Wed Jun 23 18:22:59 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ - - - - - diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/appservicesdocs/app-services_documentation.mrp --- a/commonappservices/appservicesdocs/app-services_documentation.mrp Wed Jun 23 18:22:59 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -component app-services_documentation - -source \sf\mw\appsupport\commonappservices\appservicesdocs\ - -notes_source \component_defs\release.src - - -ipr E - diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/appservicesdocs/architecturaldescription.eap Binary file commonappservices/appservicesdocs/architecturaldescription.eap has changed diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/doc_pub/App-Services_Architectural_Description.doc Binary file commonappservices/doc_pub/App-Services_Architectural_Description.doc has changed diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/doc_pub/App-Services_Functional_Specification.doc Binary file commonappservices/doc_pub/App-Services_Functional_Specification.doc has changed diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/doc_pub/PIMTestCodeOrganisationHowTo.doc Binary file commonappservices/doc_pub/PIMTestCodeOrganisationHowTo.doc has changed diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/doc_pub/SGL.GT0109.110_Rev1.2_AppServices_Subsystem_Release_Note.doc Binary file commonappservices/doc_pub/SGL.GT0109.110_Rev1.2_AppServices_Subsystem_Release_Note.doc has changed diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/doc_pub/app-services_documentation.history.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonappservices/doc_pub/app-services_documentation.history.xml Tue Jul 06 14:26:20 2010 +0300 @@ -0,0 +1,5 @@ + + + + + diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/doc_pub/app-services_documentation.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonappservices/doc_pub/app-services_documentation.mrp Tue Jul 06 14:26:20 2010 +0300 @@ -0,0 +1,9 @@ +component app-services_documentation + +source \sf\mw\appsupport\commonappservices\doc_pub\ + +notes_source \component_defs\release.src + + +ipr E + diff -r 2222076f5c60 -r 76883296a0d5 commonappservices/doc_pub/architecturaldescription.eap Binary file commonappservices/doc_pub/architecturaldescription.eap has changed diff -r 2222076f5c60 -r 76883296a0d5 contenthandling/webrecognisers/Documentation/Uid.txt --- a/contenthandling/webrecognisers/Documentation/Uid.txt Wed Jun 23 18:22:59 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -UIDs Allocated for Application-Protocol Recognisers - -KUidAppProtRecognisers - -101FD8D0 KUidRecogTestEcomInterface ECom Interface for recogniser test plugins -101FD8D1 KUidWebUrlRecogTestDll Web URL recogniser test plugin DLL UID -101FD8D2 KUidWebUrlRecogTest Web URL recogniser ECom implementation UID -101FD8D3 KUidEBookmarkRecogTestDll EBookmark recogniser test plugin DLL UID -101FD8D4 KUidEBookmarkRecogTest EBookmark recogniser ECom implementation UID -101FD8D5 KUidRecWebRecogTestDll Web (html/xml) recogniser test plugin DLL UID -101FD8D6 KUidRecWebRecogTest Web (html/xml) recogniser ECom implementation UID -101FD8D7 -101FD8D8 -101FD8D9 \ No newline at end of file diff -r 2222076f5c60 -r 76883296a0d5 contenthandling/webrecognisers/doc_pub/Uid.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contenthandling/webrecognisers/doc_pub/Uid.txt Tue Jul 06 14:26:20 2010 +0300 @@ -0,0 +1,30 @@ +// Copyright (c) 1999-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: +// + + +UIDs Allocated for Application-Protocol Recognisers + +KUidAppProtRecognisers + +101FD8D0 KUidRecogTestEcomInterface ECom Interface for recogniser test plugins +101FD8D1 KUidWebUrlRecogTestDll Web URL recogniser test plugin DLL UID +101FD8D2 KUidWebUrlRecogTest Web URL recogniser ECom implementation UID +101FD8D3 KUidEBookmarkRecogTestDll EBookmark recogniser test plugin DLL UID +101FD8D4 KUidEBookmarkRecogTest EBookmark recogniser ECom implementation UID +101FD8D5 KUidRecWebRecogTestDll Web (html/xml) recogniser test plugin DLL UID +101FD8D6 KUidRecWebRecogTest Web (html/xml) recogniser ECom implementation UID +101FD8D7 +101FD8D8 +101FD8D9 \ No newline at end of file diff -r 2222076f5c60 -r 76883296a0d5 contextframework/cfw/conf/contextframework.confml Binary file contextframework/cfw/conf/contextframework.confml has changed diff -r 2222076f5c60 -r 76883296a0d5 contextframework/cfw/conf/contextframework_10282BCD.crml Binary file contextframework/cfw/conf/contextframework_10282BCD.crml has changed diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/SysAp/Group/SysAp.mmp --- a/coreapplicationuis/SysAp/Group/SysAp.mmp Wed Jun 23 18:22:59 2010 +0300 +++ b/coreapplicationuis/SysAp/Group/SysAp.mmp Tue Jul 06 14:26:20 2010 +0300 @@ -153,6 +153,8 @@ SOURCE CenRepObservers/SysApCenRepHacSettingObserver.cpp SOURCE CenRepObservers/sysapcenreplightsettingsobserver.cpp SOURCE CenRepObservers/SysApCenRepLogsObserver.cpp +SOURCE CenRepObservers/sysapcenrepofflinemodeobserver.cpp + LIBRARY centralrepository.lib LIBRARY cenrepnotifhandler.lib @@ -199,7 +201,7 @@ SOURCEPATH ../Src SOURCE sysapkeymanagement.cpp SysApTaskList.cpp - +SOURCE SysApKeySndHandler.cpp SysApKeySndAnim.cpp SysApAnimKeySndControl.cpp //For Shutdown LIBRARY SVGEngine.lib diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/SysAp/Inc/SysApAppUi.h --- a/coreapplicationuis/SysAp/Inc/SysApAppUi.h Wed Jun 23 18:22:59 2010 +0300 +++ b/coreapplicationuis/SysAp/Inc/SysApAppUi.h Tue Jul 06 14:26:20 2010 +0300 @@ -318,9 +318,7 @@ #endif // SYSAP_USE_STARTUP_UI_PHASE -// RFs iFsSession; -// RWsSession iWsSession; - + private: /** * Frees SysAp's reserved memory, closes connections to servers etc. @@ -372,6 +370,7 @@ CSysApAudioRoutingObserver* iSysApAudioRoutingObserver; CSysApPsmController* iSysApPsmController; + CHbSymbianVariant* iVariantAccState ; CSysApSsSettingsObserver* iSysApSsSettingsObserver; CSystemLock* iSysApSystemLock; CSysApCenRepCallForwardingObserver* iSysApCenRepCallForwardingObserver; diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/SysAp/Src/CenRepObservers/sysapcenrepofflinemodeobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/coreapplicationuis/SysAp/Src/CenRepObservers/sysapcenrepofflinemodeobserver.cpp Tue Jul 06 14:26:20 2010 +0300 @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2005-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: + * CSysApCenRepOfflineModeObserver is a an observer for the Offline Mode central Repository key. + * This class handles the changes to the offline mode changes done from Power Menu or Control Panel + * + */ + +#include "sysapcenrepofflinemodeobserver.h" +#include "CoreApplicationUIsSDKCRKeys.h" +#include "SysAp.hrh" + +#ifdef _DEBUG +#include +#endif + +// ---------------------------------------------------------------------------- +// CSysApCenRepOfflineModeObserver::NewL( MSysApOfflineModeController& ) +// Creates an instance of CSysApCenRepOfflineModeObserver and returns +// ---------------------------------------------------------------------------- + +CSysApCenRepOfflineModeObserver* CSysApCenRepOfflineModeObserver::NewL( + MSysApOfflineModeController& aSysApOfflineModeController ) + { + TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::NewL") ); + CSysApCenRepOfflineModeObserver* self = + new (ELeave) CSysApCenRepOfflineModeObserver(aSysApOfflineModeController); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); //self + return self; + } + + +// ---------------------------------------------------------------------------- +// CSysApCenRepOfflineModeObserver::CSysApCenRepOfflineModeObserver( MSysApOfflineModeController& ) +// ---------------------------------------------------------------------------- + +CSysApCenRepOfflineModeObserver::CSysApCenRepOfflineModeObserver( + MSysApOfflineModeController& aSysApOfflineModeController ) + : iSysApOfflineModeController( aSysApOfflineModeController ) + { + TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::CSysApCenRepOfflineModeObserver" ) ); + } + +// ---------------------------------------------------------------------------- +// CSysApCenRepOfflineModeObserver::~CSysApCenRepOfflineModeObserver() +// ---------------------------------------------------------------------------- + +CSysApCenRepOfflineModeObserver::~CSysApCenRepOfflineModeObserver() + { + TRACES( RDebug::Printf("~CSysApCenRepOfflineModeObserver" ) ); + if( iOfflineModeHandler ) + { + iOfflineModeHandler->StopListening(); + } + delete iOfflineModeHandler; + delete iOfflineCenRep; + } + +// ---------------------------------------------------------------------------- +// CSysApCenRepOfflineModeObserver::ConstructL() +// ---------------------------------------------------------------------------- + +void CSysApCenRepOfflineModeObserver::ConstructL() + { + TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::ConstructL: trying CRepository::NewL(KCRUidCoreApplicationUIs)")); + + iOfflineCenRep = CRepository::NewL( KCRUidCoreApplicationUIs ); + + iOfflineModeHandler = + CCenRepNotifyHandler::NewL( *this, + *iOfflineCenRep, + CCenRepNotifyHandler::EIntKey, + KCoreAppUIsNetworkConnectionAllowed ); + iOfflineModeHandler->StartListeningL(); + } + +// ---------------------------------------------------------------------------- +// CSysApCenRepOfflineModeObserver::HandleNotifyInt() +// Handles the changes to offline mode state +// ---------------------------------------------------------------------------- + +void CSysApCenRepOfflineModeObserver::HandleNotifyInt( TUint32 aId, TInt aNewValue ) + { + TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt(), aId=0x%x, aNewValue=%d", aId, aNewValue)); + if ( aId == KCoreAppUIsNetworkConnectionAllowed ) + { + if( aNewValue == ECoreAppUIsNetworkConnectionNotAllowed ) + { + // Offline mode enabled. Go Offline + TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt() Offline mode Enabled")); + // Ignore any leave because it will have already been handled by showing an + // error notification to the user + TRAP_IGNORE(iSysApOfflineModeController.SwitchFromOnlineToOfflineModeL()); + } + else if( aNewValue == ECoreAppUIsNetworkConnectionAllowed ) + { + // Offline mode disabled. Go Online + TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt() Offline mode Disabled")); + // Ignore any leave because it will have already been handled by showing an + // error notification to the user + TRAP_IGNORE(iSysApOfflineModeController.GoOnlineIfOkL()); + } + else + { + // Any other value is invalid + TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt() Invalid Value %d", aNewValue)); + } + } + } + +// ---------------------------------------------------------------------------- +// CSysApCenRepOfflineModeObserver::HandleNotifyError() +// ---------------------------------------------------------------------------- + +void CSysApCenRepOfflineModeObserver::HandleNotifyError( TUint32, TInt, CCenRepNotifyHandler* ) + { + TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyError()")); + // Nothing to do if start listening leaves + TRAP_IGNORE(iOfflineModeHandler->StartListeningL()); + } + + + +// ---------------------------------------------------------------------------- +// CSysApCenRepOfflineModeObserver::IsOffline() +// Fetches the Cen Rep for Offline mode and +// Return true if Offline mode is enabled, false otherwise +// ---------------------------------------------------------------------------- +TBool CSysApCenRepOfflineModeObserver::IsOffline() const + { + TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::IsOffline")); + TBool nwConnAllowed = ETrue; + iOfflineCenRep->Get(KCoreAppUIsNetworkConnectionAllowed, nwConnAllowed); + TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::IsOffline returns %d",!nwConnAllowed)); + return !nwConnAllowed; + } diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/SysAp/Src/CenRepObservers/sysapcenrepofflinemodeobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/coreapplicationuis/SysAp/Src/CenRepObservers/sysapcenrepofflinemodeobserver.h Tue Jul 06 14:26:20 2010 +0300 @@ -0,0 +1,102 @@ +/* + * 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: + * CSysApCenRepOfflineModeObserver is a an observer for the Offline Mode central Repository key. + * This class handles the changes to the offline mode changes done from Power Menu or Control Panel + * + */ + + +#ifndef SYSAPCENREPOFFLINEMODEOBSERVER_H +#define SYSAPCENREPOFFLINEMODEOBSERVER_H + +// INCLUDES +#include +#include +#include + +#include "MSysApOfflineModeController.h" + +NONSHARABLE_CLASS(CSysApCenRepOfflineModeObserver) : public CBase, + public MCenRepNotifyHandlerCallback + { +public: // Constructors and destructor + /** + * Default constructor + */ + static CSysApCenRepOfflineModeObserver* NewL( + MSysApOfflineModeController& aSysApOfflineModeController ); + + /** + * Destructor. + */ + ~CSysApCenRepOfflineModeObserver(); + +private: + /** + * Two phase ConstructL + */ + void ConstructL( ); + + /** + * Constructor + * @param aSysApOfflineModeController is the instance of Offline mode controller + */ + CSysApCenRepOfflineModeObserver( MSysApOfflineModeController& aSysApOfflineModeController ); + + /** + * default constructor. + */ + CSysApCenRepOfflineModeObserver(); + +public: // From MCenRepNotifyHandlerCallback + /** + * Handles the changes to offline mode state + * @param aId is the cen rep key which was changed + * @param aNewValue is the new value + */ + void HandleNotifyInt( TUint32 aId, TInt aNewValue ); + + /** + * Handles the error in changing offline mode state + * @param aId is the cen rep key which was changed + * @param aError is the error id + * @param aHandler is Offline cep rep handler same as iOfflineModeHandler + */ + void HandleNotifyError( TUint32 aId, TInt aError, CCenRepNotifyHandler* aHandler ); + + /** + * Returns whether Offline mode is currently active or not + * @return ETrue if Offline mode is active, else EFalse + */ + TBool IsOffline() const; + +private: + /** + * Instance of Offline mode controller. Used for enabling or disabling offline mode + */ + MSysApOfflineModeController& iSysApOfflineModeController; + + /** + * Central Repository for gettting the Offline Mode + */ + CRepository* iOfflineCenRep; + + /** + * Handler to the cen rep for listening to the offline changes + */ + CCenRepNotifyHandler* iOfflineModeHandler; + }; + +#endif // SYSAPCENREPBTOBSERVER_H diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/SysAp/Src/OfflineModeController/SysApOfflineModeControllerImpl.cpp --- a/coreapplicationuis/SysAp/Src/OfflineModeController/SysApOfflineModeControllerImpl.cpp Wed Jun 23 18:22:59 2010 +0300 +++ b/coreapplicationuis/SysAp/Src/OfflineModeController/SysApOfflineModeControllerImpl.cpp Tue Jul 06 14:26:20 2010 +0300 @@ -1,19 +1,22 @@ /* -* Copyright (c) 2005-2008 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: CSysApOfflineModeController implementation + * Copyright (c) 2005-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: + * CSysApOfflineModeController controls the offline mode. + * It turns OFF RF, BT and WLAN when offline mode is enabled and turns them ON when + * Offline mode is disabled + * + */ // INCLUDES @@ -23,8 +26,10 @@ #include "SysAp.hrh" #include "DosSvrServices.h" #include "SysApCenRepController.h" +#include "sysapcenrepofflinemodeobserver.h" #include #include +#include // For Turning ON/OFF WLAN MSysApOfflineModeController* CreateSysApOfflineModeControllerL( CSysApAppUi& aSysApAppUi ) @@ -53,22 +58,18 @@ void CSysApOfflineModeController::ConstructL() { TRACES( RDebug::Print( _L("CSysApOfflineModeController::ConstructL") ) ); - // Check the active profile -// TInt activeProfile( iSysApAppUi.ActiveProfileId() ); -// activeProfile = iSysApAppUi.ActiveProfileId(); -// if ( activeProfile == KOfflineModeProfileId ) - { - iOfflineModeActive = ETrue; - } + + // create an observer for Offline Mode + TRACES( RDebug::Print( _L("CSysApOfflineModeController::ConstructL: trying CSysApCenRepOfflineModeObserver::NewL") ) ); + iSysApCenRepOfflineModeObserver = CSysApCenRepOfflineModeObserver::NewL(*this ); + iOfflineModeActive = iSysApCenRepOfflineModeObserver->IsOffline(); } // ---------------------------------------------------------------------------- // CSysApOfflineModeController::CSysApOfflineModeController() // ---------------------------------------------------------------------------- CSysApOfflineModeController::CSysApOfflineModeController( CSysApAppUi& aSysApAppUi ) : - iSysApAppUi( aSysApAppUi ), - iOfflineModeActive( EFalse ), - iDoNotActivateRF( EFalse ) + iSysApAppUi( aSysApAppUi ) { } @@ -79,6 +80,7 @@ CSysApOfflineModeController::~CSysApOfflineModeController() { + delete iSysApCenRepOfflineModeObserver; } // ---------------------------------------------------------------------------- @@ -87,6 +89,7 @@ TBool CSysApOfflineModeController::OfflineModeActive() { + TRACES( RDebug::Print( _L("CSysApOfflineModeController::OfflineModeActive returns %d"), iOfflineModeActive ) ); return iOfflineModeActive; } @@ -97,6 +100,7 @@ void CSysApOfflineModeController::SwitchFromOnlineToOfflineModeL() { TRACES( RDebug::Print( _L("CSysApOfflineModeController::SwitchFromOnlineToOfflineModeL") ) ); + TInt err ( 0 ); // Set state to starter. Note that if state is same as the current state, then nothing happens. @@ -104,7 +108,6 @@ if ( err ) { -// iSysApAppUi.RestoreProfileL( EFalse ); iSysApAppUi.ShowUiNoteL( ECannotActivateOfflineModeNote ); } else @@ -119,8 +122,22 @@ SetBtActiveBeforeOfflineMode( ETrue ); // Update "BT active" setting TRACES( RDebug::Print( _L("CSysApOfflineModeController SetBtPowerStateL returned %d"), err ) ); } - - iSysApAppUi.OfflineModeChangedL(); + /* Turn OFF WLAN */ + TInt err( KErrNone ); + CRepository* repository = CRepository::NewL( KCRUidWlanDeviceSettingsRegistryId ); + err = repository->Set(KWlanOnOff, 0); + delete repository; + if(err) + { + TRACES( RDebug::Printf("CSysApOfflineModeController::SwitchFromOnlineToOfflineModeL Could not disable WLAN") ); + User::Leave(err); + } + else + { + TRACES( RDebug::Printf("CSysApOfflineModeController::SwitchFromOnlineToOfflineModeL WLAN Disabled" ) ); + } + + iSysApAppUi.OfflineModeChangedL(); } } @@ -144,7 +161,6 @@ if ( err ) { -// iSysApAppUi.RestoreProfileL( ETrue ); iSysApAppUi.ShowUiNoteL( ECannotDeactivateOfflineModeNote ); } else @@ -159,11 +175,25 @@ TRACES( RDebug::Print( _L("CSysApOfflineModeController SetBtPowerStateL returned %d"), err ) ); } - iSysApAppUi.OfflineModeChangedL(); + /* Turn ON WLAN */ + TInt err( KErrNone ); + CRepository* repository = CRepository::NewL( KCRUidWlanDeviceSettingsRegistryId ); + err = repository->Set(KWlanOnOff, 1); + delete repository; + if(err) + { + TRACES( RDebug::Printf("CSysApOfflineModeController::SwitchFromOfflineToOnlineModeL Could not enable WLAN") ); + User::Leave(err); + } + else + { + TRACES( RDebug::Printf("CSysApOfflineModeController::SwitchFromOfflineToOnlineModeL WLAN Enabled") ); + } - iSysApAppUi.SetNetworkConnectionAllowed( ECoreAppUIsNetworkConnectionAllowed ); - } - } + iSysApAppUi.OfflineModeChangedL(); + iSysApAppUi.SetNetworkConnectionAllowed( ECoreAppUIsNetworkConnectionAllowed ); + } + } // ---------------------------------------------------------------------------- // CSysApOfflineModeController::CheckOfflineModeInitialStatusesL() @@ -204,10 +234,12 @@ ( iSysApAppUi.BtSapEnabled() && simStatus != ESimNotPresent ) || simStatus == ESimUsable ) { - iSysApAppUi.ShowQueryL( ESysApLeaveOfflineModeQuery ); + TRACES( RDebug::Printf("CSysApOfflineModeController::GoOnlineIfOkL SIM check PASSED") ); + SwitchFromOfflineToOnlineModeL(); } else { + TRACES( RDebug::Printf("CSysApOfflineModeController::GoOnlineIfOkL SIM check FALIED" ) ); iSysApAppUi.ShowUiNoteL( EInsertSimNote ); } } diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/SysAp/Src/OfflineModeController/SysApOfflineModeControllerImpl.h --- a/coreapplicationuis/SysAp/Src/OfflineModeController/SysApOfflineModeControllerImpl.h Wed Jun 23 18:22:59 2010 +0300 +++ b/coreapplicationuis/SysAp/Src/OfflineModeController/SysApOfflineModeControllerImpl.h Tue Jul 06 14:26:20 2010 +0300 @@ -1,19 +1,22 @@ /* -* Copyright (c) 2005 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: The stub implementation of MSysApOfflineModeController. -* -*/ + * Copyright (c) 2005-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: + * CSysApOfflineModeController controls the offline mode. + * It turns OFF RF, BT and WLAN when offline mode is enabled and turns them ON when + * Offline mode is disabled + * + */ #ifndef SYSAPOFFLINEMODECONTROLLERIMPL_H @@ -27,6 +30,7 @@ // FORWARD DECLARATIONS class CSysApAppUi; +class CSysApCenRepOfflineModeObserver; // CLASS DECLARATION /** @@ -160,6 +164,11 @@ private: CSysApAppUi& iSysApAppUi; + + /** + * Instance of the Offline mode observer. Listens to offline mode changes + */ + CSysApCenRepOfflineModeObserver* iSysApCenRepOfflineModeObserver; TBool iOfflineModeActive; TBool iDoNotActivateRF; diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/SysAp/Src/SysApAppUi.cpp --- a/coreapplicationuis/SysAp/Src/SysApAppUi.cpp Wed Jun 23 18:22:59 2010 +0300 +++ b/coreapplicationuis/SysAp/Src/SysApAppUi.cpp Tue Jul 06 14:26:20 2010 +0300 @@ -32,6 +32,7 @@ #include //#include #include +//#include #include //#include "SysApWsClient.h" @@ -52,8 +53,12 @@ #include "MSysApBtSapController.h" #include "MSysApBtController.h" #include "MSysApUsbIndicator.h" +//#include +//#include +//#include #include "sysapkeymanagement.h" #include "SysApShutdownImage.h" +#include "SysApKeySndHandler.h" #include #include @@ -65,6 +70,16 @@ _LIT_SECURITY_POLICY_PASS(KAlwaysPassPolicy); _LIT_SECURITY_POLICY_C1(KWriteDeviceDataPolicy, ECapabilityWriteDeviceData); const TInt KDelayBeforeNextScanningRound( 1000000 ); +/* +_LIT(KPsmPlugin,"com.nokia.hb.powersavemodeplugin/1.0"); +_LIT(KPsm,"PSM"); +_LIT(KCharging,"Charging"); +_LIT(KPsmlocalisationfile, "powermanagement_"); +_LIT(KtsfilePath, "z:/resource/qt/translations/"); +_LIT(KlowbatteryIcon,"qtg_small_bt_low_battery.svg"); +_LIT(KbatteryFullIcon,"qtg_status_battery.svg"); + +*/ // ============================ MEMBER FUNCTIONS ============================== @@ -204,6 +219,7 @@ iActiveProfileBeforeOfflineMode = iSysApCenRepController->GetInt( KCRUidCoreApplicationUIsSysAp, KSysApProfileBeforeOfflineMode ); iSysApFeatureManager->FeatureVariationCheckDone(); + // iHbIndicatorSymbian = CHbIndicatorSymbian::NewL(); TRACES( RDebug::Print( _L("CSysApAppUi::ConstructL: trying CSysApLightsController::NewL()") ) ); iSysApLightsController = CSysApLightsController::NewL( *this, @@ -228,13 +244,24 @@ TRACES( RDebug::Print( _L("CSysApAppUi::ConstructL : CSysApKeyManagement::NewL returns error=%d"), keyManagementErr ) ); } + // Initialize animdll for handling side volume keys + // (needed before normal mode in case emergency number is dialed from PIN query) + iSysApKeySndHandler = CSysApKeySndHandler::NewL(iEikonEnv->WsSession()); iKeyguardController = CKeyguardAccessApi::NewL(); TRACES( RDebug::Print( _L("CSysApAppUi::ConstructL: trying CSysApShutdownImage::NewL()") ) ); iSysApShutdownImage = CSysApShutdownImage::NewL();//NULL; // + // Initialize nsps handler. Needed for proper lights control during PIN query. + TRACES( RDebug::Print( _L("CSysApAppUi::ConstructL: trying CSysApNspsHandler::NewL") ) ); + iSysApNspsHandler = CSysApNspsHandler::NewL( iEikonEnv->WsSession(), iSysApShutdownImage->ShutdownCoeControlWindow() ); + RProperty::Define( KPSUidCoreApplicationUIs,KCoreAppUIsPowerMenuCustomDialogStatus, RProperty::EInt, KAlwaysPassPolicy, KWriteDeviceDataPolicy ); RProperty::Set( KPSUidCoreApplicationUIs, KCoreAppUIsPowerMenuCustomDialogStatus, ECoreAppUIsPowerMenuCustomDialogUninitialized ); + + + // TBool result = HbTextResolverSymbian::Init(KPsmlocalisationfile, KtsfilePath); + TRACES( RDebug::Print( _L("CSysApAppUi::ConstructL: END") ) ); } @@ -247,6 +274,8 @@ TRACES( RDebug::Print( _L("CSysApAppUi::FreeResources") ) ); delete iSysApBatteryInfoController; delete iSysApPsmController; + //delete iVariantAccState; + delete iSysApAudioRoutingObserver; if ( iSapTimer ) @@ -282,7 +311,7 @@ delete iSysApUsbIndicatorController; delete iKeyguardController; - + // delete iHbIndicatorSymbian; delete iSysApKeyManagement; iSysApKeyManagement = NULL; @@ -377,15 +406,20 @@ UpdateBatteryBarsL( state ); DoSwStateNormalConstructionL(); - HandleAccessoryProfileInStartupL(); + HandleAccessoryProfileInStartupL(); + + if ( !iSysApPsmController ) // created here if first state change has not occurred yet + { + iSysApPsmController = CSysApPsmController::NewL( *this ); + } if ( iSysApPsmController ) - { + { if ( iCharging ) // if charger is connected on boot PSM queries may need to be shown - { - HandleChargingStatusL( StateOfProperty( KPSUidHWRMPowerState, KHWRMChargingStatus ) ); - } + { + HandleChargingStatusL( StateOfProperty( KPSUidHWRMPowerState, KHWRMChargingStatus ) ); } + } TInt batteryStatus = StateOfProperty( KPSUidHWRMPowerState, KHWRMBatteryStatus ); TRACES( RDebug::Print(_L("CSysApAppUi::HandleUiReadyAfterBootL: batteryStatus %d" ), batteryStatus ) ); @@ -434,11 +468,11 @@ iSysApPsmController = CSysApPsmController::NewL( *this ); } - // in charger boot explicitly disable partial power save mode + // in charger boot explicitly disable power save mode if ( aSwState == RStarterSession::ECharging ) { iSysApPsmController->ChargerConnected(); - iSysApPsmController->DoEnablePartialPsm( EFalse ); // disable partial power save now + iSysApPsmController->DoEnablePartialPsm( EFalse ); // disable power save now } } @@ -496,6 +530,7 @@ { FreeResources(); } + delete iSysApStartupController; } TBool CSysApAppUi::ResourcesFreed() const @@ -768,7 +803,9 @@ } #endif // SYSAP_USE_STARTUP_UI_PHASE +#if 0 // Not used as of now SetHacIndicatorL(); +#endif //0 } // ---------------------------------------------------------------------------- @@ -1582,14 +1619,14 @@ switch ( aStatus ) { case MSysApPsmControllerNotifyCallback::EPsmActivationComplete: - UpdateBatteryBarsL( StateOfProperty( KPSUidHWRMPowerState, KHWRMBatteryLevel ) ); - ShowUiNoteL( EPowerSaveModeActivated ); - break; + UpdateBatteryBarsL( StateOfProperty( KPSUidHWRMPowerState, KHWRMBatteryLevel ) ); + ShowUiNoteL( EPowerSaveModeActivated ); + break; case MSysApPsmControllerNotifyCallback::EPsmDeactivationComplete: - UpdateBatteryBarsL( StateOfProperty( KPSUidHWRMPowerState, KHWRMBatteryLevel ) ); - ShowUiNoteL( EPowerSaveModeDeactivated ); - break; + UpdateBatteryBarsL( StateOfProperty( KPSUidHWRMPowerState, KHWRMBatteryLevel ) ); + ShowUiNoteL( EPowerSaveModeDeactivated ); + break; case MSysApPsmControllerNotifyCallback::EPsmActivationFailed: ShowUiNoteL( ECannotActivatePowerSaveMode ); @@ -1807,6 +1844,7 @@ { iSysApPsmController->BatteryLow( ETrue ); + if ( iSysApPsmController->ShowActivateQuery()) { // show activation query, replaces the first battery low query @@ -1823,16 +1861,16 @@ else { //Display Battery Low note. - ShowUiNoteL( EBatteryLowNote ); + ShowUiNoteL( EBatteryLowNote ); } } - + if ( iSysApBatteryInfoController ) - { - iSysApBatteryInfoController->BatteryStatusUpdated( aValue ); - } - + { + iSysApBatteryInfoController->BatteryStatusUpdated( aValue ); } + + } // ---------------------------------------------------------------------------- // CSysApAppUi::ShowUiNoteL( const TSysApNoteIds aNote ) const @@ -1895,14 +1933,24 @@ break; case EBatteryFullUnplugChargerNote: { - iSysApLightsController->BatteryEmptyL( ETrue ); - _LIT(KPowerPressKey,"Charging complete. Unplug charger to save energy."); - HBufC* aString = HBufC16::NewLC(200); + /* + TRACES( RDebug::Print( _L("CSysApWsClient::RunL(): Key EEventKeyUp 01") ) ); + iSysApLightsController->BatteryEmptyL( ETrue ); + _LIT(KunplugCharger,"txt_power_dpopinfo_unplug_charger_to_save_energy"); + HBufC* unplugCharger = HbTextResolverSymbian::LoadL(KunplugCharger); + _LIT(KbatteryFull,"txt_power_management_dpophead_100_full"); + HBufC* batteryFull = HbTextResolverSymbian::LoadL(KbatteryFull); + CHbDeviceNotificationDialogSymbian::NotificationL(KbatteryFullIcon,*unplugCharger,*batteryFull); + */ + + iSysApLightsController->BatteryEmptyL( ETrue ); + _LIT(KPowerPressKey,"Charging complete. Unplug charger to save energy."); + HBufC* aString = HBufC16::NewLC(200); TPtrC aStringPointer = aString->Des(); - aStringPointer.Set(KPowerPressKey); + aStringPointer.Set(KPowerPressKey); TRACES( RDebug::Print( _L("CSysApWsClient::RunL(): Key EEventKeyUp 01") ) ); ShowExampleUiNoteL( aStringPointer ); - CleanupStack::PopAndDestroy(); // aString + CleanupStack::PopAndDestroy(); // aString } break; case EUnplugChargerNote: @@ -1963,7 +2011,6 @@ if ( iCharging && !iSysApPsmController->ChargerConnected() ) // first time after charger connection { iSysApPsmController->ConnectCharger( ETrue ); - if ( iSysApPsmController->ShowDeactivateQuery() ) { ShowQueryL( ESysApBattChargingPowerSavingQuery ); @@ -1973,7 +2020,7 @@ else { iSysApPsmController->DoEnablePartialPsm( EFalse ); - } + } } else if ( aValue == EChargingStatusNotConnected ) { @@ -2103,11 +2150,12 @@ } } - if ( iSysApBatteryInfoController ) + if ( iSysApBatteryInfoController ) { - iSysApBatteryInfoController->BatteryLevelUpdatedL(); + iSysApBatteryInfoController->BatteryLevelUpdatedL(); } - } + + } @@ -2132,6 +2180,13 @@ TRACES( RDebug::Print( _L("CSysApAppUi::ShowChargingNoteL KCTsyCallState=%d"), StateOfProperty( KPSUidCtsyCallInformation, KCTsyCallState ) ) ); if ( showNote ) // Power Mgmt UI spec defines that no Charging note is shown while the phone is ringing/alerting { + /* + TRACES( RDebug::Print( _L("CSysApWsClient::RunL(): Key EEventKeyUp 01") ) ); + _LIT(KChargingNote,"txt_power_management_dblist_charging"); + HBufC* chargingNote = HbTextResolverSymbian::LoadL(KChargingNote); + CHbDeviceNotificationDialogSymbian::NotificationL(KNullDesC,*chargingNote); + */ + _LIT(KChargingNote,"Charging"); HBufC* aString = HBufC16::NewLC(50); TPtrC aStringPointer = aString->Des(); @@ -2539,7 +2594,11 @@ } #endif // _DEBUG - TKeyResponse response( EKeyWasNotConsumed ); + TKeyResponse response(EKeyWasNotConsumed); + if (response) + { + //Do nothing:: To supress warning + } if (iSysApKeyManagement && aKeyEvent.iCode != EKeyPowerOff && aKeyEvent.iCode != 'E') { response = iSysApKeyManagement->HandleKeyEventL(aKeyEvent, aType ); diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/SysAp/Src/SysApSimChanged.cpp --- a/coreapplicationuis/SysAp/Src/SysApSimChanged.cpp Wed Jun 23 18:22:59 2010 +0300 +++ b/coreapplicationuis/SysAp/Src/SysApSimChanged.cpp Tue Jul 06 14:26:20 2010 +0300 @@ -171,7 +171,7 @@ if ( simNotOwned ) { ClearRepositoriesL(); - ClearLogsL(); +// ClearLogsL(); } } // =============== CShareActive MEMBER FUNCTIONS =============================== diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/advancedtspcontroller/data/keyevent.rul --- a/coreapplicationuis/advancedtspcontroller/data/keyevent.rul Wed Jun 23 18:22:59 2010 +0300 +++ b/coreapplicationuis/advancedtspcontroller/data/keyevent.rul Tue Jul 06 14:26:20 2010 +0300 @@ -22,9 +22,9 @@ /> #include #include +#include #include "remconidlelistener.h" #include "remconeventtable.h" - +#include "tsptriggerevents.h" // CONSTANTS // MACROS @@ -57,7 +58,10 @@ class CRemConTspController : public CRemConTargetSelectorPlugin, public MRemConTargetSelectorPluginInterfaceV2, public MRemConTargetSelectorPluginInterfaceV3, - public MCFListener + public MRemConTargetSelectorPluginInterfaceV4, + public MRemConTargetSelectorPluginInterfaceV5, + public MCFListener, + public MTspRulesTriggerObserver { public: // Constructors and destructor @@ -243,6 +247,85 @@ const TClientInfo& aSender, const TRemConAddress& aConnection); + /** + Called by RemCon to get the TSP to permit an incoming command. This is called + if the bearer has provided a target client for the command. + + The implementor should decide if they wish to allow this command and then call + IncomingCommandPermitted on the observer with a suitable error. + + @param aInterfaceUid The UID of the client interface. + @param aOperationId The operation ID of the command. + @param aClient a TClientInfo referring to the selected client + */ + virtual void PermitIncomingCommand( + TUid aInterfaceUid, + TUint aOperationId, + const TClientInfo& aClient); + + /** + Called by RemCon to get the TSP to permit an incoming Notify. This is called + if the bearer has provided a target client for the Notify. + + The implementor should decide if they wish to allow this Notify and then call + IncomingNotifyPermitted on the observer with a suitable error. + + @param aInterfaceUid The UID of the client interface. + @param aOperationId The operation ID of the Notify. + @param aClient a TClientInfo referring to the selected client + */ + virtual void PermitIncomingNotify( + TUid aInterfaceUid, + TUint aOperationId, + const TClientInfo& aClient); + + /** + Called by RemCon when a bearer that can address commands wishes to + inform the system that there has been a remote user action to + select a different addressed client. + + The bearer will then route addressed commands to this client until + such time as SetRemoteAddressedClient is called again or the TSP + calls SetLocalAddressedClient. + + @param aBearerUid The bearer that has changed its addressed client + @param aClient The RemCon client that is now selected by the bearer + */ + virtual void SetRemoteAddressedClient(const TUid& aBearerUid, + const TClientInfo& aClient); + /** Called by RemCon when a new target client has connected. + + @aClientInfo The information about the new client. + */ + void TargetClientAvailable(const TClientInfo& aClientInfo); + + /** Called by RemCon when a target client has disconnected. + + @aClientInfo The information about the client that has disconnected. + */ + void TargetClientUnavailable(const TClientInfo& aClientInfo); + + /** Called by RemCon when a bearer wishes to begin being informed when + the locally addressed player changes. Once this function has been called + the TSP should inform RemCon via SetLocalAddressedPlayer each time the + player to which incoming commands from aBearer would be routed changes. + This might occur for example if a new application is launched, or if the + foreground application changes, depending on what the TSP's rules are + for deciding the target of the incoming message. These updates should + occur until UnregisterLocalAddressedClientObserver is called. + + @param aBearerUid The bearer that wishes to be informed of updates + */ + TInt RegisterLocalAddressedClientObserver(const TUid& aBearerUid); + + /** Called by RemCon when a bearer wishes to stop being informed of + changes to the local addresse client. + + @param aBearerUid The bearer that no longer wishes to be informed of updates + */ + TInt UnregisterLocalAddressedClientObserver(const TUid& aBearerUid); + + // From MCFListener /** @@ -291,6 +374,8 @@ const TDesC& aSource, const TDesC& aType ); + // from MTspRulesTriggerObserver + void MtrtoEvaluateRoutingRules(); /** * Gets the foreground application. * @@ -329,8 +414,9 @@ void GetCorrectClientL( TUid aInterfaceUid, TUint aKeyEvent, - TSglQue& aClients ); - + TSglQue& aClients, + TBool aLaunchingNewApplicationAllowed); + void SetKeyEventTableL( const CCFActionIndication& aActionToExecute ); void ActivateApplicationL( const TUid aUid ) const; @@ -352,12 +438,26 @@ */ TBool DeviceLocked() const; - private: // Data - - // owned - CRemConIdleListener* iIdle; - - // Interface to P&S key that returns call state + /** + * Decide if locally addressed client should be updated. + */ + TClientInfo* GetLocalAddressedClient(); + +private: + NONSHARABLE_STRUCT(TClientObserver) + { + public: + TClientObserver(TUid aBearerUid) : iBearerUid(aBearerUid) {}; + public: + TUid iBearerUid; + TSglQueLink iClientObserverQueLink; + }; + +private: // Data + // owned + CRemConIdleListener* iIdle; + + // Interface to P&S key that returns call state RProperty iProperty; CCFClient* iCFClient; @@ -371,6 +471,16 @@ TProcessId iProcessIdActive; RPointerArray iArrayOfStoredTables; + + TSglQue iClientObservers; + + TSglQue iAvailableTargets; + + TSglQue iTargetsForAddressing; + + TClientInfo* iLocalAddressedClient; + + CTspTriggerEventsWatcher* iTriggerEventsWatcher; public: // Friend classes diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/advancedtspcontroller/inc/tsptriggerevents.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/coreapplicationuis/advancedtspcontroller/inc/tsptriggerevents.h Tue Jul 06 14:26:20 2010 +0300 @@ -0,0 +1,104 @@ +/* +* 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: Observes changes in the default player that should be used for a bearer +*/ + +#include +#include +#include + + +NONSHARABLE_CLASS(MTspRulesTriggerObserver) + { +public: + virtual void MtrtoEvaluateRoutingRules() = 0; + }; + +NONSHARABLE_CLASS(CActiveAudioClientObserver) : public CActive + { +public: + static CActiveAudioClientObserver* NewL(MTspRulesTriggerObserver& aObserver); + ~CActiveAudioClientObserver(); + +private: + // from CActive + void RunL(); + void DoCancel(); + + CActiveAudioClientObserver(MTspRulesTriggerObserver& aObserver); + void ConstructL(); + +private: + MTspRulesTriggerObserver& iObserver; + RProperty iAudioApplication; + }; + +NONSHARABLE_CLASS(CTspClientMapperObserver) : public CActive + { +public: + static CTspClientMapperObserver* NewL(MTspRulesTriggerObserver& aObserver); + ~CTspClientMapperObserver(); + +private: + // from CActive + void RunL(); + void DoCancel(); + + CTspClientMapperObserver(MTspRulesTriggerObserver& aObserver); + void ConstructL(); + +private: + MTspRulesTriggerObserver& iObserver; + RProperty iPlayingClients; + }; + +NONSHARABLE_CLASS(CWsEventsObserver) : public CActive + { +public: + static CWsEventsObserver* NewL(MTspRulesTriggerObserver& aObserver); + ~CWsEventsObserver(); + +private: + // from CActive + void RunL(); + void DoCancel(); + + CWsEventsObserver(MTspRulesTriggerObserver& aObserver); + void ConstructL(); + +private: + MTspRulesTriggerObserver& iObserver; + RWsSession iWsSession; + RWindowGroup iWindowGroup; + }; + +NONSHARABLE_CLASS(CTspTriggerEventsWatcher) : public CBase + { +public: + static CTspTriggerEventsWatcher* NewL(MTspRulesTriggerObserver& aObserver); + ~CTspTriggerEventsWatcher(); + TInt AddBearer(TUid& aBearerUid); + TInt RemoveBearer(TUid& aBearerUid); + +private: + CTspTriggerEventsWatcher(MTspRulesTriggerObserver& aObserver); + void ConstructL(); + +private: + MTspRulesTriggerObserver& iObserver; + CActiveAudioClientObserver* iAudioClientObserver; + CWsEventsObserver* iWsEventsObserver; + CTspClientMapperObserver* iClientMapperObserver; + }; + diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/advancedtspcontroller/src/remcontspcontroller.cpp --- a/coreapplicationuis/advancedtspcontroller/src/remcontspcontroller.cpp Wed Jun 23 18:22:59 2010 +0300 +++ b/coreapplicationuis/advancedtspcontroller/src/remcontspcontroller.cpp Tue Jul 06 14:26:20 2010 +0300 @@ -61,6 +61,8 @@ // LOCAL CONSTANTS AND MACROS const TUint32 KUid3MusicPlayer = 0x102072C3; +const TUint32 KUid3PhoneApp = 0x100058B3; +const TUint32 KUid3VoiceCmdApp = 0x102818e7; //#define __MODULE_TEST__ @@ -108,9 +110,11 @@ // ----------------------------------------------------------------------------- // -CRemConTspController::CRemConTspController( - MRemConTargetSelectorPluginObserver& aObserver ) -: CRemConTargetSelectorPlugin( aObserver ) +CRemConTspController::CRemConTspController(MRemConTargetSelectorPluginObserver& aObserver ) + : CRemConTargetSelectorPlugin( aObserver ) + , iClientObservers(_FOFF(TClientObserver, iClientObserverQueLink)) + , iAvailableTargets(_FOFF(TClientInfo, iLink)) + , iTargetsForAddressing(_FOFF(TClientInfo, iLink2)) { } @@ -154,6 +158,24 @@ } iArrayOfTables.ResetAndDestroy(); iArrayOfStoredTables.ResetAndDestroy(); + + TClientInfo* clientInfo; + while(!iAvailableTargets.IsEmpty()) + { + clientInfo = iAvailableTargets.First(); + iAvailableTargets.Remove(*clientInfo); + delete clientInfo; + } + + TClientObserver* clientObserver; + while(!iClientObservers.IsEmpty()) + { + clientObserver = iClientObservers.First(); + iClientObservers.Remove(*clientObserver); + delete clientObserver; + } + iTargetsForAddressing.Reset(); + delete iTriggerEventsWatcher; COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::~CRemConTspController() - return" ); } @@ -186,6 +208,16 @@ ret = reinterpret_cast( static_cast(this) ); } + else if ( aUid == TUid::Uid(KRemConTargetSelectorInterface4) ) + { + ret = reinterpret_cast( + static_cast(this) ); + } + else if ( aUid == TUid::Uid(KRemConTargetSelectorInterface5) ) + { + ret = reinterpret_cast( + static_cast(this) ); + } COM_TRACE_1( "[REMCONTSPCONTROLLER] CRemConTspController::GetInterface() this=%d", ret ); return ret; } @@ -338,9 +370,7 @@ #ifdef _DEBUG TraceRemconTargets( aClients ); #endif - - TRAPD( err, GetCorrectClientL( aInterfaceUid, aOperationId, aClients ) ); - + TRAPD( err, GetCorrectClientL( aInterfaceUid, aOperationId, aClients, ETrue ) ); Observer().IncomingCommandAddressed( err ); COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::AddressIncomingCommand() ends" ); @@ -397,6 +427,228 @@ } // ----------------------------------------------------------------------------- +// CRemConTspController::PermitIncomingCommand +// By default, permit all incoming addressed commands. Check if the command +// comes from the AVRCP bearer an if so launch the music player. +// ----------------------------------------------------------------------------- +void CRemConTspController::PermitIncomingCommand( + TUid aInterfaceUid, + TUint aOperationId, + const TClientInfo& aClient) + { + (void) aClient; // Not used. + // Here we need to check the incoming command. If it is an AVRCP play + // command and there is no sensible handler running we should launch the + // MPX Music Player. This is the same as for AddressIncomingCommand. + // Check if appropriate handler running + if ((aInterfaceUid != TUid::Uid(KRemConCoreApiUid)) || + (aOperationId != ERemConCoreApiPlay) || + GetLocalAddressedClient()) + { + // no action needed, allow commmand + Observer().IncomingCommandPermitted(ETrue); + } + else + { + // Launch an appropriate player in playing state. + TRAPD(err, ActivateApplicationL(TUid::Uid(KUid3MusicPlayer))) + if(err != KErrNone) + { + + } + + //deny this command + Observer().IncomingCommandPermitted(EFalse); + + // We will be informed when the MPX music player connects its client + // session. That will trigger a rules evaluation which will result in + // us informing interested bearers of the new local addressed player. + } + } + +// ----------------------------------------------------------------------------- +// CRemConTspController::PermitIncomingNotify +// By default, permit all incoming addressed commands. Check if the command +// comes from the AVRCP bearer an if so launch the music player. +// ----------------------------------------------------------------------------- +void CRemConTspController::PermitIncomingNotify( + TUid /*aInterfaceUid*/, + TUint /*aOperationId*/, + const TClientInfo& /*aClient*/) + { + // No reason to stop these, just allow all + Observer().IncomingNotifyPermitted(ETrue); + } + +// ----------------------------------------------------------------------------- +// CRemConTspController::SetRemoteAddressedClient +// Ignore this event. We don't use what the remote has selected to influence +// our routing policy. +// ----------------------------------------------------------------------------- +void CRemConTspController::SetRemoteAddressedClient(const TUid& /*aBearerUid*/, + const TClientInfo& /*aClient*/) + { + } + +// ----------------------------------------------------------------------------- +// CRemConTspController::TargetClientAvailable +// A new client has connected. Trigger a rule evaluation to see if we want to switch +// to this client. +// ----------------------------------------------------------------------------- +void CRemConTspController::TargetClientAvailable(const TClientInfo& aClientInfo) + { + COM_TRACE_1("[REMCONTSPCONTROLLER] CRemConTspController::TargetClientAvailable aClientInfo.SecureId=0x%x", aClientInfo.SecureId().iId); + + TClientInfo* clientInfo; + TSglQueIter iter(iAvailableTargets); + + while((clientInfo = iter++) != NULL) + { + if(clientInfo->SecureId() == aClientInfo.SecureId()) + { + // Found a client and clientInfo points to that now. + break; + } + } + + // If clientInfo was not found, create it and add to the available targets queue. + if(!clientInfo) + { + TClientInfo* newTarget = new TClientInfo(); + if(newTarget) + { + newTarget->ProcessId() = aClientInfo.ProcessId(); + newTarget->SecureId() = aClientInfo.SecureId(); + + // Add to our list of available targets + iAvailableTargets.AddLast(*newTarget); + } + } + + // Re-evaluate what the default addressed player should be if someone is interested to know + if(!iClientObservers.IsEmpty()) + { + MtrtoEvaluateRoutingRules(); + } + } + +// ----------------------------------------------------------------------------- +// CRemConTspController::TargetClientUnavailable +// A client has disconnected. Trigger a rule evaluation to see if our default +// player has changed. +// ----------------------------------------------------------------------------- +void CRemConTspController::TargetClientUnavailable(const TClientInfo& aClientInfo) + { + COM_TRACE_1("[REMCONTSPCONTROLLER] CRemConTspController::TargetClientUnavailable aClientInfo.SecureId=0x%x", aClientInfo.SecureId().iId); + + // Remove this from our list of available targets + if(!iAvailableTargets.IsEmpty()) + { + TClientInfo* clientInfo; + TSglQueIter iter(iAvailableTargets); + while((clientInfo = iter++) != NULL) + { + if(clientInfo->SecureId() == aClientInfo.SecureId()) + { + iAvailableTargets.Remove(*clientInfo); + delete clientInfo; + break; + } + } + } + + if(!iClientObservers.IsEmpty()) + { + // Re-evaluate what the default addressed player should be if someone is listening. + MtrtoEvaluateRoutingRules(); + } + } + +// ----------------------------------------------------------------------------- +// CRemConTspController::RegisterLocalAddressedClientObserver +// A bearer is interested in what the local addressed player is. Start observing. +// ----------------------------------------------------------------------------- +TInt CRemConTspController::RegisterLocalAddressedClientObserver(const TUid& aBearerUid) + { + COM_TRACE_1("[REMCONTSPCONTROLLER] CRemConTspController::RegisterLocalAddressedClientObserver aBearerUid.SecureId=0x%x", aBearerUid.iUid); + TInt err = KErrNone; + // Add this to our list of bearers interested in the default addressed player + TClientObserver* clientObserver = new TClientObserver(aBearerUid); + + if(!clientObserver) + { + err = KErrNoMemory; + } + + // If this is our first interested bearer kick off the trigger events watcher. + // This will let us know if any event occurs that should trigger us to re-evaluate + // our addressing rules + if(!iTriggerEventsWatcher && err == KErrNone) + { + TRAP(err, iTriggerEventsWatcher = CTspTriggerEventsWatcher::NewL(*this)); + if(err != KErrNone) + { + // If we couldn't create the events watcher the client Observer is not needed either. + delete clientObserver; + } + } + + if(err == KErrNone) + { + // Finally add the observer to the queue if it's not there yet. + TSglQueIter iter(iClientObservers); + TClientObserver* obsInQueue; + while((obsInQueue = iter++) != NULL) + { + if(obsInQueue->iBearerUid == aBearerUid) + { + err = KErrAlreadyExists; + break; + } + } + + if(!obsInQueue) + { + iClientObservers.AddLast(*clientObserver); + MtrtoEvaluateRoutingRules(); + } + } + + return err; + } + +// ----------------------------------------------------------------------------- +// CRemConTspController::UnregisterLocalAddressedClientObserver +// The bearer is no longer interested in observering default client changes. +// ----------------------------------------------------------------------------- +TInt CRemConTspController::UnregisterLocalAddressedClientObserver(const TUid& aBearerUid) + { + COM_TRACE_1("[REMCONTSPCONTROLLER] CRemConTspController::UnregisterLocalAddressedClientObserver aBearerUid.SecureId=0x%x", aBearerUid.iUid); + // Remove this from our list of bearers interested in the default addressed player. + // If there are no interested bearers left then we can stop watching for rules + // triggers. + TSglQueIter iter(iClientObservers); + TClientObserver* clientObserver; + while((clientObserver = iter++) != NULL) + { + if(clientObserver->iBearerUid == aBearerUid) + { + iClientObservers.Remove(*clientObserver); + delete clientObserver; + break; + } + } + + if(iClientObservers.IsEmpty()) + { + delete iTriggerEventsWatcher; + iTriggerEventsWatcher = NULL; + } + + return KErrNone; + } + +// ----------------------------------------------------------------------------- // CRemConTspController::GetCorrectClientL // Defines remote targets to which command will be sent. // (other items were commented in a header). @@ -405,10 +657,12 @@ void CRemConTspController::GetCorrectClientL( TUid aInterfaceUid, TUint aKeyEvent, - TSglQue& aClients ) + TSglQue& aClients, + TBool aLaunchingNewApplicationAllowed) { COM_TRACE_1( "[REMCONTSPCONTROLLER] CRemConTspController::GetCorrectClientL() Start aInterfaceUid %d", aInterfaceUid ); COM_TRACE_1( "[REMCONTSPCONTROLLER] CRemConTspController::GetCorrectClientL() Start aKeyEvent %d", aKeyEvent ); + TInt numOfTables = iArrayOfTables.Count(); RArray rulesArray; CleanupClosePushL( rulesArray ); @@ -513,6 +767,7 @@ TProcessId processId = target->ProcessId(); if( iProcessIdForeground == processId ) { + COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::GetCorrectClientL() Foreground client found" ); aClients.Reset(); aClients.AddFirst( *target ); found = ETrue; @@ -613,7 +868,7 @@ case CRemConEventTable::ELaunchDefaultApp: { COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::GetCorrectClientL() Launch default application" ); - if ( !DeviceLocked() ) + if ( !DeviceLocked() && aLaunchingNewApplicationAllowed ) { TUid defaultLaunchAppUid; @@ -648,6 +903,9 @@ else if( rulesArray.Count() - 1 == i ) { COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::GetCorrectClientL() No client found"); + // Reset the list to reflect the fact that no clients were found. + // The possible transparent clients will be added still. + aClients.Reset(); } } @@ -657,7 +915,8 @@ TClientInfo* target = transparentClients[ i ]; if ( !FindRemconConnection( target->SecureId(), aClients ) ) // Add client only if not already found { - aClients.AddFirst( *target ); + // Add to the end of the list, any other client should take priority over the transparent clients. + aClients.AddLast( *target ); COM_TRACE_1( "[REMCONTSPCONTROLLER] CRemConTspController::GetCorrectClientL() transparent client 0x%x added", target->SecureId().iId ); } } @@ -1059,6 +1318,40 @@ } // ----------------------------------------------------------------------------- +// CRemConTspController::MtrtoEvaluateRoutingRules +// Evaluates the TSP's routing rules to determine if the local addressed player +// has changed, and if so informs interested bearers +// ----------------------------------------------------------------------------- +void CRemConTspController::MtrtoEvaluateRoutingRules() + { + COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::MtrtoEvaluateRoutingRules() - Enter" ); + TClientInfo* localAddressedClient = GetLocalAddressedClient(); + + if(!localAddressedClient) + { + // If there's no suitable client, then there's nothing to do here. + COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::MtrtoEvaluateRoutingRules() No local addressed client found" ); + return; + } + + if(!iLocalAddressedClient || (localAddressedClient->SecureId() != iLocalAddressedClient->SecureId())) + { + // Local addressed player has changed (or wasn't set before). + iLocalAddressedClient = localAddressedClient; + COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::MtrtoEvaluateRoutingRules() Local addressed client has changed" ); + TSglQueIter iter(iClientObservers); + TClientObserver* clientObserver; + while((clientObserver = iter++) != NULL) + { + COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::MtrtoEvaluateRoutingRules() - informing observer" ); + Observer().SetLocalAddressedClient(clientObserver->iBearerUid, *iLocalAddressedClient); + } + } + COM_TRACE_1( "[REMCONTSPCONTROLLER] CRemConTspController::MtrtoEvaluateRoutingRules() Local addressed client SID = 0x%x", iLocalAddressedClient->SecureId().iId); + COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::MtrtoEvaluateRoutingRules() - Return" ); + } + +// ----------------------------------------------------------------------------- // CRemConTspController::CreateAfterIdleL // Define the contexts when idle state has been loaded. // (other items were commented in a header). @@ -1247,6 +1540,8 @@ CApaCommandLine* apaCommandLine = CApaCommandLine::NewLC(); apaCommandLine->SetExecutableNameL( appInfo.iFullName ); apaCommandLine->SetCommandL( EApaCommandRun ); + _LIT8(Kparam, "play"); + apaCommandLine->SetTailEndL( Kparam ); apaLsSession.StartApp( *apaCommandLine ); CleanupStack::PopAndDestroy( apaCommandLine ); } @@ -1485,4 +1780,50 @@ return EFalse; } +//---------------------------------------------------------------------------------- +// CRemConTspController::GetLocalAddressedClient +// Uses TSP rules to determine what local addressed client should be. +//----------------------------------------------------------------------------------- +TClientInfo* CRemConTspController::GetLocalAddressedClient() + { + COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::GetLocalAddressedClient() Entry"); + // Create list of available clients to allow re-use of existing rule + // evaluation function, GetCorrectClientL + iTargetsForAddressing.Reset(); + TSglQueIter iter(iAvailableTargets); + TClientInfo* clientInfo; + while((clientInfo = iter++) != NULL) + { + iTargetsForAddressing.AddLast(*clientInfo); + } + +#ifdef _DEBUG + TraceRemconTargets( iTargetsForAddressing ); +#endif + + TRAPD(err, GetCorrectClientL(TUid::Uid(KRemConCoreApiUid), ERemConCoreApiPlay, iTargetsForAddressing, EFalse)); + if(iTargetsForAddressing.IsEmpty() || err) + { + clientInfo = NULL; + COM_TRACE_( "[REMCONTSPCONTROLLER] CRemConTspController::GetLocalAddressedClient() No target Found"); + } + else + { + // We don't want to set the phone application or voice command handler as local addressed client. + // So choose the first item that is neither of those. The clientInfo may be NULL in the end. + TSglQueIter localAddressedIter(iTargetsForAddressing); + while((clientInfo = localAddressedIter++) != NULL) + { + if( clientInfo->SecureId() != TSecureId(KUid3PhoneApp) || + clientInfo->SecureId() != TSecureId(KUid3VoiceCmdApp) ) + { + COM_TRACE_1( "[REMCONTSPCONTROLLER] CRemConTspController::GetLocalAddressedClient() Local addressed client SID = %08x", clientInfo->SecureId().iId); + break; + } + } + } + + return clientInfo; + } + // End of file diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/advancedtspcontroller/src/tsptriggerevents.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/coreapplicationuis/advancedtspcontroller/src/tsptriggerevents.cpp Tue Jul 06 14:26:20 2010 +0300 @@ -0,0 +1,212 @@ +/* +* 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: Observes changes in the default player that should be used for a bearer +*/ + +#include +#include "tsptriggerevents.h" +#include "RemConDebug.h" +//----------------------------------------------------------------------- +// CTspTriggerEventsWatcher +//----------------------------------------------------------------------- +CTspTriggerEventsWatcher* CTspTriggerEventsWatcher::NewL(MTspRulesTriggerObserver& aObserver) + { + CTspTriggerEventsWatcher* self = new(ELeave)CTspTriggerEventsWatcher(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CTspTriggerEventsWatcher::CTspTriggerEventsWatcher(MTspRulesTriggerObserver& aObserver) + : iObserver(aObserver) + { + } + +void CTspTriggerEventsWatcher::ConstructL() + { + // Create WServ event watcher + iWsEventsObserver = CWsEventsObserver::NewL(iObserver); + + // Create observer for audio routing + iAudioClientObserver = CActiveAudioClientObserver::NewL(iObserver); + + // Create observer for TSP client mapper + iClientMapperObserver = CTspClientMapperObserver::NewL(iObserver); + } + +CTspTriggerEventsWatcher::~CTspTriggerEventsWatcher() + { + delete iAudioClientObserver; + delete iWsEventsObserver; + delete iClientMapperObserver; + } + +//----------------------------------------------------------------------- +// CWsEventsObserver +//----------------------------------------------------------------------- +CWsEventsObserver* CWsEventsObserver::NewL(MTspRulesTriggerObserver& aObserver) + { + CWsEventsObserver* self = new(ELeave)CWsEventsObserver(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CWsEventsObserver::~CWsEventsObserver() + { + Cancel(); + iWindowGroup.Close(); + iWsSession.Close(); + } + +CWsEventsObserver::CWsEventsObserver(MTspRulesTriggerObserver& aObserver) + : CActive(CActive::EPriorityStandard), iObserver(aObserver), iWsSession(), iWindowGroup(iWsSession) + { + } + +void CWsEventsObserver::ConstructL() + { + // Register to recieve WServ events + CActiveScheduler::Add(this); + User::LeaveIfError(iWsSession.Connect()); + iWindowGroup = RWindowGroup(iWsSession); + User::LeaveIfError(iWindowGroup.Construct(reinterpret_cast(this), EFalse)); + iWindowGroup.SetOrdinalPosition(-1); + iWindowGroup.DefaultOwningWindow(); + iWindowGroup.EnableReceiptOfFocus(EFalse); + iWindowGroup.EnableGroupListChangeEvents(); // For changes in z-order + iWsSession.EventReady(&iStatus); + SetActive(); + } + + +void CWsEventsObserver::RunL() + { + COM_TRACE_( "[REMCONTSPCONTROLLER] CWsEventsObserver::RunL" ); + TWsEvent event; + iWsSession.GetEvent(event); + iWsSession.EventReady(&iStatus); + SetActive(); + if(event.Type() == EEventWindowGroupListChanged) + { + COM_TRACE_( "[REMCONTSPCONTROLLER] CWsEventsObserver::RunL - EEventWindowGroupListChanged" ); + iObserver.MtrtoEvaluateRoutingRules(); + } + } + +void CWsEventsObserver::DoCancel() + { + iWsSession.EventReadyCancel(); + } + +//----------------------------------------------------------------------- +// CActiveAudioClientObserver +//----------------------------------------------------------------------- +CActiveAudioClientObserver* CActiveAudioClientObserver::NewL(MTspRulesTriggerObserver& aObserver) + { + CActiveAudioClientObserver* self = new(ELeave)CActiveAudioClientObserver(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CActiveAudioClientObserver::~CActiveAudioClientObserver() + { + Cancel(); + iAudioApplication.Close(); + } + +CActiveAudioClientObserver::CActiveAudioClientObserver(MTspRulesTriggerObserver& aObserver) + : CActive(CActive::EPriorityStandard), iObserver(aObserver) + { + } + +void CActiveAudioClientObserver::ConstructL() + { + User::LeaveIfError(iAudioApplication.Attach(KPSUidMMFAudioServer, KAudioPolicyApplicationAudioStatePlaying)); + CActiveScheduler::Add(this); + iAudioApplication.Subscribe(iStatus); + SetActive(); + } + + +void CActiveAudioClientObserver::RunL() + { + // Doesn't matter what the value is - that'll be checked when evaluation + // the TSP target rules. Inform the TSP of the value change and + // re-subscribe. + COM_TRACE_( "[REMCONTSPCONTROLLER] CWsEventsObserver::RunL" ); + iAudioApplication.Subscribe(iStatus); + SetActive(); + iObserver.MtrtoEvaluateRoutingRules(); + } + +void CActiveAudioClientObserver::DoCancel() + { + iAudioApplication.Cancel(); + } + +//----------------------------------------------------------------------- +// CTspClientMapperObserver +//----------------------------------------------------------------------- +CTspClientMapperObserver* CTspClientMapperObserver::NewL(MTspRulesTriggerObserver& aObserver) + { + CTspClientMapperObserver* self = new(ELeave)CTspClientMapperObserver(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CTspClientMapperObserver::~CTspClientMapperObserver() + { + Cancel(); + } + +CTspClientMapperObserver::CTspClientMapperObserver(MTspRulesTriggerObserver& aObserver) + : CActive(CActive::EPriorityStandard), iObserver(aObserver) + { + } + +void CTspClientMapperObserver::ConstructL() + { + const TUid KTspClientMapperProperty = { 0x10200C70 }; + const TUint32 KTspClientMapperKeyPlaying = 0x00000001; + User::LeaveIfError(iPlayingClients.Attach(KTspClientMapperProperty, KTspClientMapperKeyPlaying)); + CActiveScheduler::Add(this); + iPlayingClients.Subscribe(iStatus); + SetActive(); + } + + +void CTspClientMapperObserver::RunL() + { + // Doesn't matter what the value is - that'll be checked when evaluating + // the TSP target rules. Inform the TSP of the value change and + // re-subscribe. + COM_TRACE_( "[REMCONTSPCONTROLLER] CWsEventsObserver::RunL" ); + iPlayingClients.Subscribe(iStatus); + SetActive(); + iObserver.MtrtoEvaluateRoutingRules(); + } + +void CTspClientMapperObserver::DoCancel() + { + iPlayingClients.Cancel(); + } + + diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/devicepowermenuplugin/docml/powermenu.docml --- a/coreapplicationuis/devicepowermenuplugin/docml/powermenu.docml Wed Jun 23 18:22:59 2010 +0300 +++ b/coreapplicationuis/devicepowermenuplugin/docml/powermenu.docml Tue Jul 06 14:26:20 2010 +0300 @@ -1,56 +1,70 @@ - - - + + - + - + - + - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/devicepowermenuplugin/inc/hbdevicepowermenuwidegt_p.h --- a/coreapplicationuis/devicepowermenuplugin/inc/hbdevicepowermenuwidegt_p.h Wed Jun 23 18:22:59 2010 +0300 +++ b/coreapplicationuis/devicepowermenuplugin/inc/hbdevicepowermenuwidegt_p.h Tue Jul 06 14:26:20 2010 +0300 @@ -52,8 +52,6 @@ private: bool preConstructDialog(); void constructDialog(const QVariantMap ¶meters); - void hideEvent(QHideEvent *event); - void showEvent(QShowEvent *event); void cleanupMemory(); private: @@ -67,7 +65,6 @@ void handleVibrationToggled(int aVibrationToggel); void handleOfflineToggled(int aOfflineToggel); void handlePowerOff(bool aState); - //void setDialogWidget(Qt::Orientation); void closedialog(); signals: @@ -92,7 +89,6 @@ HbCheckBox* mOffline; //Handle for Offline CheckBox HbPushButton * mPowerOffButton; //Handle for PowerOff Button HbDocumentLoader* mLoader; //Hnadle for Documnet Loader to load docml - //HbMainWindow* mMainWindow; //Handle for mainWindow, used to Catch Orientation changes HbTranslator* mHbTranslator; //Translator used for localization; loads translation files }; diff -r 2222076f5c60 -r 76883296a0d5 coreapplicationuis/devicepowermenuplugin/src/hbdevicepowermenuwidegt.cpp --- a/coreapplicationuis/devicepowermenuplugin/src/hbdevicepowermenuwidegt.cpp Wed Jun 23 18:22:59 2010 +0300 +++ b/coreapplicationuis/devicepowermenuplugin/src/hbdevicepowermenuwidegt.cpp Tue Jul 06 14:26:20 2010 +0300 @@ -51,6 +51,7 @@ qreal KVerticalX = 175; //width of PowerMenu qreal KPMWidth = 360; + /** * Constructor */ @@ -87,8 +88,7 @@ HbDevicePowerMenuWidget::~HbDevicePowerMenuWidget() { TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::Destructor()") ) ); - delete mLoader; - delete mHbTranslator; + cleanupMemory(); } /** @@ -266,18 +266,8 @@ mDialogWidget->setTimeout(HbPopup::NoTimeout); mDialogWidget->setDismissPolicy(HbPopup::TapOutside); mDialogWidget->setPreferredWidth(KPMWidth); - //Sets Dialog position on screen -/* - HbInstance* instance = HbInstance::instance(); - mMainWindow = instance->allMainWindows().first(); - ok = connect(mMainWindow , SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(setDialogWidget(Qt::Orientation))); - //This is required to launch menu in right place for very first time - setDialogWidget(mMainWindow->orientation()); - Q_ASSERT_X(ok, "Orientation", "Invalid Orientation"); -*/ connect(mDialogWidget,SIGNAL(aboutToClose()),this, SLOT(closedialog())); - TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::constructDialog:dialogLoaded:End") ) ); } TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::constructDialog:End") ) ); @@ -338,33 +328,15 @@ } /** - * Widget is about to hide. - * This method is dervied from HBpopUp - * + * Slot + * Widget is about to Close. */ -void HbDevicePowerMenuWidget::hideEvent(QHideEvent *event) - { - TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::hideEvent:Begin") ) ); - Q_UNUSED(event); - //emit deviceDialogClosed(); - TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::hideEvent:End") ) ); - } - void HbDevicePowerMenuWidget::closedialog() { TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::closedialog:Begin") ) ); emit deviceDialogClosed(); TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::closedialog:Begin") ) ); } -/** - * Widget is about to show - * This method is dervied from HBpopUp - */ -void HbDevicePowerMenuWidget::showEvent(QShowEvent *event) - { - TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::showEvent") ) ); - Q_UNUSED(event); - } /** * Slot @@ -447,6 +419,9 @@ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::handleVibrationToggled:End") ) ); } +/** + * Cleans up memory allocations + */ void HbDevicePowerMenuWidget::cleanupMemory() { TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::cleanupMemory:Begin") ) ); @@ -461,21 +436,3 @@ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::cleanupMemory:End") ) ); } -/** - * Slot - * Sets Dialog position on screen - */ -/*void HbDevicePowerMenuWidget::setDialogWidget(Qt::Orientation aOrientation) - { - TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::setDialogWidget:Begin") ) ); - if (aOrientation == Qt::Vertical) - { - mDialogWidget->setPreferredPos(QPointF(0,0),HbPopup::TopLeftCorner); - } - else - { - mDialogWidget->setPreferredPos(QPointF(KVerticalX,0),HbPopup::TopLeftCorner); - } - TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::setDialogWidget:End") ) ); - }*/ - diff -r 2222076f5c60 -r 76883296a0d5 package_definition.xml --- a/package_definition.xml Wed Jun 23 18:22:59 2010 +0300 +++ b/package_definition.xml Tue Jul 06 14:26:20 2010 +0300 @@ -145,7 +145,7 @@ - + diff -r 2222076f5c60 -r 76883296a0d5 printingsupport/printinguisupport/group/BLD.INF --- a/printingsupport/printinguisupport/group/BLD.INF Wed Jun 23 18:22:59 2010 +0300 +++ b/printingsupport/printinguisupport/group/BLD.INF Tue Jul 06 14:26:20 2010 +0300 @@ -1,4 +1,4 @@ -// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 1999-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" @@ -31,7 +31,7 @@ // specify the source file followed by its destination here // copy will be used to copy the source file to its destination // If there's no destination then the source file will be copied -// to the same name in \epoc32\include +// to the same name in /epoc32/include ../inc/PRNINF.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(prninf.h) ../inc/PRNPREV.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(prnprev.h) diff -r 2222076f5c60 -r 76883296a0d5 startupservices/Startup/conf/startup.confml Binary file startupservices/Startup/conf/startup.confml has changed diff -r 2222076f5c60 -r 76883296a0d5 startupservices/Startup/conf/startup_101F8763.crml Binary file startupservices/Startup/conf/startup_101F8763.crml has changed diff -r 2222076f5c60 -r 76883296a0d5 startupservices/Startup/src/StartupAppUi.cpp --- a/startupservices/Startup/src/StartupAppUi.cpp Wed Jun 23 18:22:59 2010 +0300 +++ b/startupservices/Startup/src/StartupAppUi.cpp Tue Jul 06 14:26:20 2010 +0300 @@ -30,6 +30,7 @@ #include #include #include "sanimstartupctrl.h" +#include // USER INCLUDES #include "StartupAppUi.h" @@ -98,6 +99,9 @@ // --------------------------------------------------------------------------- void CStartupAppUi::ConstructL() { + RThread thread; //increase the thread priority to smooth the animation + thread.SetPriority(EPriorityAbsoluteForeground); + thread.Close(); TRACES("CStartupAppUi::ConstructL()"); TInt flags = EStandardApp; BaseConstructL( flags ); @@ -609,12 +613,24 @@ { TRACES("CStartupAppUi::DoStartupEndPart()"); TRACES("CStartupAppUi::DoStartupEndPart(): STARTUP OK"); - - - - - UpdateStartupUiPhase( EStartupUiPhaseAllDone ); - + + TBool ftuenabled=EFalse; + TInt err=KErrNone; +#ifndef __WINSCW__ + TRAP(err, + TInt enabled=0; + //open cenrep; + CRepository *cenrep=CRepository::NewLC(KCRUidStartupConf); + //check if ftu is enabled or not + User::LeaveIfError(cenrep->Get(KFtuStartupEnabled,enabled)); + ftuenabled=!!enabled; //make sure we only have a boolean value here + CleanupStack::PopAndDestroy(cenrep); + ); +#endif + if(!ftuenabled) + { + UpdateStartupUiPhase( EStartupUiPhaseAllDone ); + } TRACES("CStartupAppUi::DoStartupEndPart(): Exit application."); iExitTimer->Start( 100000, 100000, TCallBack( DoExitApplication, this ) ); @@ -1244,9 +1260,9 @@ switch( toState ) { case EStartupStartupOK: - iInternalState = EStartupStartupOK; - TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupStartupOK"); - DoStartupEndPart(); + iInternalState = EStartupStartupOK; + TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupInvokeAndWaitForFtu"); + DoStartupEndPart(); break; case EStartupSystemFatalError: SystemFatalErrorL(); diff -r 2222076f5c60 -r 76883296a0d5 systemsettings/accindicatorplugin/inc/accindicator.h --- a/systemsettings/accindicatorplugin/inc/accindicator.h Wed Jun 23 18:22:59 2010 +0300 +++ b/systemsettings/accindicatorplugin/inc/accindicator.h Tue Jul 06 14:26:20 2010 +0300 @@ -48,8 +48,7 @@ public: //from HbIndicatorPluginInterface QStringList indicatorTypes() const; - bool accessAllowed(const QString &indicatorType, - const HbSecurityInfo *securityInfo) const; + bool accessAllowed(const QString &indicatorType, const QVariantMap &securityInfo) const; HbIndicatorInterface* createIndicator(const QString &indicatorType); int error() const; diff -r 2222076f5c60 -r 76883296a0d5 systemsettings/accindicatorplugin/src/accindicator.cpp --- a/systemsettings/accindicatorplugin/src/accindicator.cpp Wed Jun 23 18:22:59 2010 +0300 +++ b/systemsettings/accindicatorplugin/src/accindicator.cpp Tue Jul 06 14:26:20 2010 +0300 @@ -27,7 +27,7 @@ AccIndicatorPlugin::AccIndicatorPlugin() : HbIndicatorInterface(IndicatorType, - HbIndicatorInterface::GroupPriorityLow, + HbIndicatorInterface::SettingCategory, InteractionActivated) { mIndicatorTypes << "com.nokia.accessory.indicatorplugin/1.0"; @@ -75,8 +75,7 @@ // this plugin it always returns true. // ---------------------------------------------------------------------------- -bool AccIndicatorPlugin::accessAllowed(const QString &indicatorType, - const HbSecurityInfo *securityInfo) const +bool AccIndicatorPlugin::accessAllowed(const QString &indicatorType,const QVariantMap &securityInfo) const { Q_UNUSED(indicatorType) Q_UNUSED(securityInfo) @@ -129,7 +128,7 @@ return type; } //for displaying the icon in indicator. - case DecorationNameRole: + case MonoDecorationNameRole: { QString iconName; if(mAccType == KPCWired || mAccType == KPCUSB) diff -r 2222076f5c60 -r 76883296a0d5 systemsettings/group/bld.inf --- a/systemsettings/group/bld.inf Wed Jun 23 18:22:59 2010 +0300 +++ b/systemsettings/group/bld.inf Tue Jul 06 14:26:20 2010 +0300 @@ -24,7 +24,6 @@ PRJ_MMPFILES #include "../gssensorplugin/group/bld.inf" -#include "../GSAccessoryPlugin/group/bld.inf" PRJ_TESTMMPFILES diff -r 2222076f5c60 -r 76883296a0d5 tzpcside/tzcompiler/group/BLD.INF --- a/tzpcside/tzcompiler/group/BLD.INF Wed Jun 23 18:22:59 2010 +0300 +++ b/tzpcside/tzcompiler/group/BLD.INF Tue Jul 06 14:26:20 2010 +0300 @@ -1,4 +1,4 @@ -// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 1999-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" @@ -30,7 +30,7 @@ ../Release/TzIdentities.ini /epoc32/tools/tz/tzidentities.ini // TzCompiler User Documentation -"../documentation/SGL.GT0197.232 App-Services Tz 9.1 How-To Create the Tz Database.doc" "/epoc32/tools/tz/sgl.gt0197.232 app-services tz 9.1 how-to create the tz database.doc" +"../doc_pub/SGL.GT0197.232 App-Services Tz 9.1 How-To Create the Tz Database.doc" "/epoc32/tools/tz/sgl.gt0197.232 app-services tz 9.1 how-to create the tz database.doc" // Sample Olson's Tz Database Source Files ../Release/Data/africa /epoc32/tools/tz/data/africa diff -r 2222076f5c60 -r 76883296a0d5 tzservices/tzserver/group/release.txt --- a/tzservices/tzserver/group/release.txt Wed Jun 23 18:22:59 2010 +0300 +++ b/tzservices/tzserver/group/release.txt Tue Jul 06 14:26:20 2010 +0300 @@ -300,6 +300,6 @@ Title : First Release of Timezone Server * First release of the new Time Zone Server. -* see ..\tz\documentation folder for how-to use the new component +* see ..\tzserver\doc_pub folder for how-to use the new component ============================