locationtriggering/ltserver/ltserverlogic/src/lbtsimchangehandler.cpp
author hgs
Wed, 03 Nov 2010 23:28:39 +0530
changeset 56 4e949f03ecc5
child 39 3efc7a0e8755
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2008 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:  Sim change handler class definition
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 <e32property.h> 
hgs
parents:
diff changeset
    20
#include <commdb.h>
hgs
parents:
diff changeset
    21
#include <startupdomainpskeys.h>
hgs
parents:
diff changeset
    22
#include "lbtgeocell.h"
hgs
parents:
diff changeset
    23
#include "lbttriggerfilterbyarea.h"
hgs
parents:
diff changeset
    24
#include "lbtlisttriggeroptions.h"
hgs
parents:
diff changeset
    25
#include "lbtcontainerlistoptions.h"
hgs
parents:
diff changeset
    26
#include "lbtcontainer.h"
hgs
parents:
diff changeset
    27
#include "lbtsessiontrigger.h"
hgs
parents:
diff changeset
    28
#include "lbtstartuptrigger.h"
hgs
parents:
diff changeset
    29
#include "lbttriggerconditionbase.h"
hgs
parents:
diff changeset
    30
#include "lbttriggerconditionarea.h"
hgs
parents:
diff changeset
    31
#include "lbtlisttriggeroptions.h"
hgs
parents:
diff changeset
    32
#include "lbtsimchangehandler.h"
hgs
parents:
diff changeset
    33
#include "lbtcleanuphandler.h"
hgs
parents:
diff changeset
    34
#include "lbtserverlogictriggerchangeobserver.h"
hgs
parents:
diff changeset
    35
#include "lbtlogger.h"
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
// ======== LOCAL FUNCTIONS ========
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    40
// CLbtSimChangeHandler::NewL
hgs
parents:
diff changeset
    41
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    42
//
hgs
parents:
diff changeset
    43
CLbtSimChangeHandler* CLbtSimChangeHandler::NewL( CLbtContainer& aContainer,
hgs
parents:
diff changeset
    44
                                                  CLbtCleanupHandler& aCleanupHandler,
hgs
parents:
diff changeset
    45
                                                  MLbtServerLogicTriggerChangeObserver& aTriggerChangeObserver )
hgs
parents:
diff changeset
    46
    {
hgs
parents:
diff changeset
    47
    FUNC_ENTER("CLbtSimChangeHandler::NewL");
hgs
parents:
diff changeset
    48
    CLbtSimChangeHandler* self = new( ELeave ) CLbtSimChangeHandler( aContainer,aCleanupHandler,aTriggerChangeObserver );
hgs
parents:
diff changeset
    49
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    50
    self->ConstructL();
hgs
parents:
diff changeset
    51
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    52
    return self;
hgs
parents:
diff changeset
    53
    }
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    56
// CLbtSimChangeHandler::CLbtSimChangeHandler
hgs
parents:
diff changeset
    57
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    58
//   
hgs
parents:
diff changeset
    59
CLbtSimChangeHandler::CLbtSimChangeHandler( CLbtContainer& aContainer,CLbtCleanupHandler& aCleanupHandler,
hgs
parents:
diff changeset
    60
                                            MLbtServerLogicTriggerChangeObserver& aTriggerChangeObserver):
hgs
parents:
diff changeset
    61
                                            CActive( EPriorityNormal ),iContainer( aContainer ),
hgs
parents:
diff changeset
    62
                                            iCleanupHandler( aCleanupHandler ),
hgs
parents:
diff changeset
    63
                                            iTriggerChangeObserver( aTriggerChangeObserver ),
hgs
parents:
diff changeset
    64
                                            iNwInfo(),iNwInfoPckg(iNwInfo), iLocArea()
hgs
parents:
diff changeset
    65
    {
hgs
parents:
diff changeset
    66
    CActiveScheduler::Add( this );
hgs
parents:
diff changeset
    67
    }
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    70
// CLbtSimChangeHandler::~CLbtSimChangeHandler
hgs
parents:
diff changeset
    71
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    72
//   
hgs
parents:
diff changeset
    73
