hsappkeyhandler/src/hsappkeyplugin.cpp
author hgs
Mon, 13 Sep 2010 13:26:33 +0300
changeset 116 305818acdca4
parent 112 dbfb5e38438b
child 127 7b66bc3c6dc9
permissions -rw-r--r--
201036
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
92
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Main plugin class
116
hgs
parents: 112
diff changeset
    15
*
92
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <w32std.h>
hgs
parents:
diff changeset
    19
#include <eikenv.h>
hgs
parents:
diff changeset
    20
#include <apgtask.h>
hgs
parents:
diff changeset
    21
#include <apgcli.h>
102
hgs
parents: 93
diff changeset
    22
#include <e32property.h>
92
hgs
parents:
diff changeset
    23
#include <hb/hbcore/hbdevicedialogsymbian.h>
116
hgs
parents: 112
diff changeset
    24
#include <hb/hbcore/hbsymbianvariant.h>
102
hgs
parents: 93
diff changeset
    25
#include <tspropertydefs.h>
107
hgs
parents: 102
diff changeset
    26
#include <afactivitylauncher.h>
hgs
parents: 102
diff changeset
    27
#include <homescreendomainpskeys.h>
92
hgs
parents:
diff changeset
    28
#include "hsappkeyplugin.h"
hgs
parents:
diff changeset
    29
116
hgs
parents: 112
diff changeset
    30
_LIT( KHsActivactionUri, "appto://20022F35?activityname=HsIdleView" );
hgs
parents: 112
diff changeset
    31
_LIT( KAppLibActivactionUri, "appto://20022F35?activityname=AppLibMainView" );
hgs
parents: 112
diff changeset
    32
_LIT( KTsPluginName, "com.nokia.taskswitcher.tsdevicedialogplugin/1.0" );
92
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
// ---------------------------------------------------------------------------
116
hgs
parents: 112
diff changeset
    38
//
92
hgs
parents:
diff changeset
    39
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    40
//
hgs
parents:
diff changeset
    41
CHsAppKeyPlugin::CHsAppKeyPlugin()
116
hgs
parents: 112
diff changeset
    42
    : iEikEnv( CEikonEnv::Static() ) // codescanner::eikonenvstatic
hgs
parents: 112
diff changeset
    43
    {
hgs
parents: 112
diff changeset
    44
    }
92
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    47
// Two-phased constructor.
hgs
parents:
diff changeset
    48
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    49
//
hgs
parents:
diff changeset
    50
CHsAppKeyPlugin* CHsAppKeyPlugin::NewL()
116
hgs
parents: 112
diff changeset
    51
    {
hgs
parents: 112
diff changeset
    52
    CHsAppKeyPlugin* self = new ( ELeave ) CHsAppKeyPlugin;
92
hgs
parents:
diff changeset
    53
    return self;
116
hgs
parents: 112
diff changeset
    54
    }
hgs
parents: 112
diff changeset
    55
92
hgs
parents:
diff changeset
    56
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    57
// C++ Destructor
hgs
parents:
diff changeset
    58
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
//
hgs
parents:
diff changeset
    60
CHsAppKeyPlugin::~CHsAppKeyPlugin()
116
hgs
parents: 112
diff changeset
    61
    {
hgs
parents: 112
diff changeset
    62
    delete iDialog;
hgs
parents: 112
diff changeset
    63
    }
92
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    66
// From MHbDeviceDialogObserver
116
hgs
parents: 112
diff changeset
    67
//
92
hgs
parents:
diff changeset
    68
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    69
//
116
hgs
parents: 112
diff changeset
    70
void CHsAppKeyPlugin::DataReceived( CHbSymbianVariantMap& /*aData*/ )
hgs
parents: 112
diff changeset
    71
    {
92
hgs
parents:
diff changeset
    72
    //no implementation required
116
hgs
parents: 112
diff changeset
    73
    }
92
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    76
// From MHbDeviceDialogObserver
116
hgs
parents: 112
diff changeset
    77
//
92
hgs
parents:
diff changeset
    78
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    79
//
116
hgs
parents: 112
diff changeset
    80
void CHsAppKeyPlugin::DeviceDialogClosed( TInt /*aCompletionCode*/ )
hgs
parents: 112
diff changeset
    81
    {
hgs
parents: 112
diff changeset
    82
    delete iDialog;
hgs
parents: 112
diff changeset
    83
    iDialog = 0;
hgs
parents: 112
diff changeset
    84
    }
92
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    87
// From CSysapKeyHandlerPlugin
116
hgs
parents: 112
diff changeset
    88
//
92
hgs
parents:
diff changeset
    89
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    90
//
116
hgs
parents: 112
diff changeset
    91
