idlefw/plugins/devicestatus/src/aicugpublisher.cpp
branchRCL_3
changeset 114 a5a39a295112
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlefw/plugins/devicestatus/src/aicugpublisher.cpp	Wed Sep 01 12:22:09 2010 +0100
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Closed user group (CUG) publisher.
+*
+*/
+
+
+#include <aidevstaplgres.rsg>
+#include <StringLoader.h>
+#include <aicontentobserver.h>
+#include "aicugpublisher.h"
+#include "ainetworkinfolistener.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+CAiCUGPublisher::CAiCUGPublisher()
+    {
+    }
+
+
+void CAiCUGPublisher::ConstructL()
+    {
+    User::LeaveIfError( iSSSettings.Open() );    
+    }
+
+
+CAiCUGPublisher* CAiCUGPublisher::NewL()
+    {
+    CAiCUGPublisher* self = new( ELeave ) CAiCUGPublisher;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+CAiCUGPublisher::~CAiCUGPublisher()
+    {
+    //Cancel listenning CUG changes.
+    iSSSettings.CancelAll( *this );
+    iSSSettings.Close();
+    delete iCugText;
+    }
+
+
+void CAiCUGPublisher::ResumeL()
+    {
+	//Start listening CUG changes.
+    TInt err = iSSSettings.Register( ESSSettingsCug, *this );
+
+    if( err == KErrNotSupported ||
+        err == KErrAlreadyExists  )
+        {
+        //CUG not supported, or already registered
+        err = KErrNone;
+        }
+
+    User::LeaveIfError( err );
+    }
+
+
+void CAiCUGPublisher::Subscribe( MAiContentObserver& aObserver, 
+							        CHsContentPublisher& aExtension,
+                                    MAiPublishPrioritizer& /*aPrioritizer*/,
+                                    MAiPublisherBroadcaster& /*aBroadcaster*/ )
+    {
+    iContentObserver = &aObserver;
+    iExtension = &aExtension;
+    }
+
+
+void CAiCUGPublisher::RefreshL( TBool /*aClean*/ )
+    {
+	//Get current CUG value and publish it.
+    TInt value;
+    if ( iSSSettings.Get( ESSSettingsCug, value ) != KErrNone )
+        {
+        value = ESSSettingsCugDefault;
+        }
+
+    UpdateCUGIndicatorL( value );
+    }
+
+
+void CAiCUGPublisher::PhoneSettingChanged( TSSSettingsSetting aSetting, 
+											TInt aNewValue )
+    {
+    if( aSetting == ESSSettingsCug )
+        {
+        TRAP_IGNORE( UpdateCUGIndicatorL( aNewValue ) );
+        }
+    }
+
+
+void CAiCUGPublisher::UpdateCUGIndicatorL( TInt aValue )
+    {
+	//Check if the CUG is valid
+    if( iSSSettings.IsValueValidCugIndex( aValue ) )
+        {
+        // Information already current, no need to update text
+        if ( iCugValue != aValue )
+            {
+            iCugValue = aValue;
+            delete iCugText;
+            iCugText = NULL;
+            // Read CUG indicator format from resource file and publish 
+            // content as a text.
+            iCugText = StringLoader::LoadL( 
+                                    R_ACTIVEIDLE_CUG_INDICATOR_FORMAT, 
+                                    aValue );
+
+            }
+        if ( iCugText )
+            {
+            iContentObserver->Publish( *iExtension, 
+                                EAiDeviceStatusContentCUGIndicator, 
+                                *iCugText, 
+                                0 );            
+            } 
+        else
+            {           
+            iContentObserver->Clean( *iExtension, 
+                                EAiDeviceStatusContentCUGIndicator, 
+                                0 );            
+            }
+        }
+    else
+        {            
+		//CUG is not valid, call clean.
+        iContentObserver->Clean( *iExtension, 
+        					EAiDeviceStatusContentCUGIndicator, 
+        					0 );
+        }
+    }
+    
+
+TBool CAiCUGPublisher::RefreshL( TInt aContentId, TBool aClean )
+	{
+    if( aContentId == EAiDeviceStatusContentCUGIndicator )
+        {
+   	    RefreshL( aClean );
+   	    return ETrue;
+    	}
+    	
+    return EFalse;
+	}