locationsystemui/locationsysui/locverifier/src/lpdperiodicprocessor.cpp
changeset 0 667063e416a2
--- /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 <eikenv.h>
+#include <StringLoader.h>
+#include <locverifierdlg.rsg>
+#include <aknmessagequerydialog.h>
+#include <epos_csuplsettingsconstants.h>
+#include <e32math.h>
+#include <badesca.h>
+#include <aknconsts.h>
+#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<CLpdPeriodicProcessor*>(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<KRealWidth> 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