phoneapp/phoneuistates/src/cphonestatemachinegsm.cpp
changeset 21 92ab7f8d0eab
parent 0 5f000ab63145
child 51 f39ed5e045e0
equal deleted inserted replaced
4:c84cf270c54f 21:92ab7f8d0eab
    65 //
    65 //
    66 EXPORT_C CPhoneStateMachineGSM::~CPhoneStateMachineGSM()
    66 EXPORT_C CPhoneStateMachineGSM::~CPhoneStateMachineGSM()
    67     {
    67     {
    68     __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneStateMachineGSM::~CPhoneStateMachineGSM() ");
    68     __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneStateMachineGSM::~CPhoneStateMachineGSM() ");
    69     if( iEmergencyState )
    69     if( iEmergencyState )
    70 	    {
    70         {
    71 	    delete iEmergencyState;
    71         delete iEmergencyState;
    72 	    iEmergencyState = NULL;	    	
    72         iEmergencyState = NULL;         
    73 	    }
    73         }
    74     Dll::FreeTls();
    74     Dll::FreeTls();
    75     }
    75     }
    76 
    76 
    77 // ---------------------------------------------------------
    77 // ---------------------------------------------------------
    78 // CPhoneStateMachineGSM::State
    78 // CPhoneStateMachineGSM::State
    97         if ( deleteOldState )
    97         if ( deleteOldState )
    98             {
    98             {
    99             // Possible that derived class has been deleted iState,
    99             // Possible that derived class has been deleted iState,
   100             // so this delete statement may be useless.
   100             // so this delete statement may be useless.
   101             delete iState;
   101             delete iState;
   102             iState = NULL;	            		
   102             iState = NULL;                      
   103             }
   103             }
   104         
   104         
   105         // State transition need to be made - construct new state and
   105         // State transition need to be made - construct new state and
   106         // destruct old
   106         // destruct old
   107         switch( iNewStateId )
   107         switch( iNewStateId )
   108             {
   108             {
   109             case EPhoneStateCallSetup:
   109             case EPhoneStateCallSetup:
   110                 TRAP( err, iState = CPhoneCallSetup::NewL( 
   110                 TRAP( err, iState = CPhoneCallSetup::NewL( 
   111                 	this, iViewCommandHandle, iCustomization ));
   111                     this, iViewCommandHandle, iCustomization ));
   112                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   112                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   113                 madeStateTransition = ETrue;
   113                 madeStateTransition = ETrue;
   114                 break;
   114                 break;
   115                 
   115                 
   116             case EPhoneStateAlerting:
   116             case EPhoneStateAlerting:
   117                 TRAP( err, iState = CPhoneAlerting::NewL(
   117                 TRAP( err, iState = CPhoneAlerting::NewL(
   118                 	this, iViewCommandHandle, iCustomization ));
   118                     this, iViewCommandHandle, iCustomization ));
   119                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   119                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   120                 madeStateTransition = ETrue;
   120                 madeStateTransition = ETrue;
   121                 break;
   121                 break;
   122                 
   122                 
   123             case EPhoneStateSingle:
   123             case EPhoneStateSingle:
   124                 TRAP( err, iState = CPhoneSingleCall::NewL( 
   124                 TRAP( err, iState = CPhoneSingleCall::NewL( 
   125                 	this, iViewCommandHandle, iCustomization ));
   125                     this, iViewCommandHandle, iCustomization ));
   126                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   126                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   127                 madeStateTransition = ETrue;
   127                 madeStateTransition = ETrue;
   128                 break;
   128                 break;
   129                 
   129                 
   130             case EPhoneStateWaitingInSingle:
   130             case EPhoneStateWaitingInSingle:
   131                 TRAP( err, iState = CPhoneSingleAndWaiting::NewL( 
   131                 TRAP( err, iState = CPhoneSingleAndWaiting::NewL( 
   132                 	this, iViewCommandHandle, iCustomization ));
   132                     this, iViewCommandHandle, iCustomization ));
   133                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   133                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   134                 madeStateTransition = ETrue;
   134                 madeStateTransition = ETrue;
   135                 break;
   135                 break;
   136                 
   136                 
   137             case EPhoneStateTwoSingles:
   137             case EPhoneStateTwoSingles:
   138                 TRAP( err, iState = CPhoneTwoSingles::NewL( 
   138                 TRAP( err, iState = CPhoneTwoSingles::NewL( 
   139                 	this, iViewCommandHandle, iCustomization ));
   139                     this, iViewCommandHandle, iCustomization ));
   140                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   140                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   141                 madeStateTransition = ETrue;
   141                 madeStateTransition = ETrue;
   142                 break;
   142                 break;
   143                 
   143                 
   144             case EPhoneStateCallSetupInSingle:
   144             case EPhoneStateCallSetupInSingle:
   145                 TRAP( err, iState = CPhoneSingleAndCallSetup::NewL( 
   145                 TRAP( err, iState = CPhoneSingleAndCallSetup::NewL( 
   146                 	this, iViewCommandHandle, iCustomization ));
   146                     this, iViewCommandHandle, iCustomization ));
   147                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   147                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   148                 madeStateTransition = ETrue;
   148                 madeStateTransition = ETrue;
   149                 break;
   149                 break;
   150                 
   150                 
   151             case EPhoneStateAlertingInSingle:
   151             case EPhoneStateAlertingInSingle:
   152                 TRAP( err, iState = CPhoneSingleAndAlerting::NewL( 
   152                 TRAP( err, iState = CPhoneSingleAndAlerting::NewL( 
   153                 	this, iViewCommandHandle, iCustomization ));
   153                     this, iViewCommandHandle, iCustomization ));
   154                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   154                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   155                 madeStateTransition = ETrue;
   155                 madeStateTransition = ETrue;
   156                 break;
   156                 break;
   157                 
   157                 
   158             case EPhoneStateConference:
   158             case EPhoneStateConference:
   159                 TRAP( err, iState = CPhoneConference::NewL( 
   159                 TRAP( err, iState = CPhoneConference::NewL( 
   160                 	this, iViewCommandHandle, iCustomization ));
   160                     this, iViewCommandHandle, iCustomization ));
   161                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   161                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   162                 madeStateTransition = ETrue;
   162                 madeStateTransition = ETrue;
   163                 break;
   163                 break;
   164                 
   164                 
   165             case EPhoneStateConferenceAndCallSetup:
   165             case EPhoneStateConferenceAndCallSetup:
   166                 TRAP( err, iState = CPhoneConferenceAndCallSetup::NewL( 
   166                 TRAP( err, iState = CPhoneConferenceAndCallSetup::NewL( 
   167                 	this, iViewCommandHandle, iCustomization ) );
   167                     this, iViewCommandHandle, iCustomization ) );
   168                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   168                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   169                 madeStateTransition = ETrue;
   169                 madeStateTransition = ETrue;
   170                 break;
   170                 break;
   171  
   171  
   172             case EPhoneStateConferenceAndSingle:
   172             case EPhoneStateConferenceAndSingle:
   173                 TRAP( err, iState = CPhoneConferenceAndSingle::NewL( 
   173                 TRAP( err, iState = CPhoneConferenceAndSingle::NewL( 
   174                 	this, iViewCommandHandle, iCustomization ) );
   174                     this, iViewCommandHandle, iCustomization ) );
   175                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   175                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   176                 madeStateTransition = ETrue;
   176                 madeStateTransition = ETrue;
   177                 break;
   177                 break;
   178                 
   178                 
   179             case EPhoneStateConferenceAndWaiting:
   179             case EPhoneStateConferenceAndWaiting:
   180                 TRAP( err, iState = CPhoneConferenceAndWaiting::NewL( 
   180                 TRAP( err, iState = CPhoneConferenceAndWaiting::NewL( 
   181                 	this, iViewCommandHandle, iCustomization ) );
   181                     this, iViewCommandHandle, iCustomization ) );
   182                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   182                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   183                 madeStateTransition = ETrue;
   183                 madeStateTransition = ETrue;
   184                 break;
   184                 break;
   185                 
   185                 
   186             case EPhoneStateSingleAndCallSetupAndWaiting:
   186             case EPhoneStateSingleAndCallSetupAndWaiting:
   187                 TRAP( err, iState = CPhoneSingleAndCallSetupAndWaiting::NewL( 
   187                 TRAP( err, iState = CPhoneSingleAndCallSetupAndWaiting::NewL( 
   188                 	this, iViewCommandHandle, iCustomization ) );
   188                     this, iViewCommandHandle, iCustomization ) );
   189                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   189                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   190                 madeStateTransition = ETrue;
   190                 madeStateTransition = ETrue;
   191                 break;
   191                 break;
   192                 
   192                 
   193             case EPhoneStateCallSetupAndWaiting:
   193             case EPhoneStateCallSetupAndWaiting:
   194                 TRAP( err, iState = CPhoneCallSetupAndWaiting::NewL( 
   194                 TRAP( err, iState = CPhoneCallSetupAndWaiting::NewL( 
   195                 	this, iViewCommandHandle, iCustomization ) );
   195                     this, iViewCommandHandle, iCustomization ) );
   196                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   196                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   197                 madeStateTransition = ETrue;
   197                 madeStateTransition = ETrue;
   198                 break;
   198                 break;
   199 
   199 
   200             case EPhoneStateTwoSinglesAndWaiting:
   200             case EPhoneStateTwoSinglesAndWaiting:
   201                 TRAP( err, iState = CPhoneTwoSinglesAndWaiting::NewL( 
   201                 TRAP( err, iState = CPhoneTwoSinglesAndWaiting::NewL( 
   202                 	this, iViewCommandHandle, iCustomization ) );
   202                     this, iViewCommandHandle, iCustomization ) );
   203                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   203                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   204                 madeStateTransition = ETrue;
   204                 madeStateTransition = ETrue;
   205                 break;
   205                 break;
   206                 
   206                 
   207             case EPhoneStateConferenceAndSingleAndWaiting:
   207             case EPhoneStateConferenceAndSingleAndWaiting:
   208                 TRAP( err, iState = CPhoneConferenceAndSingleAndWaiting::NewL( 
   208                 TRAP( err, iState = CPhoneConferenceAndSingleAndWaiting::NewL( 
   209                 	this, iViewCommandHandle, iCustomization ));
   209                     this, iViewCommandHandle, iCustomization ));
   210                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   210                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   211                 madeStateTransition = ETrue;
   211                 madeStateTransition = ETrue;
   212                 break;
   212                 break;
   213                 
   213                 
   214             case EPhoneStateEmergency:
   214             case EPhoneStateEmergency:
   215                 if( !iEmergencyStateConstructed )
   215                 if( !iEmergencyStateConstructed )
   216 	                {
   216                     {
   217 	                TRAP( err, iEmergencyState = CPhoneEmergency::NewL( 
   217                     TRAP( err, iEmergencyState = CPhoneEmergency::NewL( 
   218 	                	this, iViewCommandHandle, iCustomization ) );
   218                         this, iViewCommandHandle, iCustomization ) );
   219 	                __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );						                	
   219                     __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );                                          
   220 					iEmergencyStateConstructed = ETrue;
   220                     iEmergencyStateConstructed = ETrue;
   221 	                }
   221                     }
   222                 static_cast< CPhoneEmergency* >( iEmergencyState )->
   222                 static_cast< CPhoneEmergency* >( iEmergencyState )->
   223                     SetStartupInterrupted( iOldStateId == EPhoneStateStartup );
   223                     SetStartupInterrupted( iOldStateId == EPhoneStateStartup );
   224 				iState = iEmergencyState;
   224                 iState = iEmergencyState;
   225                 madeStateTransition = ETrue;
   225                 madeStateTransition = ETrue;
   226                 break;
   226                 break;
   227                 
   227                 
   228             case EPhoneStateConferenceAndWaitingAndCallSetup:
   228             case EPhoneStateConferenceAndWaitingAndCallSetup:
   229                 TRAP( err, iState = 
   229                 TRAP( err, iState = 
   230           			CPhoneConferenceAndWaitingAndCallSetup::NewL( 
   230                     CPhoneConferenceAndWaitingAndCallSetup::NewL( 
   231           				this, iViewCommandHandle, iCustomization ) );
   231                         this, iViewCommandHandle, iCustomization ) );
   232                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   232                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   233                 madeStateTransition = ETrue;
   233                 madeStateTransition = ETrue;
   234                 break;
   234                 break;
   235                 
   235                 
   236             case EPhoneStateIdle:
   236             case EPhoneStateIdle:
   237             	if ( iOldStateId != EPhoneStateEmergency )
   237                 if ( iOldStateId != EPhoneStateEmergency )
   238 	            	{
   238                     {
   239                     if( !iEmergencyStateConstructed )
   239                     if( !iEmergencyStateConstructed )
   240 	                    {
   240                         {
   241 	                    TRAP( err, iEmergencyState = CPhoneEmergency::NewL( 
   241                         TRAP( err, iEmergencyState = CPhoneEmergency::NewL( 
   242 	                    	this, iViewCommandHandle, iCustomization ) );
   242                             this, iViewCommandHandle, iCustomization ) );
   243 	                    __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );						                	
   243                         __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );                                          
   244 					    iEmergencyStateConstructed = ETrue;
   244                         iEmergencyStateConstructed = ETrue;
   245 	                    }
   245                         }
   246 	            	}
   246                     }
   247 	            if( iIdleState == NULL )
   247                 if( iIdleState == NULL )
   248 		            {
   248                     {
   249 	                TRAP( err, iIdleState = 
   249                     TRAP( err, iIdleState = 
   250 	          			CPhoneIdle::NewL( this, iViewCommandHandle, iCustomization ) );
   250                         CPhoneIdle::NewL( this, iViewCommandHandle, iCustomization ) );
   251 	                __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   251                     __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   252 		            }
   252                     }
   253 				iState = iIdleState;
   253                 iState = iIdleState;
   254                 madeStateTransition = ETrue;
   254                 madeStateTransition = ETrue;
   255                 break;
   255                 break;
   256                 
   256                 
   257             case EPhoneStateIncoming:
   257             case EPhoneStateIncoming:
   258                 TRAP( err, iState = 
   258                 TRAP( err, iState = 
   259           			CPhoneIncoming::NewL( this, iViewCommandHandle, iCustomization ) );
   259                     CPhoneIncoming::NewL( this, iViewCommandHandle, iCustomization ) );
   260                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   260                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   261                 madeStateTransition = ETrue;
   261                 madeStateTransition = ETrue;
   262                 break;
   262                 break;
   263 
   263 
   264             case EPhoneStateStartup:
   264             case EPhoneStateStartup:
   265                 TRAP( err, iState = 
   265                 TRAP( err, iState = 
   266           			CPhoneStartup::NewL( this, iViewCommandHandle, 
   266                     CPhoneStartup::NewL( this, iViewCommandHandle, 
   267           			iOldStateId == EPhoneStateEmergency ) );
   267                     iOldStateId == EPhoneStateEmergency ) );
   268                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   268                 __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
   269                 madeStateTransition = ETrue;
   269                 madeStateTransition = ETrue;
   270                 break;
   270                 break;
   271 
   271 
   272             default:
   272             default: