Categories: Symbian C++ | S60 | Code Examples | UI | Themes
This page was last modified 00:32, 4 July 2008.
Extended Skins API
From Forum Nokia Wiki
| Note! |
|---|
|
Extended Skins API provides classes to change active, to get skin package information.
Use cases
To change the active theme.
To receive notifications of change in skin content, configuration.
To get skin package information.
To delete skin, copy skin from one location to another.
To set idle wallpaper.
Example code
Header files
#include <AknSSrvClient.h> #include <AknsPkgID.h> #include <AknsItemDef.h> #include <AknsItemID.h> #include <AknsSrvSkinInformationPkg.h> #include <EIKENV.H> #include <centralrepository.h> #include <AknSkinsInternalCRKeys.h>
Libraries Used
aknskinsrv.lib centralrepository.lib
Capabilities WriteDeviceData
First connect to the skin server:
void CNotifyEngine::ConstructL()
{
//connect to skin server
User::LeaveIfError( iSkinSrvSession.Connect( this ) );
// to recieve notifications of skin change
iSkinSrvSession.EnableSkinChangeNotify() ;
}
Virtual functions
void CNotifyEngine::SkinContentChanged()
{
CEikonEnv::Static()->InfoWinL(_L("Skin Content Changed"),_L(""));
}
void CNotifyEngine::SkinConfigurationChanged(const TAknsSkinStatusConfigurationChangeReason aReason )
{
CEikonEnv::Static()->InfoWinL(_L("Skin Configuration Changed"),_L(""));
}
void CNotifyEngine::SkinPackageChanged(const TAknsSkinStatusPackageChangeReason aReason)
{
CEikonEnv::Static()->InfoWinL(_L("Skin Package Changed"),_L(""));
}
The following code displays current active theme details:
void CNotifyEngine::SkinNameL()
{
TAknsPkgIDBuf cidBuf;
CRepository* repository = CRepository::NewLC( KCRUidPersonalisation );
TInt retVal = repository->Get( KPslnActiveSkinUid, cidBuf );
TAknsPkgID cpkgId;
cpkgId.SetFromDesL( cidBuf );
CleanupStack::PopAndDestroy(repository);
CArrayPtr< CAknsSrvSkinInformationPkg >* skinInfoArray = iSkinSrvSession.EnumerateSkinPackagesL();
CleanupStack::PushL( skinInfoArray );
TInt retValue( KErrNone );
if ( skinInfoArray->Count() > 0 )
{
for (TInt i=0; i < skinInfoArray->Count(); i++ )
{
TAknsPkgID pkgId = skinInfoArray->At(i)->PID();
if ( pkgId == cpkgId )
{
TBuf<128> lBuf = skinInfoArray->At(i)->Name();
CEikonEnv::Static()->InfoWinL(_L("Skin Name"),lBuf);
lBuf.Zero();
lBuf = skinInfoArray->At(i)->FullName();
CEikonEnv::Static()->InfoWinL(_L("Skin Path"),lBuf);
lBuf.Zero();
lBuf = skinInfoArray->At(i)->Directory();
CEikonEnv::Static()->InfoWinL(_L("Skin Directory"),lBuf);
lBuf.Zero();
lBuf = skinInfoArray->At(i)->IniFileDirectory();
CEikonEnv::Static()->InfoWinL(_L("Skin IniFile Directory"),lBuf);
break;
}
}
}
skinInfoArray->ResetAndDestroy();
CleanupStack::PopAndDestroy();
}
The following code changes the active theme:
void CNotifyEngine::ActivateSkinL()
{
StoreCurrentSkinIdL();
CArrayPtr< CAknsSrvSkinInformationPkg >* skinInfoArray = iSkinSrvSession.EnumerateSkinPackagesL();
CleanupStack::PushL( skinInfoArray );
TInt retValue( KErrNone );
if ( skinInfoArray->Count() > 0 )
{
for (TInt i=0; i < skinInfoArray->Count(); i++ )
{
TAknsPkgID pkgId = skinInfoArray->At(i)->PID();
if ( pkgId != iOriginalSkinPid )
{
TBuf<100> lName = skinInfoArray->At(i)->Name();
CEikonEnv::Static()->InfoWinL(_L("New Skin Name"),lName);
//Activate a complete skin package at once.
retValue = iSkinSrvSession.SetAllDefinitionSets( pkgId );
if ( retValue == KErrNone )
{
SetNewSkinIdL( pkgId );
}
break;
}
}
}
skinInfoArray->ResetAndDestroy();
CleanupStack::PopAndDestroy();
}void CNotifyEngine::StoreCurrentSkinIdL(){ TAknsPkgIDBuf pidBuf; CRepository* repository = CRepository::NewLC( KCRUidPersonalisation ); TInt retVal = repository->Get( KPslnActiveSkinUid, pidBuf ); CleanupStack::PopAndDestroy(repository); // iOriginalSkinPid is of type TAknsPkgID iOriginalSkinPid.SetFromDesL( pidBuf );
}
void CNotifyEngine::SetNewSkinIdL( TAknsPkgID aPkgId ){ TAknsPkgIDBuf pidBuf; aPkgId.CopyToDes( pidBuf ); CRepository* repository = CRepository::NewLC( 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 memory CleanupStack::PopAndDestroy(repository);
}
Sample application
http://wiki.forum.nokia.com/index.php/Image:ExtSkins.zip
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Sending and receiving SMSs | jp4symbian | Symbian Networking & Messaging | 21 | 2007-01-26 09:30 |
| Application embedding in 3rd edition | symbianyucca | General Symbian C++ | 13 | 2007-04-27 04:55 |
| Theme: What is TAknsItemID iMajor and iMinor | olshofer | General Symbian C++ | 2 | 2005-05-11 17:23 |
| Random theme changer | joshua wood | General Symbian C++ | 5 | 2007-07-30 12:18 |
| Create Symbian 60 Theme's .sis file from scratch (using command line) | chenloong | Symbian Tools & SDKs | 10 | 2007-07-02 06:28 |