CLbtSimChangeHandler::~CLbtSimChangeHandler()
hgs
parents:
diff changeset
    74
    {
hgs
parents:
diff changeset
    75
    FUNC_ENTER("CLbtSimChangeHandler::~CLbtSimChangeHandler");
hgs
parents:
diff changeset
    76
    if( IsActive() )
hgs
parents:
diff changeset
    77
        {
hgs
parents:
diff changeset
    78
        Cancel();
hgs
parents:
diff changeset
    79
        iContainer.RemoveObserver( this );
hgs
parents:
diff changeset
    80
        }
hgs
parents:
diff changeset
    81
        
hgs
parents:
diff changeset
    82
    iSimProperty.Close();
hgs
parents:
diff changeset
    83
    iMPhone.Close();
hgs
parents:
diff changeset
    84
    iTelServer.Close();    
hgs
parents:
diff changeset
    85
    iInvalidTriggers.Close();
hgs
parents:
diff changeset
    86
    iValidTriggers.Close();    
hgs
parents:
diff changeset
    87
    iTriggerList.ResetAndDestroy();    
hgs
parents:
diff changeset
    88
    }
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    91
// CLbtSimChangeHandler::ConstructL
hgs
parents:
diff changeset
    92
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    93
//   
hgs
parents:
diff changeset
    94
void CLbtSimChangeHandler::ConstructL()
hgs
parents:
diff changeset
    95
    {
hgs
parents:
diff changeset
    96
    InitialiseEtelL();
hgs
parents:
diff changeset
    97
    iState = EStateIdle;
hgs
parents:
diff changeset
    98
    User::LeaveIfError( iSimProperty.Attach( KPSUidStartup, 
hgs
parents:
diff changeset
    99
                                             KPSSimChanged, EOwnerThread ) );
hgs
parents:
diff changeset
   100
    }
hgs
parents:
diff changeset
   101
    
hgs
parents:
diff changeset
   102
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   103
// CLbtSimChangeHandler::ConstructL
hgs
parents:
diff changeset
   104
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   105
//   
hgs
parents:
diff changeset
   106
void CLbtSimChangeHandler::StartToListenL()
hgs
parents:
diff changeset
   107
    {
hgs
parents:
diff changeset
   108
    FUNC_ENTER("CLbtSimChangeHandler::StartToListenL");
hgs
parents:
diff changeset
   109
    TInt simChanged = 0;
hgs
parents:
diff changeset
   110
    User::LeaveIfError( iSimProperty.Get( simChanged ) );
hgs
parents:
diff changeset
   111
    
hgs
parents:
diff changeset
   112
    if( simChanged == ESimChanged || simChanged == ESimNotChanged )
hgs
parents:
diff changeset
   113
        {
hgs
parents:
diff changeset
   114
        iState = EStateSimChangeEvent;
hgs
parents:
diff changeset
   115
        SetActive();
hgs
parents:
diff changeset
   116
        TRequestStatus* status = &iStatus;
hgs
parents:
diff changeset
   117
        User::RequestComplete( status,KErrNone ); 
hgs
parents:
diff changeset
   118
        }
hgs
parents:
diff changeset
   119
    else if( simChanged == ESimChangedUninitialized  )
hgs
parents:
diff changeset
   120
        {
hgs
parents:
diff changeset
   121
        iState = EStateGetNetworkInfo;
hgs
parents:
diff changeset
   122
        SetActive();
hgs
parents:
diff changeset
   123
        TRequestStatus* status = &iStatus;
hgs
parents:
diff changeset
   124
        User::RequestComplete( status,KErrNone ); 
hgs
parents:
diff changeset
   125
        }
hgs
parents:
diff changeset
   126
    else
hgs
parents:
diff changeset
   127
        {
hgs
parents:
diff changeset
   128
        SubscribeForSimChange();
hgs
parents:
diff changeset
   129
        }   
hgs
parents:
diff changeset
   130
    }
hgs
parents:
diff changeset
   131
    
