diff -r d2c4c66342f3 -r d51193d814ea messagingfw/deprecate/senduiservices/watcher/src/senduiwatcher.cpp --- a/messagingfw/deprecate/senduiservices/watcher/src/senduiwatcher.cpp Tue Aug 31 15:41:11 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,340 +0,0 @@ -/* -* Copyright (c) 2006 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: Launches SendUiServiceResolver in the events of: -* At all times: -* - mtm installation/removal -* - Message Server events: -* * EMsvEntryCreated -* * EMsvEntryDeleted -* * EMsvCorruptedIndexRebuilt -* * EMsvMediaChanged -* - Ecom service event arrives and SendUI Ecom service count has -* changed since last boot. -* -*/ - - - - -#include -#include -#include -#include // for KMsvRootIndexEntryId -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "senduiwatcher.h" -#include "senduiecomobserver.h" -#include "senduipropertyobserver.h" -#include "senduiproperty.h" -#include "SendUiPrivateCRKeys.h" -#include "senduiserviceslog.h" - -_LIT( KSendUiLauncherApp, "SendUiServiceResolver.exe"); - -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY( 0x102823B6, CSendUiWatcher::NewL ) - }; - -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) - { - aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); - return ImplementationTable; - } - - -// ======== LOCAL FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// NewL -// --------------------------------------------------------------------------- -// -CSendUiWatcher* CSendUiWatcher::NewL( TAny* /*aWatcherParams */) - { - CSendUiWatcher* self=new (ELeave) CSendUiWatcher(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CSendUiWatcher::~CSendUiWatcher() - { - delete iPropertyObserver; - delete iTimer; - } - -// --------------------------------------------------------------------------- -// DoTask -// --------------------------------------------------------------------------- -// -TInt CSendUiWatcher::DoTaskL( TAny* aThis ) - { - LOGTEXT(_L("CSendUiWatcher::DoTask >>")); - CSendUiWatcher* watcher = static_cast( aThis ); - // We've waited long enough. Try to set to done. Ignore error. - RProperty::Set( - KPSUidSendUiProperty, - KSendUiUpdateOperation, - KSendUiUpdateOperationDone ); - watcher->HandleUpdateServicesL(); - LOGTEXT(_L("CSendUiWatcher::DoTask <<")); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// HandleUpdateServicesL -// --------------------------------------------------------------------------- -// -void CSendUiWatcher::HandleUpdateServicesL() - { - LOGTEXT(_L("CSendUiWatcher::HandleUpdateServicesL >>")); - TInt value; - delete iTimer; - iTimer = NULL; - - RProperty::Get( KPSUidSendUiProperty, KSendUiUpdateOperation, value ); - if ( value != KSendUiUpdateOperationDone ) - { - // try again later - SetTimerL(); - } - else - { - // Run SendUiSr - RApaLsSession ls; - - CApaCommandLine *cmd = CApaCommandLine::NewL(); - CleanupStack::PushL( cmd ); - - cmd->SetExecutableNameL( KSendUiLauncherApp ); - cmd->SetCommandL( EApaCommandBackground ); - User::LeaveIfError( ls.StartApp( *cmd ) ); - CleanupStack::PopAndDestroy( cmd ); - } - LOGTEXT(_L("CSendUiWatcher::HandleUpdateServicesL <<")); - } - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// -CSendUiWatcher::CSendUiWatcher() // first-phase C++ constructor - { - } - -// --------------------------------------------------------------------------- -// ConstructL -// --------------------------------------------------------------------------- -// -void CSendUiWatcher::ConstructL() // second-phase constructor - { - if ( !iSession ) - { - iSession = CMsvSession::OpenSyncL( *this ); - } - TInt result( KErrNone ); - - result = RProperty::Define( - KPSUidSendUiProperty, - KSendUiUpdateRequest, - RProperty::EInt, - TSecurityPolicy( ECapabilityReadUserData ), - TSecurityPolicy( ECapabilityWriteUserData )); - - if ( result && result != KErrAlreadyExists ) - { - User::LeaveIfError( result ); - } - - result = RProperty::Define( - KPSUidSendUiProperty, - KSendUiUpdateOperation, - RProperty::EInt, - TSecurityPolicy( ECapabilityReadUserData ), - TSecurityPolicy( ECapabilityWriteUserData )); - - if ( result && result != KErrAlreadyExists ) - { - User::LeaveIfError( result ); - } - - User::LeaveIfError( - RProperty::Set(KPSUidSendUiProperty, KSendUiUpdateOperation, KSendUiUpdateOperationDone) ); - - iPropertyObserver = CSendUiPropertyObserver::NewL( this ); - - iEcomObserver = CSendUiEcomObserver::NewL(); - - CheckIfUpdateNeededL(); - } - -// --------------------------------------------------------------------------- -// UpdateFeature -// --------------------------------------------------------------------------- -// -void CSendUiWatcher::FeatureStatus( TInt aFeature, TInt &aNewFeatures, TInt aFeatureFlag ) - { - if ( FeatureManager::FeatureSupported( aFeature ) ) - { - aNewFeatures |= aFeatureFlag; - } - } - -// --------------------------------------------------------------------------- -// CheckIfUpdateNeededL -// --------------------------------------------------------------------------- -// -void CSendUiWatcher::CheckIfUpdateNeededL() - { - LOGTEXT(_L("CSendUiWatcher::CheckIfUpdateNeededL >>")); - CRepository* repository = CRepository::NewLC( KCRUidSendUi ); - - TInt storedValue(KErrNotFound); - TBool updateNeeded( EFalse ); - - // Request service list update if phone language has changed. - // KErrNotFound language value also indicates unsuccesfull run of SendUiServiceResolver - TInt result = repository->Get( KKeySendUiServiceLanguage, storedValue ); - if ( result != KErrNone || storedValue != User::Language() ) - { - updateNeeded = ETrue; - } - - // Issue service list update if mtm count has changed - CMtmUiDataRegistry* mtmUiDataRegistry = CMtmUiDataRegistry::NewL( *iSession ); - TInt newMtmCount( KErrNotFound ); - if ( mtmUiDataRegistry ) - { - newMtmCount = mtmUiDataRegistry->NumRegisteredMtmDlls(); - delete mtmUiDataRegistry; - } - - result = repository->Get( KKeySendUiServiceMtmCount, storedValue ) ; - if ( result != KErrNone || storedValue != newMtmCount ) - { - result = repository->Set( KKeySendUiServiceMtmCount, newMtmCount ); - updateNeeded = ETrue; - } - - TInt oldFeatures(0); - TInt newFeatures(0); - if ( repository->Get( KKeySendUiFeatureManagerServices, oldFeatures ) != KErrNone ) - { - updateNeeded = ETrue; - } - FeatureManager::InitializeLibL(); - FeatureStatus( KFeatureIdMmsPostcard, newFeatures, KSendUiPostcard ); - FeatureStatus( KFeatureIdAudioMessaging, newFeatures, KSendUiAudioMessage ); - FeatureStatus( KFeatureIdSenduiMmsUpload, newFeatures, KSendUiMmsUpload ); - FeatureManager::UnInitializeLib(); - if ( newFeatures != oldFeatures ) - { - repository->Set( KKeySendUiFeatureManagerServices, newFeatures ); - updateNeeded = ETrue; - } - - CleanupStack::PopAndDestroy( repository ); - - if ( updateNeeded ) - { - HandleUpdateServicesL(); - } - LOGTEXT(_L("CSendUiWatcher::CheckIfUpdateNeededL <<")); - } - -// --------------------------------------------------------------------------- -// SetTimerL -// --------------------------------------------------------------------------- -// -void CSendUiWatcher::SetTimerL() - { - LOGTEXT(_L("CSendUiWatcher::SetTimerL >>")); - if ( !iTimer ) - { - iTimer = CPeriodic::NewL( CActive::EPriorityStandard ); - iTimer->Start( KSendUiServiceListUpdateDelay, - KSendUiServiceListUpdateDelay, - TCallBack( DoTaskL, this)); - } - LOGTEXT(_L("CSendUiWatcher::SetTimerL <<")); - } - -void CSendUiWatcher::HandleSessionEventL( - TMsvSessionEvent aEvent, - TAny* /*aArg1*/, - TAny* aArg2, - TAny* /*aArg3*/ ) - { - // TODO: Reconnect to message server - switch ( aEvent ) - { - case EMsvServerReady: - { - LOGTEXT(_L("Message Server is ready.")); - break; - } - case EMsvMtmGroupDeInstalled: - case EMsvMtmGroupInstalled: - { - SetTimerL(); - break; - } - - case EMsvEntriesCreated:// fall through - case EMsvEntriesDeleted: - { - TMsvId folderId = KMsvNullIndexEntryId; - folderId = (*(TMsvId*) (aArg2)); - if (folderId != KMsvRootIndexEntryId) - { - break; - } - SetTimerL(); - break; - - } - case EMsvCorruptedIndexRebuilt: - LOGTEXT2(_L("Watcher event %d"), aEvent); - HandleUpdateServicesL(); - break; - case EMsvCloseSession: - case EMsvServerTerminated: - delete iSession; - iSession = NULL; - LOGTEXT(_L("SendUiWatcher session was terminated")); - break; - case EMsvMediaChanged:// Added to handle change of Msg center - SetTimerL(); - break; - default:; - } - } - -// end of file -