--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hsappkeyhandler/src/hsappkeyplugin.cpp Tue Aug 31 15:30:51 2010 +0300
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2007-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: Main plugin class
+ *
+*/
+
+
+#include <w32std.h>
+#include <eikenv.h>
+#include <apgtask.h>
+#include <apgcli.h>
+#include <e32property.h>
+#include <hb/hbcore/hbdevicedialogsymbian.h>
+#include <hb/hbcore/hbsymbianvariant.h>
+#include <tspropertydefs.h>
+#include <afactivitylauncher.h>
+#include <homescreendomainpskeys.h>
+#include "hsappkeyplugin.h"
+
+_LIT(KHsActivactionUri, "appto://20022F35?activityname=HsIdleView");
+_LIT(KAppLibActivactionUri, "appto://20022F35?activityname=AppLibMainView");
+_LIT(KTsPluginName, "com.nokia.taskswitcher.tsdevicedialogplugin/1.0");
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CHsAppKeyPlugin::CHsAppKeyPlugin()
+: iEikEnv( CEikonEnv::Static() )
+{
+}
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CHsAppKeyPlugin* CHsAppKeyPlugin::NewL()
+{
+ CHsAppKeyPlugin* self = new (ELeave) CHsAppKeyPlugin;
+ return self;
+}
+
+// ---------------------------------------------------------------------------
+// C++ Destructor
+// ---------------------------------------------------------------------------
+//
+CHsAppKeyPlugin::~CHsAppKeyPlugin()
+{
+ delete mDialog;
+}
+
+// ---------------------------------------------------------------------------
+// From MHbDeviceDialogObserver
+//
+// ---------------------------------------------------------------------------
+//
+void CHsAppKeyPlugin::DataReceived(CHbSymbianVariantMap& /*aData*/)
+{
+ //no implementation required
+}
+
+// ---------------------------------------------------------------------------
+// From MHbDeviceDialogObserver
+//
+// ---------------------------------------------------------------------------
+//
+void CHsAppKeyPlugin::DeviceDialogClosed(TInt /*aCompletionCode*/)
+{
+ delete mDialog;
+ mDialog = 0;
+}
+
+// ---------------------------------------------------------------------------
+// From CSysapKeyHandlerPlugin
+//
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CHsAppKeyPlugin::HandleKeyEventL(const TKeyEvent &aKeyEvent,
+ TEventCode /*aType*/)
+{
+ TKeyResponse retVal(EKeyWasNotConsumed);
+ if (aKeyEvent.iCode == EKeyApplication0) {
+ if (iSecondEvent) {
+ if (aKeyEvent.iRepeats > 0)
+ HandleLongPressL();
+ else
+ HandleShortPressL();
+ retVal = EKeyWasConsumed;
+ }
+ iSecondEvent = !iSecondEvent;
+ }
+ return retVal;
+}
+
+// ---------------------------------------------------------------------------
+// From CSysapKeyHandlerPlugin
+//
+// ---------------------------------------------------------------------------
+//
+void CHsAppKeyPlugin::ProvideKeyEventsL(RArray<TKeyEvent>& aKeyEventArray)
+{
+ TKeyEvent key;
+ key.iCode = EKeyApplication0;
+ key.iScanCode = EStdKeyApplication0;
+ key.iModifiers = 0;
+ key.iRepeats = 0;
+ aKeyEventArray.Append(key);
+
+ TKeyEvent longkey;
+ longkey.iCode = EKeyApplication0;
+ longkey.iScanCode = EStdKeyApplication0;
+ longkey.iModifiers = 0;
+ longkey.iRepeats = 1;
+ aKeyEventArray.Append(longkey);
+
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHsAppKeyPlugin::HandleShortPressL()
+{
+ TInt value(0);
+ RProperty::Get(TsProperty::KCategory, TsProperty::KVisibilityKey, value);
+ if (value) {
+ // when Task Switcher dialog is visible, Appkey is used to dismiss it
+
+ // @todo: remove notification through property when SharedDialog flag
+ // is implemented in Orbit.
+ if (!mDialog) {
+ // dismiss dialog launched from HomeScreen
+ User::LeaveIfError(RProperty::Set(TsProperty::KCategory, TsProperty::KDismissRequestKey, 1));
+ } else {
+ // dismiss dialog launched by this plugin
+ delete mDialog;
+ mDialog = 0;
+ }
+ } else {
+ // when there is no Task Switcher dialog, Appkey is used to switch between Applib and HomeScreen
+ RApaLsSession apaLsSession;
+ CleanupClosePushL(apaLsSession);
+ User::LeaveIfError(apaLsSession.Connect());
+ CAfActivityLauncher *activityEnabler =
+ CAfActivityLauncher::NewLC(apaLsSession,
+ iEikEnv->WsSession());
+ TInt state(0);
+ RProperty::Get(KHsCategoryUid, KHsCategoryStateKey, state);
+ if (state == EHomeScreenIdleState) {
+ activityEnabler->launchActivityL(KAppLibActivactionUri);
+ } else {
+ activityEnabler->launchActivityL(KHsActivactionUri);
+ }
+ CleanupStack::PopAndDestroy(activityEnabler);
+ CleanupStack::PopAndDestroy(&apaLsSession);
+ }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHsAppKeyPlugin::HandleLongPressL()
+{
+ if( !mDialog ) {
+ TInt value( 0 );
+ RProperty::Get( TsProperty::KCategory,
+ TsProperty::KVisibilityKey,
+ value );
+ if(!value) {
+ mDialog = CHbDeviceDialogSymbian::NewL();
+ CHbSymbianVariantMap* params = CHbSymbianVariantMap::NewL();
+ if(KErrNone != mDialog->Show(KTsPluginName,*params,this)) {
+ delete mDialog;
+ mDialog = 0;
+ }
+ delete params;
+ }
+ }
+}
+// End of File
+
+