Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

This page was last modified 16:18, 23 June 2008.

How to change the active theme

From Forum Nokia Wiki

This document will very briefly explain how to change the active theme on a S60 3rd Edition device.

The information in this document is provided as is and the code samples are not meant to be of commercial quality.

Please note that you need to download and install the Extensions plug-in package for S60 3rd Edition SDK for Symbian OS, for C++, MR, Version 3 from here to gain access to the needed APIs.

At the time of writing, the API plugin is only available for S60 3rd MR.

1. CONNECT TO SKIN SERVER

#include <AknSSrvClient.h> // aknskinsrv.lib
…
RAknsSrvSession skinsSession;
User::LeaveIfError( skinsSession.Connect( this ) );
CleanupClosePushL( skinsSession );


2. FETCH THE PACKAGE ID OF THE CURRENT SKIN

#include <centralrepository.h> // centralrepository.lib
#include <AknSkinsInternalCRKeys.h>
// iOriginalSkinPid is of type TAknsPkgID
void CMyThemeManager::StoreCurrentSkinIdL()
    {
    TAknsPkgIDBuf pidBuf;            
    CRepository* repository = 
                CRepository::NewL( KCRUidPersonalisation );                    
    TInt retVal = repository->Get( KPslnActiveSkinUid, pidBuf );
    delete repository;
    repository = NULL;
    iOriginalSkinPid.SetFromDesL( pidBuf );
    }

3. GET A LIST OF INSTALLED SKIN PACKAGES

Please see aknssrvclient.h file for more details on how to work with skins residing on memory card.

CArrayPtr< CAknsSrvSkinInformationPkg >* skinInfoArray = 
            skinsSession.EnumerateSkinPackagesL();
CleanupStack::PushL( skinInfoArray );

4. GO THROUGH INSTALLED PACKAGES AND SWITCH TO THE FIRST AVAILABLE NEW SKIN

TInt retValue( KErrNone );
    TInt i( 0 );
    if ( skinInfoArray->Count() > 0 )
        {
        for ( i; i < skinInfoArray->Count(); i++ )
            {
            TAknsPkgID pkgId = skinInfoArray->At( i )->PID();
            if ( pkgId != iOriginalSkinPid )
                {
                            //Activate a complete skin package at once.
                retValue = skinsSession.SetAllDefinitionSets( pkgId );
                if ( retValue == KErrNone )
                    {
                    SetNewSkinIdL( pkgId );
                    }
                break;                    
                }
            }            
        }

5. SAVE THE NEW SKIN PACKAGE ID IN CENTRAL REPOSITORY

void CMyThemeManager::SetNewSkinIdL( TAknsPkgID aPkgId )
    {
    TAknsPkgIDBuf pidBuf;            
    aPkgId.CopyToDes( pidBuf );
    CRepository* repository = 
                CRepository::NewL( KCRUidPersonalisation );                    
    TInt retVal = repository->Set( KPslnActiveSkinUid, pidBuf );
    
    // KPslnActiveSkinLocation has to be changed also
    // if new skin resides on mmc whereas old one resided in phone mem
    // ...and vice versa
    
    delete repository;
    repository = NULL;
    }

6. FREE ALLOCATED RESOURCES (FROM PARTS 1&3)

skinInfoArray->ResetAndDestroy();        
CleanupStack::PopAndDestroy( 2 ); // skinsSession, skinInfoArray

7. NECESSARY CAPABILITIES

WriteDeviceData
Related Discussions
Thread Thread Starter Forum Replies Last Post
open sirocco theme with TS 2.2 nicerl Themes/Carbide.ui 2 2007-08-30 10:31
s60 theme willia_rhe Themes/Carbide.ui 1 2008-07-04 08:04
jar as theme background raghda Mobile Java General 4 2007-06-08 17:58
Help.... Carbide.ui S60 Theme Edition 3.1 Musimusi Themes/Carbide.ui 9 2007-08-10 00:41
little Problems with personal Theme Killi666 Digital Rights Management & Content Downloading 0 2005-01-05 04:58
 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX