idlefw/plugins/profileplugin/src/caiprofileplugin.cpp
branchRCL_3
changeset 9 d0529222e3f0
parent 0 79c6a41cd166
child 18 bd874ee5e5e2
--- a/idlefw/plugins/profileplugin/src/caiprofileplugin.cpp	Tue Feb 02 00:23:10 2010 +0200
+++ b/idlefw/plugins/profileplugin/src/caiprofileplugin.cpp	Fri Feb 19 23:07:29 2010 +0200
@@ -15,25 +15,28 @@
 *
 */
 
-
+// System includes
 #include <ecom/ecom.h>
 #include <ecom/implementationproxy.h>
-#include <aicontentobserver.h>
-#include <aiutility.h>
 #include <PUAcodes.hrh>
 #include <AknUtils.h>
 
+// User includes
+#include <aiprofilepluginuids.hrh>
+#include <aicontentobserver.h>
+#include <aiutility.h>
+
 #include "aiprofileplugincontentmodel.h"
-#include <aiprofilepluginuids.hrh>
 #include "caiprofileplugin.h"
 #include "caiprofileengine.h"
 #include "aipluginsettings.h"
 
+// Constants
+
 // PUA code for the timed profile, missing from PUAcodes.hrh
 #define KAiTimedProfilePUA 0xF815
 #define KAiRTL 0x200F
 
-// CONST CLASS VARIABLES
 const TImplementationProxy KImplementationTable[] =
     {
     IMPLEMENTATION_PROXY_ENTRY( KImplUidProfilePlugin, CAiProfilePlugin::NewL ) 
@@ -42,14 +45,14 @@
 // ======== LOCAL FUNCTIONS ========
 
 // ======== MEMBER FUNCTIONS ========
-
 // ---------------------------------------------------------------------------
-// Symbian 2nd phase constructor can leave
+// CAiProfilePlugin::NewL
+//
 // ---------------------------------------------------------------------------
 //
 CAiProfilePlugin* CAiProfilePlugin::NewL()
     {
-    CAiProfilePlugin* self = new (ELeave) CAiProfilePlugin;
+    CAiProfilePlugin* self = new ( ELeave ) CAiProfilePlugin;
     CleanupStack::PushL( self );
     self->ConstructL();
     CleanupStack::Pop( self );
@@ -58,7 +61,8 @@
     }
     
 // ---------------------------------------------------------------------------
-// Default constructor
+// CAiProfilePlugin::CAiProfilePlugin()
+// 
 // ---------------------------------------------------------------------------
 //
 CAiProfilePlugin::CAiProfilePlugin()
@@ -66,39 +70,39 @@
     }
     
 // ---------------------------------------------------------------------------
-// Symbian 2nd phase constructor can leave
+// CAiProfilePlugin::ConstructL
+// 
 // ---------------------------------------------------------------------------
 //
 void CAiProfilePlugin::ConstructL()
     { 
-    iInfo.iUid.iUid = AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_PROFILEPLUGIN; 
-   
     iContent = AiUtility::CreateContentItemArrayIteratorL( KAiProfileContent );
     iEvents = AiUtility::CreateContentItemArrayIteratorL( KAiProfileEvents );
-    iResources = AiUtility::CreateContentItemArrayIteratorL( KAiProfileResources );
-    
-    iIsUpdated = ETrue;
-    iAlive = EFalse;        
+    iResources = AiUtility::CreateContentItemArrayIteratorL( KAiProfileResources );        
     }
     
 // ---------------------------------------------------------------------------
-// Destructor
+// CAiProfilePlugin::~CAiProfilePlugin
 // Deletes all data created to heap
 // ---------------------------------------------------------------------------
 //
 CAiProfilePlugin::~CAiProfilePlugin()
     {
     CleanPublishedProfileNames();
+	
     Release( iContent );
     Release( iEvents );
-    Release( iResources );   
+    Release( iResources );
+    
     delete iActiveProfileAndChar;
     delete iPreviousProfileNameAndChar;
     delete iEngine;
+    
     iObservers.Close();
     }
 
 // ---------------------------------------------------------------------------
+// CAiProfilePlugin::PublishL
 // Publishes the profiles
 // ---------------------------------------------------------------------------
 //
