localisation/apparchitecture/apfile/apuninstallmonitor.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localisation/apparchitecture/apfile/apuninstallmonitor.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,109 @@
+// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "apuninstallmonitor.h"
+
+// This active object has lower priority than CApaAppListServer but higher than file scanning periodic timer.
+const TInt KAppUninstallPriority=CActive::EPriorityStandard-10; 
+
+//
+// CApaAppUnInstallMonitor class
+//
+EXPORT_C CApaAppUnInstallMonitor* CApaAppUnInstallMonitor::NewL(CApaAppListServer* aApaServer)
+	{
+	CApaAppUnInstallMonitor* self = new(ELeave) CApaAppUnInstallMonitor(aApaServer);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CApaAppUnInstallMonitor::CApaAppUnInstallMonitor(CApaAppListServer* aApaServer) :
+		CActive(KAppUninstallPriority),
+		iApaServer(aApaServer),
+		iWaitingForStartUninstall(ETrue)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CApaAppUnInstallMonitor::ConstructL()
+	{
+	User::LeaveIfError(iSwisProperty.Attach(KUidSystemCategory, Swi::KUidSoftwareInstallKey));
+	}
+
+EXPORT_C CApaAppUnInstallMonitor::~CApaAppUnInstallMonitor()
+	{
+	Cancel();
+	iSwisProperty.Close();
+	}
+
+EXPORT_C void CApaAppUnInstallMonitor::Start()
+	{
+	DoStart();
+	}
+
+TBool CApaAppUnInstallMonitor::UnInstallInProgress() const
+	{
+	return ((iSwisState & Swi::KSwisOperationMask) & Swi::ESwisUninstall)
+			&& ((iSwisState & Swi::KSwisOperationStatusMask) == Swi::ESwisStatusNone);
+	}
+
+void CApaAppUnInstallMonitor::RunL()
+	{
+	if(iStatus.Int() == KErrNone)
+		{
+		DoStart();
+		
+		if (iWaitingForStartUninstall)
+			{
+			if (UnInstallInProgress())
+				{
+				iWaitingForStartUninstall = EFalse;
+				iApaServer->HandleStartUninstallEvent();
+				}
+			}
+		else
+			{ // waiting for end uninstall
+			if (!UnInstallInProgress())
+				{
+				iWaitingForStartUninstall = ETrue;
+				TRAP_IGNORE(iApaServer->HandleEndUninstallEventL()); // let user try again if OOM
+				}
+			
+			}
+		}
+	}
+	
+void CApaAppUnInstallMonitor::DoStart()
+	{
+	iSwisProperty.Subscribe(iStatus);
+	TInt err = iSwisProperty.Get(KUidSystemCategory, Swi::KUidSoftwareInstallKey, iSwisState);
+	if(err == KErrNone)
+		{
+		SetActive();
+		}
+	else
+		{
+		iSwisProperty.Cancel();
+		}
+	}
+
+void CApaAppUnInstallMonitor::DoCancel()
+	{
+	iSwisProperty.Cancel();
+	}
+	
+
+// End of file