satengine/satserver/Commands/GetInputCmd/src/CGetInputHandler.cpp
author hgs
Fri, 03 Sep 2010 13:59:20 +0300
changeset 46 2fa1fa551b0b
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Handles GetInputCall command
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#include    "MSatApi.h"
hgs
parents:
diff changeset
    20
#include    "MSatUtils.h"
hgs
parents:
diff changeset
    21
#include    "MSatUiSession.h"
hgs
parents:
diff changeset
    22
#include    "MSatSystemState.h"
hgs
parents:
diff changeset
    23
#include    "SatSOpcodes.h"
hgs
parents:
diff changeset
    24
#include    "MSatSUiClientHandler.h"
hgs
parents:
diff changeset
    25
#include    "CGetInputHandler.h"
hgs
parents:
diff changeset
    26
#include    "SatLog.h"
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    31
// Two-phased constructor.
hgs
parents:
diff changeset
    32
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    33
//
hgs
parents:
diff changeset
    34
CGetInputHandler* CGetInputHandler::NewL( MSatUtils* aUtils )
hgs
parents:
diff changeset
    35
    {
hgs
parents:
diff changeset
    36
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::NewL calling" )
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
    CGetInputHandler* self = new( ELeave ) CGetInputHandler;
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    41
    self->BaseConstructL( aUtils );
hgs
parents:
diff changeset
    42
    self->ConstructL();
hgs
parents:
diff changeset
    43
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::NewL exiting" )
hgs
parents:
diff changeset
    46
    return self;
hgs
parents:
diff changeset
    47
    }
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    51
// Destructor.
hgs
parents:
diff changeset
    52
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    53
//
hgs
parents:
diff changeset
    54
CGetInputHandler::~CGetInputHandler()
hgs
parents:
diff changeset
    55
    {
hgs
parents:
diff changeset
    56
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::~CGetInputHandler calling" )
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
    Cancel();
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::~CGetInputHandler exiting" )
hgs
parents:
diff changeset
    61
    }
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    64
// From class MSatCommand.
hgs
parents:
diff changeset
    65
// Response from the client.
hgs
parents:
diff changeset
    66
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    67
//
hgs
parents:
diff changeset
    68
