--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/wppsrc/aknswallpaperplugin.cpp Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,301 @@
+/*
+* Copyright (c) 2005-2007 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: Project definition file for project aknswallpaperplugin
+*
+*/
+
+#include <eikmenup.h>
+#include <f32file.h>
+#include <AknsWallpaperUtils.h>
+#include <AiwMenu.h>
+#include <AiwCommon.h>
+#include <AiwCommon.hrh>
+#include <barsread.h>
+#include <eikenv.h>
+#include <ecom/implementationproxy.h>
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+#include <data_caging_path_literals.hrh>
+#include <aknswallpaperplugin.rsg>
+#include "aknswallpaperplugin.h"
+#include "aknswallpaperplugin.rh"
+
+_LIT(KResourceFileName, "AknsWallpaperPlugin.rsc");
+_LIT(KDriveZ, "z:");
+
+_LIT(KAknsWallpaperPluginMimeTypeImage, "IMAGE");
+_LIT(KAknsWallpaperPluginMimeTypeOTABitmap, "IMAGE/X-OTA-BITMAP");
+_LIT(KAknsWallpaperPluginSeparator, "/");
+
+// ======== MEMBER FUNCTIONS ========
+
+CAknsWallpaperPlugin* CAknsWallpaperPlugin::NewL()
+ {
+ CAknsWallpaperPlugin* self = new( ELeave ) CAknsWallpaperPlugin;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CAknsWallpaperPlugin::CAknsWallpaperPlugin():
+ iConeResLoader(*CCoeEnv::Static())
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CAknsWallpaperPlugin::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CAknsWallpaperPlugin::ConstructL()
+ {
+ TParse parse;
+ parse.Set(KResourceFileName, &KDC_RESOURCE_FILES_DIR, &KDriveZ);
+ TFileName resourceFileName;
+ resourceFileName.Append(parse.FullName());
+ iConeResLoader.OpenL(resourceFileName);
+ }
+
+CAknsWallpaperPlugin::~CAknsWallpaperPlugin()
+ {
+ iConeResLoader.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAiwServiceIfMenu.
+// ---------------------------------------------------------------------------
+//
+void CAknsWallpaperPlugin::InitialiseL(MAiwNotifyCallback& /*aFrameworkCallback*/,
+ const RCriteriaArray& /*aInterest*/)
+ {
+ // Not needed.
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAiwServiceIfMenu.
+//
+// Implements setting the main wallpaper for the device using
+// AknsWallpaperUtils.
+// ---------------------------------------------------------------------------
+//
+void CAknsWallpaperPlugin::HandleServiceCmdL(const TInt& aCmdId,
+ const CAiwGenericParamList& aInParamList,
+ CAiwGenericParamList& /*aOutParamList*/,
+ TUint /*aCmdOptions*/,
+ const MAiwNotifyCallback* aCallback)
+ {
+ // Handle only assign command.
+ if ( aCmdId == KAiwCmdAssign )
+ {
+ // Retrieve filename and file MIME type from AIW param list
+ TPtrC fileName = GetAiwParamAsDescriptor(aInParamList, EGenericParamFile);
+
+ TPtrC mimeTypeString = GetAiwParamAsDescriptor(aInParamList, EGenericParamMIMEType);
+
+ // Leave, if there were not given all the required parameters
+ if ((fileName == KNullDesC) ||
+ (mimeTypeString == KNullDesC) || !IsMimeTypeSupportedL(mimeTypeString) )
+ {
+ User::Leave(KErrArgument);
+ }
+ TInt err = AknsWallpaperUtils::SetIdleWallpaper(
+ fileName,
+ CCoeEnv::Static(),
+ R_AKNS_WALLPAPER_TEXT_LOADING_IMAGE,
+ R_AKNS_WALLPAPER_GENERAL_WAIT_NOTE );
+
+ if (err == KAknsWpuErrorPreviewOnly)
+ {
+ DisplayInfoNoteL(R_AKNS_WALLPAPER_TEXT_DRM_PREVIEW);
+ }
+ else if ( err == KErrNoMemory || err == KErrDiskFull || err == KErrTooBig )
+ {
+ DisplayInfoNoteL( R_AKNS_WALLPAPER_TEXT_IMAGE_TOO_LARGE );
+ }
+ else if (err == KErrCancel || err == KErrCouldNotConnect )
+ {
+ // Skip, this is not a real error or the error is not propagated
+ // to upper level.
+ }
+ else if ( err == KLeaveExit )
+ {
+ // Exit leaves should always allowed to leave.
+ User::Leave( KLeaveExit );
+ }
+ else if ( err != KErrNone )
+ {
+ DisplayInfoNoteL( R_AKNS_WALLPAPER_TEXT_IMAGE_CORRUPTED );
+ }
+
+ // If aCallback defined inform consumers that we have done with
+ // the operation.
+ if (aCallback)
+ {
+ // Cope with the design problems of AIW framework
+ MAiwNotifyCallback* nonConstCallback =
+ const_cast<MAiwNotifyCallback*> (aCallback);
+ CAiwGenericParamList* eventParamList = CAiwGenericParamList::NewL();
+ CleanupStack::PushL(eventParamList);
+ nonConstCallback->HandleNotifyL(
+ KAiwCmdAssign,
+ KAiwEventCompleted,
+ *eventParamList,
+ aInParamList);
+ CleanupStack::PopAndDestroy(eventParamList);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAiwServiceIfMenu.
+//
+// Inserts plugin's menu items to aMenuPane.
+// ---------------------------------------------------------------------------
+//
+void CAknsWallpaperPlugin::InitializeMenuPaneL(CAiwMenuPane& aMenuPane,
+ TInt aIndex,
+ TInt /*aCascadeId*/,
+ const CAiwGenericParamList& aInParamList)
+ {
+ TPtrC mimeTypeString = GetAiwParamAsDescriptor(aInParamList, EGenericParamMIMEType);
+
+ // Insert menu only if supported MIME type is given
+ if ((mimeTypeString != KNullDesC) && IsMimeTypeSupportedL(mimeTypeString) )
+ {
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC(reader, R_AKNS_WALLPAPER_PLUGIN_MENU);
+ aMenuPane.AddMenuItemsL(reader, KAiwCmdAssign, aIndex);
+ CleanupStack::PopAndDestroy(); // reader
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAiwServiceIfMenu.
+//
+// Implements menu command handling for EAknsWallpaperPluginCmdSetWallPaper.
+// ---------------------------------------------------------------------------
+//
+void CAknsWallpaperPlugin::HandleMenuCmdL(
+ TInt aMenuCmdId,
+ const CAiwGenericParamList& aInParamList,
+ CAiwGenericParamList& aOutParamList,
+ TUint aCmdOptions,
+ const MAiwNotifyCallback* aCallback)
+ {
+ if (aMenuCmdId == EAknsWallpaperPluginCmdSetWallPaper)
+ {
+ // Menu commands are handled as service commands.
+ HandleServiceCmdL(
+ KAiwCmdAssign,
+ aInParamList,
+ aOutParamList,
+ aCmdOptions,
+ aCallback );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Implements showing information note
+// -----------------------------------------------------------------------------
+//
+void CAknsWallpaperPlugin::DisplayInfoNoteL(TInt aTextResourceId)
+ {
+ HBufC* text = StringLoader::LoadLC(aTextResourceId);
+ CAknInformationNote* dlg = new (ELeave) CAknInformationNote(EFalse);
+ dlg->ExecuteLD(*text);
+ CleanupStack::PopAndDestroy(text);
+ }
+
+// -----------------------------------------------------------------------------
+// Implements checking if a given MIME type is supported or not
+// -----------------------------------------------------------------------------
+//
+TBool CAknsWallpaperPlugin::IsMimeTypeSupportedL(const TDesC& aMimeTypeString)
+ {
+ // Check for a type separator in the string
+ TInt pos = aMimeTypeString.Find(KAknsWallpaperPluginSeparator);
+
+ // Leave if no separator was found.. the MIME
+ // standard requires it
+ if (pos == KErrNotFound)
+ {
+ User::Leave(KErrArgument);
+ }
+
+ // Copy the full Mime type string (needed for uppercase)
+ HBufC* fullBuf = aMimeTypeString.AllocLC();
+ TPtr fullString = fullBuf->Des();
+ fullString.UpperCase();
+
+ // Construct the compare string
+ TPtrC compareString(aMimeTypeString.Left(pos));
+
+ // Perform the comparison
+ TBool ret = EFalse;
+
+ // Mime type case: IMAGE/* except IMAGE/X-OTA-BITMAP
+ if (compareString.CompareF(KAknsWallpaperPluginMimeTypeImage) == 0 &&
+ !(fullString.CompareF(KAknsWallpaperPluginMimeTypeOTABitmap) == 0))
+ {
+ ret = ETrue;
+ }
+ CleanupStack::PopAndDestroy(fullBuf);
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// Implements getting a AIW parameter as descriptor
+// -----------------------------------------------------------------------------
+//
+TPtrC CAknsWallpaperPlugin::GetAiwParamAsDescriptor(
+ const CAiwGenericParamList& aParamList,
+ TGenericParamId aParamType)
+ {
+ TInt index = 0;
+ const TAiwGenericParam* genericParam = NULL;
+ genericParam = aParamList.FindFirst(
+ index,
+ aParamType,
+ EVariantTypeDesC);
+
+ if (index >= 0 && genericParam)
+ {
+ // Get the data
+ return genericParam->Value().AsDes();
+ }
+ else
+ {
+ return KNullDesC();
+ }
+ }
+
+// ======== ECOM INITIALIZATION ========
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY(KAknsWallpaperPluginImplementationUid, CAknsWallpaperPlugin::NewL)
+ };
+
+// ---------------------------------------------------------
+// Exported proxy for instantiation method resolution
+// ---------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+ return ImplementationTable;
+ }