skins/AknSkins/srvsrc/AknsSrvClient.cpp
changeset 0 05e9090e2422
child 1 ba33815114d6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/srvsrc/AknsSrvClient.cpp	Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,693 @@
+/*
+* Copyright (c) 2002-2008 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:  Skin server client.
+*
+*/
+
+
+// INCLUDE FILES
+#include <AknsSrvClient.h>
+#include "AknsSrv.h"
+#include "AknsSkinChangeHandler.h"
+#include "AknsSrvClientMemberData.h"
+#include <AknsImageAttributeData.h>
+#include "AknsSrvUtils.h"
+
+#include <aknutils.h> 
+#include <akniconconfig.h>
+
+#include "AknsDebug.h"
+#include <hal.h>
+#include <badesca.h>
+
+// CONSTANTS
+
+// Number of re-tries for skin server connection.
+const TInt KAknSkinSrvConnectionTries = 2;
+// Number of message slots.
+const TUint KAknSkinSrvDefaultMessageSlots = 2;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// AknsSrvCArrayPtrCleanup
+// Cleanup operation for CArrayPtr<CAknsSrvSkinInformationPkg>
+// -----------------------------------------------------------------------------
+static void AknsSrvCArrayPtrCAknsSrvSkinInformationPkgCleanup( TAny* aItem )
+    {
+    CArrayPtr<CAknsSrvSkinInformationPkg>* array = static_cast<
+        CArrayPtr<CAknsSrvSkinInformationPkg>*>( aItem );
+    array->ResetAndDestroy();
+    delete array;
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::RAknsSrvSession
+// C++ constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RAknsSrvSession::RAknsSrvSession()
+    : RSessionBase(), iMemberData(NULL)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::Connect
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::Connect(
+    MAknsSkinChangeObserver* aObserver,
+    TInt aPriority )
+    {
+    AKNS_TRACE_INFO("RAknsSrvSession::Connect ENTERED");
+
+    if( iHandle )
+        {
+        AKNS_TRACE_INFO("RAknsSrvSession::Connect Handle exists, RETURN KErrNone");
+        return KErrNone;
+        }
+
+    // Connect to server and make sure this can't cause 2 servers launch
+    // if 2 clients are trying to connect simultaneously.
+
+    AKNS_TRACE_INFO("RAknsSrvSession::Connect Creating member data");
+
+    iMemberData = new TAknsSrvClientMemberData;
+    if (!iMemberData)
+        {
+        AKNS_TRACE_ERROR("RAknsSrvSession::Connect NO MEMORY");
+        return KErrNoMemory;
+        }
+
+    iMemberData->iHandler = NULL;
+    iMemberData->iObserver = aObserver;
+
+    TInt err( KErrNone );
+
+    for ( TInt tries = 0; tries < KAknSkinSrvConnectionTries ; tries++ )
+        {
+        AKNS_TRACE_INFO("RAknsSrvSession::Connect Creating session");
+        
+        err = CreateSession( KAknSkinSrvName, Version(),
+            KAknSkinSrvDefaultMessageSlots );
+        
+        AKNS_TRACE_INFO1("RAknsSrvSession::Connect Session create ret %d", err);
+
+        // Break if connected to existing server or if the problem is
+        // other than missing server.
+
+        if ( err == KErrNone ||
+            ( err != KErrNotFound && err != KErrServerTerminated ) )
+            {
+            break;
+            }
+
+        AKNS_TRACE_INFO("RAknsSrvSession::Connect Trying to start the server");
+
+        err = StartServer();    // try start a new server
+
+        AKNS_TRACE_INFO1("RAknsSrvSession::Connect StartServer ret %d", err);
+
+        // If server launched ok or someone else got to launch it first,
+        // try connect again.
+
+        if( (err!=KErrNone) && (err!=KErrAlreadyExists) )
+            {
+            break; // server not launched: don't cycle round again
+            }
+        }
+
+    if (err != KErrNone)
+        {
+        AKNS_TRACE_ERROR1("RAknsSrvSession::Connect CREATE SESSION FAILED, err=%d", err);
+        delete iMemberData;
+        iMemberData = NULL;
+        return err;
+        }
+
+    // Check if the user wanted us to notify skin changes and create
+    // the Active object to handle the notification events. Otherwise
+    // just return.
+    if( iMemberData->iObserver)
+        {
+        AKNS_TRACE_INFO("RAknsSrvSession::Connect Observer required");
+
+        __ASSERT_DEBUG( CActiveScheduler::Current(), User::Panic(
+            KAknSkinSrvPanicCategory, EAknsSrvNoActiveScheduler ) );
+
+        iMemberData->iHandler = new CAknsSkinChangeHandler( *this, aPriority );
+
+        if( !iMemberData->iHandler )
+            {
+            AKNS_TRACE_ERROR("RAknsSrvSession::Connect NO MEMORY FOR HANDLER");
+            delete iMemberData;
+            iMemberData = NULL;
+            return KErrNoMemory;
+            }
+
+        CActiveScheduler::Add( iMemberData->iHandler );
+        iMemberData->iHandler->SetActive();
+
+        // Set the notify handler also on the server side;
+        SendReceive( EAknSkinSrvSetNotifyHandler, TIpcArgs( iMemberData->iHandler) );
+        EventHandled();
+        }
+
+    AKNS_TRACE_INFO("RAknsSrvSession::Connect COMPLETED");
+
+    // Everything went ok if we managed to get here.
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::Close
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RAknsSrvSession::Close()
+    {
+    if ( iMemberData && iMemberData->iHandler )
+        {
+        iMemberData->iHandler->Cancel();
+        delete iMemberData->iHandler;
+        iMemberData->iHandler = NULL;
+        }
+
+    RSessionBase::Close();
+    if (iMemberData)
+        {
+        delete iMemberData;
+        iMemberData = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::EnableSkinChangeNotify
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RAknsSrvSession::EnableSkinChangeNotify()
+    {
+    SendReceive( EAknSkinSrvEnableNotifySkinChange , TIpcArgs( TIpcArgs::ENothing) );
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::DisableSkinChangeNotify
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RAknsSrvSession::DisableSkinChangeNotify()
+    {
+    SendReceive( EAknSkinSrvDisableNotifySkinChange, TIpcArgs( TIpcArgs::ENothing) );
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::ClientError
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RAknsSrvSession::ClientError(TInt aErrorCode)
+    {
+    AKNS_TRACE_ERROR("RAknsSrvSession::ClientError");
+
+    SendReceive(EAknSkinSrvClientError, TIpcArgs( aErrorCode ) );
+
+    AKNS_TRACE_INFO("RAknsSrvSession::ClientError COMPLETED");
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::SetAllDefinitionSets
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::SetAllDefinitionSets( const TAknsPkgID aPID )
+    {
+    AKNS_TRACE_INFO2("RAknsSrvSession::SetAllDefinitionSets %i %i", aPID.iNumber, aPID.iTimestamp);
+    TInt freeRAM = 0;
+    HAL::Get(HALData::EMemoryRAMFree, freeRAM);
+    if ( freeRAM < KAknSkinSrvFreeRAMNeeded )
+        {
+        return KErrNoMemory;
+        }
+
+    return SendReceive( EAknSkinSrvSetAllItemDefSets,
+        TIpcArgs( aPID.iNumber, aPID.iTimestamp) );
+    } //lint !e1746 TUid is a single word
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::EnumerateSkinPackages
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CArrayPtr<CAknsSrvSkinInformationPkg>*
+    RAknsSrvSession::EnumerateSkinPackagesL(
+        TAknSkinSrvSkinPackageLocation aLocation )
+    {
+    CArrayPtrFlat<CAknsSrvSkinInformationPkg>* array =
+        new (ELeave) CArrayPtrFlat<CAknsSrvSkinInformationPkg>(5);
+    CleanupStack::PushL( TCleanupItem(
+        AknsSrvCArrayPtrCAknsSrvSkinInformationPkgCleanup, array ) );
+
+    TPckgBuf<TInt> pkgCountPack;
+    SendReceive( EAknSkinSrvEnumeratePackages, TIpcArgs(&pkgCountPack, aLocation));
+    TInt pkgCount = pkgCountPack();
+    if (pkgCount <= 0)
+        {
+        CleanupStack::Pop( array );
+        return array;
+        }
+    if ( ( pkgCount*sizeof(TAknsSrvSkinInfoPkg) ) > KMaxTInt )
+        {
+        CleanupStack::Pop( array );
+        return array;
+        }
+    HBufC8* packages = HBufC8::NewLC(pkgCount*sizeof(TAknsSrvSkinInfoPkg));
+    TPtr8 ptr8 = packages->Des();
+    User::LeaveIfError(SendReceive( EAknSkinSrvReceivePackages, TIpcArgs(pkgCount, &ptr8)));
+
+    for (TInt count = 0; count < pkgCount; count++)
+        {
+        TAknsSrvSkinInfoPkg* pkg = (TAknsSrvSkinInfoPkg*)&(ptr8[count*sizeof(TAknsSrvSkinInfoPkg)]);
+        CAknsSrvSkinInformationPkg* pack = CAknsSrvSkinInformationPkg::NewL(
+            pkg->iPID,
+            pkg->iColorSchemePID,
+            pkg->iSkinDirectoryBuf,
+            pkg->iSkinIniFileDirectoryBuf,
+            pkg->iSkinNameBuf,
+            pkg->iIdleStateWallPaperImageName,
+            KNullDesC,
+            pkg->iFullName,
+            pkg->iIdleBgImageIndex,
+            0,
+            pkg->iIsDeletable,
+            pkg->iIsCopyable,
+            EFalse,
+            pkg->iProtectionType,
+            pkg->iCorrupted,
+            pkg->iSupportAnimBg
+            );
+        CleanupStack::PushL(pack);
+        array->AppendL(pack);
+        CleanupStack::Pop(pack);
+        }
+
+    CleanupStack::PopAndDestroy( packages );
+    CleanupStack::Pop( array );
+
+    AKNS_TRACE_INFO1("RAknsSrvSession::EnumerateSkinPackagesL COMPLETED %i",
+        array->Count() );
+
+    return array;
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::CreateChunkLookupL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknsSrvChunkLookup* RAknsSrvSession::CreateChunkLookupL()
+    {
+    CAknsSrvChunkLookup* chunklookup = CAknsSrvChunkLookup::NewL();
+    return chunklookup;
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::Version
+// -----------------------------------------------------------------------------
+//
+TVersion RAknsSrvSession::Version() const
+    {
+    // client side version is set same as the server side version here, since
+    // both are implemented in the same DLL
+    return TVersion( KAknSkinSrvMajorVersionNumber,
+        KAknSkinSrvMinorVersionNumber, KAknSkinSrvBuildVersionNumber );
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::SetIdleWallPaper
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::SetIdleWallpaper( const TDesC& aFilename )
+    {
+    TInt freeRAM = 0;
+    HAL::Get(HALData::EMemoryRAMFree, freeRAM);
+    if ( freeRAM < KAknSkinSrvFreeRAMNeeded )
+        {
+        return KErrNoMemory;
+        }
+
+    return SendReceive( EAknSkinSrvSetIdleWallPaper,
+        TIpcArgs( &aFilename, aFilename.Length() ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::StoreScalableGraphics(const TAknsItemID& aIID,
+    const TInt aType, const TSize& aLayoutSize, const CFbsBitmap* aBmp,
+    const CFbsBitmap* aMask, TBool aMorphing)
+    {
+    TAknsSrvLayoutInfo layoutInfo;
+    layoutInfo.iLayoutType = aType;
+    layoutInfo.iLayoutSize = aLayoutSize;
+    TPckgC<TAknsSrvLayoutInfo> layoutInfoPack( layoutInfo );
+
+    TInt bmphandle = 0;
+    TInt mskhandle = 0;
+
+    if (aBmp)
+        {
+        bmphandle = aBmp->Handle();
+        }
+    else
+        {
+        return KErrArgument;
+        }
+    if (aMask)
+        {
+        mskhandle = aMask->Handle();
+        }
+
+    TPckgC<TAknsItemID> iidPack( aIID );
+    if (aMorphing)
+        {
+        return SendReceive( EAknSkinSrvStoreMorphingScalableGfx, TIpcArgs(
+        &iidPack, &layoutInfoPack, bmphandle, mskhandle));
+        }
+    else
+        {
+        return SendReceive( EAknSkinSrvStoreScalableGfx, TIpcArgs(
+        &iidPack, &layoutInfoPack, bmphandle, mskhandle));
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::ClearScalableGraphics
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::ClearScalableGraphics()
+    {
+    return SendReceive( EAknSkinSrvClearScalableGfx, TIpcArgs() );
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::DeleteSkin
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::DeleteSkin(
+    const TAknsPkgID /*aPID*/, TAknSkinSrvSkinPackageLocation /*aLocation*/ )
+    {
+    return KErrNotSupported;
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::CopySkin
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::CopySkin(
+    const TAknsPkgID /*aPID*/, TAknSkinSrvSkinPackageLocation /*aSourceLocation*/,
+    TAknSkinSrvSkinPackageLocation /*aDestLocation*/)
+    {
+    return KErrNotSupported;
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::OpenBitmapFile
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::OpenBitmapFile( const TDesC& aFilename, TInt &aFileHandle)
+    {
+    TPckgBuf<TInt> filehandlePack;
+    TInt fileserverHandle = SendReceive(
+        EAknSkinSrvOpenBitmapFile, TIpcArgs(&aFilename, &filehandlePack));
+    aFileHandle = filehandlePack();
+    return fileserverHandle;
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::OpenInifile
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::OpenInifile(
+    const TAknsPkgID aPID, TAknSkinSrvSkinPackageLocation aLocation,
+    TInt& aFilehandle, TBool aWriteToFile)
+    {
+    TPckgC<TAknsPkgID> iidPack( aPID );
+    TPckgBuf<TInt> filehandlePack;
+    TInt fileserverHandle = SendReceive(
+        EAknSkinSrvOpenIniFile, TIpcArgs(&iidPack, aLocation, &filehandlePack, aWriteToFile));
+    aFilehandle = filehandlePack();
+    return fileserverHandle;
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::CopySoundFile
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::CopySoundFile(const TDesC& aSourceFilename, const TDesC& aTargetFilename)
+  {
+  return SendReceive(
+    EAknSkinSrvCopySoundFile, TIpcArgs(&aSourceFilename, &aTargetFilename) );
+  }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::DecodeWallpaperImageL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RAknsSrvSession::DecodeWallpaperImageL(
+    const TDesC& aFilename, const TSize& aTargetSize, CFbsBitmap*& aBitmap, CFbsBitmap*& aMask)
+    {
+    TPckgBuf<TInt> bmphandlePack;
+    TPckgBuf<TInt> mskhandlePack;
+    TPckgC<TSize> sizePack(aTargetSize);
+    User::LeaveIfError(
+        SendReceive(
+            EAknSkinSrvDecodeWallpaperImage,
+            TIpcArgs(&aFilename, &sizePack, &bmphandlePack, &mskhandlePack)));
+    if (aTargetSize == TSize(-1,-1))
+        {
+        // 0,0 is used to check if the image is corrupted
+        return;
+        }
+
+    delete aBitmap;
+    aBitmap = NULL;
+    delete aMask;
+    aMask = NULL;
+
+    CFbsBitmap* bitmap = NULL;
+    CFbsBitmap* mask = NULL;
+    bitmap = new (ELeave) CFbsBitmap;
+    CleanupStack::PushL(bitmap);
+    User::LeaveIfError(bitmap->Duplicate(bmphandlePack()));
+    if (mskhandlePack())
+        {
+        mask = new (ELeave) CFbsBitmap;
+        CleanupStack::PushL(mask);
+        User::LeaveIfError(mask->Duplicate(mskhandlePack()));
+        CleanupStack::Pop(2);
+        }
+    else
+        {
+        CleanupStack::Pop( bitmap );
+        }
+
+    AknIconConfig::CompressIfPreferred( bitmap, mask );
+
+    aBitmap = bitmap;
+    aMask = mask;
+    }
+
+
+EXPORT_C void RAknsSrvSession::AddWallpaperL(const TDesC& aFilename, const TSize& aTargetSize )
+    {
+    TPckgC<TSize> sizePack(aTargetSize);
+    User::LeaveIfError( SendReceive( EAknSkinSrvCacheWallpaperImage,
+                TIpcArgs(&aFilename, &sizePack)));
+    
+    return;
+    }
+
+EXPORT_C CFbsBitmap* RAknsSrvSession::WallpaperImageL( const TDesC& aFilename )
+    {
+    TPckgBuf<TInt> bmphandlePack;
+    TPckgBuf<TInt> mskhandlePack;
+    CFbsBitmap* bitmap = NULL;
+    
+//    CWsScreenDevice* screenDevice = 
+//            STATIC_CAST(CWsScreenDevice*, CCoeEnv::Static()->SystemGc().Device());   
+//    CleanupStack::PushL( screenDevice );
+//    User::LeaveIfError( screenDevice->Construct() );
+//    TSize currentScreenSize = screenDevice->SizeInPixels();
+//    TPckgC<TSize> sizePack( currentScreenSize );
+//    
+//    CleanupStack::PopAndDestroy( screenDevice );
+    
+    TRect screen;
+    AknLayoutUtils::LayoutMetricsRect(
+                            AknLayoutUtils::EScreen, screen );
+    TPckgC<TSize> sizePack( screen.Size() );    
+    
+    User::LeaveIfError( SendReceive(EAknSkinSrvDecodeWallpaperImage,
+            TIpcArgs(&aFilename, &sizePack, &bmphandlePack, &mskhandlePack))); 
+    
+    if ( bmphandlePack() )
+        {
+        bitmap = new (ELeave) CFbsBitmap;
+        CleanupStack::PushL(bitmap);
+        User::LeaveIfError(bitmap->Duplicate(bmphandlePack()));
+        CleanupStack::Pop( bitmap );
+        }
+    return bitmap;
+    }
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::OpenImageInifile
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::OpenImageInifile( TAknsSrvInifileType aType, TInt& aFilehandle )
+    {
+    TPckgBuf<TInt> filehandlePack;
+    TInt fileserverHandle = SendReceive( EAknSkinSrvOpenImageInifile, TIpcArgs(&filehandlePack, aType));
+    aFilehandle = filehandlePack();
+    return fileserverHandle;
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::DoWriteInifileL
+// -----------------------------------------------------------------------------
+//
+void RAknsSrvSession::DoWriteInifileL(const CDesCArray& aFilenameArray)
+    {
+    TInt fileserverhandle;
+    TInt filehandle;
+    fileserverhandle = OpenImageInifile(EAknsSrvInifileSSWP, filehandle);
+    RFile file;
+    User::LeaveIfError(file.AdoptFromServer(fileserverhandle, filehandle));
+    CleanupClosePushL(file);
+    User::LeaveIfError(file.SetSize(0));
+    TFileText textFile;
+    textFile.Set(file);
+    textFile.Seek(ESeekStart);
+
+    for (TInt count = 0; count < aFilenameArray.Count() ; count++)
+        {
+        User::LeaveIfError(textFile.Write(aFilenameArray.MdcaPoint(count)));
+        }
+
+    file.Flush();
+    CleanupStack::PopAndDestroy(); // file
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::SetSlideSetWallpaper
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::SetSlideSetWallpaper(const CDesCArray& /*aFilenameArray*/)
+    {
+    //deprecated for 9.2 page specific wallpaper
+    return KErrNotSupported;  
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::FreeUnnecessaryLayoutBitmaps
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RAknsSrvSession::FreeUnnecessaryLayoutBitmaps(TAknsSrcScreenMode aMode)
+    {
+    TInt type( aMode );
+    SendReceive( EAknSkinSrvFreeLayoutBitmaps, TIpcArgs( type ) );
+    }
+
+
+EXPORT_C void RAknsSrvSession::RemoveWallpaper( const TDesC& aFilename )
+    {
+    SendReceive( EAknSkinSrvFreeDecodedWallpaper, TIpcArgs(&aFilename) );
+    }
+
+EXPORT_C void RAknsSrvSession::RemoveAllWallpapers(  )
+    {
+    SendReceive( EAknSkinSrvFreeDecodedWallpaper, TIpcArgs(&KNullDesC) );
+    }
+
+// -----------------------------------------------------------------------------
+// Checks if the appUid has non-skinnable configuration icons.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::CheckIconConfiguration( TUid aAppUid )
+    {
+    TPckgC<TUid> uidPack(aAppUid);
+    return SendReceive( EAknSkinSrvCheckIconConfiguration, TIpcArgs( &uidPack ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::AcknowledgeSkinChangeNotification
+// -----------------------------------------------------------------------------
+//
+TInt RAknsSrvSession::AcknowledgeSkinChangeNotification()
+    {
+    TInt type( EAknsSCHNContentChanged );
+    return SendReceive( EAknSkinSrvAckNotification, TIpcArgs( type ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::Reserved1
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::Reserved1()
+    {
+    return 0;
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::Reserved2
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::Reserved2()
+    {
+    return 0;
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::Reserved3
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RAknsSrvSession::Reserved3()
+    {
+    return 0;
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::Reserved4
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RAknsSrvSession::Reserved4()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::SendCancel
+// -----------------------------------------------------------------------------
+//
+void RAknsSrvSession::SendCancel()
+    {
+    SendReceive(EAknSkinSrvCancel, TIpcArgs( TIpcArgs::ENothing ) );
+    }
+
+// -----------------------------------------------------------------------------
+// RAknsSrvSession::EventHandled
+// -----------------------------------------------------------------------------
+//
+void RAknsSrvSession::EventHandled()
+    {
+    SendReceive(EAknSkinSrvNextEvent, TIpcArgs( TIpcArgs::ENothing),
+        iMemberData->iHandler->iStatus);
+    }
+
+// End of File