TKeyResponse CHsAppKeyPlugin::HandleKeyEventL( const TKeyEvent& aKeyEvent,  
hgs
parents: 112
diff changeset
    92
                                               TEventCode /*aType*/ )
hgs
parents: 112
diff changeset
    93
    {
hgs
parents: 112
diff changeset
    94
    TKeyResponse retVal( EKeyWasNotConsumed );
hgs
parents: 112
diff changeset
    95
    if ( aKeyEvent.iCode == EKeyApplication0 )
hgs
parents: 112
diff changeset
    96
        {
hgs
parents: 112
diff changeset
    97
        if ( aKeyEvent.iRepeats > 0 )
hgs
parents: 112
diff changeset
    98
            {
hgs
parents: 112
diff changeset
    99
            HandleLongPressL();
hgs
parents: 112
diff changeset
   100
            }
hgs
parents: 112
diff changeset
   101
        else
hgs
parents: 112
diff changeset
   102
            {
hgs
parents: 112
diff changeset
   103
            HandleShortPressL();
hgs
parents: 112
diff changeset
   104
            }
hgs
parents: 112
diff changeset
   105
        retVal = EKeyWasConsumed;
92
hgs
parents:
diff changeset
   106
        }
116
hgs
parents: 112
diff changeset
   107
    return retVal;
92
hgs
parents:
diff changeset
   108
    }
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   111
// From CSysapKeyHandlerPlugin
116
hgs
parents: 112
diff changeset
   112
//
92
hgs
parents:
diff changeset
   113
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   114
//
116
hgs
parents: 112
diff changeset
   115
void CHsAppKeyPlugin::ProvideKeyEventsL( RArray<TKeyEvent>& aKeyEventArray ) // codescanner::LFunctionCantLeave
hgs
parents: 112
diff changeset
   116
    {
92
hgs
parents:
diff changeset
   117
    TKeyEvent key;
hgs
parents:
diff changeset
   118
    key.iCode = EKeyApplication0;
hgs
parents:
diff changeset
   119
    key.iScanCode = EStdKeyApplication0;
hgs
parents:
diff changeset
   120
    key.iModifiers = 0;
102
hgs
parents: 93
diff changeset
   121
    key.iRepeats = 0;
116
hgs
parents: 112
diff changeset
   122
    aKeyEventArray.Append( key );
hgs
parents: 112
diff changeset
   123
102
hgs
parents: 93
diff changeset
   124
    TKeyEvent longkey;
hgs
parents: 93
diff changeset
   125
    longkey.iCode = EKeyApplication0;
hgs
parents: 93
diff changeset
   126
    longkey.iScanCode = EStdKeyApplication0;
hgs
parents: 93
diff changeset
   127
    longkey.iModifiers = 0;
hgs
parents: 93
diff changeset
   128
    longkey.iRepeats = 1;
116
hgs
parents: 112
diff changeset
   129
    aKeyEventArray.Append( longkey );
hgs
parents: 112
diff changeset
   130
    }
92
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
// ---------------------------------------------------------------------------
116
hgs
parents: 112
diff changeset
   133
//
92
hgs
parents:
diff changeset
   134
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   135
//
hgs
parents:
diff changeset
   136
void CHsAppKeyPlugin::HandleShortPressL()
116
hgs
parents: 112
diff changeset
   137
    {
hgs
parents: 112
diff changeset
   138
    TInt value( 0 );
hgs
parents: 112
diff changeset
   139
    RProperty::Get( TsProperty::KCategory, TsProperty::KVisibilityKey, value );
hgs
parents: 112
diff changeset
   140
    if ( value )
hgs
parents: 112
diff changeset
   141
        {
112
hgs
parents: 107
diff changeset
   142
        // when Task Switcher dialog is visible, Appkey is used to dismiss it
116
hgs
parents: 112
diff changeset
   143
        DismissTaskSwitcher();
112
hgs
parents: 107
diff changeset
   144
        }
116
hgs
parents: 112
diff changeset
   145
    else
hgs
parents: 112
diff changeset
   146
        {
112
hgs
parents: 107
diff changeset
   147
        // when there is no Task Switcher dialog, Appkey is used to switch between Applib and HomeScreen
hgs
parents: 107
diff changeset
   148
        RApaLsSession apaLsSession;
116
hgs
parents: 112
diff changeset
   149
        CleanupClosePushL( apaLsSession );
hgs
parents: 112
diff changeset
   150
        User::LeaveIfError( apaLsSession.Connect() );
hgs
parents: 112
diff changeset
   151
        CAfActivityLauncher* activityEnabler =
hgs
parents: 112
diff changeset
   152
            CAfActivityLauncher::NewLC( apaLsSession,
hgs
parents: 112
diff changeset
   153
                                        iEikEnv->WsSession() );
hgs
parents: 112
diff changeset
   154
        TInt state( 0 );
hgs
parents: 112
diff changeset
   155
        RProperty::Get( KHsCategoryUid, KHsCategoryStateKey, state );
hgs
parents: 112
diff changeset
   156
        if ( state == EHomeScreenWidgetViewForeground )
hgs
parents: 112
diff changeset
   157
            {
hgs
parents: 112
diff changeset
   158
            activityEnabler->launchActivityL( KAppLibActivactionUri );
hgs
parents: 112
diff changeset
   159
            }
hgs
parents: 112
diff changeset
   160
        else
hgs
parents: 112
diff changeset
   161
            {
hgs
parents: 112
diff changeset
   162
            activityEnabler->launchActivityL( KHsActivactionUri );
hgs
parents: 112
diff changeset
   163
            }
hgs
parents: 112
diff changeset
   164
        CleanupStack::PopAndDestroy( activityEnabler );
hgs
parents: 112
diff changeset
   165
        CleanupStack::PopAndDestroy( &apaLsSession );
hgs
parents: 112
diff changeset
   166
        }
112
hgs
parents: 107
diff changeset
   167
    }
