diff -r 000000000000 -r 667063e416a2 locationsystemui/locationsysui/locverifier/src/lpdperiodicprocessor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationsystemui/locationsysui/locverifier/src/lpdperiodicprocessor.cpp Tue Feb 02 01:06:48 2010 +0200 @@ -0,0 +1,426 @@ +/* +* Copyright (c) 2002 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: Helps retrieving request related information +* +*/ + + +// INCLUDE FILES +//#include +#include +#include +#include +#include +#include +#include +#include +#include "lpdperiodicprocessor.h" +#include "locverifierdlgdebug.h" +#include "lpdverifiersettinglauncher.h" +#include "lpdsuplsettingsadapter.h" + + +// CONSTANTS +const TInt KRequestorNameSize = 256; +const TInt KMinToSecs = 60; +const TInt KHrToSecs = 3600; +const TInt KdayToSecs = 86400; +const TInt KRealWidth = 50; +_LIT( KNewLineEntry, "\n" ); + + +// Unnamed namespace for local definitions + +#ifdef _DEBUG +_LIT( KPanicText, "CLpdPeriodicProcessor" ); +enum TPanicCode + { + KLpdErrGeneral = 1 + }; +#endif + +// LinkClickedL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +static TInt LinkClickedL(TAny* aPtr) + { + CLpdPeriodicProcessor* self = static_cast(aPtr); + self->LaunchSettingsL(); + return ETrue; + } + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::CLpdPeriodicProcessor +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CLpdPeriodicProcessor::CLpdPeriodicProcessor( MLpdPeriodicRequestObserver& aObserver ) +: iObserver(aObserver), iMessageText( NULL ), iRequestorName( NULL ), iSessionId(-1), iRequestorId(-1) + { + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CLpdPeriodicProcessor* CLpdPeriodicProcessor::NewL( MLpdPeriodicRequestObserver& aObserver ) + { + CLpdPeriodicProcessor* self = CLpdPeriodicProcessor::NewLC( aObserver ); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CLpdPeriodicProcessor* CLpdPeriodicProcessor::NewLC( MLpdPeriodicRequestObserver& aObserver) + { + CLpdPeriodicProcessor* self = new( ELeave ) CLpdPeriodicProcessor ( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// Destructor +CLpdPeriodicProcessor::~CLpdPeriodicProcessor() + { + delete iRequestor; + delete iSUPLSettingsAdapter; + delete iVerifierSettingsLauncher; + delete iMessageText; + delete iRequestorName; + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::ConstructL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::ConstructL() + { + iSUPLSettingsAdapter = CLpdSUPLSettingsAdapter::NewL(*this); + iVerifierSettingsLauncher = CLpdVerifierSettingsLauncher::NewL(); + iRequestorName = HBufC::NewL( KRequestorNameSize ); + iEikEnv = CEikonEnv::Static(); + + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::LaunchSettingsL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::LaunchSettingsL( ) + { + if( iVerifierSettingsLauncher ) + { + iVerifierSettingsLauncher->LaunchL( iSessionId ); + } + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::GetSessionId +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt64 CLpdPeriodicProcessor::GetSessionId( ) + { + return iSessionId; + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicRequestProcessor::SetRequestorId +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::SetRequestorIdL( TInt32 aRequestorId ) + { + __ASSERT_DEBUG( aRequestorId != KPosNullQNRequestId, + HandleAssertErrorL() ); + + iRequestorId = aRequestorId; + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::SetSessionId +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::SetSessionIdL( TInt64 aSessionId ) + { + __ASSERT_DEBUG( iRequestorId != KPosNullQNRequestId, + HandleAssertErrorL() ); + + iSessionId = aSessionId; + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::SetRequestorIdL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::SetRequestorNameL( HBufC* aRequestorName) + { + __ASSERT_DEBUG( iRequestorId != KPosNullQNRequestId, + HandleAssertErrorL() ); + iRequestorName->Des().Copy( aRequestorName->Des() ); + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::SetRequestTypeL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::SetRequestTypeL( + CPosPrivacyNotifier::TRequestType aRequestType ) + { + __ASSERT_DEBUG( iRequestorId != KPosNullQNRequestId, + HandleAssertErrorL() ); + iRequestType = aRequestType; + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::SetRequestorL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::SetRequestorL( CPosRequestor* aRequestor ) + { + __ASSERT_DEBUG( iRequestorId != KPosNullQNRequestId, + HandleAssertErrorL() ); + if( iRequestor ) + { + delete iRequestor; + iRequestor = NULL; + } + + iRequestor = aRequestor; + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::ResetParameters +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::ResetParameters() + { + iRequestorId = -1; + iSessionId = -1; + if( iRequestor ) + { + delete iRequestor; + iRequestor = NULL; + } + + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::NotificationMessageText +// Used to prepare notification message text +// ----------------------------------------------------------------------------- +// + +void CLpdPeriodicProcessor::NotificationMessageTextL( HBufC*& aMessageText) + { + __ASSERT_DEBUG( iRequestorId != KPosNullQNRequestId, + HandleAssertErrorL() ); + TUint aTimePeriod; + + TRAPD( ret, iSUPLSettingsAdapter->GetTriggerPeriodL( iSessionId, aTimePeriod)); + + if(ret != KErrNone) + { + User::Leave(ret); + } + + if( iMessageText ) + { + delete iMessageText; + iMessageText = NULL; + } + + TInt resourceId; + TBuf periodString; + HBufC* msgText = NULL; + + GetResourceAndPeriodL( aTimePeriod, resourceId, periodString ); + + GetMessageStringL(msgText, resourceId, *iRequestorName, periodString ); + + if( msgText ) + { + CleanupStack::PushL( msgText ); + HBufC* linkText = NULL; + linkText = StringLoader::LoadL( R_LOC_NOTIFICATION_SERVICE_LINK, iEikEnv ); + CleanupStack::PushL( linkText ); + iMessageText = HBufC::NewL( msgText->Length() + KNewLineEntry().Length() + KOpeningLinkTag().Length() + + linkText->Length() + KClosingLinkTag().Length() ); + iMessageText->Des().Copy( *msgText ); + iMessageText->Des().Append( KNewLineEntry ); + iMessageText->Des().Append( KOpeningLinkTag ); + iMessageText->Des().Append( *linkText ); + iMessageText->Des().Append( KClosingLinkTag ); + + CleanupStack::PopAndDestroy( ); //msgText + CleanupStack::PopAndDestroy( ); //linkText + //delete msgText; + //delete linkText; + } + else + { + iMessageText = HBufC::NewL( KMaxTriggerSessionNameLen ); + } + + aMessageText->Des().Copy(iMessageText->Des()); + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::LinkCallBack +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TCallBack CLpdPeriodicProcessor::LinkCallBack() + { + return TCallBack(LinkClickedL, this); + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicRequestProcessor::UpdateSessionL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::UpdateSessionL( TInt64 aSessionId ) + { + if( iSessionId == aSessionId && + iRequestType == CPosPrivacyNotifier::ENotification && iRequestor + && CPosRequestor::ERequestPeriodic == iRequestor->RequestType()) + { + iObserver.UpdateCurrentNotifierL(); + } + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::GetMessageStringL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::GetMessageStringL( HBufC*& aMessageString, + TInt& aResourceId, TDesC& aNameString, TDesC& aPeriodString ) + { + + switch( aResourceId ) + { + case R_LOC_NOTIFICATION_ONEHOUR: + { + aMessageString = StringLoader::LoadL( R_LOC_NOTIFICATION_ONEDAY, aNameString, iEikEnv ); + break; + } + case R_LOC_NOTIFICATION_ONEDAY: + { + aMessageString = StringLoader::LoadL( R_LOC_NOTIFICATION_ONEDAY, aNameString, iEikEnv ); + break; + } + case R_LOC_NOTIFICATION_MINUTES: + case R_LOC_NOTIFICATION_HOURS: + case R_LOC_NOTIFICATION_DAYS: + default: + { + CDesCArrayFlat* strings = new CDesCArrayFlat( 2 ); + CleanupStack::PushL( strings ); + + strings->AppendL( aNameString ); // aNameString string + strings->AppendL( aPeriodString ); // aPeriodString string + + aMessageString = StringLoader::LoadL(aResourceId, *strings, iEikEnv ); + + CleanupStack::PopAndDestroy( ); // strings + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::GetResourceAndPeriodL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::GetResourceAndPeriodL( TUint aSeconds, + TInt& aResourceId, TDes& aPeriodString ) + { + TRealFormat fmt(KDefaultRealWidth, 2); + + if( !aSeconds ) + { + aResourceId = R_LOC_NOTIFICATION_MINUTES; + aPeriodString.Num(aSeconds); + return; + } + + TReal hrs = TReal(aSeconds)/KHrToSecs; + TReal value; + if( hrs < 1 ) + { + TReal mins = TReal(aSeconds)/KMinToSecs; + aResourceId = R_LOC_NOTIFICATION_MINUTES; + Math::Round( value, mins, 2 ); + aPeriodString.Num(value, fmt); + } + else if( hrs == 1 ) + { + aResourceId = R_LOC_NOTIFICATION_ONEHOUR; + } + else + { + TReal days = TReal(aSeconds)/KdayToSecs; + if( days < 1 ) + { + aResourceId = R_LOC_NOTIFICATION_HOURS; + Math::Round( value, hrs, 2 ); + aPeriodString.Num(value, fmt); + } + else if( days == 1 ) + { + aResourceId = R_LOC_NOTIFICATION_ONEDAY; + } + else + { + aResourceId = R_LOC_NOTIFICATION_DAYS; + Math::Round( value, days, 2 ); + aPeriodString.Num(value, fmt); + } + } + } + +// ----------------------------------------------------------------------------- +// CLpdPeriodicProcessor::HandleAssertErrorL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CLpdPeriodicProcessor::HandleAssertErrorL() const + { + #ifdef _DEBUG + User::Panic( KPanicText, KLpdErrGeneral ); + #else + User::Leave( KErrCorrupt ); + #endif + } +// end of file