alarmui/inc/alarmremconeventshandler.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 10:12:19 +0200
changeset 0 f979ecb2b13e
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* 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.
 *
*/



#ifndef CALARMREMCONEVENTSHANDLER_H
#define CALARMREMCONEVENTSHANDLER_H

// INCLUDES
#include <RemConCallHandlingTargetObserver.h>

// FORWARD DECLARATIONS
class CRemConCallHandlingTarget;
class CRemConInterfaceSelector;
class CAlmAlarmControl;

/**
 *  Stop alarm using accessory.
 *
 *  CAlarmRemConEventsHandler listens for EndCall and AnswerEndCall
 *  commands from an accessory and stops the alarm if its active.
 *
 *  @lib AknAlarmService
 *  @since S60 v3.2
 */
NONSHARABLE_CLASS( CAlarmRemConEventsHandler ) : public CActive, 
                                                 public MRemConCallHandlingTargetObserver
    {
public:

    enum TState
        {
        EStateIdle                 = 0, // not listening for commands, no active AOs
        EStateWaitingCommand       = 1, // wait for a command to activate the AO
        EStateHandleEndCallCommand = 2, // stop the alarm
        EStateStopAlarm            = 3, // stop the alarm and return to EStateWaitingCommand state
        EStateIgnoreCommand        = 4  // just send the response and keep waiting for more commands
        };

    static CAlarmRemConEventsHandler* NewL(CAlmAlarmControl& aAlarmUI);
    virtual ~CAlarmRemConEventsHandler();

// from base class CActive
    void DoCancel();
    TInt RunError(TInt aError);
    void RunL();

// from base class MRemConCallHandlingTargetObserver
    /**
    * From MRemConCallHandlingTargetObserver.
    * End an incoming/ongoing phone call.
    * Used to stop an active alarm.
    *
    * @since S60 v3.2
    **/
    void EndCall();

    /**
    * From MRemConCallHandlingTargetObserver.
    * End an incoming/ongoing phone call.
    * Used to stop an active alarm.
    *
    * @since S60 v3.2
    **/
    void AnswerEndCall();

    /**
    * From MRemConCallHandlingTargetObserver.
    * The following functions are not used by alarm.
    *
    * @since S60 v3.2
    **/
    void AnswerCall();
    void VoiceDial(const TBool aActivate);
    void LastNumberRedial();
    void DialCall(const TDesC8& aTelNumber);
    void MultipartyCalling(const TDesC8& aData);
    void GenerateDTMF(const TChar aChar);
    void SpeedDial(const TInt aIndex);

// new functions
    /**
    * Start observing accessory commands.
    * 
    * @since S60 v3.2
    **/
    void StartL();

    /**
    * Stop observing accessory commands.
    * 
    * @since S60 v3.2
    **/
    void Stop();

private:
    /**
    * Hidden default constructor.
    **/
    CAlarmRemConEventsHandler(CAlmAlarmControl& aAlarmUI);

    void ConstructL();

    void HandleRemConCommand(TInt aCommand);

    void CompleteSelf();

    /**
    * Reset state and delete all data.
    * 
    * @since S60 v3.2
    **/
    void Cleanup();

private: // data
    /**
    * CRemConInterfaceSelector for the iRemConCallHandlingTarget.
    * Own.
    **/
    CRemConInterfaceSelector* iRemConInterfaceSelector;

    /**
    * CRemConCallHandlingTarget deliveres call handling related 
    * operations from accessories to client that listens to them.
    * iRemConInterfaceSelector takes the resposibility.
    * Not own.
    **/
    CRemConCallHandlingTarget* iRemConCallHandlingTarget;

    /**
    * State of the OA.
    **/
    TState iState;

    /**
    * Id of the RemCon command we are currently handling.
    **/
    TInt iRemConOperationID;

    /**
    * Reference to the Alarm UI class.
    **/
    CAlmAlarmControl& iAlarmUI;

    };

#endif // CALARMREMCONEVENTSHANDLER_H


// End of File