diff -r 8bda91a87a00 -r 8ee96d21d9bf gssettingsuis/Gs/GSBackgroundImage/Src/BackgroundImage.cpp --- a/gssettingsuis/Gs/GSBackgroundImage/Src/BackgroundImage.cpp Thu Aug 19 10:12:30 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,542 +0,0 @@ -/* -* Copyright (c) 2005 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: -* -*/ - - - -// INCLUDE FILES -#include "backgroundimage.h" -#include "GsLogger.h" -#include "settingsinternalcrkeys.h" -#include "SettingsPrivateCRKeys.h" - -#include -#include -#include -#include -#include -#include -#include //DRM v2 migration -#include -#include -#include -#include - - - -// CONSTANTS -// Setting values for Background and Welcome note image -const TInt KGSBackgroundModeImage = 1; -// estimated image max size in bytes -const TInt KGSMaxBackgroundImgSize = 520000; -// estimated image max size in bytes -const TInt KGSMaxWelcomeNoteImgSize = 100000; -const TInt KGSVTStillImageWidth = 176; -const TInt KGSVTStillImageHeight = 144; - -//Personalisation application is availble on ROM (1) or not (0) -const TInt KGSPlsnOnRom = 1; -const TInt KGSPlsnNotOnRom = 0; - -// other constants -_LIT( KGSBackgroundImgPath, "c:\\resource\\apps\\backgroundimage.mbm"); -_LIT( KGSVTStillImgPath, "c:\\resource\\apps\\vtstillimage.mbm"); - - - - -// FORWARD DECLARATIONS - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CGSBackgroundImage::CGSBackgroundImage -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CGSBackgroundImage::CGSBackgroundImage() - { - } - -// ----------------------------------------------------------------------------- -// CGSBackgroundImage::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CGSBackgroundImage::ConstructL() - { - iPersonalizationRepository = - CRepository::NewL( KCRUidPersonalizationSettings ); - iStartupConfRepository = CRepository::NewL( KCRUidStartupConf ); - iTelephonyRepository = CRepository::NewL( KCRUidTelephonySettings ); - - iDisplayMode = CEikonEnv::Static()->ScreenDevice()->DisplayMode(); - } - - -// ----------------------------------------------------------------------------- -// CGSBackgroundImage::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -EXPORT_C CGSBackgroundImage* CGSBackgroundImage::NewL() - { - CGSBackgroundImage* self = new( ELeave ) CGSBackgroundImage; - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - - return self; - } - - -// ---------------------------------------------------------------------------- -// Destructor -// -//----------------------------------------------------------------------------- -// -CGSBackgroundImage::~CGSBackgroundImage() - { - delete iPersonalizationRepository; - delete iStartupConfRepository; - delete iTelephonyRepository; - } - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::BackgroundImageL -// -// Returns background image mode. -// DEPRECATED -// ---------------------------------------------------------------------------- -// -EXPORT_C TInt CGSBackgroundImage::BackgroundImageL() - { - TInt image; - User::LeaveIfError( iPersonalizationRepository-> - Get( KSettingsBackgroundImage, image ) ); - return image; - } - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::SetBackgroundImageL -// -// Sets background image mode. -// DEPRECATED -// ---------------------------------------------------------------------------- -// -EXPORT_C void CGSBackgroundImage::SetBackgroundImageL(const TInt aImage) - { - User::LeaveIfError( iPersonalizationRepository-> - Set( KSettingsBackgroundImage, aImage ) ); - if (aImage != KGSBackgroundModeImage) - { - // It doesn't matter much if the image deletion fails, - // so no need to handle the error. - TRAP_IGNORE( DeleteImageL( KGSBackgroundImgPath ) ); - } - - } - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::SetBackgroundImagePathL -// -// Sets background image. -// DEPRECATED -// ---------------------------------------------------------------------------- -// -EXPORT_C void CGSBackgroundImage::SetBackgroundImagePathL( - const TDesC& aImagePath ) - { - // Check if there is enough space in disk to store background image - if (SysUtil::FFSSpaceBelowCriticalLevelL(NULL, KGSMaxBackgroundImgSize)) - { - // don't show any own notes here - User::Leave(KErrDiskFull); - } - - // make sure there is no memory leaks because of iBitmap and iDimmedBmp - if (iBitmap) - { - delete iBitmap; - iBitmap = NULL; - } - - iBitmap = new(ELeave) CFbsBitmap; - - TRect appRect = iAvkonAppUi->ApplicationRect(); - TAknLayoutRect layout; - - layout.LayoutRect(appRect, AknLayout::wallpaper_pane()); - LoadImageL(aImagePath, layout.Rect().Width(), layout.Rect().Height(), - ETrue, EGSWallpaperIdle); - TBuf<1> KGSNullParam; - SaveBitmapsL( KGSNullParam, KGSNullParam ); - - delete iBitmap; - iBitmap = NULL; - User::LeaveIfError( iPersonalizationRepository-> - Set( KSettingsBackgroundImagePath, KGSBackgroundImgPath ) ); - } - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::SetBackgroundImagePathL -// Sets background image. Does not store image to SD -// Overloaded function, takes 2 parameters -// DEPRECATED -// ---------------------------------------------------------------------------- -// -EXPORT_C void CGSBackgroundImage::SetBackgroundImagePathL( - const TDesC& aImagePath, - TDes& aBmpFileName ) - { - SetBackgroundImagePathL( aImagePath, aBmpFileName, EGSWallpaperIdle ); - } - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::SetBackgroundImagePathL -// Sets background image. Does not store image to SD -// Overloaded function, takes 3 parameters -// DEPRECATED -// ---------------------------------------------------------------------------- -// -EXPORT_C void CGSBackgroundImage::SetBackgroundImagePathL( - const TDesC& aImagePath, - TDes& aBmpFileName, - TGSWallpaperType aWallpaperType ) - { - // Check if there is enough space in disk to store background image - if (SysUtil::FFSSpaceBelowCriticalLevelL(NULL, KGSMaxBackgroundImgSize)) - { - // don't show any own notes here - User::Leave(KErrDiskFull); - } - - // Make sure there is no memory leaks because of iBitmap and iDimmedBmp - if (iBitmap) - { - delete iBitmap; - iBitmap = NULL; - } - - iBitmap = new(ELeave) CFbsBitmap; - - if( aWallpaperType == EGSWallpaperIdle ) - { - //Reading wallpaper size - __GSLOGSTRING( - "[CGSBackgroundImage] SetBackgroundImagePathL |->"); - TRect screenRect( CEikonEnv::Static()->ScreenDevice()->SizeInPixels() ); - TAknLayoutRect appRect; - appRect.LayoutRect( - screenRect, - AknLayout::application_window( screenRect ) ); - TAknLayoutRect mainRectSmall; - mainRectSmall.LayoutRect( - appRect.Rect(), - AknLayout::main_pane( appRect.Rect(), 0, 1, 1 ) ); - TAknLayoutRect layout; - layout.LayoutRect( mainRectSmall.Rect(), AknLayout::wallpaper_pane() ); - - __GSLOGSTRING("[CGSBackgroundImage] SetBackgroundImagePathL"); - LoadImageL(aImagePath, layout.Rect().Width(), layout.Rect().Height(), - ETrue, EGSWallpaperIdle); - } - else if( aWallpaperType == EGSWallpaperPinboard ) - { - //Reading wallpaper size - __GSLOGSTRING("[CGSBackgroundImage] SetBackgroundImagePathL 1"); - - TRect screenRect( CEikonEnv::Static()->ScreenDevice()->SizeInPixels() ); - TAknLayoutRect appRect; - appRect.LayoutRect( - screenRect, - AknLayout::application_window( screenRect ) ); - TAknLayoutRect mainRectSmall; - mainRectSmall.LayoutRect( - appRect.Rect(), - AknLayout::main_pane( appRect.Rect(), 0, 0, 1 ) ); - TAknLayoutRect layout; - - layout.LayoutRect( - mainRectSmall.Rect(), AknLayoutScalable_Apps::bg_pinb_pane(0) ); - - __GSLOGSTRING("[CGSBackgroundImage] SetBackgroundImagePathL 2"); - LoadImageL(aImagePath, layout.Rect().Width(), layout.Rect().Height(), - ETrue, EGSWallpaperPinboard); - __GSLOGSTRING("[CGSBackgroundImage] SetBackgroundImagePathL -|"); - } - - SaveBitmapsL( aBmpFileName, aImagePath ); - - delete iBitmap; - iBitmap = NULL; - } - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::SetWelcomeNoteImageL -// -// Sets welcome note image's path -// ---------------------------------------------------------------------------- -// -EXPORT_C void CGSBackgroundImage::SetWelcomeNoteImageL(const TDesC& aImagePath, - CGSAsyncImageHandling& aImgHandler ) - { - // Check if there is enough space in disk to store welcome note image - if ( SysUtil::FFSSpaceBelowCriticalLevelL( NULL, KGSMaxWelcomeNoteImgSize ) ) - { - // don't show any own notes here - User::Leave( KErrDiskFull ); - } - - - - TRect screen = iAvkonAppUi->ApplicationRect(); - TInt screenWidth = screen.Width() - 2; - TInt screenHeight = screen.Height() - 2; - - //rescale - aImgHandler.ProcessImageL( aImagePath, screenWidth, screenHeight, - EGSWelcomeNoteImage ); - } - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::LoadImageL -// Loads an image to bitmap and scales it if it's too large. -// Deprecated -// ---------------------------------------------------------------------------- -// -void CGSBackgroundImage::LoadImageL(const TDesC& /*aImagePath*/, - TInt /*aWidth*/, TInt /*aHeight*/, - TBool /*aBgImage*/, TGSWallpaperType /*aWallpaperType*/) - { - } - - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::SaveBitmapsL -// Stores background image and dimmed image to the same mbm file. -// ---------------------------------------------------------------------------- -// -void CGSBackgroundImage::SaveBitmapsL( TDes& aBmpFileName, - const TDesC& aOriginalFullname ) - { - RFs fs; - User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - - CDirectFileStore* fileStore; - if( aBmpFileName != KNullDesC ) - { - fileStore = CDirectFileStore::ReplaceLC( - fs, aBmpFileName, EFileWrite ); - } - else - { - fileStore = CDirectFileStore::ReplaceLC( - fs, KGSBackgroundImgPath, EFileWrite ); - } - - TUidType uidType( KDirectFileStoreLayoutUid, KMultiBitmapFileImageUid ); - fileStore->SetTypeL( uidType ); - - RStoreWriteStream bmpStream; - TStreamId imgId = bmpStream.CreateLC( *fileStore ); - iBitmap->ExternalizeL( bmpStream ); - - CleanupStack::PopAndDestroy(); //bmpStream - - RStoreWriteStream rootStream; - // create root stream - TStreamId rootStreamId = rootStream.CreateLC( *fileStore ); - rootStream.WriteInt32L( 1 ); // number of bitmaps - - rootStream << imgId; // stream id of bitmap - - CleanupStack::PopAndDestroy(); //rootStream - - fileStore->SetRootL( rootStreamId ); - CleanupStack::PopAndDestroy(); // filestore; - - TBool isprotected( EFalse ); - - DRMCommon* drmclient = DRMCommon::NewL(); - - CleanupStack::PushL( drmclient ); - TInt error = drmclient->Connect(); - if ( error != DRMCommon::EOk ) - { - User::Leave( KErrCorrupt ); - } - - if ( aOriginalFullname != KNullDesC ) - { - error = drmclient->IsProtectedFile( aOriginalFullname, isprotected ); - if ( error != DRMCommon::EOk ) - { - User::Leave( KErrCorrupt ); - } - } - - - if ( isprotected ) - { - HBufC8* contenturi = NULL; - HBufC8* mimetype = NULL; - DRMCommon::TContentProtection contentProtection; - TUint datalen( 0 ); - CDRMRights* rights = NULL; - - - error = drmclient->GetFileInfo( - aOriginalFullname, contentProtection, - mimetype, contenturi, datalen ); - CleanupStack::PushL( mimetype ); - CleanupStack::PushL( contenturi ); - if ( error != DRMCommon::EOk ) - { - User::Leave( KErrCorrupt ); - } - - drmclient->GetActiveRights( - *contenturi, DRMCommon::EDisplay, rights ); - CleanupStack::PushL( rights ); - - RFile file; - User::LeaveIfError( file.Open( fs, aBmpFileName, - EFileWrite|EFileShareAny ) ); - CleanupClosePushL( file ); - - TInt filesize( 0 ); - User::LeaveIfError( file.Size( filesize ) ); - HBufC8* content = HBufC8::NewL( filesize ); // use actual filesize - - CleanupStack::PushL( content ); - - TPtr8 readPtr( content->Des() ); - User::LeaveIfError( file.Read( readPtr ) ); - - CleanupStack::Pop(); // content - COma1DcfCreator* dcfCreator = COma1DcfCreator::NewL(); - dcfCreator->EncryptContentL( content, *mimetype, rights ); - CleanupStack::PushL( content ); - - TInt offset = 0; - User::LeaveIfError( file.Seek( ESeekStart,offset ) ); - TPtr8 writePtr( content->Des() ); - User::LeaveIfError( file.Write( writePtr ) ); - User::LeaveIfError( file.Flush() ); - // mimetype, contenturi, rights, file, content - CleanupStack::PopAndDestroy(5); - delete dcfCreator; - } - - drmclient->Disconnect(); - CleanupStack::PopAndDestroy(2); // fs & drmclient - } - - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::DeleteImageL -// Deletes file specified in the parameter. -// ---------------------------------------------------------------------------- -// -EXPORT_C void CGSBackgroundImage::DeleteImageL(const TDesC& aImagePath) - { - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL(fs); - - User::LeaveIfError(fs.Delete(aImagePath)); - - CleanupStack::PopAndDestroy(); // fs - } - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::SetVTStillImagePathL -// -// Sets VT still image. -// ---------------------------------------------------------------------------- -// -EXPORT_C void CGSBackgroundImage::SetVTStillImagePathL( - const TDesC& aImagePath, - CGSAsyncImageHandling& aImgHandler ) - { - // Check if there is enough space in disk to store still image - if (SysUtil::FFSSpaceBelowCriticalLevelL(NULL, KGSMaxBackgroundImgSize)) - { - // don't show any own notes here - User::Leave(KErrDiskFull); - } - aImgHandler.ProcessImageL( aImagePath, KGSVTStillImageWidth, - KGSVTStillImageHeight, EGSVtStillImage ); - User::LeaveIfError( iTelephonyRepository-> - Set( KSettingsVTStillImagePath, KGSVTStillImgPath ) ); - } - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::GetPlnsStatus -// -// Check if Personalisation application is on the device -// ---------------------------------------------------------------------------- -// -EXPORT_C TInt CGSBackgroundImage::GetPlnsStatus() - { - TRAP_IGNORE( IsPersonalisationApplicationL() ); - return iPlnsInDevice; - } - -// ---------------------------------------------------------------------------- -// CGSBackgroundImage::IsPersonalisationApplication -// -// -// ---------------------------------------------------------------------------- -// -EXPORT_C void CGSBackgroundImage::IsPersonalisationApplicationL() - { - RApaLsSession session; - User::LeaveIfError( session.Connect() ); - - const TUid KUidPsln = { 0x10005A32 }; - TApaAppInfo appInfo; - TInt search = session.GetAppInfo( appInfo, KUidPsln ); - session.Close(); - - if ( search == KErrNone ) - { - TParse fileInfo; - fileInfo.Set( appInfo.iFullName, NULL, NULL ); - TPtrC drive = fileInfo.Drive(); - _LIT( KZDrive, "Z:" ); - if ( drive == KZDrive ) - { - iPlnsInDevice = KGSPlsnOnRom; - } - else - { - iPlnsInDevice = KGSPlsnNotOnRom; - } - } - else - { - iPlnsInDevice = KErrNotFound; - } - } - - -// End of File