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