void CGetInputHandler::ClientResponse()
hgs
parents:
diff changeset
    69
    {
hgs
parents:
diff changeset
    70
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::ClientResponse calling" )
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
    iGetInputRsp.SetPCmdNumber( iGetInputData.PCmdNumber() );
hgs
parents:
diff changeset
    73
    if ( RSat::KPSessionTerminatedByUser == iGetInputRsp.iGeneralResult )
hgs
parents:
diff changeset
    74
        {
hgs
parents:
diff changeset
    75
        LOG( SIMPLE, "GETINPUT: CGetInputHandler::ClientResponse close ui \
hgs
parents:
diff changeset
    76
             session" )
hgs
parents:
diff changeset
    77
        // Next SimSession end will close the ui session
hgs
parents:
diff changeset
    78
        iUtils->NotifyEvent( MSatUtils::ESessionTerminatedByUser );
hgs
parents:
diff changeset
    79
        }
hgs
parents:
diff changeset
    80
        
hgs
parents:
diff changeset
    81
    // If command had icon data and was done succesfully, report that icon
hgs
parents:
diff changeset
    82
    // was not shown
hgs
parents:
diff changeset
    83
    // To be removed when icons are allowed in this command
hgs
parents:
diff changeset
    84
    if ( ( RSat::KSuccess == iGetInputRsp.iGeneralResult ) &&
hgs
parents:
diff changeset
    85
        iIconCommand )
hgs
parents:
diff changeset
    86
        {
hgs
parents:
diff changeset
    87
        LOG( SIMPLE, "GETINPUT: CGetInputHandler::ClientResponse requested \
hgs
parents:
diff changeset
    88
             icon not displayed" )
hgs
parents:
diff changeset
    89
        iGetInputRsp.iGeneralResult =
hgs
parents:
diff changeset
    90
                    RSat::KSuccessRequestedIconNotDisplayed;
hgs
parents:
diff changeset
    91
        }
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
    CSatCommandHandler::TerminalRsp( RSat::EGetInput, iGetInputRspPckg );
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::ClientResponse exiting" )
hgs
parents:
diff changeset
    96
    }
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    99
// From class CActive.
hgs
parents:
diff changeset
   100
// Cancels the sat request.
hgs
parents:
diff changeset
   101
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   102
//
hgs
parents:
diff changeset
   103
void CGetInputHandler::DoCancel()
hgs
parents:
diff changeset
   104
    {
hgs
parents:
diff changeset
   105
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::DoCancel calling" )
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
    iUtils->USatAPI().NotifyGetInputCancel();
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::DoCancel exiting" )
hgs
parents:
diff changeset
   110
    }
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   113
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   114
// Requests the command notification.
hgs
parents:
diff changeset
   115
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   116
//
hgs
parents:
diff changeset
   117
void CGetInputHandler::IssueUSATRequest( TRequestStatus& aStatus )
hgs
parents:
diff changeset
   118
    {
hgs
parents:
diff changeset
   119
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::IssueUSATRequest calling" )
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
    // Clear the IPC package.
hgs
parents:
diff changeset
   122
    new (&iGetInputData) RSat::TGetInputV1();
hgs
parents:
diff changeset
   123
    iGetInputRsp.iGeneralResult = RSat::KPSessionTerminatedByUser; // default
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
    iUtils->USatAPI().NotifyGetInput( aStatus, iGetInputPckg );
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::IssueUSATRequest exiting" )
hgs
parents:
diff changeset
   128
    }
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   131
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   132
// Precheck before executing the command.
hgs
parents:
diff changeset
   133
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   134
//
hgs
parents:
diff changeset
   135
TBool CGetInputHandler::CommandAllowed()
hgs
parents:
diff changeset
   136
    {
hgs
parents:
diff changeset
   137
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::CommandAllowed calling" )
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
    //Is This command Allowed.
hgs
parents:
diff changeset
   140
    TBool response( ETrue );
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
     // If icon is provided without any text
hgs
parents:
diff changeset
   143
    if ( ( 0 == iGetInputData.iText.Length() ) &&
hgs
parents:
diff changeset
   144
        ( RSat::ENotSelfExplanatory == iGetInputData.iIconId.iQualifier ||
hgs
parents:
diff changeset
   145
          RSat::ESelfExplanatory == iGetInputData.iIconId.iQualifier ) )
hgs
parents:
diff changeset
   146
        {
hgs
parents:
diff changeset
   147
        LOG( SIMPLE,
hgs
parents:
diff changeset
   148
            "GETINPUT: CGetInputHandler::CommandAllowed icon without text" )
hgs
parents:
diff changeset
   149
        iGetInputRsp.iGeneralResult = RSat::KCmdDataNotUnderstood;
hgs
parents:
diff changeset
   150
        iGetInputRsp.iInfoType = RSat::KNoAdditionalInfo;
hgs
parents:
diff changeset
   151
        iGetInputRsp.iAdditionalInfo.Zero();
hgs
parents:
diff changeset
   152
        response = EFalse;
hgs
parents:
diff changeset
   153
        }
hgs
parents:
diff changeset
   154
    // Check if phone is busy on calling and send response
hgs
parents:
diff changeset
   155
    // to SIM if phone is busy.
hgs
parents:
diff changeset
   156
    else if ( iUtils->SystemState().IsCallIncoming() )
hgs
parents:
diff changeset
   157
        {
hgs
parents:
diff changeset
   158
        LOG( SIMPLE,
hgs
parents:
diff changeset
   159
            "GETINPUT: CGetInputHandler::CommandAllowed busy or calling" )
hgs
parents:
diff changeset
   160
        // By default, this command does not have additional information
hgs
parents:
diff changeset
   161
        // except in this case when phone is busy on calling
hgs
parents:
diff changeset
   162
        iGetInputRsp.iInfoType = RSat::KMeProblem;
hgs
parents:
diff changeset
   163
        iGetInputRsp.iAdditionalInfo.Zero();
hgs
parents:
diff changeset
   164
        iGetInputRsp.iAdditionalInfo.Append( RSat::KMeBusyOnCall );
hgs
parents:
diff changeset
   165
        iGetInputRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
hgs
parents:
diff changeset
   166
        // This command will not be allowed for now.
hgs
parents:
diff changeset
   167
        response = EFalse;
hgs
parents:
diff changeset
   168
        }
hgs
parents:
diff changeset
   169
    // Set icon command flag whether icon data was received and set qualifier
hgs
parents:
diff changeset
   170
    // to no icon id
hgs
parents:
diff changeset
   171
    // To be removed when icons are allowed in this command
hgs
parents:
diff changeset
   172
    else if ( ( RSat::ESelfExplanatory ==
hgs
parents:
diff changeset
   173
        iGetInputData.iIconId.iQualifier ) ||
hgs
parents:
diff changeset
   174
        ( RSat::ENotSelfExplanatory ==
hgs
parents:
diff changeset
   175
        iGetInputData.iIconId.iQualifier ) )
hgs
parents:
diff changeset
   176
        {
hgs
parents:
diff changeset
   177
        LOG( SIMPLE,
hgs
parents:
diff changeset
   178
            "GETINPUT: CGetInputHandler::CommandAllowed set no icon id" )
hgs
parents:
diff changeset
   179
        iIconCommand = ETrue;
hgs
parents:
diff changeset
   180
        iGetInputData.iIconId.iQualifier = RSat::ENoIconId;
hgs
parents:
diff changeset
   181
        }
hgs
parents:
diff changeset
   182
    else
hgs
parents:
diff changeset
   183
        {
hgs
parents:
diff changeset
   184
        iIconCommand = EFalse;
hgs
parents:
diff changeset
   185
        }
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
    if ( !response )
hgs
parents:
diff changeset
   188
        {
hgs
parents:
diff changeset
   189
         LOG( SIMPLE,
hgs
parents:
diff changeset
   190
            "GETINPUT: CGetInputHandler::CommandAllowed response false" )
hgs
parents:
diff changeset
   191
        iGetInputRsp.SetPCmdNumber( iGetInputData.PCmdNumber() );
hgs
parents:
diff changeset
   192
        TerminalRsp( RSat::EGetInput, iGetInputRspPckg );
hgs
parents:
diff changeset
   193
        }
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
    LOG2( SIMPLE, "GETINPUT: CGetInputHandler::CommandAllowed exiting,\
hgs
parents:
diff changeset
   196
          response: %d", response )
hgs
parents:
diff changeset
   197
    return response;
hgs
parents:
diff changeset
   198
    }
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   201
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   202
// Need for ui session.
hgs
parents:
diff changeset
   203
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   204
//
hgs
parents:
diff changeset
   205
TBool CGetInputHandler::NeedUiSession()
hgs
parents:
diff changeset
   206
    {
hgs
parents:
diff changeset
   207
    LOG( NORMAL, "GETINPUT: CGetInputHandler::NeedUiSession calling" )
hgs
parents:
diff changeset
   208
    // Notify Cover UI if it's supported
hgs
parents:
diff changeset
   209
    if ( iUtils->CoverUiSupported() )
hgs
parents:
diff changeset
   210
        {
hgs
parents:
diff changeset
   211
        LOG( NORMAL, "CGetInputHandler::NeedUiSession coverui supported" )
hgs
parents:
diff changeset
   212
        TSatCommandData medEventData;
hgs
parents:
diff changeset
   213
        medEventData.iPCmdNumber = RSat::EGetInput;
hgs
parents:
diff changeset
   214
        if ( iGetInputData.iText.Length() )
hgs
parents:
diff changeset
   215
            {
hgs
parents:
diff changeset
   216
            LOG( NORMAL, "CGetInputHandler::NeedUiSession EAlphaIdProvided" )
hgs
parents:
diff changeset
   217
            medEventData.iAlphaId.iStatus = RSat::EAlphaIdProvided;
hgs
parents:
diff changeset
   218
            medEventData.iAlphaId.iAlphaId.Copy( iGetInputData.iText );
hgs
parents:
diff changeset
   219
            }
hgs
parents:
diff changeset
   220
        else
hgs
parents:
diff changeset
   221
            {
hgs
parents:
diff changeset
   222
            medEventData.iAlphaId.iStatus = RSat::EAlphaIdNotPresent;
hgs
parents:
diff changeset
   223
            }
hgs
parents:
diff changeset
   224
        medEventData.iDuration.iNumOfUnits = KSatDefaultDuration;
hgs
parents:
diff changeset
   225
        medEventData.iDuration.iTimeUnit = RSat::ESeconds;
hgs
parents:
diff changeset
   226
        medEventData.iIconID = iGetInputData.iIconId;
hgs
parents:
diff changeset
   227
        TSatCommandPckg tPckg( medEventData );
hgs
parents:
diff changeset
   228
        iUtils->RaiseSatEvent( tPckg );
hgs
parents:
diff changeset
   229
        }
hgs
parents:
diff changeset
   230
    LOG( NORMAL, "GETINPUT: CGetInputHandler::NeedUiSession exiting" )
hgs
parents:
diff changeset
   231
    return ETrue;
hgs
parents:
diff changeset
   232
    }
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   235
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   236
// Called when USAT API notifies that command.
hgs
parents:
diff changeset
   237
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   238
//
hgs
parents:
diff changeset
   239
void CGetInputHandler::HandleCommand()
hgs
parents:
diff changeset
   240
    {
hgs
parents:
diff changeset
   241
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::HandleCommand calling" )
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
    // Send the response
hgs
parents:
diff changeset
   244
    iUtils->NotifyEvent( MSatUtils::EGetInputExecuting );
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
    MSatUiSession* uiSession = iUtils->SatUiHandler().UiSession();
hgs
parents:
diff changeset
   247
    uiSession->SendCommand(
hgs
parents:
diff changeset
   248
        &iGetInputPckg,
hgs
parents:
diff changeset
   249
        &iGetInputRspPckg,
hgs
parents:
diff changeset
   250
        ESatSProactiveGetInput );
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::HandleCommand exiting" )
hgs
parents:
diff changeset
   253
    }
hgs
parents:
diff changeset
   254
hgs
parents:
diff changeset
   255
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   256
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   257
// Indicates the failure of launching ui client.
hgs
parents:
diff changeset
   258
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   259
//
hgs
parents:
diff changeset
   260
void CGetInputHandler::UiLaunchFailed()
hgs
parents:
diff changeset
   261
    {
hgs
parents:
diff changeset
   262
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::UiLaunchFailed calling" )
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
    iGetInputRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
hgs
parents:
diff changeset
   265
    iGetInputRsp.iInfoType = RSat::KMeProblem;
hgs
parents:
diff changeset
   266
    iGetInputRsp.iAdditionalInfo.SetLength( 1 );
hgs
parents:
diff changeset
   267
    iGetInputRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
hgs
parents:
diff changeset
   268
    iGetInputRsp.SetPCmdNumber( iGetInputData.PCmdNumber() );
hgs
parents:
diff changeset
   269
    TerminalRsp( RSat::EGetInput, iGetInputRspPckg );
hgs
parents:
diff changeset
   270
hgs
parents:
diff changeset
   271
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::UiLaunchFailed exiting" )
hgs
parents:
diff changeset
   272
    }
hgs
parents:
diff changeset
   273
hgs
parents:
diff changeset
   274
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   275
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
   276
// might leave.
hgs
parents:
diff changeset
   277
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   278
//
hgs
parents:
diff changeset
   279
CGetInputHandler::CGetInputHandler() :
hgs
parents:
diff changeset
   280
    CSatCommandHandler(),
hgs
parents:
diff changeset
   281
    iGetInputData(),
hgs
parents:
diff changeset
   282
    iGetInputPckg( iGetInputData ),
hgs
parents:
diff changeset
   283
    iGetInputRsp(),
hgs
parents:
diff changeset
   284
    iGetInputRspPckg( iGetInputRsp ),
hgs
parents:
diff changeset
   285
    // To be removed when icons are allowed in this command
hgs
parents:
diff changeset
   286
    iIconCommand( EFalse )
hgs
parents:
diff changeset
   287
    {
hgs
parents:
diff changeset
   288
    LOG( SIMPLE,
hgs
parents:
diff changeset
   289
        "GETINPUT: CGetInputHandler::CGetInputHandler calling - exiting" )
hgs
parents:
diff changeset
   290
    }
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   293
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
   294
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   295
//
hgs
parents:
diff changeset
   296
void CGetInputHandler::ConstructL()
hgs
parents:
diff changeset
   297
    {
hgs
parents:
diff changeset
   298
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::ConstructL calling" )
hgs
parents:
diff changeset
   299
hgs
parents:
diff changeset
   300
    // Register service request handler for GetInput command
hgs
parents:
diff changeset
   301
    iUtils->RegisterServiceRequestL(
hgs
parents:
diff changeset
   302
        ESatSProactiveGetInput,
hgs
parents:
diff changeset
   303
        ESatSProactiveGetInputResponse,
hgs
parents:
diff changeset
   304
        this );
hgs
parents:
diff changeset
   305
hgs
parents:
diff changeset
   306
    LOG( SIMPLE, "GETINPUT: CGetInputHandler::ConstructL exiting" )
hgs
parents:
diff changeset
   307
    }
hgs
parents:
diff changeset
   308