hsappkeyhandler/src/hsappkeyplugin.cpp
author hgs
Fri, 30 Apr 2010 15:22:08 +0300
changeset 93 82b66994846c
parent 92 782e3408c2ab
child 102 8b8b34fa9751
child 109 e0aa398e6810
permissions -rw-r--r--
201017

/*
* 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 <hb/hbcore/hbdevicedialogsymbian.h>
#include <hb/hbcore/hbsymbianvariant.h> 
#include "hsappkeyplugin.h"

const TUid KHSAppUid  = { 0x20022F35 };
_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;
    self->iEikEnv->RootWin().CaptureLongKey(EKeyApplication0, 
                                            EKeyApplication0, 
                                            0, 
                                            0, 
                                            0, 
                                            ELongCaptureWaitShort);
    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;
    aKeyEventArray.Append(key);
}

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHsAppKeyPlugin::HandleShortPressL()
{    
    RWsSession& ws = iEikEnv->WsSession();
    TApaTaskList appList(ws);
    TApaTask task = appList.FindApp(KHSAppUid);

    if (task.Exists()) {
        task.BringToForeground();
    } else {        
        RApaLsSession apaLsSession;
        User::LeaveIfError(apaLsSession.Connect());
        CleanupClosePushL(apaLsSession);
        
        TApaAppInfo appInfo;
        apaLsSession.GetAppInfo(appInfo, KHSAppUid );
        
        CApaCommandLine *cmdLine = CApaCommandLine::NewLC();
        cmdLine->SetExecutableNameL(appInfo.iFullName);
        User::LeaveIfError( apaLsSession.StartApp(*cmdLine));
    
        CleanupStack::PopAndDestroy(cmdLine);
        CleanupStack::PopAndDestroy(&apaLsSession);
    }
    delete mDialog;
    mDialog =0;
}

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHsAppKeyPlugin::HandleLongPressL()
{
    if( !mDialog ) {
         mDialog = CHbDeviceDialogSymbian ::NewL();
        
        CHbSymbianVariantMap* params = CHbSymbianVariantMap::NewL();
        
        if(KErrNone != mDialog->Show(KTsPluginName,*params,this)) {
            delete mDialog;
            mDialog = 0;
        }
        delete params;
    }
}
//  End of File