cellular/telephonysettings/src/PsetCli.cpp
changeset 0 ff3b6d0fd310
child 19 7d48bed6ce0c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cellular/telephonysettings/src/PsetCli.cpp	Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,412 @@
+/*
+* Copyright (c) 2002 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:  CPsetCli is provides calling line identification SS.
+*
+*
+*/
+
+
+//INCLUDE FILES
+#include "PsetCli.h"
+#include "PSetPanic.h"
+#include "PsetConstants.h"
+#include "MPsetRequestObs.h"
+#include <bldvariant.hrh>
+#include <featmgr.h>
+
+// CONSTANTS    
+_LIT( KPSNameOfClass, "CPsetCli" );
+
+//  MEMBER FUNCTIONS
+// ---------------------------------------------------------------------------
+// Symbian OS 1st phase Constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPsetCli* CPsetCli::NewL( RMobilePhone& aPhone, MPsetCliObserver& aObserver )
+    {
+    CPsetCli* self = new ( ELeave ) CPsetCli( aPhone );
+    CleanupStack::PushL( self );
+    // Sets up TLS, must be done before FeatureManager is used.
+    FeatureManager::InitializeLibL();
+    CleanupStack::Pop( self );
+    self->SetObserver( aObserver );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPsetCli::~CPsetCli()
+    {
+    // Remove FeatureManager
+    FeatureManager::UnInitializeLib();
+    Cancel();
+    iReqObserver = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ Constructor.
+// ---------------------------------------------------------------------------
+//
+CPsetCli::CPsetCli( RMobilePhone& aPhone ) : CActive( EPriorityStandard ),
+iPhone( aPhone )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// Cancels all requests.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPsetCli::CancelAll()
+    {
+    // Set PSUI so that correct observer is used and hide requesting note.
+    // When interrupting a note, does not leave.
+    // This needs to be done first, since notes must be cleared from screen
+    // even though request is not active.
+    iObserver->SetEngineContact( this );
+    TRAPD( ignore, iObserver->HandleCliRequestingL( EFalse, ETrue ) );
+    // Line below fixes armv5 warning.
+    ignore = ignore;
+    
+    if ( !IsActive() )
+        {
+        return;
+        }    
+    
+    Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// Requests for COLP mode.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPsetCli::GetColpModeL()
+    {
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    IssueRequestL( RMobilePhone::EIdServiceConnectedPresentation );
+    }
+
+// ---------------------------------------------------------------------------
+// Requests for CLIP mode.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPsetCli::GetClipModeL()
+    {
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    IssueRequestL( RMobilePhone::EIdServiceCallerPresentation );
+    }
+
+// ---------------------------------------------------------------------------
+// Requests for COLP mode.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPsetCli::GetClirModeL()
+    {
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    IssueRequestL( RMobilePhone::EIdServiceCallerRestriction );
+    }
+
+// ---------------------------------------------------------------------------
+// Requests for COLR mode.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPsetCli::GetColrModeL()
+    {
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    IssueRequestL( RMobilePhone::EIdServiceConnectedRestriction );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets request observer.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPsetCli::SetRequestObserver( MPsetRequestObserver* aObs )
+    {
+    iReqObserver = aObs;
+    }
+
+// ---------------------------------------------------------------------------
+// Make request to get CNAP status
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPsetCli::GetCnapL()
+    {
+    if ( FeatureManager::FeatureSupported( KFeatureIdPhoneCnap ) )
+        {
+        /*****************************************************
+        *    Series 60 Customer / ETel
+        *    Series 60  ETel API
+        *****************************************************/
+        IssueRequestL( RMobilePhone::EIdServiceCallerName );
+        }
+    }
+
+//---------------------------------------------------------------------------
+// Handles completed request. 
+// 
+//---------------------------------------------------------------------------
+//
+void CPsetCli::RunL()
+    {
+    __ASSERT_ALWAYS( iObserver, Panic( KPSNameOfClass, ECliNoObserver ) );
+    TBool commonNotes = ETrue;
+    
+    //Hide requesting note - does not leave when deleting a note.
+    iObserver->SetEngineContact( this );
+    iObserver->HandleCliRequestingL( EFalse, EFalse );
+    if ( iStatus != KErrNone )
+        {
+        iObserver->HandleCliErrorL( iStatus.Int() );
+        RequestCompleted( iStatus.Int() );        
+        return;
+        }
+    
+    TPsuiCli type = EPsuiCliUnknown; 
+    
+    switch ( iRequestedService )
+        {
+        /*****************************************************
+        *    Series 60 Customer / ETel
+        *    Series 60  ETel API
+        *****************************************************/
+        case RMobilePhone::EIdServiceConnectedRestriction:
+            switch ( iServiceStatus )
+                {
+                case RMobilePhone::EIdServiceActivePermanent:
+                    type = EPsuiColrOn;
+                    break;
+                case RMobilePhone::EIdServiceNotProvisioned:
+                    type = EPsuiColrOff;
+                    break;
+                case RMobilePhone::EIdServiceUnknown:
+                    type = EPsuiCliUnknown;
+                    break;
+                default:
+                    break;
+                }
+            break;
+        case RMobilePhone::EIdServiceConnectedPresentation:
+            switch ( iServiceStatus )
+                
+                {
+                case RMobilePhone::EIdServiceActivePermanent:
+                    type = EPsuiColpOn;
+                    break;
+                case RMobilePhone::EIdServiceNotProvisioned:
+                    type = EPsuiColpOff;
+                    break;
+                case RMobilePhone::EIdServiceUnknown:
+                    type = EPsuiCliUnknown;
+                    break;
+                default:
+                    break;
+                }
+            break;
+        case RMobilePhone::EIdServiceCallerRestriction:
+            switch ( iServiceStatus )
+            
+                {
+                case RMobilePhone::EIdServiceActivePermanent:                
+                case RMobilePhone::EIdServiceActiveDefaultRestricted:
+                    type = EPsuiClirOn;
+                    break;
+                case RMobilePhone::EIdServiceActiveDefaultAllowed:
+                case RMobilePhone::EIdServiceNotProvisioned:
+                    type = EPsuiClirOff;
+                    break;
+                case RMobilePhone::EIdServiceUnknown:
+                    type = EPsuiCliUnknown;
+                    break;
+                default:
+                    break;
+                }
+            break;
+        case RMobilePhone::EIdServiceCallerPresentation:
+            switch ( iServiceStatus )
+                {
+                case RMobilePhone::EIdServiceActivePermanent:
+                    type = EPsuiClipOn;
+                    break;
+                case RMobilePhone::EIdServiceNotProvisioned:
+                    type = EPsuiClipOff;
+                    break;
+                case RMobilePhone::EIdServiceUnknown:
+                    type = EPsuiCliUnknown;
+                    break;
+                default:
+                    break;
+                }
+            break;
+        case RMobilePhone::EIdServiceCallerName:
+            commonNotes = EFalse;
+            iObserver->HandleCnapStatusL( iServiceStatus );
+            break;
+        default:
+            Panic( KPSNameOfClass, ECliParameter );
+            break;
+        } 
+
+    if ( commonNotes )
+        {
+        iObserver->CliInformationL( type );
+        }    
+    RequestCompleted( KErrNone );
+    }
+
+// ---------------------------------------------------------------------------
+// Cancels pending request.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetCli::DoCancel()
+    {
+    if ( !IsActive() )
+        {
+        return;
+        }
+    switch ( iRequestedService )
+        {
+        /*****************************************************
+        *    Series 60 Customer / ETel
+        *    Series 60  ETel API
+        *****************************************************/
+        case RMobilePhone::EIdServiceConnectedRestriction:
+        case RMobilePhone::EIdServiceConnectedPresentation:
+        case RMobilePhone::EIdServiceCallerRestriction:
+        case RMobilePhone::EIdServiceCallerPresentation:
+        case RMobilePhone::EIdServiceCallerName:
+            iPhone.CancelAsyncRequest( EMobilePhoneGetIdentityServiceStatus );
+            break;
+        default:
+            break;            
+        }
+    SetRequestStatus( RMobilePhone::EIdServiceUnspecified );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets observer.
+// ---------------------------------------------------------------------------
+//
+void CPsetCli::SetObserver( MPsetCliObserver& aObserver )
+    {
+    iObserver = &aObserver;
+    iObserver->SetEngineContact( this );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Push object into cleanupstack to catch leaving.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetCli::CleanupLeavePushL()
+    {
+    CleanupStack::PushL( TCleanupItem( DoHandleLeave, this ) );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Things to do when leave occurs.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetCli::HandleLeave()
+    {
+    CancelAll();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Object has caused a leave.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetCli::DoHandleLeave( TAny* aAny )
+    {
+    REINTERPRET_CAST( CPsetCli*, aAny )->HandleLeave();
+    }
+
+// ---------------------------------------------------------------------------
+// Inform the request observer that request has been completed.
+// ---------------------------------------------------------------------------
+//
+void CPsetCli::RequestCompleted( const TInt& aError )
+    {
+    if ( aError != KErrNone )
+        {
+        SetRequestStatus( 
+            static_cast <RMobilePhone::TMobilePhoneIdService> (aError) );
+        }
+    SetRequestStatus( RMobilePhone::EIdServiceUnspecified );
+    
+    if ( iReqObserver )
+        {
+        iReqObserver->RequestComplete(); 
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Issues pre-defined request.
+// ---------------------------------------------------------------------------
+//
+void CPsetCli::IssueRequestL( RMobilePhone::TMobilePhoneIdService aService ) 
+    {    
+    if ( IsActive() )
+        {
+        /*****************************************************
+        *    Series 60 Customer / ETel
+        *    Series 60  ETel API
+        *****************************************************/
+        User::Leave( KErrGeneral );
+        }    
+    SetRequestStatus( aService );
+       
+    iPhone.GetIdentityServiceStatus( iStatus, aService, iServiceStatus );    
+    SetActive();
+    
+    // Set PSUI so that correct observer is used and show note.
+    iObserver->SetEngineContact( this );
+    CleanupLeavePushL();    
+    iObserver->HandleCliRequestingL( ETrue, EFalse );
+    CleanupStack::Pop(); // CleanupCancelPushL
+    }
+
+// ---------------------------------------------------------------------------
+// Update the request status - both internally and to observers.
+// ---------------------------------------------------------------------------
+//
+void CPsetCli::SetRequestStatus( RMobilePhone::TMobilePhoneIdService aStatus )
+    {
+    iRequestedService = aStatus;
+    if ( iReqObserver )
+        {
+        iReqObserver->RequestStatusChanged( aStatus );
+        }
+    }
+
+// End of file