homescreensrv_plat/sapi_menucontent/src/mcsmcinterface.cpp
changeset 0 79c6a41cd166
equal deleted inserted replaced
-1:000000000000 0:79c6a41cd166
       
     1 /*
       
     2 * Copyright (c) 2008 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 
       
    19 #include <e32base.h>
       
    20 #include <e32def.h>
       
    21 #include "mcsdef.h"
       
    22 #include "mcsmenufilter.h"
       
    23 #include "mcsmenuitem.h"
       
    24 
       
    25 #include "serviceerrno.h"
       
    26 #include "mcsservice.h"
       
    27 #include "mcsmcinterface.h"
       
    28 #include "mcscallback.h"
       
    29 #include "mcsconstants.h"
       
    30 
       
    31 // ---------------------------------------------------------------------------
       
    32 // Two-phased constructor.
       
    33 // ---------------------------------------------------------------------------
       
    34 //
       
    35 CMCSMCInterface* CMCSMCInterface::NewL(const TDesC& aContent)
       
    36 	{
       
    37 	CMCSMCInterface* self = new (ELeave) CMCSMCInterface();
       
    38 	CleanupStack::PushL(self);
       
    39 	self->ConstructL(aContent);
       
    40 	CleanupStack::Pop(self);
       
    41 	return self;
       
    42 	}
       
    43 // ---------------------------------------------------------------------------
       
    44 // Destructor.
       
    45 // ---------------------------------------------------------------------------
       
    46 //	
       
    47 CMCSMCInterface::~CMCSMCInterface()
       
    48 	{
       
    49 	delete iMCSService;
       
    50 	}
       
    51 
       
    52 // ---------------------------------------------------------------------------
       
    53 // Constructor
       
    54 // ---------------------------------------------------------------------------
       
    55 //
       
    56 CMCSMCInterface::CMCSMCInterface()
       
    57 	{
       
    58 	}
       
    59 
       
    60 // ---------------------------------------------------------------------------
       
    61 // Symbian Constructor
       
    62 // ---------------------------------------------------------------------------
       
    63 //	
       
    64 void CMCSMCInterface::ConstructL(const TDesC& aContent)
       
    65 	{
       
    66 	iMCSService = CMCSService::NewL(aContent);
       
    67 	}
       
    68 
       
    69 // ---------------------------------------------------------------------------
       
    70 //  Executes the SAPI as per params
       
    71 // ---------------------------------------------------------------------------
       
    72 //
       
    73 void CMCSMCInterface::ExecuteCmdL(const TDesC8& aCmdName,
       
    74 		const CLiwGenericParamList& aInParamList,
       
    75 		CLiwGenericParamList& aOutParamList, TUint aCmdOptions,
       
    76 		MLiwNotifyCallback* aCallback)
       
    77 	{
       
    78 	TInt errcode = KErrNotSupported;
       
    79 	TInt32 transactionId = -1;
       
    80 
       
    81 	aOutParamList.AppendL(TLiwGenericParam(KErrorCode,
       
    82 			TLiwVariant(ErrCodeConversion(KErrNone))));
       
    83 	
       
    84 	if ( !aCallback )
       
    85 		{
       
    86 		// Callback is a null pointer
       
    87 		errcode = KErrArgument;
       
    88 		}
       
    89 	else
       
    90 		{
       
    91 		if (aCmdName.CompareF(KCmdExecuteAction) == 0)
       
    92 			{
       
    93 			TRAP(errcode, ExecuteActionL( aInParamList, aCallback ));
       
    94 			}
       
    95 		else if (aCmdName.CompareF(KcmdRunningApps) == 0)
       
    96 	        {
       
    97 			TRAP(errcode, GetRunningAppsL( aInParamList, aCallback ));
       
    98 			}
       
    99 		else if (aCmdName.CompareF(KCmdOrganize) == 0)
       
   100 			{
       
   101 			aOutParamList.Reset();
       
   102 			TRAP(errcode, OrganizeL( aInParamList, aOutParamList, aCallback ));
       
   103 			}
       
   104 		
       
   105 		// Append transaction id in case of asynchronous requests 
       
   106 		if ( (KLiwOptASyncronous & aCmdOptions ) && (errcode
       
   107 				== KErrNone ) && (transactionId != -1 ))
       
   108 			{
       
   109 			aOutParamList.AppendL(TLiwGenericParam(KTransactionID,
       
   110 					TLiwVariant(TInt32(transactionId))));
       
   111 			}
       
   112 		}
       
   113 
       
   114 	if (errcode != KErrNone)
       
   115 		{
       
   116 		aOutParamList.Reset();
       
   117 		aOutParamList.AppendL(TLiwGenericParam(KErrorCode,
       
   118 				TLiwVariant(ErrCodeConversion(errcode))));
       
   119 		}
       
   120 	}
       
   121 
       
   122 // ---------------------------------------------------------------------------
       
   123 // Closes the interface
       
   124 // ---------------------------------------------------------------------------
       
   125 //
       
   126 void CMCSMCInterface::Close()
       
   127 	{
       
   128 	delete this;
       
   129 	}
       
   130 
       
   131 // ---------------------------------------------------------------------------
       
   132 // Closes the interface
       
   133 // ---------------------------------------------------------------------------
       
   134 //
       
   135 void CMCSMCInterface::GetRunningAppsL(const CLiwGenericParamList& aInParamList,
       
   136 		MLiwNotifyCallback* aCallback)
       
   137 	{
       
   138 	CMCSCallback* cb = CMCSCallback::NewL(aCallback, aInParamList,
       
   139 			aCallback->GetTransactionID(), *iMCSService,
       
   140 			CMCSCallback::EGetRunningApps);
       
   141 	CleanupStack::PushL(cb);
       
   142 	iMCSService->GetRunningAppsL(cb);
       
   143 	CleanupStack::Pop(cb);
       
   144 
       
   145 	}
       
   146 // ---------------------------------------------------------------------------
       
   147 // Execute actions 
       
   148 // ---------------------------------------------------------------------------
       
   149 //
       
   150 void CMCSMCInterface::ExecuteActionL(const CLiwGenericParamList& aInParamList,
       
   151 		MLiwNotifyCallback* aCallback)
       
   152 	{
       
   153 	TLiwVariant param;
       
   154 	TInt32 itemId = -1;
       
   155 	TInt pos = 0;
       
   156 	TPtrC8 action;
       
   157 	TBuf8<KMenuMaxAttrNameLen> buf8;
       
   158 
       
   159 	const TLiwGenericParam* inParam = aInParamList.FindFirst(pos, KInData);
       
   160 
       
   161 	if (inParam)
       
   162 		{
       
   163 		const CLiwMap* inputMap = inParam->Value().AsMap();
       
   164 		if (inputMap)
       
   165 			{
       
   166 			// Item Id
       
   167 			buf8.Copy(KMenuAttrId());
       
   168 			if (inputMap->FindL(buf8, param))
       
   169 				{
       
   170 				itemId = param.AsTInt32();
       
   171 				}
       
   172 			param.Reset();
       
   173 			// Action 
       
   174 			if (inputMap->FindL(KAction, param))
       
   175 				{
       
   176 				action.Set(param.AsData());
       
   177 				if (param == KActionOpen() )
       
   178 					{
       
   179 					action.Set(KMenuCmdOpen());
       
   180 					}
       
   181 				else
       
   182 					if (param == KActionRemove() )
       
   183 						{
       
   184 						action.Set(KMenuCmdRemove());
       
   185 						}
       
   186 					else
       
   187 						{
       
   188 						itemId = -1;
       
   189 						}
       
   190 				}
       
   191 			else
       
   192 				{
       
   193 				itemId = -1;
       
   194 				}
       
   195 			param.Reset();
       
   196 			}
       
   197 		}
       
   198 
       
   199 	if (itemId == -1)
       
   200 		{
       
   201 		User::Leave(KErrArgument);
       
   202 		}
       
   203 	else
       
   204 		{
       
   205 		CMCSCallback* cb = CMCSCallback::NewL(aCallback, aInParamList,
       
   206 				aCallback->GetTransactionID(), *iMCSService,
       
   207 				CMCSCallback::EExecuteAction);
       
   208 		CleanupStack::PushL(cb);
       
   209 		iMCSService->ExecuteActionL(cb, itemId, action);
       
   210 		CleanupStack::Pop(cb);
       
   211 		}
       
   212 	}
       
   213 
       
   214 // ---------------------------------------------------------------------------
       
   215 // GetParamFromMap
       
   216 // ---------------------------------------------------------------------------
       
   217 //
       
   218 TBool CMCSMCInterface::GetParamFromMapL( const CLiwMap* aInputMap,
       
   219 		const TDesC8& aParamName, RArray<TInt>& aOutputList )
       
   220 	{
       
   221 	TBool status = EFalse;
       
   222 	TLiwVariant param;
       
   223 	param.PushL();
       
   224 	if ( aInputMap->FindL ( aParamName, param ) )
       
   225 		{
       
   226 		const CLiwList* paramList = param.AsList();
       
   227 		if(paramList)
       
   228 			{
       
   229 			for (TInt i = 0; i < paramList->Count(); i++)
       
   230 				{
       
   231 				TLiwVariant variant;
       
   232 				variant.PushL();
       
   233 				if (paramList->AtL(i, variant) )
       
   234 					{
       
   235 					TInt value = 0;
       
   236 					if (variant.Get(value) )
       
   237 						{
       
   238 						aOutputList.AppendL( value );
       
   239 						}
       
   240 					}
       
   241 				CleanupStack::PopAndDestroy( &variant );
       
   242 				}
       
   243 			}
       
   244 		}
       
   245 	CleanupStack::PopAndDestroy( &param );
       
   246 	
       
   247 	if( aOutputList.Count() > 0 )
       
   248 		{
       
   249 		status = ETrue;
       
   250 		}
       
   251 		
       
   252 	return status;
       
   253 	}
       
   254 
       
   255 // ---------------------------------------------------------------------------
       
   256 // GetParamFromMap
       
   257 // ---------------------------------------------------------------------------
       
   258 //
       
   259 TBool CMCSMCInterface::GetParamFromMapL( const CLiwMap* aInputMap,
       
   260 		const TDesC8& aParamName, TInt& aOutputValue )
       
   261 	{
       
   262 	TBool status = EFalse;
       
   263 	TLiwVariant param;
       
   264 	param.PushL();
       
   265 	if ( aInputMap->FindL( aParamName, param ) )
       
   266 		{
       
   267 		param.Get( aOutputValue );
       
   268 		status = ETrue;
       
   269 		}
       
   270 	CleanupStack::PopAndDestroy( &param );
       
   271 	return status;
       
   272 	}
       
   273 
       
   274 // ---------------------------------------------------------------------------
       
   275 // Organize 
       
   276 // ---------------------------------------------------------------------------
       
   277 //
       
   278 void CMCSMCInterface::OrganizeL( const CLiwGenericParamList& aInParamList,
       
   279 		                         CLiwGenericParamList& aOutParamList, 
       
   280 		                         MLiwNotifyCallback* aCallback )
       
   281 	{
       
   282 	TInt errcode = KErrArgument;
       
   283 	TBuf8<KMenuMaxAttrNameLen> attrname;
       
   284 	TBuf16<KMenuMaxAttrValueLen> paramType;
       
   285 	TInt pos = 0;
       
   286 	
       
   287 	const TLiwGenericParam* inParam = aInParamList.FindFirst(pos, KInData);
       
   288 	if (inParam)
       
   289 		{
       
   290 		const CLiwMap* inputMap = (CLiwMap*)inParam->Value().AsMap();
       
   291 		if (inputMap)
       
   292 			{			
       
   293 			RArray<TInt> list;
       
   294 			TInt beforeItemId = 0;
       
   295             TInt folderId = 0;
       
   296 			CleanupClosePushL( list );
       
   297 			if( GetParamFromMapL( inputMap, KItemIds, list ) )
       
   298 				{
       
   299 				GetParamFromMapL( inputMap, KBeforeItemId, beforeItemId );
       
   300 				
       
   301 				CMCSCallback* cb = CMCSCallback::NewL( aCallback, aInParamList,
       
   302 					aCallback->GetTransactionID(), *iMCSService,
       
   303 					CMCSCallback::EOrganize );
       
   304 
       
   305 				CleanupStack::PushL(cb);
       
   306 				if( GetParamFromMapL( inputMap, KFolderId, folderId ) )
       
   307 					{
       
   308 					iMCSService->OrganizeL( cb, list, folderId, beforeItemId );
       
   309 					}
       
   310 				else
       
   311 					{
       
   312 					iMCSService->OrganizeL( cb, list[0], beforeItemId );
       
   313 					}
       
   314 				CleanupStack::Pop(cb);
       
   315 				errcode = KErrNone; 
       
   316 				}
       
   317 
       
   318 			CleanupStack::PopAndDestroy( &list );
       
   319 			}
       
   320 		}
       
   321 
       
   322 	aOutParamList.AppendL( TLiwGenericParam( KErrorCode,
       
   323     		TLiwVariant( ErrCodeConversion( errcode ) ) ) );
       
   324 	}
       
   325 
       
   326 // ---------------------------------------------------------------------------
       
   327 // ErrCode Conversion
       
   328 // ---------------------------------------------------------------------------
       
   329 //
       
   330 TInt32 CMCSMCInterface::ErrCodeConversion(TInt code)
       
   331 	{
       
   332 	TInt32 err;
       
   333 	switch (code)
       
   334 		{
       
   335 		case KErrCancel:
       
   336 			// Returning KErrNone incase of KErrCancel
       
   337 		case KErrNone:
       
   338 			err= SErrNone;
       
   339 			break;
       
   340 
       
   341 		case KErrNotFound:
       
   342 			err= SErrNotFound;
       
   343 			break;
       
   344 
       
   345 		case KErrNoMemory:
       
   346 			err = SErrNoMemory;
       
   347 			break;
       
   348 
       
   349 		case KErrInUse:
       
   350 			err = SErrServiceInUse;
       
   351 			break;
       
   352 
       
   353 		case KErrNotSupported:
       
   354 			err = SErrServiceNotSupported;
       
   355 			break;
       
   356 
       
   357 		case KErrBadName:
       
   358 			err = SErrBadArgumentType;
       
   359 			break;
       
   360 
       
   361 		case KErrArgument:
       
   362 			err = SErrInvalidServiceArgument;
       
   363 			break;
       
   364 
       
   365 		default:
       
   366 			err = SErrGeneralError;
       
   367 			break;
       
   368 		}
       
   369 
       
   370 	return err;
       
   371 	}
       
   372 
       
   373 // End of file
       
   374