author | Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> |
Tue, 14 Sep 2010 21:55:16 +0300 | |
branch | RCL_3 |
changeset 31 | 8baec10861af |
parent 30 | a5a39a295112 |
permissions | -rw-r--r-- |
30 | 1 |
/* |
2 |
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 |
* All rights reserved. |
|
4 |
* This component and the accompanying materials are made available |
|
5 |
* under the terms of "Eclipse Public License v1.0" |
|
6 |
* which accompanies this distribution, and is available |
|
7 |
* at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 |
* |
|
9 |
* Initial Contributors: |
|
10 |
* Nokia Corporation - initial contribution. |
|
11 |
* |
|
12 |
* Contributors: |
|
13 |
* |
|
14 |
* Description: |
|
15 |
* |
|
16 |
*/ |
|
17 |
||
18 |
// System includes |
|
19 |
#include <ecom/implementationproxy.h> |
|
20 |
#include <eikenv.h> |
|
21 |
#include <sendui.h> |
|
22 |
#include <SendUiConsts.h> |
|
23 |
#include <viewcli.h> // For CVwsSessionWrapper |
|
24 |
#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS |
|
25 |
#include <viewclipartner.h> |
|
26 |
#endif |
|
27 |
||
28 |
#include <vwsdef.h> // For TVwsViewId |
|
29 |
#include <mcsmenuutils.h> |
|
30 |
#include <mcsmenuitem.h> |
|
31 |
#include <mcspluginparamval.h> |
|
32 |
#include <LogsUiCmdStarter.h> |
|
31
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
33 |
#include <APGCLI.H> |
30 | 34 |
|
35 |
// User includes |
|
36 |
#include "mcsplugincompletedoperation.h" |
|
37 |
#include "mcspluginhandler.h" |
|
38 |
#include "mcspluginuids.hrh" |
|
39 |
||
40 |
// Constants |
|
41 |
_LIT( KMenuTypeShortcut, "menu:shortcut" ); ///< Menu folder type. |
|
42 |
_LIT( KMenuAttrParamLogs, "logs:dialed" ); |
|
31
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
43 |
_LIT( KMenuAttrProfiles, "profiles" ); |
30 | 44 |
|
45 |
/** Argument value for parameter*/ |
|
46 |
_LIT( KMenuAttrParam, "param" ); |
|
47 |
||
31
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
48 |
const TUid KProfilesAppUid = { 0x100058F8 }; |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
49 |
|
30 | 50 |
#define KMCSCmailUidValue 0x2001E277 |
51 |
#define KMCSCmailMailboxDefaultViewIdValue 0x1 |
|
52 |
#define KMCSCmailMailboxViewIdValue 0x2 |
|
53 |
#define KMCSCmailMtmUidValue 0x2001F406 |
|
54 |
||
55 |
const TInt KImplUidMCSPluginHandler = AI_UID_ECOM_IMPLEMENTATION_MCSPLUGIN_HANDLER; |
|
56 |
||
57 |
const TImplementationProxy ImplementationTable[] = |
|
58 |
{ |
|
59 |
IMPLEMENTATION_PROXY_ENTRY( KImplUidMCSPluginHandler, CMCSPluginHandler::NewL) |
|
60 |
}; |
|
61 |
||
62 |
// ================= MEMBER FUNCTIONS ======================= |
|
63 |
||
64 |
// --------------------------------------------------------- |
|
65 |
// CMCSPluginHandler::~CMCSPluginHandler |
|
66 |
// --------------------------------------------------------- |
|
67 |
// |
|
68 |
CMCSPluginHandler::~CMCSPluginHandler() |
|
69 |
{ |
|
70 |
delete iVwsSession; |
|
71 |
delete iMsvSession; |
|
72 |
} |
|
73 |
||
74 |
// --------------------------------------------------------- |
|
75 |
// CMCSPluginHandler::NewL |
|
76 |
// --------------------------------------------------------- |
|
77 |
// |
|
78 |
CMCSPluginHandler* CMCSPluginHandler::NewL( RMenu &aMenu ) |
|
79 |
{ |
|
80 |
CMCSPluginHandler* handler = new (ELeave) CMCSPluginHandler( aMenu ); |
|
81 |
CleanupStack::PushL( handler ); |
|
82 |
handler->ConstructL(); |
|
83 |
CleanupStack::Pop( handler ); |
|
84 |
return handler; |
|
85 |
} |
|
86 |
||
87 |
// --------------------------------------------------------- |
|
88 |
// CMCSPluginHandler::CMCSPluginHandler |
|
89 |
// --------------------------------------------------------- |
|
90 |
// |
|
91 |
CMCSPluginHandler::CMCSPluginHandler( RMenu &aMenu ) |
|
92 |
: CMenuHandlerPlugin( aMenu ) |
|
93 |
{ |
|
94 |
iEikEnv = CEikonEnv::Static(); |
|
95 |
} |
|
96 |
||
97 |
// --------------------------------------------------------- |
|
98 |
// CMCSPluginHandler::ConstructL |
|
99 |
// --------------------------------------------------------- |
|
100 |
// |
|
101 |
void CMCSPluginHandler::ConstructL() |
|
102 |
{ |
|
103 |
BaseConstructL(); |
|
104 |
iVwsSession = CVwsSessionWrapper::NewL(); |
|
105 |
iMsvSession = CMsvSession::OpenAsObserverL(*this); |
|
106 |
} |
|
107 |
||
108 |
// --------------------------------------------------------- |
|
109 |
// Supported menu item types |
|
110 |
// --------------------------------------------------------- |
|
111 |
// |
|
112 |
TBool CMCSPluginHandler::SupportsType( const TDesC& aType ) |
|
113 |
{ |
|
114 |
if ( !aType.Compare( KMenuTypeFolder() ) || |
|
115 |
!aType.Compare( KMenuTypeSuite() ) || |
|
116 |
!aType.Compare( KMenuTypeShortcut ) ) |
|
117 |
{ |
|
118 |
return ETrue; |
|
119 |
} |
|
120 |
return EFalse; |
|
121 |
} |
|
122 |
||
123 |
// --------------------------------------------------------- |
|
124 |
// Main command handler |
|
125 |
// --------------------------------------------------------- |
|
126 |
// |
|
127 |
CMenuOperation* CMCSPluginHandler::HandleCommandL( |
|
128 |
CMenuItem& aItem, |
|
129 |
const TDesC8& aCommand, |
|
130 |
const TDesC8& /*aParams*/, |
|
131 |
TRequestStatus& aStatus ) |
|
132 |
{ |
|
133 |
if ( aCommand != KMenuCmdOpen() ) |
|
134 |
{ |
|
135 |
User::Leave ( KErrNotSupported ); |
|
136 |
} |
|
137 |
||
138 |
if( aItem.Type() == KMenuTypeFolder() ) |
|
139 |
{ |
|
140 |
||
141 |
return CMCSPluginCompletedOperation::NewL |
|
142 |
( iMenu, CActive::EPriorityStandard, aStatus, KErrNone ); |
|
143 |
} |
|
144 |
else if ( aItem.Type() == KMenuTypeSuite() ) |
|
145 |
{ |
|
146 |
return CMCSPluginCompletedOperation::NewL |
|
147 |
( iMenu, CActive::EPriorityStandard, aStatus, KErrNone ); |
|
148 |
} |
|
149 |
else if ( aItem.Type() == KMenuTypeShortcut() ) |
|
150 |
{ |
|
151 |
LaunchShortcutL( aItem ); |
|
152 |
return CMCSPluginCompletedOperation::NewL |
|
153 |
( iMenu, CActive::EPriorityStandard, aStatus, KErrNone ); |
|
154 |
} |
|
155 |
else |
|
156 |
{ |
|
157 |
User::Leave ( KErrNotSupported ); |
|
158 |
} |
|
159 |
return NULL; |
|
160 |
} |
|
161 |
||
162 |
// --------------------------------------------------------------------------- |
|
163 |
// From class MMsvSessionObserver. |
|
164 |
// Handles an event from the message server. |
|
165 |
// --------------------------------------------------------------------------- |
|
166 |
// |
|
167 |
void CMCSPluginHandler::HandleSessionEventL( |
|
168 |
TMsvSessionEvent /*aEvent*/, |
|
169 |
TAny* /*aArg1*/, |
|
170 |
TAny* /*aArg2*/, |
|
171 |
TAny* /*aArg3*/ ) |
|
172 |
{ |
|
173 |
// No event handling |
|
174 |
} |
|
175 |
||
176 |
// --------------------------------------------------------- |
|
177 |
// Handles menu:shortcut specific commands |
|
178 |
// Must be extended to launch e.g. MailBoxes |
|
179 |
// caiscuttargetmessagingview.cpp implements the mailbox launching in old shortcut plugin |
|
180 |
// --------------------------------------------------------- |
|
181 |
// |
|
182 |
void CMCSPluginHandler::LaunchShortcutL( CMenuItem& aItem ) |
|
183 |
{ |
|
184 |
||
185 |
// menu:shortcut type of items are launched based on attribute param |
|
186 |
TBool attrExists = ETrue; |
|
187 |
TPtrC param = aItem.GetAttributeL( KMenuAttrParam, attrExists ); |
|
188 |
||
189 |
if ( !attrExists ) |
|
190 |
{ |
|
191 |
User::Leave( KErrCorrupt ); |
|
192 |
} |
|
193 |
||
194 |
// Messaging specific commands |
|
195 |
CSendUi* sendUi = CSendUi::NewLC(); |
|
196 |
if ( param == KParamValueSelType ) // Select message type |
|
197 |
{ |
|
198 |
TSendingCapabilities capabs( 0, 0, TSendingCapabilities::ESupportsEditor ); |
|
199 |
||
200 |
TUid uid = sendUi->ShowTypedQueryL( CSendUi::EWriteMenu, NULL, capabs, NULL, KNullDesC ); |
|
201 |
if ( uid != KNullUid ) |
|
202 |
{ |
|
203 |
sendUi->ServiceCapabilitiesL( uid, capabs ); |
|
204 |
sendUi->CreateAndSendMessageL( uid, NULL, KNullUid, EFalse ); // launch standalone |
|
205 |
} |
|
206 |
} |
|
207 |
else if ( param == KParamValueMsg ) // New text message |
|
208 |
{ |
|
209 |
sendUi->CreateAndSendMessageL(KSenduiMtmUniMessageUid, NULL, KNullUid, EFalse); |
|
210 |
} |
|
211 |
else if ( param == KParamValueEmail ) // New email |
|
212 |
{ |
|
213 |
if ( GetEmailAccountCountL() > 0 ) |
|
214 |
{ |
|
215 |
sendUi->CreateAndSendMessageL( KSenduiMtmSmtpUid, NULL, KNullUid, EFalse ); |
|
216 |
} |
|
217 |
else |
|
218 |
{ |
|
219 |
const TVwsViewId viewId( TUid::Uid( KMCSCmailUidValue ), |
|
220 |
TUid::Uid( KMCSCmailMailboxDefaultViewIdValue ) ); |
|
221 |
iVwsSession->CreateActivateViewEvent( viewId, |
|
222 |
TUid::Uid( KMCSCmailUidValue ), KNullDesC8() ); |
|
223 |
} |
|
224 |
||
225 |
} |
|
226 |
#ifdef __SYNCML_DS_EMAIL |
|
227 |
else if ( param == KParamValueSyncMLMail ) // New SyncML mail |
|
228 |
{ |
|
229 |
sendUi->CreateAndSendMessageL( KSenduiMtmSyncMLEmailUid, NULL, KNullUid, EFalse ); |
|
230 |
} |
|
231 |
#endif |
|
232 |
else if ( param == KParamValuePostcard ) // New postcard |
|
233 |
{ |
|
234 |
sendUi->CreateAndSendMessageL( KSenduiMtmPostcardUid, NULL, KNullUid, EFalse ); |
|
235 |
} |
|
236 |
else if ( param == KParamValueAudioMsg ) // New audio message |
|
237 |
{ |
|
238 |
sendUi->CreateAndSendMessageL( KSenduiMtmAudioMessageUid, NULL, KNullUid, EFalse ); |
|
239 |
} |
|
240 |
else if ( param.Find( KParamValueMailbox ) != KErrNotFound ) // Mailbox |
|
241 |
{ |
|
242 |
TInt pos = param.Locate( TChar( ':' ) ) + 1; |
|
243 |
TPtrC mailboxId = param.Mid( pos ); |
|
244 |
TInt number; |
|
245 |
TLex16 lextmp( mailboxId ); |
|
246 |
lextmp.Val( number ); |
|
247 |
TUid uId = TUid::Uid( number ); |
|
248 |
const TVwsViewId viewId( TUid::Uid( KMCSCmailUidValue ), TUid::Uid( KMCSCmailMailboxViewIdValue ) ); |
|
249 |
iVwsSession->CreateActivateViewEvent( viewId, uId, KNullDesC8() ); |
|
250 |
} |
|
251 |
else if ( param.Find( KMenuAttrParamLogs ) != KErrNotFound ) |
|
252 |
{ |
|
253 |
LogsUiCmdStarter::CmdStartL( LogsUiCmdStarterConsts::KDialledView() ); |
|
254 |
} |
|
31
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
255 |
else if ( param.Find( KMenuAttrProfiles ) != KErrNotFound ) |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
256 |
{ |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
257 |
RApaLsSession apaLsSession; |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
258 |
User::LeaveIfError( apaLsSession.Connect() ); |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
259 |
CleanupClosePushL( apaLsSession ); |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
260 |
|
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
261 |
TApaAppInfo appInfo; |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
262 |
TInt retVal = apaLsSession.GetAppInfo( appInfo, KProfilesAppUid ); |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
263 |
|
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
264 |
if ( retVal == KErrNone ) |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
265 |
{ |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
266 |
CApaCommandLine* cmdLine = CApaCommandLine::NewLC(); |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
267 |
cmdLine->SetExecutableNameL( appInfo.iFullName ); |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
268 |
cmdLine->SetCommandL( EApaCommandRun ); |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
269 |
User::LeaveIfError( apaLsSession.StartApp( *cmdLine ) ); |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
270 |
|
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
271 |
CleanupStack::PopAndDestroy( cmdLine ); |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
272 |
} |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
273 |
|
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
274 |
CleanupStack::PopAndDestroy( &apaLsSession ); |
8baec10861af
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
30
diff
changeset
|
275 |
} |
30 | 276 |
CleanupStack::PopAndDestroy( sendUi ); |
277 |
} |
|
278 |
||
279 |
// --------------------------------------------------------------------------- |
|
280 |
// Returns count of Email accounts |
|
281 |
// --------------------------------------------------------------------------- |
|
282 |
// |
|
283 |
TInt CMCSPluginHandler::GetEmailAccountCountL() |
|
284 |
{ |
|
285 |
CMsvEntry* rootEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryIdValue ); |
|
286 |
CleanupStack::PushL(rootEntry); |
|
287 |
||
288 |
TInt cnt = rootEntry->Count(); |
|
289 |
if ( cnt > 0 ) |
|
290 |
{ |
|
291 |
cnt = 0; |
|
292 |
rootEntry->SetSortTypeL( TMsvSelectionOrdering( |
|
293 |
KMsvGroupByType | KMsvGroupByStandardFolders, |
|
294 |
EMsvSortByDetailsReverse, ETrue ) ); |
|
295 |
||
296 |
for ( TInt i = rootEntry->Count(); --i >= 0; ) |
|
297 |
{ |
|
298 |
const TMsvEntry& tentry = (*rootEntry)[i]; |
|
299 |
||
300 |
if (tentry.iMtm.iUid == KMCSCmailMtmUidValue ) |
|
301 |
{ |
|
302 |
cnt++; |
|
303 |
} |
|
304 |
} |
|
305 |
} |
|
306 |
CleanupStack::PopAndDestroy(rootEntry); |
|
307 |
return cnt; |
|
308 |
} |
|
309 |
||
310 |
// ============================ GLOBAL FUNCTIONS =============================== |
|
311 |
||
312 |
EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) |
|
313 |
{ |
|
314 |
aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); |
|
315 |
return ImplementationTable; |
|
316 |
} |