--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdui/src/CMIDCallIndicator.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,242 @@
+/*
+* Copyright (c) 2008-2008 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: ?Description
+*
+*/
+
+
+#include <e32base.h>
+//using CTelephony class
+#include <etel3rdparty.h>
+#include "CMIDCallIndicator.h"
+//using CMIDCanvas class - needed for CMIDNetworkIndicator
+#include "CMIDCanvas.h"
+//using CMIDNetworkIndicator class - iNetworkIndicator
+#include "CMIDNetworkIndicator.h"
+#include <j2me/jdebug.h>
+
+/**
+ * Constructor. Defines the priority for this active object and adds him to AS.
+ */
+CMIDCallIndicator::CMIDCallIndicator(
+ CMIDNetworkIndicator *aNetworkIndicator):
+ CActive(EPriorityStandard)
+ , iNetworkIndicator(aNetworkIndicator)
+ , iLineStatusPckg(iLineStatus)
+{
+ iNetworkIndicator->SetCallIndicator(this);
+ CActiveScheduler::Add(this);
+}
+
+/**
+ * Two-phased constructor.
+ */
+CMIDCallIndicator* CMIDCallIndicator::NewL(
+ CMIDNetworkIndicator *aNetworkIndicator)
+{
+ DEBUG(">>> CMIDCallIndicator::NewL");
+ CMIDCallIndicator* self = CMIDCallIndicator::NewLC(aNetworkIndicator);
+ CleanupStack::Pop(self);
+ DEBUG("<<< CMIDCallIndicator::NewL");
+ return self;
+}
+
+/**
+ * Two-phased constructor.
+ */
+CMIDCallIndicator* CMIDCallIndicator::NewLC(
+ CMIDNetworkIndicator *aNetworkIndicator)
+{
+ CMIDCallIndicator* self = new(ELeave) CMIDCallIndicator(
+ aNetworkIndicator);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+}
+
+/**
+ * 2nd phase constructor.
+ */
+void CMIDCallIndicator::ConstructL()
+{
+ iTelephony = CTelephony::NewL();
+ Init();
+}
+
+/**
+ * Destructor.
+ */
+CMIDCallIndicator::~CMIDCallIndicator()
+{
+ DEBUG(">>> CMIDCallIndicator::~CMIDCallIndicator");
+ Cancel();
+ delete iTelephony;
+ DEBUG("<<< CMIDCallIndicator::~CMIDCallIndicator");
+}
+
+/**
+ * Activates the AO and register for notification by the CTelephony
+ */
+void CMIDCallIndicator::SetActiveLocal()
+{
+ // XXX DEBUG(">>> CMIDCallIndicator::SetActiveLocal");
+ if (!this->IsActive())
+ {
+ iTelephony->NotifyChange(iStatus,
+ CTelephony::EVoiceLineStatusChange,
+ iLineStatusPckg);
+ SetActive();
+ }
+ // XXX DEBUG("<<< CMIDCallIndicator::SetActiveLocal");
+}
+
+/**
+ * Finds out if call is ongoing when opening canvas and sets members.
+ */
+void CMIDCallIndicator::Init()
+{
+ CTelephony::TPhoneLine line = CTelephony::EVoiceLine;
+
+ iTelephony->GetLineStatus(line, iLineStatusPckg);
+
+ if (CallInProgress(iLineStatus.iStatus))
+ {
+ // Call in progress, show call indicator.
+ TRAPD(ignoreError,
+ iNetworkIndicator->CreateNetworkResourceL(EBearerInfoCSD, 0));
+ if (ignoreError != KErrNone)
+ { // Leave is ignored. It is not so important to pass leave only
+ // because the icon wasnt created.
+ DEBUG_INT("CMIDCallIndicator::SetActiveLocal - Exception from CreateNetworkResourceL. Error = %d", ignoreError);
+ }
+ iNetworkIndicator->Repaint();
+ iView = ETrue;
+ }
+ else
+ {
+ iLineStatus.iStatus = CTelephony::EStatusUnknown;
+ iView = EFalse;
+ }
+}
+
+/*
+* Check the call status. If there is call established
+* return true orwise return false.
+*
+* @param aCallStatus call status.
+* @return ETrue if calling else EFalse.
+*/
+TBool CMIDCallIndicator::CallInProgress(CTelephony::TCallStatus aCallStatus)
+{
+ switch (aCallStatus)
+ {
+ case CTelephony::EStatusDialling:
+ case CTelephony::EStatusRinging:
+ case CTelephony::EStatusAnswering:
+ case CTelephony::EStatusConnecting:
+ case CTelephony::EStatusConnected:
+ case CTelephony::EStatusReconnectPending:
+ case CTelephony::EStatusDisconnecting:
+ case CTelephony::EStatusHold:
+ case CTelephony::EStatusTransferring:
+ case CTelephony::EStatusTransferAlerting:
+ {
+ return ETrue; // call is in progress
+ }
+ case CTelephony::EStatusIdle:
+ case CTelephony::EStatusUnknown:
+ default:
+ {
+ return EFalse; // no active call
+ }
+ }
+}
+
+/**
+ * Returns the call activity.
+ *
+ * @return Member iView. ETrue when active call indicator is shown = call
+ * is ongoing and EFalse otherwise.
+ */
+TBool CMIDCallIndicator::GetCallActivity()
+{
+ return iView;
+}
+
+/**
+ * From CActive.
+ */
+void CMIDCallIndicator::RunL()
+{
+ DEBUG(">>> CMIDCallIndicator::RunL");
+
+ TBool callOn = CallInProgress(iLineStatus.iStatus);
+
+ if (!iView && callOn)
+ {
+ // Draw active call indicator because the call just started.
+ // Create the network resource.
+ // XXX DEBUG("CMIDCallIndicator::RunL() -Newcall");
+ TRAPD(ignoreError,
+ iNetworkIndicator->CreateNetworkResourceL(EBearerInfoCSD, 0));
+ if (ignoreError != KErrNone)
+ { // Leave is ignored. It is not so important to pass leave only
+ // because the icon wasnt created.
+ DEBUG_INT("CMIDCallIndicator::SetActiveLocal - Exception from CreateNetworkResourceL. Error = %d", ignoreError);
+ }
+ iView = ETrue;
+ // Repaints the indicator
+ iNetworkIndicator->Repaint(ETrue);
+ }
+ else if (iView && !callOn)
+ {
+ // XXX DEBUG("CMIDCallIndicator::RunL() -Idle/unknown - iView=ETrue >>>");
+ // Call just ended. Clean the bitmap. Fill it with network indicator
+ // stored in temp bitmaps only if the network connection is active.
+ // Used to repaints the active call indicator with network indicator
+ // immediately after the call ends.
+ iNetworkIndicator->CleanNetworkResource();
+ if (iNetworkIndicator->IsNetworkActive())
+ {
+ // There is active network connection, show its indicator.
+ // XXX DEBUG("CMIDCallIndicator::RunL() -Network is active - copybitmaps");
+ iNetworkIndicator->CopyBitmaps();
+ iNetworkIndicator->ResizeBitmap();
+ }
+ iView = EFalse;
+ iNetworkIndicator->Repaint(ETrue);
+ // XXX DEBUG("CMIDCallIndicator::RunL() -Idle/unknown - iView=ETrue <<<");
+ }
+ // Set active to get next voice line status change.
+ SetActiveLocal();
+ DEBUG("<<< CMIDCallIndicator::RunL");
+}
+
+/**
+ * From CActive.
+ */
+TInt CMIDCallIndicator::RunError(TInt anError)
+{
+ return anError;
+}
+
+/**
+ * From CActive.
+ */
+void CMIDCallIndicator::DoCancel()
+{
+ // The EVoiceLineStatusChange cancellation code.
+ iTelephony->CancelAsync(CTelephony::EVoiceLineStatusChangeCancel);
+}
+