idlehomescreen/xmluicontroller/src/xmluicontroller.cpp
branchRCL_3
changeset 9 f966699dea19
parent 4 4d54b72983ae
child 15 ff572dfe6d86
--- a/idlehomescreen/xmluicontroller/src/xmluicontroller.cpp	Tue Feb 02 00:04:13 2010 +0200
+++ b/idlehomescreen/xmluicontroller/src/xmluicontroller.cpp	Fri Feb 19 22:42:37 2010 +0200
@@ -26,7 +26,8 @@
 // User includes
 #include <activeidle2domainpskeys.h>
 #include <activeidle2domaincrkeys.h>
-#include <aiscutplugindomaincrkeys.h>
+#include <hscontentpublisher.h>
+#include <hspublisherinfo.h>
 #include <aisystemuids.hrh>
 #include <ai3xmlui.rsg>
 
@@ -56,16 +57,12 @@
 #include "xnplugindefs.h"
 #include "ainativeuiplugins.h"
 
+// Constants
+const TInt KOneSecondInMicroS = 1000*1000;
+_LIT8( KData, "data" );
 
 using namespace AiXmlUiController;
 
-const TInt KOneSecondInMicroS = 1000*1000;
-const TInt KAI2CrKeyIncrementBy2 = 2;
-
-typedef TBuf<32> TNamespace;
-
-_LIT( KSettingsDummyData, "" );
-
 // ======== LOCAL FUNCTIONS ========
 // ----------------------------------------------------------------------------
 // ResolveEventParameters()
@@ -285,36 +282,7 @@
 // ----------------------------------------------------------------------------
 //
 void CXmlUiController::LoadUIDefinitionL()