@@ -106,12 +110,14 @@
     {
     TInt err( KErrNone );
     TInt observers( iObservers.Count() );        
-    TInt transactionId = reinterpret_cast<TInt>( this );
+    TInt transactionId ( reinterpret_cast<TInt>( this ) );
 
     iCurrentCount = iEngine->NumberOfProfiles();
-    for ( int i = 0; i < observers; i++ )
+    
+    for ( TInt i = 0; i < observers; i++ )
         {
-        MAiContentObserver* observer = iObservers[i];
+        MAiContentObserver* observer( iObservers[i] );
+        
         err = observer->StartTransaction( transactionId );
 		
 		if ( err == KErrNotSupported )
@@ -130,11 +136,12 @@
             {
             delete iActiveProfileAndChar;
             iActiveProfileAndChar = NULL;
+            
             // silent/non-silent icon + timed icon + space + possible RTL*2 = 5
-            TInt maxChars = iEngine->ActiveProfileName().Length() + 5;
+            TInt maxChars( iEngine->ActiveProfileName().Length() + 5 );
             
             iActiveProfileAndChar = HBufC::NewL( maxChars );
-            TPtr profileNamePtr = iActiveProfileAndChar->Des();
+            TPtr profileNamePtr( iActiveProfileAndChar->Des() );
            
             if( AknLayoutUtils::LayoutMirrored() )
                 {
@@ -145,7 +152,8 @@
                 {
                 profileNamePtr.Append( KAiTimedProfilePUA );                
                 }
-            if( iEngine->IsActiveProfileSilentL() )
+            
+            if ( iEngine->IsActiveProfileSilentL() )
                 {                
                 profileNamePtr.Append( KPuaCodeSilentSymbol );
                 }
@@ -153,10 +161,12 @@
                 {
                 profileNamePtr.Append( KPuaCodeAprofSound );
                 }
-            _LIT( KSpace, " " );   
+            
+            _LIT( KSpace, " " ); 
+            
             profileNamePtr.Append( KSpace );
             
-            if( AknLayoutUtils::LayoutMirrored() )
+            if ( AknLayoutUtils::LayoutMirrored() )
                 {
                 profileNamePtr.Append( KAiRTL );
                 }
@@ -184,13 +194,14 @@
        	// clean profiles that are already deleted.
        	// Cleans the array blindly from the end, because in the next
        	// step all the profiles are republished
-        if( iPreviousCount > iCurrentCount )
+        if ( iPreviousCount > iCurrentCount )
             {
             for( TInt k = iCurrentCount; k < iPreviousCount; k++ )
                 {
                 observer->Clean( *this, EAiProfileContentProfileName, k + 1 );
                 }
             }
+        
 		for ( TInt j = 0; j < iCurrentCount; j++ )
 			{
 			if ( observer->CanPublish( *this, EAiProfileContentProfileName, j + 1 ) )
@@ -206,6 +217,7 @@
         		{
         		TBuf<1> silent; // one character
         		silent.Append( KPuaCodeSilentSymbol );
+        		
         		observer->Publish( *this, EAiProfileActiveProfileSilentChar, silent, EAiProfileActiveProfileSilentChar );
         		}
         	else
@@ -220,7 +232,8 @@
     		observer->Clean( *this, EAiProfileActiveProfileIcon, EAiProfileActiveProfileSilentIconResource );
     		observer->Clean( *this, EAiProfileActiveProfileIcon, EAiProfileActiveProfileGeneralIconResource );
     		observer->Clean( *this, EAiProfileActiveProfileIcon, EAiProfileActiveProfileTimedIconResource );
-        	if ( iEngine->IsActiveProfileTimedL() )
+        	
+    		if ( iEngine->IsActiveProfileTimedL() )
         		{
         		observer->Publish( *this, 
         							EAiProfileActiveProfileIcon, 
@@ -250,9 +263,11 @@
     		observer->Clean( *this, EAiProfileActiveProfileSilentChar, EAiProfileActiveProfileSilentChar );
     		observer->Clean( *this, EAiProfileActiveProfileIcon, 1 );
     		observer->Clean( *this, EAiProfileActiveProfileIcon, 2 );
-            // uncomment also this and respective policy lines in profiles.xml if whole widget needs to be hidden in AI3 
+            
+    		// uncomment also this and respective policy lines in profiles.xml if whole widget needs to be hidden in AI3 
     		//observer->Clean( *this, EAiProfileContentActiveProfileName, EAiProfileContentActiveProfileName );        		    		
     		}
+        
         if ( err == KErrNone )
             {
             err = observer->Commit( transactionId );
@@ -261,234 +276,145 @@
                 {
                 return;
                 }
-            }
-        
-        iIsUpdated = EFalse;
+            }                
         }
+    
     iPreviousCount = iCurrentCount;
     }
     
 // ---------------------------------------------------------------------------
-// From class CAiContentPublisher
-// Plug-in is requested to unload its engines due backup operation
+// CAiProfilePlugin::Start
+// 
 // ---------------------------------------------------------------------------
 //
-void CAiProfilePlugin::Stop( TAiTransitionReason /*aReason*/ )
-    {
-    FreeEngine();
+void CAiProfilePlugin::Start( TStartReason /*aReason*/ )
+    {   
+    }
+
+// ---------------------------------------------------------------------------
+// CAiProfilePlugin::Stop
+// 
+// ---------------------------------------------------------------------------
+//
+void CAiProfilePlugin::Stop( TStopReason /*aReason*/ )
+    {    
     }
 
 // ---------------------------------------------------------------------------
-// From class CAiContentPublisher
-// Plug-in is instructed that it is allowed to consume CPU resources
+// CAiProfilePlugin::Resume
+// 
 // ---------------------------------------------------------------------------
 //
-void CAiProfilePlugin::Resume( TAiTransitionReason aReason )
+void CAiProfilePlugin::Resume( TResumeReason aReason )
     {
-    TRAP_IGNORE( DoResumeL( aReason ) ); 
-    }
-    
-// ---------------------------------------------------------------------------
-// From class CAiContentPublisher
-// Plug-in is instructed that it is not allowed to consume CPU resources
-// ---------------------------------------------------------------------------
-//
-void CAiProfilePlugin::Suspend( TAiTransitionReason /*aReason*/ )
-    {
-    if ( iEngine && iAlive )
+    if ( aReason == EForeground )
         {
-        iEngine->Suspend();
+        TRAP_IGNORE( DoResumeL() );
         }
-        
-    iAlive = EFalse;
     }
 
 // ---------------------------------------------------------------------------
-// From class CAiContentPublisher
-// The plug-in MUST maintain a registry of subscribers and send 
-// notification to all of them whenever the state changes or new content
-// is available
+// CAiProfilePlugin::Suspend
+// 
+// ---------------------------------------------------------------------------
+//
+void CAiProfilePlugin::Suspend( TSuspendReason /*aReason*/ )
+    {    
+    }
+
+// ---------------------------------------------------------------------------
+// CAiProfilePlugin::SubscribeL
+// 
 // ---------------------------------------------------------------------------
 //
 void CAiProfilePlugin::SubscribeL( MAiContentObserver& aObserver )
-    { 
+    {
     iObservers.AppendL( &aObserver );
     }
-    
-// ---------------------------------------------------------------------------
-// From class CAiContentPublisher
-// Plug-ins take ownership of the settings array, so it must either
-// store it in a member or free it.
-// ---------------------------------------------------------------------------
-//
-void CAiProfilePlugin::ConfigureL( RAiSettingsItemArray& aSettings )
-    {
-    aSettings.ResetAndDestroy();
-    }
 
 // ---------------------------------------------------------------------------
-// From class CAiContentPublisher
-// Returns the extension interface. Actual type depends on the passed 
-// aUid argument.
+// CAiProfilePlugin::ConfigureL
+// 
 // ---------------------------------------------------------------------------
 //
-TAny* CAiProfilePlugin::Extension( TUid aUid )
+void CAiProfilePlugin::ConfigureL( RAiSettingsItemArray& /*aSettings*/ )
     {    
-    if (aUid == KExtensionUidProperty)
-   		{
-        return static_cast<MAiPropertyExtension*>(this);
-    	}
-    else if (aUid == KExtensionUidEventHandler)
-    	{
-        return static_cast<MAiEventHandlerExtension*>(this);
-    	}
-    else
-    	{	
-        return NULL;
-    	}
     }
 
 // ---------------------------------------------------------------------------
-// From class MAiPropertyExtension
-// Read property of publisher plug-in.
+// CAiProfilePlugin::GetProperty
+// 
 // ---------------------------------------------------------------------------
 //
-TAny* CAiProfilePlugin::GetPropertyL( TInt aProperty )
+TAny* CAiProfilePlugin::GetProperty( TProperty aProperty )
     {
-    TAny* property = NULL;
-    
-    switch ( aProperty )
-        {
-    case EAiPublisherInfo:
-        {
-         property = static_cast<TAiPublisherInfo*>( &iInfo );
-        break;  
-        }       
-
-    case EAiPublisherContent:
+    if ( aProperty == EPublisherContent )
         {
-        property = static_cast<MAiContentItemIterator*>( iContent );
-        break;    
-        }        
-
-    case EAiPublisherEvents:
+        return static_cast< MAiContentItemIterator* >( iContent );        
+        }
+    else if ( aProperty == EPublisherEvents )
         {
-        property = static_cast<MAiContentItemIterator*>( iEvents );
-        break;
+        return static_cast< MAiContentItemIterator* >( iEvents );
         }
-    
-    case EAiPublisherResources:
-        property = static_cast<MAiContentItemIterator*>( iResources );
-        break;
-       
-    default:
-        break;
+    else if ( aProperty == EPublisherResources )
+        {
+        return static_cast< MAiContentItemIterator* >( iResources );        
         }
 
-    return property;
+    return NULL;
     }
 
 // ---------------------------------------------------------------------------
-// From class MAiPropertyExtension
-// Write property value to optimize the content model.
+// CAiProfilePlugin::HandleEvent
+// 
 // ---------------------------------------------------------------------------
 //
-void CAiProfilePlugin::SetPropertyL( TInt aProperty, TAny* aValue )
-    {  
-    if( aProperty == EAiPublisherInfo )
+void CAiProfilePlugin::HandleEvent( TInt aEvent, const TDesC& aParam )
+    {    
+    TRAP_IGNORE( iEngine->HandleAiEventL( aEvent, aParam ) );    
+    }
+
+// ---------------------------------------------------------------------------
+// CAiProfilePlugin::DoResumeL
+//
+// ---------------------------------------------------------------------------
+//
+void CAiProfilePlugin::DoResumeL()
+    {
+    if( !iEngine )
         {
-        ASSERT( aValue );
+        iEngine = CAiProfileEngine::NewL( this );
         
-        const TAiPublisherInfo* info( 
-                static_cast<const TAiPublisherInfo*>( aValue ) );
+        iEngine->UpdateProfileNamesL();
         
-        iInfo = *info;
+        PublishL();        
         }
     }
  
 // ---------------------------------------------------------------------------
-// From class MAiEventHandlerExtension.
-// Handles an event sent by the AI framework.
+// CAiProfilePlugin::NotifyContentUpdate()
+// This method is called from the engine, when the profile data has changed
 // ---------------------------------------------------------------------------
 //
-void CAiProfilePlugin::HandleEvent(TInt aEvent, const TDesC& aParam)
-	{
-    if ( iEngine )
-    	{
-        // We have no way of reporting errors to framework so just ignore them.
-        TRAP_IGNORE( iEngine->HandleAiEventL( aEvent, aParam ) );
-    	}
-	} 
-    
-// ---------------------------------------------------------
-// This method is called from the engine, when the profile
-// data content has been changed. Method call is made through
-// the MAiProfilePluginNotifier interface.
-// ---------------------------------------------------------
-//
 void CAiProfilePlugin::NotifyContentUpdate()
-    {
-    iIsUpdated = ETrue;
-    
+    {        
     TRAP_IGNORE( PublishL() );
     }
 
 // ---------------------------------------------------------------------------
-// From class CAiContentPublisher
-// framework instructs plug-in that it is allowed to consume CPU resources
-// ---------------------------------------------------------------------------
-//
-void CAiProfilePlugin::DoResumeL( TAiTransitionReason aReason )
-    {
-    if ( !iEngine )
-        {
-        iEngine = CAiProfileEngine::NewL( this );
-        }
-    
-	//update in startup phase and idle is on foreground.
-    if( aReason != EAiBacklightOff && aReason != EAiIdleBackground )
-    	{
-    	// force republish in case layout has changed
-      if ( aReason == EAiScreenLayoutChanged )
-          {
-          delete iPreviousProfileNameAndChar;
-          iPreviousProfileNameAndChar = NULL;
-          }
-
-    	if ( !iAlive )
-    	    {
-            iEngine->ResumeL();
-    	    }
-    	
-	    iEngine->UpdateProfileNamesL();
-	    
-        PublishL();
-	    iAlive = ETrue;     
-    	}   
-    }
-    
-// ---------------------------------------------------------------------------
-// Frees engine resources
-// ---------------------------------------------------------------------------
-//    
-void CAiProfilePlugin::FreeEngine()
-    {
-    delete iEngine;
-    iEngine = NULL;
-    iAlive = EFalse;   
-    }
-
-// ---------------------------------------------------------------------------
+// CAiProfilePlugin::CleanPublishedProfileNames
 // Clean profile names from content
 // ---------------------------------------------------------------------------
 //    
 void CAiProfilePlugin::CleanPublishedProfileNames()
     {
     TInt obsCount( iObservers.Count() );
+    
     for ( TInt i( 0 ); i < obsCount; i++ )
         {
-        MAiContentObserver* observer = iObservers[i];
-        for( TInt j( 0 ); j < iCurrentCount && observer; j++ )
+        MAiContentObserver* observer( iObservers[i] );
+        
+        for ( TInt j( 0 ); j < iCurrentCount && observer; j++ )
             {
             observer->Clean( *this, EAiProfileContentProfileName, j + 1 );
             }
@@ -505,5 +431,6 @@
     {
     aTableCount = sizeof( KImplementationTable ) / 
         sizeof( TImplementationProxy );
+    
     return KImplementationTable;
     }