hgs
parents:
diff changeset
   132
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   133
// CLbtSimChangeHandler::RunL
hgs
parents:
diff changeset
   134
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   135
//      
hgs
parents:
diff changeset
   136
void CLbtSimChangeHandler::RunL()
hgs
parents:
diff changeset
   137
    {
hgs
parents:
diff changeset
   138
    FUNC_ENTER("CLbtSimChangeHandler::RunL");
hgs
parents:
diff changeset
   139
    if( KErrNone == iStatus.Int() )
hgs
parents:
diff changeset
   140
        {
hgs
parents:
diff changeset
   141
        TLbtTriggerEventMask eventMask = 0;
hgs
parents:
diff changeset
   142
        switch( iState )
hgs
parents:
diff changeset
   143
            {
hgs
parents:
diff changeset
   144
            case EStateSimChangeEvent:
hgs
parents:
diff changeset
   145
                GetCurrentNetworkInfo();
hgs
parents:
diff changeset
   146
                break;
hgs
parents:
diff changeset
   147
            
hgs
parents:
diff changeset
   148
            case EStateGetNetworkInfo:
hgs
parents:
diff changeset
   149
                ListCellTriggersL();
hgs
parents:
diff changeset
   150
                break; 
hgs
parents:
diff changeset
   151
                    
hgs
parents:
diff changeset
   152
            case EStateListTriggers:
hgs
parents:
diff changeset
   153
                EvaluateTriggers();
hgs
parents:
diff changeset
   154
                break;    
hgs
parents:
diff changeset
   155
            
hgs
parents:
diff changeset
   156
            case EStateEvaluateTriggers:
hgs
parents:
diff changeset
   157
                InvalidateDifferentNwTriggersL();
hgs
parents:
diff changeset
   158
                break;
hgs
parents:
diff changeset
   159
             
hgs
parents:
diff changeset
   160
            case EStateInvalidateTriggers:
hgs
parents:
diff changeset
   161
                // Here the observer is set to the get the information pertaining
hgs
parents:
diff changeset
   162
                // triggers that were changed to invalid
hgs
parents:
diff changeset
   163
                eventMask|= CLbtContainer::ELbtConTriggerValidityFieldChanged;
hgs
parents:
diff changeset
   164
                iContainer.SetChangeObserver( this,eventMask );
hgs
parents:
diff changeset
   165
                ValidateCurrentNwTriggersL();
hgs
parents:
diff changeset
   166
                break;
hgs
parents:
diff changeset
   167
                
hgs
parents:
diff changeset
   168
            case EStateValidateTriggers:
hgs
parents:
diff changeset
   169
                // Here the observer is set to the get the information pertaining
hgs
parents:
diff changeset
   170
                // triggers that were changed to invalid
hgs
parents:
diff changeset
   171
                eventMask|= CLbtContainer::ELbtConTriggerValidityFieldChanged;
hgs
parents:
diff changeset
   172
                iContainer.SetChangeObserver( this,eventMask );
hgs
parents:
diff changeset
   173
                SubscribeForSimChange();
hgs
parents:
diff changeset
   174
                break;
hgs
parents:
diff changeset
   175
            
hgs
parents:
diff changeset
   176
            default:
hgs
parents:
diff changeset
   177
                break;        
hgs
parents:
diff changeset
   178
            }
hgs
parents:
diff changeset
   179
            
hgs
parents:
diff changeset
   180
        }
hgs
parents:
diff changeset
   181
    }
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   184
// CLbtSimChangeHandler::RunError
hgs
parents:
diff changeset
   185
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   186
//      
hgs
parents:
diff changeset
   187
TInt CLbtSimChangeHandler::RunError( TInt /*aError*/ )
hgs
parents:
diff changeset
   188
    {
hgs
parents:
diff changeset
   189
    return KErrNone;
hgs
parents:
diff changeset
   190
    }
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   193
// CLbtSimChangeHandler::GetCurrentNetworkInfo
hgs
parents:
diff changeset
   194
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   195
//   
hgs
parents:
diff changeset
   196
