--- /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 <AknUtils.h>
+#include <AknDef.h>
+#include <StringLoader.h>
+#include <CodData.h>
+#include <CodDefs.h>
+#include <avkon.rsg>
+#include <CodUi.rsg>
+#include "CodConfirm.h"
+#include "CodLogger.h"
+#include <Oma2Agent.h>
+#include <AknLayout.cdl.h>
+
+
+#include <eikmobs.h>
+#include <aknPopup.h>
+#include <aknlists.h>
+#include <StringLoader.h>
+
+_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;
+ }