qtinternetradio/irqsystemeventhandler/src/irpropertychangeao.cpp
changeset 5 0930554dc389
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqsystemeventhandler/src/irpropertychangeao.cpp	Thu May 27 12:46:34 2010 +0300
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+ 
+#include "irpropertychangeao.h"
+#include "irpropertyobserver.h" 
+#include "irqlogger.h" 
+
+CIRPropertyChangeAO::CIRPropertyChangeAO(MIRPropertyChangeObserverInterface* aObserver, const TUid& aCategory,
+        const TUint aKey) : CActive(CActive::EPriorityStandard), iObserver(aObserver), iCategory(aCategory), iKey(aKey)
+{
+    LOG_METHOD;
+}
+
+void CIRPropertyChangeAO::ConstructL()
+{
+    LOG_METHOD;
+    User::LeaveIfError(iProperty.Attach(iCategory, iKey));
+    CActiveScheduler::Add(this);     
+}
+
+CIRPropertyChangeAO* CIRPropertyChangeAO::NewL(
+        MIRPropertyChangeObserverInterface* aObserver, const TUid& aCategory,
+        const TUint aKey)
+{
+    LOG_METHOD;
+    CIRPropertyChangeAO* self = new (ELeave) CIRPropertyChangeAO(aObserver,
+            aCategory, aKey);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+}
+
+CIRPropertyChangeAO::~CIRPropertyChangeAO()
+{
+    Cancel();
+    iProperty.Close();
+}
+
+void CIRPropertyChangeAO::ActivateL()
+{
+    if (!IsActive())
+    {
+        RunL();
+    }
+}
+
+void CIRPropertyChangeAO::RunL()
+{
+    LOG_METHOD;
+    
+    if ( KErrNone == iStatus.Int() ) 
+    {
+        TInt err = KErrNone;
+
+        err = iProperty.Get(iValueInt);
+        
+        if ( KErrNone == err )
+        {            
+            iObserver->HandlePropertyChangeL(iCategory, iKey, iValueInt);
+        }    
+        else
+        {
+            iObserver->HandlePropertyChangeErrorL(iCategory, iKey, err);
+        }        
+    }
+    
+    iProperty.Subscribe(iStatus);
+    SetActive();
+    
+    //if the iStatus is error, ignore it.
+}
+
+void CIRPropertyChangeAO::DoCancel()
+{
+    iProperty.Cancel();
+}
+
+TBool CIRPropertyChangeAO::ValueInt(TInt& aValue)
+{
+	TInt tempValue = 0;
+    TInt err = iProperty.Get(tempValue);
+    
+    if ( KErrNone == err )
+    {
+    	iValueInt = tempValue;    
+    	aValue = tempValue;
+    }
+    else
+    {
+        return EFalse;
+    }
+    
+    return ETrue;
+}
+