92
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
// ---------------------------------------------------------------------------
116
hgs
parents: 112
diff changeset
   170
//
92
hgs
parents:
diff changeset
   171
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   172
//
hgs
parents:
diff changeset
   173
void CHsAppKeyPlugin::HandleLongPressL()
116
hgs
parents: 112
diff changeset
   174
    {
hgs
parents: 112
diff changeset
   175
    TInt tsVisible( 0 );
hgs
parents: 112
diff changeset
   176
    RProperty::Get( TsProperty::KCategory,
102
hgs
parents: 93
diff changeset
   177
                    TsProperty::KVisibilityKey,
116
hgs
parents: 112
diff changeset
   178
                    tsVisible );
hgs
parents: 112
diff changeset
   179
    if ( tsVisible ) 
hgs
parents: 112
diff changeset
   180
        {
hgs
parents: 112
diff changeset
   181
        DismissTaskSwitcher();
hgs
parents: 112
diff changeset
   182
        } 
hgs
parents: 112
diff changeset
   183
    else 
hgs
parents: 112
diff changeset
   184
        {
hgs
parents: 112
diff changeset
   185
        if ( !iDialog )
hgs
parents: 112
diff changeset
   186
            {
hgs
parents: 112
diff changeset
   187
            iDialog = CHbDeviceDialogSymbian::NewL();
102
hgs
parents: 93
diff changeset
   188
            CHbSymbianVariantMap* params = CHbSymbianVariantMap::NewL();
116
hgs
parents: 112
diff changeset
   189
            if ( KErrNone != iDialog->Show( KTsPluginName, *params, this ) )
hgs
parents: 112
diff changeset
   190
                {
hgs
parents: 112
diff changeset
   191
                delete iDialog;
hgs
parents: 112
diff changeset
   192
                iDialog = 0;
hgs
parents: 112
diff changeset
   193
                }
hgs
parents: 112
diff changeset
   194
            delete params;
102
hgs
parents: 93
diff changeset
   195
            }
92
hgs
parents:
diff changeset
   196
        }
hgs
parents:
diff changeset
   197
    }
hgs
parents:
diff changeset
   198
116
hgs
parents: 112
diff changeset
   199
// ---------------------------------------------------------------------------
hgs
parents: 112
diff changeset
   200
//
hgs
parents: 112
diff changeset
   201
// ---------------------------------------------------------------------------
hgs
parents: 112
diff changeset
   202
//
hgs
parents: 112
diff changeset
   203
void CHsAppKeyPlugin::DismissTaskSwitcher()
hgs
parents: 112
diff changeset
   204
    {
hgs
parents: 112
diff changeset
   205
    // @todo: remove notification through property when SharedDialog flag
hgs
parents: 112
diff changeset
   206
    // is implemented in Orbit.
hgs
parents: 112
diff changeset
   207
    if ( !iDialog )
hgs
parents: 112
diff changeset
   208
        {
hgs
parents: 112
diff changeset
   209
        // dismiss dialog launched from HomeScreen
hgs
parents: 112
diff changeset
   210
        User::LeaveIfError( RProperty::Set( TsProperty::KCategory, TsProperty::KDismissRequestKey, 1 ) );
hgs
parents: 112
diff changeset
   211
        }
hgs
parents: 112
diff changeset
   212
    else
hgs
parents: 112
diff changeset
   213
        {
hgs
parents: 112
diff changeset
   214
        // dismiss dialog launched by this plugin
hgs
parents: 112
diff changeset
   215
        delete iDialog;
hgs
parents: 112
diff changeset
   216
        iDialog = 0;
hgs
parents: 112
diff changeset
   217
        }
hgs
parents: 112
diff changeset
   218
    }