taskswitcherapp/tsserviceplugin/src/s60/tsexternalactivationwatcher_p.cpp
changeset 36 cdae8c6c3876
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcherapp/tsserviceplugin/src/s60/tsexternalactivationwatcher_p.cpp	Fri Apr 16 14:54:01 2010 +0300
@@ -0,0 +1,80 @@
+/*
+* 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 "tsexternalactivationwatcher_p.h"
+#include "tsexternalactivationwatcher.h"
+
+const TUid KTaskswitcherCategory = { 0x2002677D };
+const TUint KExternalActivationKey = 0x1;
+const TInt KTaskswitcherActivateFlag = 1;
+
+/*!
+    \class TsExternalActivationWatcherPrivate
+    \ingroup group_tsserviceplugin
+    \brief Private implementation of external activation watcher.
+*/
+
+TsExternalActivationWatcherPrivate::TsExternalActivationWatcherPrivate(TsExternalActivationWatcher *parent) : CActive(CActive::EPriorityStandard), mParent(parent)
+{
+    CActiveScheduler::Add(this);
+    
+    TInt err = RProperty::Define(KTaskswitcherCategory, KExternalActivationKey, RProperty::EInt);
+    if (err == KErrNone || err == KErrAlreadyExists) {
+        err = mProperty.Attach(KTaskswitcherCategory, KExternalActivationKey);
+    }
+    
+    Q_ASSERT_X(err == KErrNone, "TsExternalActivationWatcherPrivate", qPrintable(QString("Cannot define/attach to activation watcher property %1").arg(err)));
+    
+    mProperty.Subscribe(iStatus);
+    SetActive();
+}
+
+TsExternalActivationWatcherPrivate::~TsExternalActivationWatcherPrivate()
+{
+    Cancel();
+    mProperty.Close();
+}
+
+void TsExternalActivationWatcherPrivate::ResetActivationFlag()
+{
+    TInt value(0);
+    mProperty.Set(value);
+}
+
+void TsExternalActivationWatcherPrivate::DoCancel()
+{
+    mProperty.Cancel();
+}
+
+void TsExternalActivationWatcherPrivate::RunL()
+{
+    if (iStatus.Int() != KErrCancel) {
+        
+        if (CheckActivationFlag()) {
+            ResetActivationFlag();
+            QT_TRYCATCH_LEAVING(emit mParent->activationRequested());
+        }
+        mProperty.Subscribe(iStatus);
+        SetActive();
+    }
+}
+
+bool TsExternalActivationWatcherPrivate::CheckActivationFlag()
+{
+    TInt value(0);
+    TInt result = mProperty.Get(value);
+    return (result == KErrNone && value & KTaskswitcherActivateFlag);
+}