--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/AppSrc/CLogsCtAdapter.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,389 @@
+/*
+* 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:
+* Adaptor to EventList, copies data from model listbox
+*
+*/
+
+
+// INCLUDE FILES
+#include <eikenv.h>
+
+#include <Logs.rsg>
+#include <AknUtils.h> // AknTextUtils
+
+#include "CLogsCtAdapter.h"
+#include "MLogsSharedData.h"
+
+#include "MLogsCallStatus.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+_LIT(KFormat,"%02d%c%02d%c%02d");
+_LIT(KActiveCallIcon,"0");
+_LIT(KLastCallIcon,"1");
+_LIT(KDialledCallIcon,"2");
+_LIT(KReceivedCallIcon,"3");
+_LIT(KAllCallIcon,"4");
+_LIT(KTab,"\t");
+const TInt KTimeLen = 20; //Same as in CCtControlContainer.cpp
+const TInt KMaxValueOfTheTimer = 359999;
+const TInt KCtAdapterMdcaCount = 4;
+_LIT(KPanicMsg,"CLogsCtAdapter");
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+
+
+// ----------------------------------------------------------------------------
+// LanguageConversionAndAppend
+//
+// Static
+// ----------------------------------------------------------------------------
+//
+TInt LanguageConversionAndAppend(
+ HBufC* aBuffer,
+ TDes& aDestDes )
+ {
+ TPtr ptr = aBuffer->Des();
+
+ AknTextUtils::LanguageSpecificNumberConversion(ptr);
+ if( ptr.Length() > aDestDes.MaxLength() )
+ {
+ aDestDes.Append( ptr.Left( aDestDes.MaxLength() ) );
+ return KErrOverflow;
+ }
+ aDestDes.Append( ptr );
+ return KErrNone;
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::NewL
+// ----------------------------------------------------------------------------
+//
+CLogsCtAdapter* CLogsCtAdapter::NewL(
+ MLogsSharedData* aSharedData,
+ const TAlsEnum& aSelectedAlsLine,
+ MLogsCallStatus& aCallStatus )
+ {
+ CLogsCtAdapter* self = new( ELeave )
+ CLogsCtAdapter(
+ aSharedData,
+ aSelectedAlsLine,
+ aCallStatus);
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::CLogsCtAdapter
+// ----------------------------------------------------------------------------
+//
+CLogsCtAdapter::CLogsCtAdapter(
+ MLogsSharedData* aSharedData,
+ const TAlsEnum& aSelectedAlsLine,
+ MLogsCallStatus& aCallStatus) :
+ iSharedData( aSharedData ),
+ iSelectedAlsLine( aSelectedAlsLine ),
+ iCallStatus( aCallStatus )
+ {
+ }
+
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CLogsCtAdapter::ConstructL()
+ {
+ CEikonEnv* env = CEikonEnv::Static();
+
+ iActiveCallText = env->AllocReadResourceL( R_AOCCT_ACTIVE_CALL_TIMER_TEXT );
+ iLastCallText = env->AllocReadResourceL( R_AOCCT_LAST_CALL_TIMER_TEXT );
+ iDialledCallsText = env->AllocReadResourceL( R_AOCCT_DIALLED_CALLS_TIMER_TEXT );
+ iReceivedCallsText = env->AllocReadResourceL( R_AOCCT_RECEIVED_CALLS_TIMER_TEXT );
+ iAllCallsText = env->AllocReadResourceL( R_AOCCT_ALL_CALLS_TIMER_TEXT );
+ iActiveCallTime = HBufC::NewL (KTimeLen);
+ iLastCallTime = HBufC::NewL (KTimeLen);
+ iDialledCallsTime = HBufC::NewL (KTimeLen);
+ iReceivedCallsTime = HBufC::NewL (KTimeLen);
+ iAllCallsTime = HBufC::NewL (KTimeLen);
+
+ //These need to have non-zero initial values
+ iPreviousActiveTime = KErrNotFound;
+ iPreviousAllCallsTime = KErrNotFound;
+
+ //Local variation setting for showing/not showing active call duration
+ iShowCallDurationLogs = iSharedData->ShowCallDurationLogsL();
+ }
+
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::~CLogsCtAdapter
+// ----------------------------------------------------------------------------
+//
+CLogsCtAdapter::~CLogsCtAdapter()
+ {
+ delete iActiveCallText;
+ delete iLastCallText;
+ delete iDialledCallsText;
+ delete iReceivedCallsText;
+ delete iAllCallsText;
+ delete iActiveCallTime;
+ delete iLastCallTime;
+ delete iDialledCallsTime;
+ delete iReceivedCallsTime;
+ delete iAllCallsTime;
+
+ }
+
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::MdcaCount
+// ----------------------------------------------------------------------------
+//
+TInt CLogsCtAdapter::MdcaCount () const
+ {
+ return KCtAdapterMdcaCount;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::MdcaPoint
+// ----------------------------------------------------------------------------
+//
+TPtrC16 CLogsCtAdapter::MdcaPoint( TInt aIndex ) const
+ {
+ TDes& des = CONST_CAST( TBuf<KLogsCtAdapterLen>&,
+ iBuffer );
+ des.Zero();
+ switch( aIndex )
+ { // "0\tFirstLine\tSecondLine"
+ case 0:
+ {
+ TBool activeCall( EFalse );
+ iCallStatus.CallIsActive( activeCall );
+
+ //Local variation / active call duration:
+ //Show active call duration only if active call is ongoing and we are also requested to
+ // show the active call duration. Otherwise we show only the last ended call's duration
+ // also in cases in which we are in midst of one or more active call.
+ if( activeCall && iShowCallDurationLogs )
+ { // Call is active and we are requested to show active call duration
+ des.Append( KActiveCallIcon );
+ des.Append( KTab );
+ des.Append( *iActiveCallText );
+ des.Append( KTab );
+ LanguageConversionAndAppend( iActiveCallTime, des );
+ }
+ else
+ {
+ des.Append( KLastCallIcon );
+ des.Append( KTab );
+ des.Append( *iLastCallText );
+ des.Append( KTab );
+ LanguageConversionAndAppend( iLastCallTime, des );
+ }
+ break;
+ }
+ case 1:
+ des.Append( KDialledCallIcon );
+ des.Append( KTab );
+ des.Append( *iDialledCallsText );
+ des.Append( KTab );
+ LanguageConversionAndAppend( iDialledCallsTime, des );
+ break;
+ case 2:
+ des.Append( KReceivedCallIcon );
+ des.Append( KTab );
+ des.Append( *iReceivedCallsText );
+ des.Append( KTab );
+ LanguageConversionAndAppend( iReceivedCallsTime, des );
+ break;
+ case 3:
+ des.Append( KAllCallIcon );
+ des.Append( KTab );
+ des.Append( *iAllCallsText );
+ des.Append( KTab );
+ LanguageConversionAndAppend( iAllCallsTime, des );
+ break;
+ default:
+ User::Panic(KPanicMsg, KErrCorrupt);
+ break;
+ }
+
+ return iBuffer;
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::UpdateDataL
+// ----------------------------------------------------------------------------
+//
+TBool CLogsCtAdapter::UpdateDataL()
+ {
+ TBool retVal = ETrue; //By default indicate that a timer value has changed
+
+ TInt activeTime( ActiveTime() ); //Note! This retrieves only cellular call duration
+ TInt allCallstime( iSharedData->AllCallsTimer( iSelectedAlsLine, EVoipIncluded) );
+
+ //Format time to time strings
+ ToTimeFormat( activeTime, iActiveCallTime ); //Duration of active on-going call. NOTE! Only voice call supported
+ // as we don't get anywhere information of ongoing voip call status.
+
+ ToTimeFormat( iSharedData->LastCallTimer( //Duration of last already ended call (voice or voip)
+ iSelectedAlsLine, EVoipIncluded ), iLastCallTime );
+ ToTimeFormat( iSharedData->DialledCallsTimer(
+ iSelectedAlsLine, EVoipIncluded ), iDialledCallsTime );
+ ToTimeFormat( iSharedData->ReceivedCallsTimer(
+ iSelectedAlsLine, EVoipIncluded ), iReceivedCallsTime );
+ ToTimeFormat( allCallstime, iAllCallsTime );
+
+ //Check has any value changed. If active or all calls time has changed from previous call,
+ // then return true, otherwise false. KErrNotFound needed as initial values of members.
+ if( activeTime == iPreviousActiveTime && allCallstime == iPreviousAllCallsTime )
+ {
+ retVal = EFalse; //No value has changed after previous call of this function.
+ }
+
+ iPreviousActiveTime = activeTime;
+ iPreviousAllCallsTime = allCallstime;
+ return retVal;
+ }
+
+TInt CLogsCtAdapter::ActiveTime()
+ {
+ TTimeIntervalSeconds secondsInterval;
+ if( iCallStatus.ActiveCallDuration( secondsInterval ) ) //This retrieves only cellular call duration, see
+ { // CLogsCallStatus in CLogsMMECallStatus.cpp
+ return 0;
+ }
+ return secondsInterval.Int();
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::ToTimeFormat
+//
+// Converts seconds to proper time format
+// ----------------------------------------------------------------------------
+//
+void CLogsCtAdapter::ToTimeFormat(
+ TInt aSeconds,
+ HBufC* aText )
+ {
+ TLocale locale;
+
+ if( aSeconds > KMaxValueOfTheTimer )
+ {
+ TInt HowManyTimes( aSeconds / KMaxValueOfTheTimer );
+ aSeconds = aSeconds - HowManyTimes * KMaxValueOfTheTimer;
+ }
+
+ TInt seconds( aSeconds % 60 );
+ TInt hours( aSeconds / 3600 );
+ TInt minutes( ( aSeconds - hours * 3600 ) / 60 );
+ TInt hoursSeparator = locale.TimeSeparator( 1 );
+ TInt minuteSeparator = locale.TimeSeparator( 2 );
+
+ /// Localization of the time
+ TPtr ptr = aText->Des();
+
+ ptr.Format( KFormat, hours, hoursSeparator, minutes, minuteSeparator, seconds );
+
+ }
+
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::LastCallTimeStringL
+//
+// Functions to provide formatted call time strings for container (called from CCtControlContainer)
+// No need to call UpdateDataL() to get up-to-date values
+// ----------------------------------------------------------------------------
+//
+TInt CLogsCtAdapter::LastCallTimeStringL(
+ TDes& aDes,
+ const TAlsEnum& aSelectedLine,
+ const TVoipEnum aVoip )
+ {
+ HBufC* buf = HBufC::NewLC( KTimeLen );
+ ToTimeFormat( iSharedData->LastCallTimer( aSelectedLine, aVoip ), buf ); //Duration of last already ended call.
+ TInt ret = LanguageConversionAndAppend( buf, aDes );
+ CleanupStack::PopAndDestroy( buf );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::ReceivedCallsTimeStringL
+// ----------------------------------------------------------------------------
+//
+TInt CLogsCtAdapter::ReceivedCallsTimeStringL(
+ TDes& aDes,
+ const TAlsEnum& aSelectedLine,
+ const TVoipEnum aVoip )
+ {
+ HBufC* buf = HBufC::NewLC( KTimeLen );
+ ToTimeFormat( iSharedData->ReceivedCallsTimer( aSelectedLine, aVoip ), buf );
+ TInt ret = LanguageConversionAndAppend( buf, aDes );
+ CleanupStack::PopAndDestroy( buf );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::DialledCallsTimeStringL
+// ----------------------------------------------------------------------------
+//
+TInt CLogsCtAdapter::DialledCallsTimeStringL(
+ TDes& aDes,
+ const TAlsEnum& aSelectedLine,
+ const TVoipEnum aVoip )
+ {
+ HBufC* buf = HBufC::NewLC( KTimeLen );
+ ToTimeFormat( iSharedData->DialledCallsTimer( aSelectedLine, aVoip ), buf );
+ TInt ret = LanguageConversionAndAppend( buf, aDes );
+ CleanupStack::PopAndDestroy( buf );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsCtAdapter::AllCallsTimeStringL
+// ----------------------------------------------------------------------------
+//
+TInt CLogsCtAdapter::AllCallsTimeStringL(
+ TDes& aDes,
+ const TAlsEnum& aSelectedLine,
+ const TVoipEnum aVoip )
+ {
+ HBufC* buf = HBufC::NewLC( KTimeLen );
+ ToTimeFormat( iSharedData->AllCallsTimer( aSelectedLine, aVoip ), buf );
+ TInt ret = LanguageConversionAndAppend( buf, aDes );
+ CleanupStack::PopAndDestroy( buf );
+ return ret;
+ }
+
+
+
+
+// End of File