appinstaller/AppinstUi/Plugin/SisxUI/Src/SisxUIAppInfo.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 27 May 2010 12:58:35 +0300
changeset 37 6e7b00453237
parent 0 ba25891c3a9e
permissions -rw-r--r--
Revision: 201019 Kit: 2010121

/*
* Copyright (c) 2002-2004 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 CSisxUIAppInfo 
*                class member functions.
*
*/


// INCLUDE FILES

#include <StringLoader.h>
#include <SWInstCommonUI.rsg>
#include <AknUtils.h>

#include "SisxUIAppInfo.h"
#include "CUIUtils.h"

_LIT( KSymbian, "Symbian OS\x2122" );
_LIT( KLRE, "\x202A" );
_LIT( KPDF, "\x202C" );
_LIT( KLeftParenthes, "(" );

using namespace SwiUI;

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

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::CSisxUIAppInfo
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CSisxUIAppInfo::CSisxUIAppInfo( TBool aIsTrusted )
    : iIsTrusted( aIsTrusted )
    {
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CSisxUIAppInfo::ConstructL( const Swi::CAppInfo& aInfo )
    {
    iName = aInfo.AppName().AllocL();
    iVendor = aInfo.AppVendor().AllocL();    
    iVersion = aInfo.AppVersion();      
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSisxUIAppInfo* CSisxUIAppInfo::NewL( const Swi::CAppInfo& aInfo, TBool aIsTrusted )
    {
    CSisxUIAppInfo* self = new ( ELeave ) CSisxUIAppInfo( aIsTrusted );
    CleanupStack::PushL( self );
    self->ConstructL( aInfo );
    CleanupStack::Pop( self );
    return self; 
    }
    
// Destructor
CSisxUIAppInfo::~CSisxUIAppInfo()
    {  
    FreeIterator();

    delete iName;
    delete iVendor;    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::Name
// Return name of the package.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
const TDesC& CSisxUIAppInfo::Name() const
    {
    return *iName;    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::SetNameL
// Set the name of the package
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSisxUIAppInfo::SetNameL( const TDesC& aName )
    {
    delete iName;
    iName = NULL;
    iName = aName.AllocL();    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::Vendor
// Return the package vendor. 
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
const TDesC& CSisxUIAppInfo::Vendor() const
    {
    return *iVendor;    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::SetVendorL
// Set the vendor of the package
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSisxUIAppInfo::SetVendorL( const TDesC& aVendor )
    {
    delete iVendor;
    iVendor = NULL;
    iVendor = aVendor.AllocL();    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::Version
// Return the package version.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
const TVersion& CSisxUIAppInfo::Version() const
    {
    return iVersion;    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::SetTrusted
// Set the trusted status of the package. 
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSisxUIAppInfo::SetTrusted( TBool aIsTrusted )
    {
    iIsTrusted = aIsTrusted;    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::IsTrusted
// Indicates the trusted status of the package.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TBool CSisxUIAppInfo::IsTrusted() const
    {
    return iIsTrusted;
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::SetUid
// Sets the Uid of the package.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSisxUIAppInfo::SetUid( const TUid& aUid )
    {
    iUid.iUid = aUid.iUid;    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::Uid
// Return the Uid of the package.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TUid CSisxUIAppInfo::Uid() const
    {
    return iUid;    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::PrepareIteratorL
// Prepares the iterator to be shown in details dialog.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSisxUIAppInfo::PrepareIteratorL( const Swi::CAppInfo& /*aInfo*/ )
    {
    FreeIterator();

    iKeys = new( ELeave )CDesCArrayFlat( 6 );
    iValues = new( ELeave )CDesCArrayFlat( 6 );

    // Name
    SetFieldL( R_SWCOMMON_DETAIL_NAME, Name() );

    // Version
    HBufC* stringBuf = CommonUI::CUIUtils::ConstructVersionStringLC( Version().iMajor,
                                                                     Version().iMinor,
                                                                     Version().iBuild );    
    TPtr ptr = stringBuf->Des();
    AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
    HBufC* tmpBuf = HBufC::NewLC( KLRE().Length() + stringBuf->Length() + KPDF().Length() ); 
    TInt position = stringBuf->Find( KLeftParenthes() );
    if ( position >= 0 )
        {
        tmpBuf->Des() = stringBuf->Mid( 0, position );
        tmpBuf->Des() += KLRE();
        tmpBuf->Des() += stringBuf->Mid( position, stringBuf->Length() - position );
        tmpBuf->Des() += KPDF();
        }
    else
        {
        tmpBuf->Des() = *stringBuf;	
        }   
    SetFieldL( R_SWCOMMON_DETAIL_VERSION, *tmpBuf );
    CleanupStack::PopAndDestroy( tmpBuf );
    CleanupStack::PopAndDestroy( stringBuf );

     // Supplier
    if ( IsTrusted() )
        {        
        SetFieldL( R_SWCOMMON_DETAIL_SUPPLIER, Vendor() );
        }
    else
        {
        tmpBuf = StringLoader::LoadLC( R_SWCOMMON_DETAIL_VALUE_UNKNOWN_SUPPLIER );
        SetFieldL( R_SWCOMMON_DETAIL_SUPPLIER, *tmpBuf );
        CleanupStack::PopAndDestroy( tmpBuf );        
        }  

    // size
    tmpBuf = StringLoader::LoadLC( R_SWCOMMON_DETAIL_VALUE_UNKNOWN_SIZE );
    SetFieldL( R_SWCOMMON_DETAIL_APPSIZE, *tmpBuf );  
    CleanupStack::PopAndDestroy( tmpBuf );

    // Technology
    tmpBuf = HBufC::NewLC( KLRE().Length() + KSymbian().Length() + KPDF().Length() );
    tmpBuf->Des() = KLRE(); 
    tmpBuf->Des() += KSymbian();
    tmpBuf->Des() += KPDF();
    SetFieldL( R_SWCOMMON_DETAIL_TECHNOLOGY, *tmpBuf ); 
    CleanupStack::PopAndDestroy( tmpBuf );  

    // Type
    tmpBuf = StringLoader::LoadLC( R_SWCOMMON_DETAIL_VALUE_APPLICATION );    
    SetFieldL( R_SWCOMMON_DETAIL_TYPE, *tmpBuf );
    CleanupStack::PopAndDestroy( tmpBuf );    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::FreeIterator
// Frees the memory reserved for the iterator.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSisxUIAppInfo::FreeIterator()     
    {
    if ( iKeys )
        {        
        iKeys->Reset();
        }
    delete iKeys;
    iKeys = NULL;    

    if ( iValues )
        {        
        iValues->Reset();    
        }    
    delete iValues;
    iValues = NULL;    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::HasNext
// Indicates if the iterator has any more fields left. 
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TBool CSisxUIAppInfo::HasNext() const
    {
    return ( ( iKeys->Count() ) > iCurrentIndex );    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::Next
// Get the next field.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSisxUIAppInfo::Next( TPtrC& aKey, TPtrC& aValue )
    {
    aKey.Set( ( *iKeys )[iCurrentIndex] );
    aValue.Set( ( *iValues )[iCurrentIndex] );
    iCurrentIndex++;    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::Reset
// Reset the iterator. After calling this, Next() will return the first value.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSisxUIAppInfo::Reset()
    {
    iCurrentIndex = 0;    
    }

// -----------------------------------------------------------------------------
// CSisxUIAppInfo::SetFieldL
// Sets a new field for the iterator with given parameter values.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSisxUIAppInfo::SetFieldL( TInt aResourceId, const TDesC& aValue )
    {
     HBufC* temp = StringLoader::LoadLC( aResourceId );
     iKeys->AppendL( temp->Des() );
     CleanupStack::PopAndDestroy( temp );
     iValues->AppendL( aValue );
    }


//  End of File