coreapplicationuis/SysAp/Src/CenRepObservers/sysapcenrepofflinemodeobserver.cpp
author hgs
Tue, 29 Jun 2010 10:40:11 +0300
changeset 46 eea20ed08f4b
permissions -rw-r--r--
201025_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     1
/*
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     8
 *
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    11
 *
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    12
 * Contributors:
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    13
 *
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    14
 * Description:
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    15
 * CSysApCenRepOfflineModeObserver is a an observer for the Offline Mode central Repository key.
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    16
 * This class handles the changes to the offline mode changes done from Power Menu or Control Panel 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    17
 *
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    18
 */
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    19
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    20
#include "sysapcenrepofflinemodeobserver.h"
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    21
#include "CoreApplicationUIsSDKCRKeys.h"
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    22
#include "SysAp.hrh"
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    23
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    24
#ifdef _DEBUG
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    25
#include <e32debug.h>
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    26
#endif
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    27
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    28
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    29
// CSysApCenRepOfflineModeObserver::NewL( MSysApOfflineModeController& )
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    30
// Creates an instance of CSysApCenRepOfflineModeObserver and returns
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    31
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    32
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    33
CSysApCenRepOfflineModeObserver* CSysApCenRepOfflineModeObserver::NewL( 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    34
                    MSysApOfflineModeController& aSysApOfflineModeController )
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    35
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    36
    TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::NewL") );
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    37
    CSysApCenRepOfflineModeObserver* self = 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    38
    new (ELeave) CSysApCenRepOfflineModeObserver(aSysApOfflineModeController);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    39
    CleanupStack::PushL( self );
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    40
    self->ConstructL();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    41
    CleanupStack::Pop(); //self
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    42
    return self;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    43
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    44
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    45
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    46
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    47
// CSysApCenRepOfflineModeObserver::CSysApCenRepOfflineModeObserver( MSysApOfflineModeController& )
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    48
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    49
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    50
CSysApCenRepOfflineModeObserver::CSysApCenRepOfflineModeObserver( 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    51
                MSysApOfflineModeController& aSysApOfflineModeController  )
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    52
            : iSysApOfflineModeController( aSysApOfflineModeController )
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    53
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    54
    TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::CSysApCenRepOfflineModeObserver" ) );
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    55
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    56
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    57
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    58
// CSysApCenRepOfflineModeObserver::~CSysApCenRepOfflineModeObserver()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    59
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    60
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    61
CSysApCenRepOfflineModeObserver::~CSysApCenRepOfflineModeObserver()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    62
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    63
    TRACES( RDebug::Printf("~CSysApCenRepOfflineModeObserver" ) );
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    64
    if( iOfflineModeHandler )
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    65
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    66
    iOfflineModeHandler->StopListening();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    67
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    68
    delete iOfflineModeHandler;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    69
    delete iOfflineCenRep;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    70
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    71
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    72
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    73
// CSysApCenRepOfflineModeObserver::ConstructL()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    74
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    75
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    76
void CSysApCenRepOfflineModeObserver::ConstructL()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    77
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    78
    TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::ConstructL: trying CRepository::NewL(KCRUidCoreApplicationUIs)"));
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    79
    
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    80
    iOfflineCenRep = CRepository::NewL( KCRUidCoreApplicationUIs );
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    81
    
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    82
    iOfflineModeHandler =
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    83
    CCenRepNotifyHandler::NewL( *this,
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    84
    *iOfflineCenRep,
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    85
    CCenRepNotifyHandler::EIntKey,
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    86
    KCoreAppUIsNetworkConnectionAllowed );
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    87
    iOfflineModeHandler->StartListeningL();    
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    88
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    89
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    90
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    91
// CSysApCenRepOfflineModeObserver::HandleNotifyInt()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    92
// Handles the changes to offline mode state
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    93
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    94
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    95
void CSysApCenRepOfflineModeObserver::HandleNotifyInt( TUint32 aId, TInt aNewValue  )
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    96
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    97
    TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt(), aId=0x%x, aNewValue=%d", aId, aNewValue));    
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    98
    if ( aId == KCoreAppUIsNetworkConnectionAllowed )
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    99
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   100
        if( aNewValue == ECoreAppUIsNetworkConnectionNotAllowed )
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   101
        {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   102
        // Offline mode enabled. Go Offline
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   103
        TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt() Offline mode Enabled"));
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   104
        // Ignore any leave because it will have already been handled by showing an 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   105
        // error notification to the user
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   106
        TRAP_IGNORE(iSysApOfflineModeController.SwitchFromOnlineToOfflineModeL());
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   107
        }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   108
    else if( aNewValue == ECoreAppUIsNetworkConnectionAllowed )
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   109
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   110
        // Offline mode disabled. Go Online
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   111
        TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt() Offline mode Disabled"));
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   112
        // Ignore any leave because it will have already been handled by showing an 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   113
        // error notification to the user
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   114
        TRAP_IGNORE(iSysApOfflineModeController.GoOnlineIfOkL());
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   115
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   116
    else
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   117
    {		
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   118
        // Any other value is invalid	
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   119
        TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt() Invalid Value %d", aNewValue));
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   120
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   121
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   122
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   123
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   124
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   125
// CSysApCenRepOfflineModeObserver::HandleNotifyError()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   126
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   127
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   128
void CSysApCenRepOfflineModeObserver::HandleNotifyError( TUint32, TInt, CCenRepNotifyHandler* )
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   129
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   130
    TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyError()"));
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   131
    // Nothing to do if start listening leaves
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   132
    TRAP_IGNORE(iOfflineModeHandler->StartListeningL());    
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   133
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   134
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   135
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   136
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   137
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   138
// CSysApCenRepOfflineModeObserver::IsOffline()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   139
// Fetches the Cen Rep for Offline mode and 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   140
// Return true if Offline mode is enabled, false otherwise
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   141
// ----------------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   142
TBool CSysApCenRepOfflineModeObserver::IsOffline() const
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   143
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   144
    TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::IsOffline"));
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   145
    TBool nwConnAllowed = ETrue;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   146
    iOfflineCenRep->Get(KCoreAppUIsNetworkConnectionAllowed, nwConnAllowed);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   147
    TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::IsOffline returns %d",!nwConnAllowed));
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   148
    return !nwConnAllowed;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   149
    }