gssettingsuis/Gs/GSCallDivertPlugin/Inc/GSCallDivertModel.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:52 +0200
changeset 0 8c5d936e5675
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 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:  Model for call divert functionality. Tries to encapsulate
*                 most of hw/engine related functionality from UI components.
*
*/

#ifndef CGSCALLDIVERTMODEL_H_
#define CGSCALLDIVERTMODEL_H_


#include <data_caging_path_literals.hrh>
#include "CallDivertPlugin.hrh"

#include <etelmm.h>
#include <nwdefs.h>
#include <e32base.h>


// Forward declarations:
class CPsetCallDiverting;
class CPsetContainer;
class CPsuiContainer;
class CPsuiDivertObs;
class CPhCltUssd;
class RSSSettings;
class CPbkContactEngine;
class CGSCallDivertView;
class CRepository;

class CGSCallDivertModel : public CBase
    {
    public:

        /**
        * Symbian OS two-phase Constructor
        * @return
        */
        static CGSCallDivertModel* NewL ( );

        /**
        * Destructor
        */
        virtual ~CGSCallDivertModel ( );

    public: // Functions

       /**
       * Send call divert request.
       * @param aCallDivertSetting Data used for call divert.
       * @param aInfo Defines the precise action.
       * @param aVmbxDivert ETrue if voice mailbox is used as divert number.
       * @param aCommand This is for CancelAll command.
       */
       void SendCallDivertRequestL(
           TCallDivertSetting& aCallDivertSetting,
           RMobilePhone::TMobilePhoneServiceAction aInfo,
           TBool& aVmbxDivert,
           TInt aCommand,
           TGSCallDivertServices aService );

        /**
        * Handles attempts to divert to voicemail box.
        * @param aTelNumber telephone number of the voicemail box
        * @return KErrNone on success, otherwise KErrCancel
        */
        TInt VoiceMailActivationL( TDes& aTelNumber );

        /**
        * Handles attempts to divert to videomail box.
        * @param aTelNumber telephone number of the videomail box
        * @return KErrNone on success, otherwise KErrCancel
        */
        TInt VideoMailActivationL( TDes& aTelNumber );

        /**
        * Handles attempts to check divert status in restricted
        * mode (KFeatureIdRestrictedCallDivert).
        */
        void CheckStatusRestrictedCallDivertL();

        /**
        * Handles attempts to cancel call divert restricted
        * mode (KFeatureIdRestrictedCallDivert).
        */
        void CancelRestrictedCallDivertL();

        /**
        * Returns the contact name matching the number, or the number if
        * no contact name is found.
        * Pushes the found (i.e. returned) name into CleanupStack.
        * @param aTelNum number on which to base the fetch.
        * @return Pointer to contact name
        */
        HBufC* MatchNumberToContactLC( const TDesC& aTelNum );

        /**
        * @ return Reference to divert handling engine. Does NOT transfer
        *          ownership.
        */
        CPsetCallDiverting* DivertHandler();

        /**
        * @param aView Reference to call divert view. Does NOT transfer
        *        ownership.
        */
        void SetDivertView( CGSCallDivertView* aDivertView );

        /**
        * @return Currently selected divert service group.
        */
        TGSCallDivertServiceGroups DivertServiceGroup();

        /**
        * Sets new divert service group. Voice/Data/Fax...
        * See TGSCallDivertServiceGroups
        * @param aDivertServiceGroup New divert service group.
        */
        void SetDivertServiceGroup(
            TGSCallDivertServiceGroups aDivertServiceGroup );

        /**
        * Checks number grouping feature from central repository.
        * @return ETrue  - Feature supported.
        *         EFalse - Feature not supported.
        */
        TBool NumberGroupingSupportedL();

    private: // Functions

        /**
        * Symbian OS default constructor
        */
        void ConstructL ( );

        /**
        *  C++ Constructor
        */
        CGSCallDivertModel ( );

        /**
        * Handles attempts to activate call divert in restricted
        * mode (KFeatureIdRestrictedCallDivert).
        */
        void ActivateRestrictedCallDivertL( TTelNumber& aDivertNumber );

        /**
        * Sets parameters for calling Phone Settings' method.
        */
        void SetDivertParametersL( TCallDivertSetting& aDivert,
                                   TBasicServiceGroups& aBsc,
                                   TGSCallDivertServices aService,
                                   TGSCallDivertServiceGroups aServiceGroup );

        /**
        * Uses the phonesettings-module.
        *
        * @param aDivert gives required information such as number,
        *                timervalue, status etc
        * @param aInfo   defines the precise action
        * @param aVmbxValidNumber divert is to a voicemail box number
        * @param aCommand this is for CancelAll command
        */
        void EngineOperatorL( TCallDivertSetting& aDivert,
            const RMobilePhone::TMobilePhoneServiceAction & aInfo,
            TBool& aVmbxValidNumber,
            TInt aCommand,
            TGSCallDivertServices aService,
            TGSCallDivertServiceGroups aServiceGroup );

        /**
        * Removes special chars ('*','+','p','w' and '#') from VMBX number.
        */
        static void RemoveSpecialChar(
            TDes& aVmbxNumber,
            const TDesC& aSpecChar );


    private: // Member variables

        // Selected call divert group. Selected from the main view. Value is
        // stored here as is accessed by several components.
        TGSCallDivertServiceGroups iDivertServiceGroup;

        // PhoneSettings engine object for diverts
        CPsetCallDiverting* iForward;

        // PhoneSettings container
        CPsetContainer*     iSettings;

        // PSUI container
        CPsuiContainer*     iObsContainer;

        // Shows PSUI notes
        CPsuiDivertObs*     iCfObserver;

        // Sending with notes
        CPhCltUssd* iBasicClient;

        // For fetching line in use info
        RSSSettings* iSsSettings;

        // Contact engine for retrieving contact numbers
        CPbkContactEngine*  iContactEngine;

        // Reference to call divert view. NOT owned.
        CGSCallDivertView* iDivertView;

        // Repository for number grouping run time variation.
        CRepository* iNumberGroupingRepository;
    };

#endif /*CGSCALLDIVERTMODEL_H_*/