mmsharing/mmshavailability/src/musavaconnectionavailability.cpp
changeset 22 496ad160a278
equal deleted inserted replaced
15:ccd8e69b5392 22:496ad160a278
       
     1 /*
       
     2 * Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   Provide interface for the client requestin availability class.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include "musavaconnectionavailability.h"
       
    21 #include "musavaavailabilityobserver.h"
       
    22 #include "musavasettingsimp.h"
       
    23 #include "musavaobserver.h"
       
    24 #include "musavaavailability.h"
       
    25 #include "musavasharedobject.h"
       
    26 #include "musavaconnectionmonitor.h"
       
    27 #include "musavanetworkregistrationstatus.h"
       
    28 #include "musavanetworkmodestatus.h"
       
    29 #include "musavasip.h"
       
    30 #include "mussettings.h"
       
    31 #include "mussettingskeys.h"
       
    32 #include "muslogger.h"
       
    33 #include "musfactorysettings.h"
       
    34 
       
    35 #include <e32base.h>
       
    36 #include <rconnmon.h>
       
    37 #include <e32cmn.h>
       
    38 #include <etelmm.h>
       
    39 #include <nifvar.h>
       
    40 
       
    41 
       
    42 // --------------------------------------------------------------------------
       
    43 // Symbian two-phase constructor
       
    44 // --------------------------------------------------------------------------
       
    45 //
       
    46 CMusAvaConnectionAvailability* CMusAvaConnectionAvailability::NewL(
       
    47     MMusAvaAvailabilityObserver& aObserver,
       
    48     CMusAvaSettingsImp& aSettings  )
       
    49     {
       
    50     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::NewL()" )
       
    51     CMusAvaConnectionAvailability* self =
       
    52         CMusAvaConnectionAvailability::NewLC(
       
    53             aObserver, aSettings );
       
    54     CleanupStack::Pop( self );
       
    55     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::NewL()" )
       
    56     return self;
       
    57     }
       
    58 
       
    59 
       
    60 // -------------------------------------------------------------------------
       
    61 //  Two-phased constructor.
       
    62 // -------------------------------------------------------------------------
       
    63 //
       
    64 CMusAvaConnectionAvailability* CMusAvaConnectionAvailability::NewLC(
       
    65     MMusAvaAvailabilityObserver& aObserver, 
       
    66     CMusAvaSettingsImp& aSettings  )
       
    67     {
       
    68     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::NewLC()" )
       
    69     CMusAvaConnectionAvailability* self =
       
    70         new( ELeave ) CMusAvaConnectionAvailability(
       
    71             aObserver, aSettings );
       
    72     CleanupStack::PushL( self );
       
    73     self->ConstructL();
       
    74     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::NewLC()" )
       
    75     return self;
       
    76     }
       
    77 
       
    78 
       
    79 // -------------------------------------------------------------------------
       
    80 //  Destructor.
       
    81 // -------------------------------------------------------------------------
       
    82 //
       
    83 CMusAvaConnectionAvailability::~CMusAvaConnectionAvailability()
       
    84     {
       
    85     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
       
    86         ~CMusAvaConnectionAvailability()" )
       
    87     if( iSharedObj )
       
    88         {
       
    89         iSharedObj->DeleteSingleton();
       
    90         }
       
    91     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
    92         ~CMusAvaConnectionAvailability()" )
       
    93     }
       
    94 
       
    95 
       
    96 // -------------------------------------------------------------------------
       
    97 //  Constructor.
       
    98 // -------------------------------------------------------------------------
       
    99 //
       
   100 CMusAvaConnectionAvailability::CMusAvaConnectionAvailability(
       
   101     MMusAvaAvailabilityObserver& aObserver, 
       
   102     CMusAvaSettingsImp& aSettings  )
       
   103     :CMusAvaAvailability( aObserver ),
       
   104     iSettings( aSettings )
       
   105     {
       
   106     }
       
   107 
       
   108 
       
   109 // ---------------------------------------------------------------------------
       
   110 // Symbian 2nd phase constructor can leave.
       
   111 // ---------------------------------------------------------------------------
       
   112 //
       
   113 void CMusAvaConnectionAvailability::ConstructL()
       
   114     {
       
   115     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::ConstructL()" )
       
   116     iSharedObj = CMusAvaSharedObject::GetSingletonL();
       
   117     iNetworkRegistrationStatus =  &iSharedObj->MusAvaTelephonyStatus();
       
   118     iNetworkModeStatus = &iSharedObj->NetworkModeStatus();
       
   119     iConnectionMonitor = &iSharedObj->ConnectionMonitor();
       
   120     iNetworkRegistrationStatus->AddAdapterL( *this );
       
   121 	iNetworkModeStatus->AddAdapterL( *this );
       
   122 	iConnectionMonitor->AddAdapterL( *this );
       
   123 	iConnectionMonitor->NotifyEventL();
       
   124     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::ConstructL()" )
       
   125     }
       
   126 
       
   127 
       
   128 // ---------------------------------------------------------------------------
       
   129 // From CMusAvaAvailability.
       
   130 // Executes for the availability
       
   131 // ---------------------------------------------------------------------------
       
   132 //
       
   133 
       
   134 void CMusAvaConnectionAvailability::DoExecuteL()
       
   135     {
       
   136     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::DoExecuteL()" )
       
   137 	MMusAvaObserver::TAvailabilityStatus status; 
       
   138     MUS_LOG( "mus: [MUSAVA]  Check network mode" )
       
   139     RMobilePhone::TMobilePhoneNetworkMode networkmode = 
       
   140                                         iNetworkModeStatus->PhoneNetworkMode();
       
   141 
       
   142 	TBool SupportedNetwork = EFalse; 
       
   143 	
       
   144 	TRAPD( err, SupportedNetwork = MusFactorySettings::IsSupportedL(networkmode) );
       
   145 	
       
   146 	
       
   147 	if ( err != KErrNone )
       
   148 		{
       
   149 	    MUS_LOG1( "mus: [MUSAVA]  Reading activation setting error:%d", err )
       
   150     	SetState( MMusAvaObserver::EMusActivationError );
       
   151 		}
       
   152 
       
   153 	else if ( SupportedNetwork )
       
   154         {
       
   155         if (  networkmode == RMobilePhone::ENetworkModeGsm )
       
   156         	{
       
   157         	MUS_LOG( "mus: [MUSAVA]  Edge Network Mode allowed in settings " )     
       
   158             if( iConnectionMonitor->ConnectionCount() > 0)       
       
   159                 {
       
   160                 MUS_LOG( "mus: [MUSAVA]  Atlease one packect connection exists " )     
       
   161                 SetState( NetworkRegistrationAndSettingsL() );  
       
   162                 }
       
   163             else
       
   164                 {
       
   165                 MUS_LOG( "mus: [MUSAVA]  No Packet connection exists now." )     
       
   166                 SetState( MMusAvaObserver::EMusAvaEdgeDtmStatusUnknown );                    
       
   167                 }
       
   168         	}
       
   169 
       
   170 		 else
       
   171         	{
       
   172        		status = NetworkRegistrationAndSettingsL();
       
   173         	MUS_LOG1( "mus: [MUSAVA] Activation Status: %d", status )
       
   174         	SetState( status );
       
   175         	}
       
   176         }
       
   177 	else 
       
   178     	{    	
       
   179         MUS_LOG( "mus: [MUSAVA] Network not available" )
       
   180         SetState( MMusAvaObserver::EMusAvaNetworkType );
       
   181     	}
       
   182 
       
   183     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::DoExecuteL()" )
       
   184     }
       
   185 
       
   186 
       
   187 // ---------------------------------------------------------------------------
       
   188 // From CMusAvaAvailability.
       
   189 // Stops execution.
       
   190 // ---------------------------------------------------------------------------
       
   191 //
       
   192 void CMusAvaConnectionAvailability::Stop()
       
   193     {
       
   194     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::Stop()" )
       
   195     
       
   196     iNetworkRegistrationStatus->RemoveAdapter( *this );
       
   197     iNetworkModeStatus->RemoveAdapter( *this );
       
   198     iConnectionMonitor->RemoveAdapter( *this );
       
   199     
       
   200     SetState( MMusAvaObserver::EMusAvaStatusNotExecuted );
       
   201     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::Stop()" )
       
   202     }
       
   203 
       
   204 
       
   205 // ---------------------------------------------------------------------------
       
   206 // From CMusAvaAvailability.
       
   207 // Returns name of *this* availability module.
       
   208 // ---------------------------------------------------------------------------
       
   209 //
       
   210 MMusAvaObserver::TAvailabilityName CMusAvaConnectionAvailability::Name()
       
   211     {
       
   212     return MMusAvaObserver::EMusAvaBearerStatus;
       
   213     }
       
   214 
       
   215 // ---------------------------------------------------------------------------
       
   216 // CMusAvaConnectionAvailability::PhoneNetworkModeStatus  
       
   217 // 
       
   218 // ---------------------------------------------------------------------------
       
   219 //
       
   220 void CMusAvaConnectionAvailability::PhoneNetworkModeStatus(
       
   221                             RMobilePhone::TMobilePhoneNetworkMode aStatus )
       
   222     {
       
   223     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
       
   224     PhoneNetworkModeStatus()" )
       
   225     MUS_LOG1( "mus: [MUSAVA] Mobile Phone Network Status = ", aStatus )
       
   226     
       
   227    	TBool SupportedNetwork = EFalse; 
       
   228 	
       
   229 	TRAPD( err, SupportedNetwork = MusFactorySettings::IsSupportedL(aStatus) );
       
   230     
       
   231     if ( err != KErrNone || !SupportedNetwork )
       
   232     	{
       
   233         MUS_LOG( "mus: [MUSAVA] Network not available" )
       
   234         SetState( MMusAvaObserver::EMusAvaNetworkType );
       
   235     	}
       
   236 	else
       
   237 		{
       
   238 		MMusAvaObserver::TAvailabilityStatus status = 
       
   239 		                   MMusAvaObserver::EMusActivationError;
       
   240         TRAP_IGNORE( status = NetworkRegistrationAndSettingsL() );
       
   241         SetState( status );
       
   242 		}    
       
   243 
       
   244     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   245     PhoneNetworkModeStatus()" )
       
   246     }
       
   247 
       
   248 // ---------------------------------------------------------------------------
       
   249 // CMusAvaConnectionAvailability::NetworkRegistrationStatus
       
   250 // 
       
   251 // ---------------------------------------------------------------------------
       
   252 //
       
   253 void CMusAvaConnectionAvailability::NetworkRegistrationStatus(
       
   254                     RMobilePhone::TMobilePhoneRegistrationStatus aRegStatus )
       
   255     {
       
   256     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
       
   257     NetworkRegistrationStatus()" )
       
   258     MUS_LOG1( "Mobile Phone Network Status = ", aRegStatus )
       
   259 
       
   260     MusSettingsKeys::TActivation activation  = MusSettingsKeys::ENever;
       
   261 
       
   262     TRAPD( err, activation = MultimediaSharingSettings::ActivationSettingL() );
       
   263     if( err != KErrNone )
       
   264         {
       
   265         MUS_LOG1( "mus: [MUSAVA]  Reading activation setting error:%d", err )
       
   266         SetState( MMusAvaObserver::EMusActivationError );
       
   267         }
       
   268     else
       
   269         {
       
   270         if( activation == MusSettingsKeys::EActiveInHomeNetworks &&
       
   271         aRegStatus != RMobilePhone::ERegisteredOnHomeNetwork )
       
   272             {
       
   273             MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
       
   274             NetworkRegistrationStatus()" )
       
   275             SetState( MMusAvaObserver::EMusAvaRoamingError );
       
   276             }
       
   277         }
       
   278 
       
   279     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   280     NetworkRegistrationStatus()" )
       
   281     }
       
   282 
       
   283 
       
   284 // ---------------------------------------------------------------------------
       
   285 // CMusAvaConnectionAvailability::EventL
       
   286 //
       
   287 // ---------------------------------------------------------------------------
       
   288 //
       
   289 void CMusAvaConnectionAvailability::EventL(
       
   290                                         const CConnMonEventBase& aConnMonEvent)
       
   291     {
       
   292     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::EventL()" )
       
   293     TInt connectionId = 0;
       
   294     TInt event = aConnMonEvent.EventType();
       
   295     TUint connId = aConnMonEvent.ConnectionId();
       
   296     CMusAvaConnectionMonitor& connectionMonitor = 
       
   297                                             iSharedObj->ConnectionMonitor();
       
   298     TUint musConnID = connectionMonitor.CreatedConnectionID();
       
   299     MUS_LOG1( "mus: [MUSAVA] Current connection ID %d = ", musConnID )
       
   300     MUS_LOG1( "mus: [MUSAVA] Event connection ID %d = ", connId )
       
   301 
       
   302     switch ( event )
       
   303         {
       
   304         case EConnMonCreateConnection:
       
   305             {
       
   306             MUS_LOG( "mus: [MUSAVA] Event type = EConnMonCreateConnection" )
       
   307             if( musConnID == 0 )
       
   308                 {
       
   309                 MUS_LOG( "mus: [MUSAVA] Store Connection ID" )
       
   310                 TRAPD( err, connectionId = 
       
   311                                         iConnectionMonitor->ConnectionIDL() );
       
   312                 if ( err == KErrNotFound )
       
   313                     {
       
   314                     SetState( MMusAvaObserver::EMusAvaConnectionErr );
       
   315                     }
       
   316                	else
       
   317                		{
       
   318                		iConnectionMonitor->SetConnectionID( connectionId );
       
   319                		}
       
   320                 }
       
   321             break;
       
   322             }
       
   323         case EConnMonDeleteConnection:
       
   324             {
       
   325             MUS_LOG( "mus: [MUSAVA] Event type = EConnMonDeleteConnection" )
       
   326             if( connId == musConnID )
       
   327                 {
       
   328                 SetState( MMusAvaObserver::EMusAvaConnectionErr );
       
   329                 }
       
   330             break;
       
   331             }
       
   332 
       
   333 		 case EConnMonConnectionStatusChange:
       
   334             {
       
   335             MUS_LOG( "mus: [MUSAVA] Event type = \
       
   336                 EConnMonConnectionStatusChange" )
       
   337             const CConnMonConnectionStatusChange* connectionStatusChange
       
   338                  = (const CConnMonConnectionStatusChange*)(&aConnMonEvent);
       
   339             TInt connStatus = connectionStatusChange->ConnectionStatus();
       
   340             MUS_LOG1( "mus: [MUSAVA] ConnectionStatus =  %d", connStatus )
       
   341             if ( connId == musConnID )
       
   342                 {
       
   343                 if( connStatus == KConnectionFailure ||
       
   344                     connStatus == KConnectionClosed ||
       
   345                     connStatus == KDataTransferTemporarilyBlocked ||
       
   346                     connStatus == KLinkLayerClosed ||
       
   347                     connStatus == KPsdSuspended ||
       
   348                     connStatus == KPsdFinishedDeactivation )
       
   349                     {
       
   350                     SetState( MMusAvaObserver::EMusAvaConnectionErr );
       
   351                     }
       
   352                 if( connStatus == KConnectionOpen ||
       
   353                     connStatus == KLinkLayerOpen )
       
   354                     {
       
   355                     SetState( NetworkRegistrationAndSettingsL() );
       
   356                     }
       
   357                 }
       
   358             break;
       
   359             }
       
   360 		case EConnMonNetworkStatusChange:
       
   361             {
       
   362             MUS_LOG( "mus: [MUSAVA] Event type = EConnMonNetworkStatusChange" )
       
   363             const CConnMonNetworkStatusChange* networkStatusChange
       
   364                  = (const CConnMonNetworkStatusChange*)(&aConnMonEvent);
       
   365 			TInt networkStatus = networkStatusChange->NetworkStatus();
       
   366             MUS_LOG1( "mus: [MUSAVA] NetworkStatus =  %d", networkStatus )
       
   367             if( connId == EBearerIdWCDMA || connId == EBearerIdWcdmaCSD )
       
   368             	{
       
   369             	if( EConnMonStatusAttached == networkStatus ||
       
   370             	    EConnMonStatusActive == networkStatus )
       
   371 	            	{
       
   372 	            	SetState( NetworkRegistrationAndSettingsL() );
       
   373 	            	}
       
   374              	else
       
   375 	                {
       
   376 	                SetState( MMusAvaObserver::EMusAvaConnectionErr );
       
   377 	                }
       
   378             	}
       
   379             break;
       
   380             }
       
   381         case EConnMonNetworkRegistrationChange:
       
   382             {
       
   383             MUS_LOG( "mus: [MUSAVA] Event type = \
       
   384                 EConnMonNetworkRegistrationChange" )
       
   385             const CConnMonNetworkRegistrationChange* registrationChange
       
   386                  = (const CConnMonNetworkRegistrationChange*)(&aConnMonEvent);
       
   387             TInt registrationStatus = registrationChange->RegistrationStatus();
       
   388             MUS_LOG1( "mus: [MUSAVA] RegistrationStatus =  %d", 
       
   389                     registrationStatus )
       
   390            	if( connId == EBearerIdWCDMA || connId == EBearerIdWcdmaCSD )
       
   391            	    {
       
   392            	    if ( ENetworkRegistrationRoaming == registrationStatus )
       
   393                     {
       
   394                     SetState( MMusAvaObserver::EMusAvaRoamingError );
       
   395                     }
       
   396                 else
       
   397                     {
       
   398                     SetState( NetworkRegistrationAndSettingsL() );
       
   399                     }
       
   400                 }
       
   401             break;
       
   402             }
       
   403         case EConnMonBearerChange:
       
   404             {
       
   405             MUS_LOG( "mus: [MUSAVA] Event type = EConnMonBearerChange" )
       
   406             MUS_LOG1( "mus: [MUSAVA] Bearer =  %d",connId )
       
   407             if( connId == EBearerIdGPRS ||
       
   408                 connId == EBearerIdWCDMA || 
       
   409                 connId == EBearerIdWcdmaCSD )
       
   410                 {
       
   411                 SetState( NetworkRegistrationAndSettingsL() );
       
   412                 }
       
   413             else
       
   414                 {
       
   415                 SetState( MMusAvaObserver::EMusAvaNetworkType );
       
   416                 }
       
   417             break;
       
   418             }
       
   419 
       
   420         case EConnMonPacketDataAvailable:
       
   421             {
       
   422             MUS_LOG( "mus: [MUSAVA] EConnMonPacketDataAvailable" )
       
   423             /* This is for EDGE /DTM support , This is the only place we can be 
       
   424                sure that packet data available along with CS call. Here we have to
       
   425                check again for activation settings and based on that availability 
       
   426                state has to be set
       
   427             */
       
   428             MMusAvaObserver::TAvailabilityStatus status
       
   429                                                 = NetworkRegistrationAndSettingsL();
       
   430             SetState( status );            
       
   431             break;
       
   432             }
       
   433 
       
   434         case EConnMonPacketDataUnavailable:
       
   435             {
       
   436 			if( connId == musConnID )
       
   437             	{
       
   438             	SetState( MMusAvaObserver::EMusAvaNetworkType );
       
   439             	MUS_LOG( "mus: [MUSAVA] EConnMonPacketDataUnavailable" )	
       
   440             	}
       
   441             else
       
   442                 {
       
   443                 MUS_LOG2(
       
   444 "mus: [MUSAVA] different connId (%d,%d) ignore EConnMonPacketDataUnavailable",
       
   445                           musConnID, connId )
       
   446                 }
       
   447             break;
       
   448             }
       
   449 
       
   450         case EConnMonBearerInfoChange:
       
   451             {
       
   452             MUS_LOG( "mus: [MUSAVA] EConnMonBearerInfoChange" )           
       
   453             break;
       
   454             }
       
   455         default :
       
   456             {
       
   457             MUS_LOG( "mus: [MUSAVA] Event type is not implemented" )
       
   458             MUS_LOG1( "mus: [MUSAVA] Event type %d = ", event )
       
   459             break;
       
   460             }
       
   461         }
       
   462 
       
   463     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::EventL()" )
       
   464     }
       
   465 
       
   466 // -------------------------------------------------------------------------
       
   467 // CMusAvaConnectionAvailability::MusAvaManualActivation
       
   468 //
       
   469 // -------------------------------------------------------------------------
       
   470 //    
       
   471 MMusAvaObserver::TAvailabilityStatus CMusAvaConnectionAvailability::
       
   472     ManualActivationL()
       
   473 	{
       
   474     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
       
   475     ManualActivationL()" )
       
   476 
       
   477     MusSettingsKeys::TOperatorVariant operatorVariant = 
       
   478     	MusSettingsKeys::EStandard;
       
   479     operatorVariant = MultimediaSharingSettings::OperatorVariantSettingL(); 
       
   480     
       
   481     if( operatorVariant ==  MusSettingsKeys::EOperatorSpecific )
       
   482     	{
       
   483     	MUS_LOG( "mus: [MUSAVA] Operator Specific No Manual query" )
       
   484     	MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   485     	NetworkRegistrationAndSettingsL()" )
       
   486     	return MMusAvaObserver::EMusActivationError;	
       
   487     	}
       
   488   	else
       
   489   		{
       
   490   		if ( iSettings.ManualActivation() == 
       
   491   		    MMusAvaSettings::EActivationAllowed )
       
   492   			{
       
   493   			MUS_LOG( "mus: [MUSAVA] Manual activation allowed" )
       
   494   			MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   495     		ManualActivationL()" )
       
   496   			return MMusAvaObserver::EMusAvaStatusAvailable;	
       
   497   			}
       
   498   		else if ( iSettings.ManualActivation() == 
       
   499   		    MMusAvaSettings::EActivationNotExecuted )
       
   500   			{
       
   501   			MUS_LOG( "mus: [MUSAVA] Manual activation is not executed" )
       
   502   			MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   503     		ManualActivationL()" )
       
   504   			return MMusAvaObserver::EMusAvaManualActivation;	
       
   505   			}
       
   506   		else
       
   507   			{
       
   508   			MUS_LOG( "mus: [MUSAVA] Activation error" )
       
   509   			MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   510     		ManualActivationL()" )
       
   511   			return MMusAvaObserver::EMusActivationError;	
       
   512   			}
       
   513   		}
       
   514 	}
       
   515 
       
   516 // -------------------------------------------------------------------------
       
   517 // CMusAvaConnectionAvailability::NetworkRegistrationAndSettingsL
       
   518 //
       
   519 // -------------------------------------------------------------------------
       
   520 //
       
   521 MMusAvaObserver::TAvailabilityStatus CMusAvaConnectionAvailability::
       
   522     NetworkRegistrationAndSettingsL()
       
   523     {
       
   524     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
       
   525     NetworkRegistrationAndSettingsL()" )
       
   526     MUS_LOG( "mus: [MUSAVA]  Check registration network status" )
       
   527     MUS_LOG( "mus: [MUSAVA]  Check roaming" )
       
   528 
       
   529     RMobilePhone::TMobilePhoneRegistrationStatus regStatus;
       
   530     iNetworkRegistrationStatus->NetworkRegistration( regStatus );
       
   531 
       
   532     MUS_LOG1( "mus: [MUSAVA]     NetworkRegistration returned %d", regStatus )
       
   533 
       
   534     MMusAvaObserver::TAvailabilityStatus status;
       
   535     MusSettingsKeys::TActivation activation = MusSettingsKeys::EAlwaysActive;
       
   536   
       
   537     activation = MultimediaSharingSettings::ActivationSettingL();
       
   538 
       
   539     MUS_LOG1( "mus: [MUSAVA]     ActivationSetting returned %d", 
       
   540         activation )
       
   541 
       
   542 	if ( activation == MusSettingsKeys::EAlwaysActive )
       
   543     	{
       
   544     	status = MMusAvaObserver::EMusAvaStatusAvailable;	
       
   545     	}
       
   546    	else if ( activation == MusSettingsKeys::EActiveInHomeNetworks &&
       
   547         regStatus == RMobilePhone::ERegisteredOnHomeNetwork )
       
   548     	{
       
   549     	status = MMusAvaObserver::EMusAvaStatusAvailable;	
       
   550     	}
       
   551     else if( activation == MusSettingsKeys::EActiveInHomeNetworks &&
       
   552         regStatus == RMobilePhone::ERegisteredRoaming )
       
   553         {
       
   554         status = ManualActivationL();        
       
   555         } 
       
   556     else
       
   557         {
       
   558         status = MMusAvaObserver::EMusActivationError;
       
   559         }
       
   560     
       
   561     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   562             NetworkRegistrationAndSettingsL()" )
       
   563     return status;
       
   564     }
       
   565 
       
   566 // End of File	
       
   567