void CLbtSimChangeHandler::GetCurrentNetworkInfo()
hgs
parents:
diff changeset
   197
    {
hgs
parents:
diff changeset
   198
    FUNC_ENTER("CLbtSimChangeHandler::GetCurrentNetworkInfo");
hgs
parents:
diff changeset
   199
    TInt error = iMPhone.GetCurrentMode( iNetworkMode );
hgs
parents:
diff changeset
   200
    if( KErrNone == error )
hgs
parents:
diff changeset
   201
        {
hgs
parents:
diff changeset
   202
        iMPhone.GetCurrentNetwork( iStatus,iNwInfoPckg,iLocArea );
hgs
parents:
diff changeset
   203
        iState = EStateGetNetworkInfo;
hgs
parents:
diff changeset
   204
        SetActive();
hgs
parents:
diff changeset
   205
        }
hgs
parents:
diff changeset
   206
    }
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   209
// CLbtSimChangeHandler::ListCellTriggers
hgs
parents:
diff changeset
   210
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   211
//   
hgs
parents:
diff changeset
   212
void CLbtSimChangeHandler::ListCellTriggersL()
hgs
parents:
diff changeset
   213
    {
hgs
parents:
diff changeset
   214
    FUNC_ENTER("CLbtSimChangeHandler::ListCellTriggers");
hgs
parents:
diff changeset
   215
    CLbtGeoCell* geoCell = CLbtGeoCell::NewLC();
hgs
parents:
diff changeset
   216
                    
hgs
parents:
diff changeset
   217
    CLbtTriggerFilterByArea* filter = CLbtTriggerFilterByArea::NewL();    
hgs
parents:
diff changeset
   218
    filter->SetArea( geoCell );
hgs
parents:
diff changeset
   219
    CleanupStack::Pop( geoCell );//Ownership is transfered to filter
hgs
parents:
diff changeset
   220
    CleanupStack::PushL( filter );
hgs
parents:
diff changeset
   221
    
hgs
parents:
diff changeset
   222
    CLbtListTriggerOptions* listOptions = CLbtListTriggerOptions::NewL();    
hgs
parents:
diff changeset
   223
    listOptions->SetFilter( filter );
hgs
parents:
diff changeset
   224
    CleanupStack::Pop( filter ); //Ownership is transfered to listOptions
hgs
parents:
diff changeset
   225
    CleanupStack::PushL( listOptions );    
hgs
parents:
diff changeset
   226
    
hgs
parents:
diff changeset
   227
    // We need only trigger Id and condition
hgs
parents:
diff changeset
   228
    TLbtTriggerAttributeFieldsMask attributeMask = 0;
hgs
parents:
diff changeset
   229
    attributeMask|= CLbtTriggerEntry::EAttributeId|
hgs
parents:
diff changeset
   230
                    CLbtTriggerEntry::EAttributeCondition;
hgs
parents:
diff changeset
   231
    listOptions->SetRetrievedFields( attributeMask , 0 );
hgs
parents:
diff changeset
   232
    
hgs
parents:
diff changeset
   233
    CLbtContainerListOptions* contianerListOptions = 
hgs
parents:
diff changeset
   234
                                CLbtContainerListOptions::NewL( listOptions,NULL );
hgs
parents:
diff changeset
   235
                                
hgs
parents:
diff changeset
   236
    iTriggerList.Reset();                            
hgs
parents:
diff changeset
   237
    iContainer.ListTriggers( contianerListOptions,iTriggerList,iAoOpcode,iStatus );
hgs
parents:
diff changeset
   238
    iState = EStateListTriggers;
hgs
parents:
diff changeset
   239
    SetActive();
hgs
parents:
diff changeset
   240
    
hgs
parents:
diff changeset
   241
    CleanupStack::Pop( listOptions );//Ownership is transfered to container list options
hgs
parents:
diff changeset
   242
    }
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   245
// CLbtSimChangeHandler::EvaluateTriggers
hgs
parents:
diff changeset
   246
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   247
//   
hgs
parents:
diff changeset
   248
void CLbtSimChangeHandler::EvaluateTriggers()
hgs
parents:
diff changeset
   249
    {
hgs
parents:
diff changeset
   250
    FUNC_ENTER("CLbtSimChangeHandler::EvaluateTriggers");    
hgs
parents:
diff changeset
   251
    // If the count is zero,register again for sim change notification
hgs
parents:
diff changeset
   252
    if( !iTriggerList.Count() )
hgs
parents:
diff changeset
   253
        {
hgs
parents:
diff changeset
   254
        SubscribeForSimChange();
hgs
parents:
diff changeset
   255
        return;
hgs
parents:
diff changeset
   256
        }
hgs
parents:
diff changeset
   257
        
hgs
parents:
diff changeset
   258
    // Reset the valid and invalid trigger arrays
hgs
parents:
diff changeset
   259
    iInvalidTriggers.Reset();
hgs
parents:
diff changeset
   260
    iValidTriggers.Reset();
hgs
parents:
diff changeset
   261
    
hgs
parents:
diff changeset
   262
    // Iterate through trigger list and mark the trigger that doesnt belong to this network
hgs
parents:
diff changeset
   263
    for( TInt i=0;i<iTriggerList.Count();i++ )
hgs
parents:
diff changeset
   264
        {
hgs
parents:
diff changeset
   265
        CLbtTriggerEntry* triggerEntry = iTriggerList[i]->TriggerEntry();
hgs
parents:
diff changeset
   266
        
hgs
parents:
diff changeset
   267
        // Create the trigger entry object based on the type of trigger
hgs
parents:
diff changeset
   268
    	CLbtTriggerEntry* trigger;
hgs
parents:
diff changeset
   269
    	if( triggerEntry->Type() == CLbtTriggerEntry::ETypeStartup )
hgs
parents:
diff changeset
   270
    		{
hgs
parents:
diff changeset
   271
    		trigger = static_cast<CLbtStartupTrigger*>( triggerEntry );
hgs
parents:
diff changeset
   272
    		}
hgs
parents:
diff changeset
   273
    	else
hgs
parents:
diff changeset
   274
    		{
hgs
parents:
diff changeset
   275
    		trigger = static_cast<CLbtSessionTrigger*>( triggerEntry );
hgs
parents:
diff changeset
   276
    		}
hgs
parents:
diff changeset
   277
        
hgs
parents:
diff changeset
   278
        if( trigger->GetCondition()->Type() == CLbtTriggerConditionBase::ETriggerConditionArea )
hgs
parents:
diff changeset
   279
    		{
hgs
parents:
diff changeset
   280
    		// Get the condition area base
hgs
parents:
diff changeset
   281
    		CLbtTriggerConditionArea* conditionArea = 
hgs
parents:
diff changeset
   282
    				static_cast<CLbtTriggerConditionArea*>(trigger->GetCondition());
hgs
parents:
diff changeset
   283
    		
hgs
parents:
diff changeset
   284
    		// Check if the area is a cell
hgs
parents:
diff changeset
   285
    		if( conditionArea->TriggerArea()->Type() == CLbtGeoAreaBase::ECellular )
hgs
parents:
diff changeset
   286
    			{
hgs
parents:
diff changeset
   287
    			CLbtGeoCell* cellularArea = static_cast<CLbtGeoCell*>(conditionArea->TriggerArea());
hgs
parents:
diff changeset
   288
    			
hgs
parents:
diff changeset
   289
    			TInt ctNetworkCode, trNetworkCode;
hgs
parents:
diff changeset
   290
                TLex lex( iNwInfo.iNetworkId );
hgs
parents:
diff changeset
   291
                lex.Val( ctNetworkCode );
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
                lex.Assign( cellularArea->NetworkIdentityCode() );
hgs
parents:
diff changeset
   294
                lex.Val( trNetworkCode );
hgs
parents:
diff changeset
   295
                
hgs
parents:
diff changeset
   296
                // If the network type,country code and network code of trigger 
hgs
parents:
diff changeset
   297
                // matches with current cell reading, add it to invalid trigger array
hgs
parents:
diff changeset
   298
                if( trNetworkCode != ctNetworkCode )
hgs
parents:
diff changeset
   299
                    {
hgs
parents:
diff changeset
   300
                    iInvalidTriggers.Append( trigger->Id() );
hgs
parents:
diff changeset
   301
                    }
hgs
parents:
diff changeset
   302
                else if( trNetworkCode == ctNetworkCode  )
hgs
parents:
diff changeset
   303
                    {
hgs
parents:
diff changeset
   304
                    iValidTriggers.Append( trigger->Id() );
hgs
parents:
diff changeset
   305
                    }
hgs
parents:
diff changeset
   306
    			}
hgs
parents:
diff changeset
   307
    		}
hgs
parents:
diff changeset
   308
        }
hgs
parents:
diff changeset
   309
    iState = EStateEvaluateTriggers; 
hgs
parents:
diff changeset
   310
    SetActive();
hgs
parents:
diff changeset
   311
    TRequestStatus* status = &iStatus;
hgs
parents:
diff changeset
   312
    User::RequestComplete( status,KErrNone );    
hgs
parents:
diff changeset
   313
    }
hgs
parents:
diff changeset
   314
hgs
parents:
diff changeset
   315
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   316
// CLbtSimChangeHandler::InvalidateTriggers
hgs
parents:
diff changeset
   317
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   318
//   
hgs
parents:
diff changeset
   319
void CLbtSimChangeHandler::InvalidateDifferentNwTriggersL()
hgs
parents:
diff changeset
   320
    {
hgs
parents:
diff changeset
   321
    FUNC_ENTER("CLbtSimChangeHandler::InvalidateDifferentNwTriggers");
hgs
parents:
diff changeset
   322
    // Change the validity of these triggers to InValid
hgs
parents:
diff changeset
   323
    LOG("Invalidating Current N/W Triggers");
hgs
parents:
diff changeset
   324
    iState = EStateInvalidateTriggers; 
hgs
parents:
diff changeset
   325
    SetActive();
hgs
parents:
diff changeset
   326
    if( iInvalidTriggers.Count() )
hgs
parents:
diff changeset
   327
    	{
hgs
parents:
diff changeset
   328
	    iContainer.UpdateTriggersValidity( TLbtTriggerDynamicInfo::EInvalid,
hgs
parents:
diff changeset
   329
                                           iInvalidTriggers,
hgs
parents:
diff changeset
   330
                                           iAoOpcode,
hgs
parents:
diff changeset
   331
                                           iStatus );
hgs
parents:
diff changeset
   332
		iCleanupHandler.AddTriggersForCleanupL( iInvalidTriggers );
hgs
parents:
diff changeset
   333
    	}
hgs
parents:
diff changeset
   334
    else    
hgs
parents:
diff changeset
   335
    	{
hgs
parents:
diff changeset
   336
    	TRequestStatus* status = &iStatus;
hgs
parents:
diff changeset
   337
    	User::RequestComplete(status, KErrNone);
hgs
parents:
diff changeset
   338
    	}
hgs
parents:
diff changeset
   339
    }
hgs
parents:
diff changeset
   340
hgs
parents:
diff changeset
   341
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   342
// CLbtSimChangeHandler::ValidateTriggers
hgs
parents:
diff changeset
   343
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   344
//   
hgs
parents:
diff changeset
   345
