diff -r 000000000000 -r dd21522fd290 codhandler/codui/src/CodConfirm.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/codhandler/codui/src/CodConfirm.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,312 @@ +/* +* 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 the License "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: Implementation of class CCodConfirm. +* +*/ + + +// INCLUDE FILES + +#include +#include +#include +#include +#include +#include +#include +#include "CodConfirm.h" +#include "CodLogger.h" +#include +#include + + +#include +#include +#include +#include + +_LIT( KListBoxSeparator, "\t" ); + +// FORWARD DECLARATIONS + + +// ================= TYPES ======================= + +/** +* Mime type to resource id mapping entry. +*/ +struct TMimeAndResId + { + const TText8* iName; ///< MIME type. + TInt iResId; ///< Resource id. + }; + +// ================= CONSTANTS ======================= + +/// Number of bytes in a kilobyte. +LOCAL_D const TInt KCodKbyte = 1024; + +/** +* Null-terminated MIME-to-resId mapping table. +* Order of entries is important (from most specific to most generic), as +* entries are evaluated linearly. +*/ +LOCAL_D const TMimeAndResId KCodMimeAndResIds[] = + { + { _S8( "application/vnd.nokia.ringing-tone" ), R_QTN_CD_TYPE_RTONE }, + { _S8( "application/x-nokiaGameData" ), R_QTN_CD_TYPE_GAME_LEVEL }, + { _S8( "application/vnd.oma.drm" ), R_QTN_CD_TYPE_NOT_CLASSIFIED }, + { _S8( "application/" ), R_QTN_CD_TYPE_APPLICATION }, + { _S8( "image/vnd.nokia.ota-bitmap" ), R_QTN_CD_TYPE_OPERATOR_LOGO }, + { _S8( "image/vnd.nok-oplogo" ), R_QTN_CD_TYPE_OPERATOR_LOGO }, + { _S8( "image/vnd.nok-picturemessage" ), R_QTN_CD_TYPE_PICTURE_MESSAGE }, + { _S8( "image/" ), R_QTN_CD_TYPE_IMAGE }, + { _S8( "audio/" ), R_QTN_CD_TYPE_SOUND }, + { _S8( "text/X-vCard" ), R_QTN_CD_TYPE_VCARD }, + { _S8( "text/" ), R_QTN_CD_TYPE_DOCUMENT }, + { _S8( "" ), R_QTN_CD_TYPE_NOT_CLASSIFIED }, + { NULL, 0 } + }; + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CCodConfirm:CCodConfirm() +// --------------------------------------------------------- +// +CCodConfirm::CCodConfirm() + { + } + + + +// --------------------------------------------------------- +// CCodConfirm::~CCodConfirm() +// --------------------------------------------------------- +// +CCodConfirm::~CCodConfirm() + { + } + + +// --------------------------------------------------------------------------- +// CCodView::AllocTypeNameL +// --------------------------------------------------------------------------- +// + HBufC* CCodConfirm::AllocTypeNameL( const TDesC8& aMimeType ) + { + const TMimeAndResId* mapping; + TInt resId = R_QTN_CD_VALUE_UNDEFINED; + for( mapping = &KCodMimeAndResIds[0]; mapping->iName; mapping++ ) + { + TPtrC8 name( mapping->iName ); + // Looking for partial match (leftmost part of aMimeType is compared + // to mapping->iName). + if( name.Length() <= aMimeType.Length() ) + { + if( aMimeType.Left( name.Length() ).CompareF( name ) == 0 ) + { + resId = mapping->iResId; + break; + } + } + } + return StringLoader::LoadL( resId, iCoeEnv ); + } + + +// --------------------------------------------------------------------------- +// CCodView::DisplayType +// --------------------------------------------------------------------------- +// + TPtrC8 CCodConfirm::DisplayType( const CCodData& aData ) + { + for ( TInt i = 0; i < (*aData[aData.ActiveDownload()]).Types().MdcaCount(); i++ ) + { + TPtrC8 type( (*aData[aData.ActiveDownload()]).Types().MdcaPoint( i ) ); + if ( + type.Compare( KOma1DrmMessageContentType ) && + type.Compare( KOma1XmlRoContentType ) && + type.Compare( KOma1WbxmlRoContentType ) && + type.Compare( KOma2RoContentType ) && + type.Compare( KOma2TriggerContentType ) && + type.Compare( KOma1DcfContentType ) && + type.Compare( KOma2DcfContentType ) && + type.Compare( KOmaImportContentType ) + ) + { + return type; // Non-DRM, return it. + } + } + return (*aData[aData.ActiveDownload()]).Type(); // By default returns the first, whatever it is. + } + + +// --------------------------------------------------------------------------- +// CCodConfirm::ShowDownloadConfirmationL +// --------------------------------------------------------------------------- +// +TBool CCodConfirm::ShowDownloadConfirmationL(TInt aCbaResource, + const CCodData& aData, + TBool aCod ) +{ + HBufC* itemText = NULL; // a buffer holding the text for each list item + + CEikFormattedCellListBox* listBox = new ( ELeave ) CAknDoublePopupMenuStyleListBox; + CleanupStack::PushL( listBox ); + + // If supported show OK & Cancel buttons, otherwise just CANCEL + + CAknPopupList* popupList = CAknPopupList::NewL + ( listBox, aCbaResource, AknPopupLayouts::EMenuDoubleWindow ); + CleanupStack::PushL( popupList ); + + TInt flags = CEikListBox::EDisableHighlight; + listBox->ConstructL( popupList, flags ); + listBox->CreateScrollBarFrameL( ETrue ); + listBox->ScrollBarFrame()->SetScrollBarVisibilityL + ( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); + + MDesCArray* itemList = listBox->Model()->ItemTextArray(); + CDesCArray* itemArray = (CDesCArray*)itemList; + + //------------------------------------------- + // Header + HBufC* header = StringLoader::LoadLC( R_QTN_CD_TITLE ); + popupList->SetTitleL( *header ); + CleanupStack::PopAndDestroy( header ); // header + header = NULL; + + + // make description of buf + HBufC* buf; + + //------------------------------------------- + // Name + // + HBufC* popHeader = StringLoader::LoadLC( R_QTN_CD_DETAIL_NAME ); + // If media count more than one, show album name if present + itemText = FormatListBoxItemLC( *popHeader, aData.Count() > 1 && aData.Name().Length()? aData.Name() : (*aData[aData.ActiveDownload()]).Name() ); + itemArray->AppendL( *itemText ); + CleanupStack::PopAndDestroy( 2, popHeader ); // itemText,popHeader + itemText = NULL; + popHeader = NULL; + + //------------------------------------------- + // Content Size + // + HBufC* sizeHeader = StringLoader::LoadLC( R_QTN_CD_DETAIL_SIZE ); + TInt size = aData.Size(); + if( size >= KCodKbyte ) + { + // Round up. + buf = StringLoader::LoadLC + ( R_QTN_SIZE_KB, (size - 1) / KCodKbyte + 1, iCoeEnv ); + } + else + { + buf = StringLoader::LoadLC( R_QTN_SIZE_B, size, iCoeEnv ); + } + buf->Des().Trim(); + itemText = FormatListBoxItemLC( *sizeHeader, *buf ); + itemArray->AppendL( *itemText ); + CleanupStack::PopAndDestroy( 3, sizeHeader ); // itemText, sizeHeader + itemText = NULL; + sizeHeader = NULL; + + //------------------------------------------- + // Type + // + popHeader = StringLoader::LoadLC( R_QTN_CD_DETAIL_TYPE ); + buf = AllocTypeNameL( DisplayType(aData)); + CleanupStack::PushL(buf); + itemText = FormatListBoxItemLC( *popHeader, *buf ); + itemArray->AppendL( *itemText ); + CleanupStack::PopAndDestroy( 3, popHeader ); // itemText, nameHeader + itemText = NULL; + popHeader = NULL; + + + //------------------------------------------- + // Price: only if it's aCod + // + if ( aCod ) + { + popHeader = StringLoader::LoadLC( R_QTN_CD_DETAIL_PRICE ); + itemText = FormatListBoxItemLC( *popHeader, aData.Price() ); + itemArray->AppendL( *itemText ); + CleanupStack::PopAndDestroy( 2, popHeader ); // itemText, nameHeader + itemText = NULL; + popHeader = NULL; + } + + //------------------------------------------- + // Detail Description + // + popHeader = StringLoader::LoadLC( R_QTN_CD_DETAIL_DESCRIPT ); + HBufC* popValue = StringLoader::LoadLC(R_QTN_CD_VALUE_UNDEFINED ); + if (aData.Description().Length()) + { + itemText = FormatListBoxItemLC( *popHeader, aData.Description() ); + } + else + { + itemText = FormatListBoxItemLC( *popHeader, *popValue ); + } + itemArray->AppendL( *itemText ); + CleanupStack::PopAndDestroy( 3, popHeader ); // itemText, popValue + itemText = NULL; + popHeader = NULL; + + + //------------------------------------------- + // Vendor Information + // + popHeader = StringLoader::LoadLC( R_QTN_CD_DETAIL_VENDOR ); + + popValue = StringLoader::LoadLC(R_QTN_CD_VALUE_UNDEFINED ); + if (aData.Vendor().Length()) + itemText = FormatListBoxItemLC( *popHeader, aData.Vendor() ); + else + itemText = FormatListBoxItemLC( *popHeader, *popValue ); + itemArray->AppendL( *itemText ); + CleanupStack::PopAndDestroy( 3, popHeader ); // itemText, popValue + itemText = NULL; + popHeader = NULL; + + TInt popupOk = popupList->ExecuteLD(); + + + + // cleanup + CleanupStack::Pop( popupList ); + CleanupStack::PopAndDestroy( listBox ); // listBox + + return popupOk; +} +// ----------------------------------------------------------------------------- +// CCodConfirm::FormatListBoxItemLC +// ----------------------------------------------------------------------------- +// +HBufC* CCodConfirm::FormatListBoxItemLC + ( const TDesC& aFirst, const TDesC& aSecond ) + { + HBufC* res = HBufC::NewLC( aFirst.Length() + + aSecond.Length() + + KListBoxSeparator().Length() ); + res->Des().Copy( aFirst ); + res->Des().Append( KListBoxSeparator ); + res->Des().Append( aSecond ); + return res; + }