idlehomescreen/xmluicontroller/src/onlineofflinehelper.cpp
changeset 0 f72a12da539e
child 1 5315654608de
equal deleted inserted replaced
-1:000000000000 0:f72a12da539e
       
     1 /*
       
     2 * Copyright (c) 2005-2008 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:  Helper for online/offline state handling
       
    15 *
       
    16 */
       
    17 
       
    18 // System includes
       
    19 #include <NetworkHandlingProxy.h>
       
    20 #include <CNWSession.h>
       
    21 #include <MProfileEngine.h>
       
    22 #include <CProfileChangeNotifyHandler.h>
       
    23 #include <aifweventhandler.h>
       
    24 #include <ai3xmlui.rsg>
       
    25 #include <AknQueryDialog.h>
       
    26 #include <AknGlobalNote.h>
       
    27 #include <StringLoader.h>
       
    28 
       
    29 // User includes
       
    30 #include <activeidle2domaincrkeys.h>
       
    31 #include "onlineofflinehelper.h"
       
    32 #include "xmluicontroller.h"
       
    33 #include "appui.h"
       
    34 
       
    35 // Constants
       
    36 const TInt KOfflineProfileId( 5 );
       
    37 
       
    38 using namespace AiXmlUiController;
       
    39 
       
    40 // ============================ LOCAL FUNCTIONS ==============================
       
    41 
       
    42 // ============================ MEMBER FUNCTIONS =============================
       
    43 // ---------------------------------------------------------------------------
       
    44 // COnlineOfflineHelper::NewL
       
    45 // ---------------------------------------------------------------------------
       
    46 //
       
    47 COnlineOfflineHelper* COnlineOfflineHelper::NewL( CXmlUiController& aUiCtl )    
       
    48     {
       
    49     COnlineOfflineHelper* self = new ( ELeave )COnlineOfflineHelper( aUiCtl );                 
       
    50     CleanupStack::PushL( self );
       
    51     self->ConstructL();
       
    52     CleanupStack::Pop( self );
       
    53     return self;
       
    54     }
       
    55  
       
    56 // ----------------------------------------------------------------------------
       
    57 // COnlineOfflineHelper::COnlineOfflineHelper
       
    58 // ----------------------------------------------------------------------------
       
    59 //
       
    60 COnlineOfflineHelper::COnlineOfflineHelper( CXmlUiController& aUiCtl )
       
    61     : iUiCtl( aUiCtl )
       
    62     {    
       
    63     }
       
    64         
       
    65 // ----------------------------------------------------------------------------
       
    66 // COnlineOfflineHelper::ConstructL
       
    67 // ----------------------------------------------------------------------------
       
    68 //
       
    69 void COnlineOfflineHelper::ConstructL()
       
    70     { 
       
    71     //Create network handling engine session.
       
    72     iSession = CreateL( *this, iInfo );
       
    73 
       
    74     iHandler = CProfileChangeNotifyHandler::NewL( this );
       
    75     
       
    76     MProfileEngine* engine( CreateProfileEngineL() );
       
    77     
       
    78     if( engine->ActiveProfileId() == KOfflineProfileId )
       
    79         {
       
    80         iFlags.Set( EOfflineProfile );
       
    81         }
       
    82     
       
    83     engine->Release();
       
    84     
       
    85     TInt value( 0 );
       
    86     
       
    87     if ( iUiCtl.SettingsRepository().Get(  KAIWebStatus, value ) == KErrNone )
       
    88         {
       
    89         if( value && iFlags.IsClear( EOfflineProfile ) )
       
    90             {
       
    91             iFlags.Set( EOnline );
       
    92             }                    
       
    93         }
       
    94     
       
    95     // Update repository
       
    96     iUiCtl.SettingsRepository().Set(  KAIWebStatus, iFlags.IsSet( EOnline ) ); 
       
    97     
       
    98     iCurrentNwStatus = ENWRegistrationUnknown;    
       
    99     }
       
   100       
       
   101 // ----------------------------------------------------------------------------
       
   102 // COnlineOfflineHelper::~COnlineOfflineHelper
       
   103 // ----------------------------------------------------------------------------
       
   104 //
       
   105 COnlineOfflineHelper::~COnlineOfflineHelper() 
       
   106     {
       
   107     delete iHandler;
       
   108     delete iSession;
       
   109     // Whether the user choice EOnline should be stored in cenrep ?
       
   110     }
       
   111 
       
   112 // ----------------------------------------------------------------------------
       
   113 // COnlineOfflineHelper::ShowOnlineItem
       
   114 // ----------------------------------------------------------------------------
       
   115 //
       
   116 TBool COnlineOfflineHelper::ShowOnlineItem() const
       
   117     {
       
   118     if ( iFlags.IsSet( EUtilizeOnline ) )
       
   119     	{
       
   120     	TInt value ( KErrNotFound );
       
   121     	if ( iUiCtl.SettingsRepository().Get(  KAIWebStatus, value ) == KErrNone )
       
   122     		{
       
   123     		return ( !value );
       
   124     		}
       
   125     	}
       
   126     return EFalse;
       
   127     }
       
   128 
       
   129 // ----------------------------------------------------------------------------
       
   130 // COnlineOfflineHelper::ShowOfflineItem
       
   131 // ----------------------------------------------------------------------------
       
   132 //
       
   133 TBool COnlineOfflineHelper::ShowOfflineItem() const
       
   134     {
       
   135     if ( iFlags.IsSet( EUtilizeOnline ) )
       
   136 		{
       
   137 		TInt value ( KErrNotFound );
       
   138 		if ( iUiCtl.SettingsRepository().Get(  KAIWebStatus, value ) == KErrNone )
       
   139 			{
       
   140 			return ( value );
       
   141 			}
       
   142 		}
       
   143      return EFalse;
       
   144     }
       
   145 
       
   146 // ----------------------------------------------------------------------------
       
   147 // COnlineOfflineHelper::ProcessOnlineStateL
       
   148 // ----------------------------------------------------------------------------
       
   149 //
       
   150 void COnlineOfflineHelper::ProcessOnlineStateL( 
       
   151     RPointerArray< CXnNodeAppIf >& aList )
       
   152     {
       
   153     _LIT( KOnlineOffline, "online_offline" );
       
   154 
       
   155     iFlags.Clear( EUtilizeOnline );
       
   156                    
       
   157     // Check if data plugins are using online_offline
       
   158     for ( TInt i = 0; i < aList.Count(); i++ )
       
   159         {
       
   160         TAiPublisherInfo info;
       
   161         
       
   162         iUiCtl.PublisherInfoL( *aList[i], info );
       
   163                          
       
   164         if( iUiCtl.FwEventHandler()->HasMenuItemL( info, KOnlineOffline() ) )
       
   165             {
       
   166             iFlags.Set( EUtilizeOnline );            
       
   167             break;                       
       
   168             }
       
   169         }    
       
   170     
       
   171     if( iFlags.IsSet( EUtilizeOnline ) )
       
   172         {
       
   173         TInt value( 0 );
       
   174         iUiCtl.SettingsRepository().Get( KAIWebStatus, value );
       
   175         
       
   176         if ( value )
       
   177         	{
       
   178             // Switch to online
       
   179         	SetOnlineL( ETrue );
       
   180         	}
       
   181         else
       
   182         	{
       
   183             // Switch to offline
       
   184         	SetOnlineL( EFalse );
       
   185         	}                
       
   186         }
       
   187     }
       
   188 
       
   189 // ----------------------------------------------------------------------------
       
   190 // COnlineOfflineHelper::ProcessOnlineStateL
       
   191 // ----------------------------------------------------------------------------
       
   192 //
       
   193 void COnlineOfflineHelper::ProcessOnlineStateL( TBool aOnline )
       
   194     {
       
   195     // User has selected online/offline item from menu
       
   196     if( iFlags.IsSet( EUtilizeOnline ) )
       
   197     	{
       
   198     	 // Don't show R_YES_NO_HS_ONLINE query as user selected online
       
   199     	 if (aOnline )
       
   200 			{
       
   201 			iFlags.Set( EOnline );
       
   202 			// Save state
       
   203 			iUiCtl.SettingsRepository().Set( KAIWebStatus, ETrue );
       
   204 			// Run state change.
       
   205 			iUiCtl.FwEventHandler()->ProcessStateChange( EAifwOnline  );     
       
   206 			}
       
   207     	 else
       
   208     		 {
       
   209     		 iFlags.Clear( EOnline );
       
   210     		 // Save state
       
   211 			 iUiCtl.SettingsRepository().Set( KAIWebStatus, EFalse );
       
   212 			 // Run state change.
       
   213 			 iUiCtl.FwEventHandler()->ProcessStateChange( EAifwOffline  );
       
   214     		 }
       
   215     	}
       
   216     }
       
   217 
       
   218 // ----------------------------------------------------------------------------
       
   219 // COnlineOfflineHelper::SetOnline
       
   220 // ----------------------------------------------------------------------------
       
   221 //
       
   222 void COnlineOfflineHelper::SetOnlineL( TBool aOnline )    
       
   223     {
       
   224     
       
   225     // Save state
       
   226     iUiCtl.SettingsRepository().Set( KAIWebStatus, aOnline );
       
   227 
       
   228     if( aOnline )
       
   229         {
       
   230         // Run state change.
       
   231         iUiCtl.FwEventHandler()->ProcessStateChange( EAifwOnline  );        
       
   232         }
       
   233     else  
       
   234         {
       
   235 		// Run state change.
       
   236 		iUiCtl.FwEventHandler()->ProcessStateChange( EAifwOffline );
       
   237         }
       
   238     }
       
   239 
       
   240 // ----------------------------------------------------------------------------
       
   241 // COnlineOfflineHelper::HandleNetworkMessage
       
   242 // ----------------------------------------------------------------------------
       
   243 //
       
   244 void COnlineOfflineHelper::HandleNetworkMessage( const TNWMessages aMessage )
       
   245     {        
       
   246     if ( HasNetworkInfoChanged( aMessage ) )
       
   247         {
       
   248         // Interpret new nw state
       
   249         TRAP_IGNORE( InterpretNWMessageL( aMessage, iInfo ) );  
       
   250         }                       
       
   251     }
       
   252 
       
   253 // ----------------------------------------------------------------------------
       
   254 // COnlineOfflineHelper::InterpretNWMessage
       
   255 // ----------------------------------------------------------------------------
       
   256 //
       
   257 void COnlineOfflineHelper::InterpretNWMessageL( const TNWMessages aMessage, 
       
   258     const TNWInfo aNWInfo )
       
   259     {       
       
   260     switch ( aMessage )
       
   261         {
       
   262         case MNWMessageObserver::ENWMessageNetworkRegistrationStatusChange:
       
   263         case MNWMessageObserver::ENWMessageCurrentHomeZoneMessage:
       
   264             {
       
   265             switch ( aNWInfo.iRegistrationStatus )
       
   266                 {
       
   267                 case ENWRegisteredRoaming:
       
   268                     if( iFlags.IsSet( EOnline ) )
       
   269                         {
       
   270                         // Process to offline state. 
       
   271                         // Don't change the user selection.
       
   272                         SetOnlineL ( EFalse );
       
   273                         // Show roaming notification
       
   274 						CAknGlobalNote* note = CAknGlobalNote::NewLC();
       
   275 						HBufC* msg( StringLoader::LoadLC( R_QTN_HS_AUTOMATIC_OFFLINE ) );
       
   276 						 
       
   277 						note->ShowNoteL( EAknGlobalInformationNote, *msg );
       
   278 						CleanupStack::PopAndDestroy( 2, note ); // msg    
       
   279                         }
       
   280                     
       
   281                     iCurrentNwStatus = aNWInfo.iRegistrationStatus;
       
   282                     break;
       
   283                 case ENWRegisteredOnHomeNetwork:
       
   284                 	// Reset to user selection
       
   285                 	SetOnlineL(iFlags.IsSet( EOnline ) );
       
   286                 	
       
   287                     iCurrentNwStatus = aNWInfo.iRegistrationStatus;
       
   288                     break;                     
       
   289                 default:                        
       
   290                     // unknown state                    
       
   291                     iCurrentNwStatus = ENWRegistrationUnknown;
       
   292                     break;
       
   293                 }
       
   294             }
       
   295         }       
       
   296     }
       
   297 
       
   298 // ----------------------------------------------------------------------------
       
   299 // COnlineOfflineHelper::HandleNetworkError
       
   300 // ----------------------------------------------------------------------------
       
   301 //
       
   302 void COnlineOfflineHelper::HandleNetworkError( const TNWOperation aOperation, 
       
   303     TInt /*aErrorCode*/ )
       
   304     {
       
   305      switch ( aOperation )
       
   306         {
       
   307         case MNWMessageObserver::ENWGetNetworkProviderName:
       
   308             iReceivedMessageFlags |= ENetworkProviderNameReceived;
       
   309             iReceivedMessageFlags &= ~ENetworkProviderNameOk;
       
   310             iInfo.iNPName.Zero();
       
   311             break;
       
   312         case MNWMessageObserver::ENWGetProgrammableOperatorName:
       
   313             iReceivedMessageFlags |= EProgrammableOperatorInfoReceived;
       
   314             iReceivedMessageFlags &= ~EProgrammableOperatorInfoReceivedOk;
       
   315             iInfo.iOperatorNameInfo.iName.Zero();
       
   316             break;
       
   317         case MNWMessageObserver::ENWGetServiceProviderName:
       
   318             iReceivedMessageFlags |= EServiceProviderNameReceived;
       
   319             iReceivedMessageFlags &= ~EServiceProviderNameOk;
       
   320             iInfo.iServiceProviderNameDisplayReq = RMobilePhone::KDisplaySPNNotRequired;
       
   321             iInfo.iSPName.Zero();
       
   322             iInfo.iPLMNField.Zero();
       
   323             break;
       
   324         default:
       
   325             break;
       
   326         }
       
   327     
       
   328     HandleNetworkMessage( TNWMessages( KErrGeneral ) );
       
   329     }
       
   330 
       
   331 // ----------------------------------------------------------------------------
       
   332 // COnlineOfflineHelper::HasNetworkInfoChanged
       
   333 // ----------------------------------------------------------------------------
       
   334 //
       
   335 TBool COnlineOfflineHelper::HasNetworkInfoChanged( const TNWMessages aMsg )
       
   336     {
       
   337     TBool result( ETrue );
       
   338     
       
   339     // pass through
       
   340     if ( aMsg == MNWMessageObserver::ENWMessageCurrentHomeZoneMessage   ||
       
   341          aMsg == MNWMessageObserver::ENWMessageNetworkConnectionFailure ||
       
   342          aMsg == MNWMessageObserver::ENWMessageCurrentCellInfoMessage   ||
       
   343          aMsg == MNWMessageObserver::ENWMessageNetworkRegistrationStatusChange )
       
   344         {
       
   345         return result;
       
   346         }
       
   347     
       
   348     result = ( iReceivedMessageFlags != iOldReceivedMessageFlags );
       
   349     
       
   350     if ( !result )
       
   351         {
       
   352          result = iInfo.iRegistrationStatus != iOldInfo.iRegistrationStatus;             
       
   353         }
       
   354 
       
   355     iOldReceivedMessageFlags = iReceivedMessageFlags;
       
   356     iOldInfo = iInfo;
       
   357 
       
   358     return result;
       
   359     }
       
   360 
       
   361 // ---------------------------------------------------------------------------
       
   362 // COnlineOfflineHelper::HandleActiveProfileEventL
       
   363 // ---------------------------------------------------------------------------
       
   364 //
       
   365 void COnlineOfflineHelper::HandleActiveProfileEventL(
       
   366     TProfileEvent aProfileEvent, TInt aProfileId )                                                        
       
   367     {
       
   368     //Profile activated or modified.
       
   369     if ( aProfileEvent == EProfileNewActiveProfile )         
       
   370         {
       
   371         if( aProfileId == KOfflineProfileId )
       
   372             {
       
   373             iFlags.Set( EOfflineProfile );
       
   374             // Don't change the user selection.
       
   375             SetOnlineL( EFalse );
       
   376             }
       
   377         else
       
   378             {
       
   379             iFlags.Clear( EOfflineProfile );
       
   380             // Reset to user selection
       
   381             SetOnlineL(iFlags.IsSet( EOnline ) );
       
   382             }
       
   383         }
       
   384     
       
   385     delete iHandler;
       
   386     iHandler = NULL;
       
   387     
       
   388     iHandler = CProfileChangeNotifyHandler::NewL( this );        
       
   389     }
       
   390 
       
   391  // End of file
       
   392