alarmui/src/alarmremconeventshandler.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/src/alarmremconeventshandler.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,380 @@
+/*
+* Copyright (c) 2006 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:   This class takes care of accessory events that should be 
+*                handled in alarm.  I.e. stopping alarm using accessory end key.
+*
+*/
+
+
+
+#include "alarmremconeventshandler.h"
+
+#include "AlmAlarmControl.h"
+#include <remconinterfaceselector.h>
+#include <RemConCallHandlingTarget.h>
+#include <RemConExtensionApi.h>
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+CAlarmRemConEventsHandler* CAlarmRemConEventsHandler::NewL(CAlmAlarmControl& aAlarmUI)
+    {
+    TRACE_ENTRY_POINT;
+    CAlarmRemConEventsHandler* self = new( ELeave )CAlarmRemConEventsHandler( aAlarmUI );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    TRACE_EXIT_POINT;
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+CAlarmRemConEventsHandler::~CAlarmRemConEventsHandler()
+    {
+    TRACE_ENTRY_POINT;
+    // cancel the AO and delete all data
+    Cancel();
+    Cleanup();
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// from base class CActive
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::DoCancel()
+    {
+    TRACE_ENTRY_POINT;
+    Cleanup();
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// from base class CActive
+// ---------------------------------------------------------------------------
+//
+TInt CAlarmRemConEventsHandler::RunError(TInt /*aError*/)
+    {
+    TRACE_ENTRY_POINT;
+    Cleanup();
+    TRACE_EXIT_POINT;
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// from base class CActive
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::RunL()
+    {
+    TRACE_ENTRY_POINT;
+    TBool sendResponse( EFalse );
+
+    switch( iState )
+        {
+        case EStateIdle:
+        case EStateWaitingCommand:
+            // do nothing
+            break;
+
+        case EStateHandleEndCallCommand:
+            {
+            // stop the alarm after sending the response
+            iState = EStateStopAlarm;
+            sendResponse = ETrue;
+            }
+            break;
+
+        case EStateIgnoreCommand:
+            {
+            // command was ignored, keep waiting for more commands
+            iState = EStateWaitingCommand;
+            sendResponse = ETrue;
+            }
+            break;
+
+        case EStateStopAlarm:
+            {
+            // stop the alarm and keep waiting for more commands
+            iState = EStateWaitingCommand;
+            iAlarmUI.ExternalStopAlarm();
+            }
+            break;
+
+        default:
+            {
+            ASSERT( EFalse );
+            }
+        }
+
+    if( sendResponse )
+        {
+        // send the response
+        TInt status = iStatus.Int();
+        SetActive();
+        iRemConCallHandlingTarget->SendResponse( iStatus, iRemConOperationID, status );
+        }
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// From MRemConCallHandlingTargetObserver.
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::EndCall()
+    {
+    TRACE_ENTRY_POINT;
+    HandleRemConCommand( ERemConExtEndCall );
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// From MRemConCallHandlingTargetObserver.
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::AnswerEndCall()
+    {
+    TRACE_ENTRY_POINT;
+    HandleRemConCommand( ERemConExtAnswerEnd );
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// From MRemConCallHandlingTargetObserver.
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::AnswerCall()
+    {
+    TRACE_ENTRY_POINT;
+    HandleRemConCommand( ERemConExtAnswerCall );
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// From MRemConCallHandlingTargetObserver.
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::VoiceDial(const TBool /*aActivate*/)
+    {
+    TRACE_ENTRY_POINT;
+    HandleRemConCommand( ERemConExtVoiceDial );
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// From MRemConCallHandlingTargetObserver.
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::LastNumberRedial()
+    {
+    TRACE_ENTRY_POINT;
+    HandleRemConCommand( ERemConExtLastNumberRedial );
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// From MRemConCallHandlingTargetObserver.
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::DialCall(const TDesC8& /*aTelNumber*/)
+    {
+    TRACE_ENTRY_POINT;
+    HandleRemConCommand( ERemConExtDialCall );
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// From MRemConCallHandlingTargetObserver.
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::MultipartyCalling(const TDesC8& /*aData*/)
+    {
+    TRACE_ENTRY_POINT;
+    HandleRemConCommand( ERemConExt3WaysCalling );
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// From MRemConCallHandlingTargetObserver.
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::GenerateDTMF(const TChar /*aChar*/)
+    {
+    TRACE_ENTRY_POINT;
+    HandleRemConCommand( ERemConExtGenerateDTMF );
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// From MRemConCallHandlingTargetObserver.
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::SpeedDial(const TInt /*aIndex*/)
+    {
+    TRACE_ENTRY_POINT;
+    HandleRemConCommand( ERemConExtSpeedDial );
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CAlarmRemConEventsHandler::CAlarmRemConEventsHandler(CAlmAlarmControl& aAlarmUI)
+: CActive( CActive::EPriorityStandard ),
+  iState( EStateIdle ),
+  iRemConOperationID( -1 ),
+  iAlarmUI( aAlarmUI )
+    {
+    TRACE_ENTRY_POINT;
+    /** no implementation **/
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::ConstructL()
+    {
+    TRACE_ENTRY_POINT;
+    CActiveScheduler::Add( this );
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::HandleRemConCommand(TInt aCommand)
+    {
+    TRACE_ENTRY_POINT;
+    ASSERT( iState == EStateWaitingCommand && IsAdded() && !IsActive() );
+
+    // there shouldn't be new commands while we're still handling the previous one
+    if( iState == EStateWaitingCommand )
+        {
+        iRemConOperationID = aCommand;
+
+        switch( iRemConOperationID )
+            {
+            case ERemConExtEndCall:
+            case ERemConExtAnswerEnd:
+                // handle message (stop the alarm)
+                iState = EStateHandleEndCallCommand;
+                break;
+
+            case ERemConExtAnswerCall:
+            case ERemConExtVoiceDial:
+            case ERemConExtLastNumberRedial:
+            case ERemConExtDialCall:
+            case ERemConExt3WaysCalling:
+            case ERemConExtGenerateDTMF:
+            case ERemConExtSpeedDial:
+                // no event handling...just send the response
+                iState = EStateIgnoreCommand;
+                break;
+
+            default:
+                ASSERT( EFalse );
+            }
+        // start the AO
+        CompleteSelf();
+        }
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::CompleteSelf()
+    {
+    TRACE_ENTRY_POINT;
+    TRequestStatus* pStat = &iStatus;
+    User::RequestComplete( pStat, KErrNone );
+
+    if( IsAdded() && !IsActive() )
+        {
+        SetActive();
+        }
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::StartL()
+    {
+    TRACE_ENTRY_POINT;
+    if( !iRemConInterfaceSelector && !iRemConCallHandlingTarget )
+        {
+        // create the RemCon interface selector
+        CRemConInterfaceSelector* selector = CRemConInterfaceSelector::NewL();
+        CleanupStack::PushL( selector );
+
+        // create the RemCon target
+        CRemConCallHandlingTarget* target = CRemConCallHandlingTarget::NewL( *selector, *this );
+        CleanupStack::PushL( target );
+
+        // open a target session to RemCon
+        selector->OpenTargetL();
+        CleanupStack::Pop( 2, selector );
+
+        // RemCon initialisation ok
+        iRemConCallHandlingTarget = target;
+        iRemConInterfaceSelector = selector;
+
+        iState = EStateWaitingCommand;
+        }
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::Stop()
+    {
+    TRACE_ENTRY_POINT;
+    Cancel();
+    Cleanup();
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CAlarmRemConEventsHandler::Cleanup()
+    {
+    TRACE_ENTRY_POINT;
+    iState = EStateIdle;
+    iRemConOperationID = -1;
+    iRemConCallHandlingTarget = NULL; // owned by iRemConInterfaceSelector
+    delete iRemConInterfaceSelector;
+    iRemConInterfaceSelector = NULL;
+    TRACE_EXIT_POINT;
+    }
+
+
+// End of File