-    {
-    // No implementation required
-    }
-
-// ----------------------------------------------------------------------------
-// CXmlUiController::GetPluginsL()
-// ----------------------------------------------------------------------------
-//
-void CXmlUiController::GetPluginsL( RAiPublisherInfoArray& /*aPlugins*/ )
-    {   
-    // No implementation required
-    }
-
-// ----------------------------------------------------------------------------
-// CXmlUiController::PublisherInfo()
-// ----------------------------------------------------------------------------
-//
-void CXmlUiController::PublisherInfoL( RAiPublisherInfoArray& aPlugins )
-    {
-    // This method returns plugins with namespace KNativeUiNamespace
-    if ( iRunningAsMain )
-        {
-        // This plugin is used to publish data on secondary ui controller side       
-        TAiPublisherInfo deviceStatus;
-        deviceStatus.iUid = KDeviceStatusPluginUid;
-        deviceStatus.iName.Copy( KDeviceStatusPluginName );
-        deviceStatus.iNamespace.Copy( KNativeUiNamespace );
-                
-        aPlugins.AppendL( deviceStatus );               
-        }        
+    {          
     }
 
 // ----------------------------------------------------------------------------
@@ -322,7 +290,7 @@
 // ----------------------------------------------------------------------------
 //
 void CXmlUiController::PublisherInfoL( CXnNodeAppIf& aSource,
-    TAiPublisherInfo& aInfo )
+    THsPublisherInfo& aInfo )
     {
     // Fetch uid from XML and convert it to TUid
     const TDesC8* uid( PropertyValue( aSource, 
@@ -332,62 +300,59 @@
         {
         return;
         }
-        
+       
     _LIT8( KPrefix, "0x" );
     
     const TInt pos( uid->FindF( KPrefix ) );
 
+    TInt32 uidValue( 0 );
+    
     if( pos != KErrNotFound )
          {
          TLex8 lex( uid->Mid( pos + KPrefix().Length() ) );
           
          // Hex parsing needs unsigned int
-         TUint32 value = 0;
-         const TInt parseResult = lex.Val( value, EHex );
+         TUint32 value( 0 );
+         TInt err( lex.Val( value, EHex ) );
          
-         if ( parseResult == KErrNone )
+         if ( err == KErrNone )
              {
-             TInt32 value32( value );
-             
-             aInfo.iUid = TUid::Uid( value32 );            
+             uidValue = value;
              }
          }
      
     // Fetch plug-in name from XML
-    HBufC* pluginName( PropertyValueL( aSource, 
-                AiUiDef::xml::property::KName ) ); 
-            
-    CleanupStack::PushL( pluginName );
-
-    if ( pluginName )
-        {
-        aInfo.iName.Copy( *pluginName );
-        }
+    HBufC* name( PropertyValueL( aSource, AiUiDef::xml::property::KName ) ); 
+                
+    TUid pluginuid( TUid::Uid( uidValue ) );
+           
+    aInfo = THsPublisherInfo( pluginuid, *name, aSource.Namespace() );
     
-    CleanupStack::PopAndDestroy( pluginName );
-        
-    aInfo.iNamespace.Copy( aSource.Namespace() );    
+    delete name;
+    name = NULL;
     }
 
 // ----------------------------------------------------------------------------
 // CXmlUiController::GetSettingsL()
+//
 // ----------------------------------------------------------------------------
 //
-void CXmlUiController::GetSettingsL( const TAiPublisherInfo& aPubInfo,     
+void CXmlUiController::GetSettingsL( const THsPublisherInfo& aPublisherInfo,     
     RAiSettingsItemArray& aSettings )
     {
-    if ( aPubInfo.iNamespace == KNativeUiNamespace )
+    if ( aPublisherInfo.Namespace() == KNativeUiNamespace )
         {
         // This controller doesn't provide settings for native ui namespace
         return;
         }
     
-    const TDesC& classId( iNodeIdGenerator->SettingsNodeIdL( aPubInfo ) );
+    const TDesC& classId( 
+        iNodeIdGenerator->SettingsNodeIdL( aPublisherInfo ) ); 
+               
+    TBuf< KHsPublisherNamespaceMaxLength > ns;
     
-    TNamespace ns;
+    ns.Copy( aPublisherInfo.Namespace() );
     
-    ns.Copy( aPubInfo.iNamespace );
-       
     // Find settings nodes
     RPointerArray< CXnNodeAppIf > nodes( 
         UiEngineL()->FindNodeByClassL( classId, ns ) );
@@ -405,10 +370,10 @@
         CXnNodeAppIf* node( nodes[i] );
         
         const TDesC8* name( 
-                PropertyValue( *node, AiUiDef::xml::property::KName ) );
+            PropertyValue( *node, AiUiDef::xml::property::KName ) );
         
         HBufC* value( 
-                PropertyValueL( *node, AiUiDef::xml::property::KValue ) );        
+            PropertyValueL( *node, AiUiDef::xml::property::KValue ) );        
         
         CleanupStack::PushL( value );
         
@@ -418,7 +383,7 @@
             CleanupDeletePushL( settings );
             
             MAiPluginSettingsItem& item( settings->AiPluginSettingsItem() ); 
-            item.SetPublisherId( aPubInfo.iUid );
+            item.SetPublisherId( aPublisherInfo.Uid() );
             
             TInt32 key( 0 );
             
@@ -438,148 +403,7 @@
     
     CleanupStack::PopAndDestroy( &nodes );
     
-    GetSettingsFromCRL( aPubInfo, aSettings );
-    GetContentModelL( aPubInfo, aSettings );
-    }
-
-// ----------------------------------------------------------------------------
-// CXmlUiController::GetSettingsFromCRL()
-// ----------------------------------------------------------------------------
-//
-void CXmlUiController::GetSettingsFromCRL( const TAiPublisherInfo& aPubInfo, 
-    RAiSettingsItemArray &aPluginSettings )                            
-    {
-    if ( aPubInfo.iNamespace == KNativeUiNamespace )
-        {
-        // This controller doesn't provide settings for native ui namespace
-        return;
-        }
-    
-    /*
-    * The settings are stored in the cenrep starting from 0x1000. 
-    * 0x1000 is the name of the plugin which this setting belongs to (for example Settings/Shortcut)
-    * 0x1001 is the id of the setting (for example 1)
-    * 0x1002 is the value of the setting (for example localapp:0x012345678)
-    * 
-    * So three keys per setting.
-    * 
-    * Settings from cenrep override those from XML
-    */
-    
-    TUint32 crKey( KAIPluginSettingsKeyRangeStart );
-
-    TBool moreSettings( ETrue );
-    
-    HBufC* pluginId = HBufC::NewLC(
-            NCentralRepositoryConstants::KMaxUnicodeStringLength );
-    
-    HBufC* settingValue = HBufC::NewLC(
-            NCentralRepositoryConstants::KMaxUnicodeStringLength );
-    
-    HBufC* settingKey = HBufC::NewLC(
-            NCentralRepositoryConstants::KMaxUnicodeStringLength );
-    
-    TPtr pluginIdPtr( pluginId->Des() );
-    TPtr settingValuePtr( settingValue->Des() );
-    TPtr settingKeyPtr( settingKey->Des() );
-    
-    TInt32 settingId( 0 );
-
-    TInt err( KErrNone );
-    TBool settingFound( EFalse );
-    
-    while( moreSettings )
-        {
-        settingFound = EFalse;
-        
-        pluginIdPtr.Zero();
-        settingValuePtr.Zero();
-        settingKeyPtr.Zero();
-        
-        //Get the name of plugin with the Settings/ prefix
-        err = iAISettingsRepository->Get( crKey++, pluginIdPtr );       
-   
-        // remove the Settings/ prefix if it is located at the start of the string
-        if( pluginIdPtr.FindC( AiUiDef::xml::propertyClass::KSettings ) == 0 )
-            {   
-            pluginIdPtr.Delete( 0, 
-                    AiUiDef::xml::id::KSettingsIdSeparator().Length() +
-                    AiUiDef::xml::propertyClass::KSettings().Length() );               
-            }
-            
-        // does the setting belong to this plugin
-        if( err == KErrNone && pluginIdPtr == aPubInfo.iName )
-            {
-            // Get the settings id 
-            err = iAISettingsRepository->Get( crKey++, settingKeyPtr );
-            
-            if( err == KErrNone )
-                {
-                err = AiUtility::ParseInt( settingId,settingKeyPtr );
-                }
-            
-            if( err == KErrNone )
-                {                
-                // Get the actual value of the setting
-                err = iAISettingsRepository->Get( crKey++, settingValuePtr );    
-                
-                // Ignore possible placeholder data in cenrep                                
-                if( err == KErrNone && settingValuePtr.Compare( KSettingsDummyData ) != 0 )
-                    {
-                    // Try to find an existing setting for this
-                    for( TInt j = 0; j < aPluginSettings.Count(); j++  )
-                        {
-                        MAiPluginSettings* setting( aPluginSettings[j] );                         
-                        MAiPluginSettingsItem& item( setting->AiPluginSettingsItem() );                       
-                        
-                        // Existing setting found => replace it
-                        if( item.Key() == settingId && item.PublisherId() == aPubInfo.iUid )
-                            {
-                            item.SetValueL( settingValuePtr, EFalse );
-                            settingFound = ETrue;
-                            break;
-                            }
-                        }
-                    
-                    // Existing setting not found => append new one ONLY if we
-                    // are dealing with the icon overrides or toolbar shortcuts
-                    if( !settingFound && 
-                       ( ( settingId & KScutFlagBitToolbarShortcut ) || 
-                         ( settingId & KScutFlagBitIconOverride ) ) )
-                        {
-                        MAiPluginSettings* settings( AiUtility::CreatePluginSettingsL() );
-                        CleanupDeletePushL( settings );
-                        
-                        MAiPluginSettingsItem& item( settings->AiPluginSettingsItem() );
-                        
-                        item.SetPublisherId( aPubInfo.iUid );
-                        item.SetKey( settingId );                
-                        item.SetValueL( settingValuePtr, EFalse );                                            
-                        
-                        aPluginSettings.Append( settings );                        
-                        CleanupStack::Pop( settings );
-                        }
-                    }
-                }                                 
-            else
-                {
-                // no settings id found => invalid settings in cenrep
-                __PRINT8( __DBG_FORMAT8("CXmlUiController::GetSettingsFromCRL: ERROR: invalid settings. key: %d pluginname: %S id: %d value: %S"), crKey, pluginId, settingId, settingValue );                    
-                }            
-            }               
-        else if( err != KErrNone )
-            {
-            // name of the plugin not found => no more settings
-            moreSettings = EFalse;            
-            }                          
-        else
-            {
-            // not the correct setting for this plugin
-            crKey += KAI2CrKeyIncrementBy2;
-            }
-        }
-
-    CleanupStack::PopAndDestroy( 3, pluginId ); // settingValue, settingKey
+    GetContentModelL( aPublisherInfo, aSettings );
     }
 
 // ----------------------------------------------------------------------------
@@ -587,10 +411,10 @@
 // ----------------------------------------------------------------------------
 //
 // ContentModelL()
-void CXmlUiController::GetContentModelL( const TAiPublisherInfo& aPubInfo,         
+void CXmlUiController::GetContentModelL( const THsPublisherInfo& aPublisherInfo,         
     RAiSettingsItemArray& aSettings )
     {
-    if ( aPubInfo.iNamespace == KNativeUiNamespace )
+    if ( aPublisherInfo.Namespace() == KNativeUiNamespace )
         {
         // This controller doesn't provide content model for native ui namespace
         return;
@@ -599,7 +423,8 @@
     // Find the node for the publisher
 	// TODO Does not work if widget is in view  
     RPointerArray<CXnNodeAppIf> list( 
-        UiEngineL()->FindContentSourceNodesL( aPubInfo.iNamespace ) );
+        UiEngineL()->FindContentSourceNodesL( aPublisherInfo.Namespace() ) );
+    
     CleanupClosePushL( list );
     
     CXnNodeAppIf* publisherNode( NULL );
@@ -638,7 +463,9 @@
             else if( nodeType == AiUiDef::xml::element::KImage ||
                      nodeType == AiUiDef::xml::element::KText ||
                      nodeType == AiUiDef::xml::element::KNewsTicker ||
-                     nodeType == AiUiDef::xml::element::KAnimation )
+                     nodeType == AiUiDef::xml::element::KAnimation ||
+					 nodeType == AiUiDef::xml::element::KTextEditor || 
+                     nodeType == KData )
                 {
                 // Is created in GetContenItem and used in GetConfigurationsL
                 HBufC* confOwner( NULL );
@@ -793,18 +620,12 @@
     }
 
 // ----------------------------------------------------------------------------
-// CXmlUiController::RemovePluginFromUI()
+// CXmlUiController::SetStateHandler()
 // ----------------------------------------------------------------------------
 //
-void CXmlUiController::RemovePluginFromUI( MAiPropertyExtension& aPlugin )
+void CXmlUiController::SetStateHandler( MAiFwStateHandler& aFwStateHandler )
     {
-    CContentRenderer* contentRenderer = 
-        static_cast< CContentRenderer* >( iObserver );
-    
-    if ( contentRenderer )
-        {
-        contentRenderer->CleanPluginFromUi( aPlugin );
-        }
+    iFwStateHandler = &aFwStateHandler;
     }
 
 // ----------------------------------------------------------------------------
@@ -817,6 +638,15 @@
     }
 
 // ----------------------------------------------------------------------------
+// CXmlUiController::FwStateHandler()
+// ----------------------------------------------------------------------------
+//
+MAiFwStateHandler* CXmlUiController::FwStateHandler() const
+    {
+    return iFwStateHandler;
+    }
+
+// ----------------------------------------------------------------------------
 // CXmlUiController::MainInterface()
 // ----------------------------------------------------------------------------
 //
@@ -857,33 +687,12 @@
     }
 
 // ----------------------------------------------------------------------------
-// CXmlUiController::SetUiFrameworkObserver()
-// ----------------------------------------------------------------------------
-//
-void CXmlUiController::SetUiFrameworkObserver( 
-    MAiUiFrameworkObserver& aObserver )
-    {
-    iUiFrameworkObserver = &aObserver;
-    }
-
-// ----------------------------------------------------------------------------
 // CXmlUiController::IsMenuOpen()
 // ----------------------------------------------------------------------------
 //
 TBool CXmlUiController::IsMenuOpen()
     {
-    TBool menuOpen( EFalse );
-    TRAP_IGNORE( menuOpen = UiEngineL()->IsMenuDisplaying() );
-    return menuOpen;
-    }
-
-// ----------------------------------------------------------------------------
-// CXmlUiController::UiFrameworkObserver()
-// ----------------------------------------------------------------------------
-//
-MAiUiFrameworkObserver* CXmlUiController::UiFrameworkObserver() const
-    {
-    return iUiFrameworkObserver;
+    return iAppUi->IsDisplayingMenuOrDialog();
     }
 
 // ----------------------------------------------------------------------------