idlehomescreen/hscontentcontrol/src/hscontentcontrolfactory.cpp
changeset 2 08c6ee43b396
parent 1 5315654608de
child 9 f966699dea19
--- a/idlehomescreen/hscontentcontrol/src/hscontentcontrolfactory.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/hscontentcontrol/src/hscontentcontrolfactory.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -22,6 +22,7 @@
 // User include files
 #include "hscontentcontrolfactory.h"
 #include "hscontentcontrolecomlistener.h"
+#include "hscontentcontroluninstallmonitor.h"
 
 // Local constants
 
@@ -78,6 +79,9 @@
             CHsContentControlEComListener::NewL( *this );
     REComSession::ListImplementationsL( 
             KInterfaceUidContentController, iImplArray );
+    
+    iHsContentControlUninstallMonitor = 
+            CHsContentControlUninstallMonitor::NewL( *this );
     }
 
 // ----------------------------------------------------------------------------
@@ -97,7 +101,9 @@
     iImplArray.ResetAndDestroy();
     iImplArray.Close();
     iHsContentControlUis.ResetAndDestroy();
+    
 	delete iHsContentControlEComListener;
+    delete iHsContentControlUninstallMonitor;
     }
 
 // ---------------------------------------------------------------------------------
@@ -157,7 +163,7 @@
         {
         CHsContentControlUi* cc( iHsContentControlUis[ i ] );
         
-        if ( cc->ContentControlType().CompareF( aControlType ) == 0 )                
+        if ( cc->ContentControlType().CompareF( aControlType ) == 0 )
             {
             return cc;
             } 
@@ -180,6 +186,30 @@
     }
 
 // ----------------------------------------------------------------------------
+// CHsContentControlFactory::HandleUninstallEvent()
+// ----------------------------------------------------------------------------
+//
+void CHsContentControlFactory::HandleUninstallEvent( const TUid& aPkgUid )
+    {
+    // ignore event if no plugin loaded.
+    if ( iHsContentControlUis.Count() > 0 )
+        {
+        for( TInt index( iHsContentControlUis.Count() - 1 ); index >= 0; --index )
+            {
+            CHsContentControlUi* cc( iHsContentControlUis[ index ] );
+            // ImplUid of plugin must match Sis pkg uid
+            if ( cc && cc->ImplUid() == aPkgUid )
+                {
+                iHsContentControlUis.Remove( index );
+                delete cc;
+                cc = NULL;
+                break;
+                }
+            }
+        }
+    }
+
+// ----------------------------------------------------------------------------
 // CHsContentControlFactory::CheckPluginChangesL
 // ----------------------------------------------------------------------------
 //