void CLbtSimChangeHandler::ValidateCurrentNwTriggersL()
hgs
parents:
diff changeset
   346
    {
hgs
parents:
diff changeset
   347
    FUNC_ENTER("CLbtSimChangeHandler::ValidateCurrentNwTriggers");
hgs
parents:
diff changeset
   348
    LOG("Validating Current N/W Triggers");    
hgs
parents:
diff changeset
   349
    // Change the validity of these triggers to Valid
hgs
parents:
diff changeset
   350
    iState = EStateValidateTriggers; 
hgs
parents:
diff changeset
   351
    SetActive();
hgs
parents:
diff changeset
   352
    if( iValidTriggers.Count() )
hgs
parents:
diff changeset
   353
    	{
hgs
parents:
diff changeset
   354
        iContainer.UpdateTriggersValidity( TLbtTriggerDynamicInfo::EValid,
hgs
parents:
diff changeset
   355
                                           iValidTriggers,
hgs
parents:
diff changeset
   356
                                           iAoOpcode,
hgs
parents:
diff changeset
   357
                                           iStatus );
hgs
parents:
diff changeset
   358
        iCleanupHandler.RemoveTriggersFromCleanupL( iValidTriggers );
hgs
parents:
diff changeset
   359
    	}
hgs
parents:
diff changeset
   360
    else
hgs
parents:
diff changeset
   361
    	{
hgs
parents:
diff changeset
   362
    	TRequestStatus* status = &iStatus;
hgs
parents:
diff changeset
   363
    	User::RequestComplete(status, KErrNone);
hgs
parents:
diff changeset
   364
    	}    
hgs
parents:
diff changeset
   365
    }
hgs
parents:
diff changeset
   366
    
hgs
parents:
diff changeset
   367
    
hgs
parents:
diff changeset
   368
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   369
// CLbtSimChangeHandler::SubscribeForSimChange
hgs
parents:
diff changeset
   370
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   371
//   
hgs
parents:
diff changeset
   372
void CLbtSimChangeHandler::SubscribeForSimChange()
hgs
parents:
diff changeset
   373
    {
hgs
parents:
diff changeset
   374
    FUNC_ENTER("CLbtSimChangeHandler::SubscribeForSimChange");
hgs
parents:
diff changeset
   375
    iSimProperty.Subscribe( iStatus );
hgs
parents:
diff changeset
   376
    iState = EStateSimChangeEvent;
hgs
parents:
diff changeset
   377
    SetActive();   
hgs
parents:
diff changeset
   378
    }
hgs
parents:
diff changeset
   379
hgs
parents:
diff changeset
   380
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   381
// CLbtSimChangeHandler::DoCancel
hgs
parents:
diff changeset
   382
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   383
//   
hgs
parents:
diff changeset
   384
void CLbtSimChangeHandler::DoCancel()
hgs
parents:
diff changeset
   385
    {
hgs
parents:
diff changeset
   386
    FUNC_ENTER("CLbtSimChangeHandler::DoCancel");
hgs
parents:
diff changeset
   387
    switch( iState )
hgs
parents:
diff changeset
   388
        {
hgs
parents:
diff changeset
   389
        case EStateSimChangeEvent:
hgs
parents:
diff changeset
   390
            iSimProperty.Cancel();
hgs
parents:
diff changeset
   391
            break;
hgs
parents:
diff changeset
   392
        
hgs
parents:
diff changeset
   393
        case EStateGetNetworkInfo:
hgs
parents:
diff changeset
   394
            iMPhone.CancelAsyncRequest( EMobilePhoneGetCurrentNetwork );
hgs
parents:
diff changeset
   395
            break;
hgs
parents:
diff changeset
   396
        
hgs
parents:
diff changeset
   397
        case EStateListTriggers:
hgs
parents:
diff changeset
   398
        case EStateInvalidateTriggers:
hgs
parents:
diff changeset
   399
        case EStateValidateTriggers:
hgs
parents:
diff changeset
   400
            iContainer.CancelAsyncOperation( iAoOpcode );
hgs
parents:
diff changeset
   401
            break;
hgs
parents:
diff changeset
   402
        
hgs
parents:
diff changeset
   403
        default:
hgs
parents:
diff changeset
   404
            break;          
hgs
parents:
diff changeset
   405
        }
hgs
parents:
diff changeset
   406
    }
hgs
parents:
diff changeset
   407
hgs
parents:
diff changeset
   408
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   409
// CLbtSimChangeHandler::TriggerStoreChanged
hgs
parents:
diff changeset
   410
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   411
//
hgs
parents:
diff changeset
   412
void CLbtSimChangeHandler::TriggerStoreChanged( RArray<TLbtTriggerId>& aTriggerIds,
hgs
parents:
diff changeset
   413
                                               TLbtTriggerEventMask aEventMask,
hgs
parents:
diff changeset
   414
                                               TLbtContainerChangedAreaType /*aAreaType*/,
hgs
parents:
diff changeset
   415
                                               RArray<TUid>& aManagerUids )
hgs
parents:
diff changeset
   416
    {
hgs
parents:
diff changeset
   417
    // Remove observer
hgs
parents:
diff changeset
   418
    iContainer.RemoveObserver( this );
hgs
parents:
diff changeset
   419
    iTriggerChangeObserver.HandleTriggersChange( aTriggerIds,aManagerUids,aEventMask );
hgs
parents:
diff changeset
   420
    }
hgs
parents:
diff changeset
   421
hgs
parents:
diff changeset
   422
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   423
// CLbtSimChangeHandler::InitialiseEtelL
hgs
parents:
diff changeset
   424
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   425
//
hgs
parents:
diff changeset
   426
void CLbtSimChangeHandler::InitialiseEtelL()
hgs
parents:
diff changeset
   427
    {
hgs
parents:
diff changeset
   428
    FUNC_ENTER("CLbtSimChangeHandler::InitialiseEtelL");
hgs
parents:
diff changeset
   429
    CCommsDatabase* const db = CCommsDatabase::NewL(ETrue); 
hgs
parents:
diff changeset
   430
	CleanupStack::PushL(db); 
hgs
parents:
diff changeset
   431
hgs
parents:
diff changeset
   432
	TUint32 modemId = 0; 
hgs
parents:
diff changeset
   433
	db->GetGlobalSettingL(TPtrC(MODEM_PHONE_SERVICES_SMS), modemId); 
hgs
parents:
diff changeset
   434
	CCommsDbTableView* const view =
hgs
parents:
diff changeset
   435
	    db->OpenViewMatchingUintLC(TPtrC(MODEM), TPtrC(COMMDB_ID), modemId); 
hgs
parents:
diff changeset
   436
hgs
parents:
diff changeset
   437
	TInt err = view->GotoFirstRecord();
hgs
parents:
diff changeset
   438
	if(err != KErrNone)
hgs
parents:
diff changeset
   439
	    {
hgs
parents:
diff changeset
   440
        User::Leave(err);
hgs
parents:
diff changeset
   441
	    }
hgs
parents:
diff changeset
   442
hgs
parents:
diff changeset
   443
    HBufC* nameBuf = NULL;
hgs
parents:
diff changeset
   444
    nameBuf = view->ReadLongTextLC(TPtrC(MODEM_TSY_NAME));
hgs
parents:
diff changeset
   445
hgs
parents:
diff changeset
   446
    User::LeaveIfError(iTelServer.Connect());
hgs
parents:
diff changeset
   447
	err = iTelServer.LoadPhoneModule(*nameBuf);
hgs
parents:
diff changeset
   448
	
hgs
parents:
diff changeset
   449
	if(err != KErrNone)
hgs
parents:
diff changeset
   450
	    {
hgs
parents:
diff changeset
   451
        User::Leave(err);
hgs
parents:
diff changeset
   452
	    }
hgs
parents:
diff changeset
   453
		    
hgs
parents:
diff changeset
   454
	// For the phone information
hgs
parents:
diff changeset
   455
	RTelServer::TPhoneInfo info;
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
	iTelServer.GetPhoneInfo(0, info); 
hgs
parents:
diff changeset
   458
	err = iMPhone.Open(iTelServer, info.iName);
hgs
parents:
diff changeset
   459
hgs
parents:
diff changeset
   460
	if(err != KErrNone)
hgs
parents:
diff changeset
   461
	    {
hgs
parents:
diff changeset
   462
        User::Leave(err);
hgs
parents:
diff changeset
   463
	    }
hgs
parents:
diff changeset
   464
   
hgs
parents:
diff changeset
   465
	CleanupStack::PopAndDestroy(3); // nameBuf, view and db 
hgs
parents:
diff changeset
   466
	}
hgs
parents:
diff changeset
   467
    
hgs
parents:
diff changeset
   468
//end of file
hgs
parents:
diff changeset
   469