--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/cphoneincallindicator.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,311 @@
+/*
+* 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: Incall indicator.
+*
+*/
+
+
+// INCLUDE FILES
+#include <ctsydomainpskeys.h>
+#include <AknIncallBubbleNotify.h>
+#include <avkon.hrh>
+
+#include "cphoneincallindicator.h"
+#include "cphonerecoverysystem.h"
+#include "tphonecmdparamboolean.h"
+#include "tphonecmdparamincallindicatordata.h"
+#include "phonelogger.h"
+#include "phonerssbase.h"
+#include "cphonepubsubproxy.h"
+
+// CONSTANTS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::CPhoneIncallIndicator
+// ---------------------------------------------------------
+//
+CPhoneIncallIndicator::CPhoneIncallIndicator()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::~CPhoneIncallIndicator
+// ---------------------------------------------------------
+//
+CPhoneIncallIndicator::~CPhoneIncallIndicator()
+ {
+ CPhoneRecoverySystem::Remove( iUpdateRecoveryId );
+
+ delete iBubble;
+ delete iUpdater;
+ }
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::NewL
+// ---------------------------------------------------------
+//
+CPhoneIncallIndicator* CPhoneIncallIndicator::NewL()
+ {
+ CPhoneIncallIndicator* self = new ( ELeave ) CPhoneIncallIndicator();
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::ConstructL
+// ---------------------------------------------------------
+//
+void CPhoneIncallIndicator::ConstructL()
+ {
+ iBubble = CAknIncallBubble::NewL();
+ iUpdater = CIdle::NewL( CActive::EPriorityHigh );
+ iUpdater->Start( TCallBack( DoUpdate, this ) );
+
+ iUpdateRecoveryId = CPhoneRecoverySystem::Instance()->AddL(
+ TCallBack( DoRecoverUpdateL, this ),
+ CTeleRecoverySystem::EPhonePriorityStandard,
+ CTeleRecoverySystem::EPhoneStateIdle );
+ }
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::Update
+//
+// Shows the incall indicator according to current call state.
+// ---------------------------------------------------------
+//
+void CPhoneIncallIndicator::Update(
+ TPhoneCommandParam* aCommandParam )
+ {
+ TPhoneCmdParamIncallIndicatorData* incallIndicatorParam =
+ static_cast<TPhoneCmdParamIncallIndicatorData*>( aCommandParam );
+
+ iCallState = incallIndicatorParam->CallState();
+ iMode = incallIndicatorParam->Mode();
+ iMuted = incallIndicatorParam->Mute();
+ iCipheringOff = !incallIndicatorParam->Ciphering();
+ iCipheringIndicatorAllowed =
+ incallIndicatorParam->CipheringIndicatorAllowed();
+ iEmergency = incallIndicatorParam->Emergency();
+ iLine2 = incallIndicatorParam->Line2();
+ iVisible = incallIndicatorParam->LittleBubbleVisible();
+
+ Update();
+ }
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::HandleMuteChange
+// ---------------------------------------------------------
+//
+void CPhoneIncallIndicator::HandleMuteChange(
+ TPhoneCommandParam* aCommandParam )
+ {
+ TPhoneCmdParamBoolean* booleanParam =
+ static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
+
+ iMuted = booleanParam->Boolean();
+
+ Update();
+ }
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::HandleCipheringChange
+// ---------------------------------------------------------
+//
+void CPhoneIncallIndicator::HandleCipheringChange(
+ TPhoneCommandParam* aCommandParam )
+ {
+ TPhoneCmdParamBoolean* booleanParam =
+ static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
+
+ iCipheringOff = booleanParam->Boolean();
+
+ Update();
+ }
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::Update
+//
+// Updates incall indicator according to current call state.
+// ---------------------------------------------------------
+//
+void CPhoneIncallIndicator::Update()
+ {
+ TInt state = KPhoneIncallIndicatorDefaultValue;
+ TBool sync = ETrue;
+
+ // Put base value appropriate to the state.
+ switch ( iCallState )
+ {
+ case EPSCTsyCallStateDialling:
+ state = EAknStatusBubbleActive;
+ break;
+
+ case EPSCTsyCallStateRinging:
+ case EPSCTsyCallStateAlerting:
+ case EPSCTsyCallStateAnswering:
+ state = EAknStatusBubbleAlerting;
+ sync = EFalse;
+ break;
+
+ case EPSCTsyCallStateConnected:
+ state = EAknStatusBubbleActive;
+ if ( iEmergency )
+ {
+ state |= EAknStatusBubbleEmergency;
+ }
+ break;
+
+ case EPSCTsyCallStateHold: // Held
+ state = EAknStatusBubbleOnHold;
+ break;
+
+ case EPSCTsyCallStateDisconnecting:
+ state = EAknStatusBubbleDisconnected;
+ break;
+
+ case EPSCTsyCallStateUninitialized:
+ case EPSCTsyCallStateNone:
+ iVisible = EFalse;
+ break;
+
+ default:
+ break;
+ }
+
+ // Put call mode flag if necessary.
+ switch ( iMode )
+ {
+ case EPSCTsyCallTypeFax:
+ state |= EAknStatusBubbleFax;
+ break;
+
+ case EPSCTsyCallTypeData:
+ case EPSCTsyCallTypeHSCSD:
+ state |= EAknStatusBubbleData;
+ break;
+ case EPSCTsyCallTypeH324Multimedia:
+ state |= EAknStatusBubbleVideo;
+ break;
+ case EPSCTsyCallTypeVoIP:
+ state |= EAknStatusBubbleVoIP;
+ break;
+ case EPSCTsyCallTypeNone:
+ case EPSCTsyCallTypeCSVoice:
+ default:
+ break;
+ }
+
+ if ( iMuted )
+ {
+ state |= EAknStatusBubbleMuted;
+ }
+
+ if ( iCipheringOff && iCipheringIndicatorAllowed )
+ {
+ state |= EAknStatusBubbleNoCiphering;
+ }
+
+ if ( iLine2 )
+ {
+ state |= EAknStatusBubbleLine2;
+ }
+
+ if ( iVisible )
+ {
+ state |= EAknStatusBubbleVisible;
+ }
+
+ SetState( state, sync );
+ }
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::SetState
+//
+// Modify only if needed.
+// ---------------------------------------------------------
+//
+void CPhoneIncallIndicator::SetState(
+ TInt aState,
+ TBool aSync )
+ {
+ if ( !aSync )
+ {
+ if ( aState != iState )
+ {
+ iState = aState;
+
+ if ( !iUpdater->IsActive() )
+ {
+ iUpdater->Start( TCallBack( DoUpdate, this ) );
+ }
+ }
+ }
+ else
+ {
+ if ( aState != iState || iUpdater->IsActive() )
+ {
+ iState = aState;
+ UpdateWithRecovery();
+ iUpdater->Cancel();
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::UpdateWithRecovery
+// ---------------------------------------------------------
+//
+void CPhoneIncallIndicator::UpdateWithRecovery()
+ {
+ CPhoneRecoverySystem::Instance()->RecoverNow(
+ iUpdateRecoveryId,
+ CTeleRecoverySystem::EPhonePriorityStandard );
+ }
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::DoRecoverUpdateL
+//
+// Callback function.
+// ---------------------------------------------------------
+//
+TInt CPhoneIncallIndicator::DoRecoverUpdateL( TAny* aAny )
+ {
+ CPhoneIncallIndicator* ind = static_cast<CPhoneIncallIndicator*>( aAny );
+
+ ind->iBubble->SetIncallBubbleFlagsL( ind->iState );
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CPhoneIncallIndicator::DoUpdate
+//
+// Callback function.
+// ---------------------------------------------------------
+//
+TInt CPhoneIncallIndicator::DoUpdate( TAny* aAny )
+ {
+ static_cast<CPhoneIncallIndicator*>( aAny )->UpdateWithRecovery();
+
+ return KErrNone;
+ }
+
+// End of File
+