convergedcallengine/serviceselector/src/cssbshandler.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:03 +0100
branchRCL_3
changeset 20 987c9837762f
parent 19 7d48bed6ce0c
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 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:  This module contains the implementation of 
*              : CSsBsHandler class.
*
*/

// INCLUDE FILES
#include <mbsaccess.h>
#include <cbsfactory.h>
#include <mbselement.h>
#include <cbsbitmap.h>
#include <coemain.h>
#include <AknsItemID.h>
#include <AknsSkinInstance.h>
#include <AknsUtils.h>

#include "cssiconfileprovider.h"
#include "cssbshandler.h"
#include "csslogger.h"

// EXTERNAL DATA STRUCTURES
// None

// EXTERNAL FUNCTION PROTOTYPES
// None

// CONSTANTS
// Branding server & data constants.
const TInt KSsBrandingIconSize  = 21;         // icon size

_LIT8( KSsBSApplicationId, "xsp" );                 // application id
_LIT8( KSsUiBSIconId, "default_brand_image" ); // icon id

// MACROS
// None

// LOCAL CONSTANTS AND MACROS
// None

// MODULE DATA STRUCTURES
// None

// LOCAL FUNCTION PROTOTYPES
// None

// FORWARD DECLARATIONS
// None

// ============================= LOCAL FUNCTIONS =============================

// ============================ MEMBER FUNCTIONS =============================

// ---------------------------------------------------------------------------
// CSsBsHandler::CSsBsHandler
// C++ default constructor can NOT contain any code, that might leave.
// ---------------------------------------------------------------------------
//
CSsBsHandler::CSsBsHandler()
    {
    // No implementation required
    }

// ---------------------------------------------------------------------------
// CSsBsHandler::ConstructL
// Symbian 2nd phase constructor can leave.
// ---------------------------------------------------------------------------
//
void CSsBsHandler::ConstructL()
    {
    }

// ---------------------------------------------------------------------------
// CSsBsHandler::NewL
// Two-phased constructor.
// ---------------------------------------------------------------------------
//
CSsBsHandler* CSsBsHandler::NewL( )
    {
    CSsBsHandler* self = CSsBsHandler::NewLC();
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// CSsBsHandler::NewLC
// Two-phased constructor.
// ---------------------------------------------------------------------------
//
CSsBsHandler* CSsBsHandler::NewLC()
    {
    CSsBsHandler* self = new (ELeave) CSsBsHandler();
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }

// Destructor
CSsBsHandler::~CSsBsHandler()
    {
    }

// ---------------------------------------------------------------------------
// CSsBsHandler::GetBrandedIconL
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//
void CSsBsHandler::GetBrandedIconL(
    const TDesC8& aBrandingId,
    CFbsBitmap*& aBrandedBitmap,
    CFbsBitmap*& aBrandedBitmapMask ) const
    {
    CSSLOGSTRING( "CSSelector::CreateBrandedBitmapL: =>" );

    // Create branding server factory and access to branding data.
    CBSFactory* factory = CBSFactory::NewL(
        aBrandingId, KSsBSApplicationId );
    CleanupStack::PushL( factory );

    MBSAccess* access = factory->CreateAccessL(
        aBrandingId, ELangInternationalEnglish );
    CleanupClosePushL( *access );

    // Get structure which contains bitmap information.
    MBSElement* element = access->GetStructureL( KSsUiBSIconId );
    CleanupClosePushL( *element );
    const CBSBitmap& bitmap = element->BitmapDataL();

    // Open file which contains branded bitmaps.
    RFile file;
    CleanupClosePushL( file );
    access->GetFileL( bitmap.BitmapFileId(), file );

    // Try to load a skinned bitmap.
    if ( CCoeEnv::Static() )
        {
        TAknsItemID itemId;
        itemId.Set( bitmap.SkinIdMajor(), bitmap.SkinIdMinor() );
        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
        TRAP_IGNORE( ( aBrandedBitmap =
            AknsUtils::CreateBitmapL( skin, itemId ) ) );
        }

    // If skinned bitmaps was not found, try to load bitmaps manually.
    if ( !aBrandedBitmap )
        {
        CSsIconFileProvider* fileProvider =
            CSsIconFileProvider::NewL( file );

        AknIconUtils::CreateIconL(
            aBrandedBitmap,
            aBrandedBitmapMask,
            *fileProvider,
            bitmap.BitmapId(),
            bitmap.BitmapMaskId() );
         }

    // Set sizes.
    const TInt iconSize( KSsBrandingIconSize );
    AknIconUtils::SetSize( aBrandedBitmap, TSize( iconSize, iconSize ) );
    AknIconUtils::SetSize( aBrandedBitmapMask, TSize( iconSize, iconSize ) );

    // Destroy some items.
    CleanupStack::PopAndDestroy( &file );
    CleanupStack::PopAndDestroy( element );
    CleanupStack::PopAndDestroy( access );
    CleanupStack::PopAndDestroy( factory );

    CSSLOGSTRING( "CSSelector::CreateBrandedBitmapL: <=" );
    }

// ========================== OTHER EXPORTED FUNCTIONS =======================

//  End of File