diff -r e8e63152f320 -r 2a9601315dfc javamanager/javasettings/appmngrplugin/src/appmngr2midletpackageinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javamanager/javasettings/appmngrplugin/src/appmngr2midletpackageinfo.cpp Mon May 03 12:27:20 2010 +0300 @@ -0,0 +1,583 @@ +/* +* 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: MidletPackageInfo implementation +* +*/ + + +#include // CEikonEnv +#include // ContentAccess +#include // CBrowserLauncher +#include // StringLoader + +#include // TAppMngr2DriveUtils +#include // TAppMngr2DRMUtils +#include // Command IDs +#include // Midlet resource IDs + +#include "appmngr2midletpackageinfo.h" // CAppMngr2MidletPackageInfo +#include "appmngr2midletruntime.h" // KAppMngr2MidletUid +#include "javaapplicationsettings.hrh" // Midlet command IDs +#include "appmngr2midletinfoiterator.h" // CAppMngr2MidletInfoIterator + +#include "appmngr2midletmanifestreader.h" +#include "appmngr2midletresourcehandler.h" // CAppMngr2MidletResourceHandler + +#include "logger.h" // LOG + +// Empty string +_LIT(KEmptyString, ""); + +// Parameter that is passed to command line when launching Browser. +// 4 - Start/Continue the browser specifying a URL +_LIT(KBrowserStartContinueParam, "4 "); + +// Icon 0: KAknsIIDQgnMenuAmMidlet - from CAppMngr2MidletRuntime::LoadIconsL() +const TUint KMidletIconId = 0; + +void CleanUpResetAndDestroy(TAny *aArray) +{ + if (aArray) + { + RPointerArray* array=(RPointerArray*)aArray; + array->ResetAndDestroy(); + array->Close(); + } +} + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::NewL() +// --------------------------------------------------------------------------- +// +CAppMngr2MidletPackageInfo* CAppMngr2MidletPackageInfo::NewL( + CAppMngr2Runtime& aRuntime, + const TDesC& aJadFileName, + const TDesC& aJarFileName, + RFs& aFs, + CAppMngr2MidletResourceHandler& aResourceHandler) +{ + CAppMngr2MidletPackageInfo* self = CAppMngr2MidletPackageInfo::NewLC( + aRuntime, aJadFileName, aJarFileName, aFs, aResourceHandler); + CleanupStack::Pop(self); + return self; +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::NewLC() +// --------------------------------------------------------------------------- +// +CAppMngr2MidletPackageInfo* CAppMngr2MidletPackageInfo::NewLC( + CAppMngr2Runtime& aRuntime, + const TDesC& aJadFileName, + const TDesC& aJarFileName, + RFs& aFs, + CAppMngr2MidletResourceHandler& aResourceHandler) +{ + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::NewLC "); + CAppMngr2MidletPackageInfo* self + = new(ELeave) CAppMngr2MidletPackageInfo(aRuntime, aFs, aResourceHandler); + CleanupStack::PushL(self); + self->ConstructL(aJadFileName, aJarFileName); + LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletPackageInfo::NewLC "); + return self; +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::~CAppMngr2MidletPackageInfo() +// --------------------------------------------------------------------------- +// +CAppMngr2MidletPackageInfo::~CAppMngr2MidletPackageInfo() +{ + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::~CAppMngr2MidletPackageInfo "); + CancelCommand(); + delete iName; + iName = NULL; + delete iDetails; + iDetails = NULL; + delete iFileName; + iFileName = NULL; + delete iJadFileName; + iJadFileName = NULL; + delete iJarFileName; + iJarFileName = NULL; + delete iMimeType; + iMimeType = NULL; + delete iInfoIterator; + iInfoIterator = NULL; + LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletPackageInfo::~CAppMngr2MidletPackageInfo "); +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::IconIndex() +// --------------------------------------------------------------------------- +// +TInt CAppMngr2MidletPackageInfo::IconIndex() const +{ + LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletPackageInfo::IconIndex "); + return KMidletIconId; +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::Name() +// --------------------------------------------------------------------------- +// +const TDesC& CAppMngr2MidletPackageInfo::Name() const +{ + LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletPackageInfo::Name "); + if (iName) + { + return *iName; + } + return KNullDesC; +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::Details() +// --------------------------------------------------------------------------- +// +const TDesC& CAppMngr2MidletPackageInfo::Details() const +{ + LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletPackageInfo::Details "); + if (iDetails) + { + return *iDetails; + } + return KNullDesC; +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::IndicatorIconIndex() +// --------------------------------------------------------------------------- +// +TInt CAppMngr2MidletPackageInfo::IndicatorIconIndex() const +{ + LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletPackageInfo::IndicatorIconIndex "); + if (iLocation == EAppMngr2LocationMemoryCard) + { + return EAppMngr2IconQgnIndiAmInstMmcAdd; + } + else if (iLocation == EAppMngr2LocationMassStorage) + { + return EAppMngr2IconQgnIndiFmgrMsAdd; + } + return EAppMngr2NoIndicatorIcon; +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::GetMenuItemsL() +// --------------------------------------------------------------------------- +// +void CAppMngr2MidletPackageInfo::GetMenuItemsL( + RPointerArray& aMenuCmds) +{ + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::GetMenuItemsL "); + TInt resourceOffset = 0; + if (InfoIteratorL().GetInfoUrlL() != KEmptyString) + { + CEikMenuPaneItem::SData* menuItemData = new(ELeave) CEikMenuPaneItem::SData; + CleanupStack::PushL(menuItemData); + resourceOffset = iResourceHandler.AddResourceFileL(); + ReadMenuItemDataFromResourceL(MIDLET_GOTO_URL_MENU_ITEM, *menuItemData); + if (resourceOffset > 0) + { + iResourceHandler.DeleteResourceFile(resourceOffset); + } + aMenuCmds.AppendL(menuItemData); + CleanupStack::Pop(menuItemData); + } + + LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletPackageInfo::GetMenuItemsL "); +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::SupportsGenericCommand() +// --------------------------------------------------------------------------- +// +TBool CAppMngr2MidletPackageInfo::SupportsGenericCommand(TInt /*aCmdId*/) +{ + LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletPackageInfo::SupportsGenericCommand "); + return ETrue; +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::HandleCommandL() +// --------------------------------------------------------------------------- +// +void CAppMngr2MidletPackageInfo::HandleCommandL(TInt aCommandId, TRequestStatus& aStatus) +{ + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::HandleCommandL "); + switch (aCommandId) + { + case EAppMngr2CmdRemove : + { + TInt ret(KErrNone); + if (ShowDeleteConfirmationQueryL()) + { + RemoveL(); + } + else + { + ret = KErrGeneral; + } + TRequestStatus* status = &aStatus; + User::RequestComplete(status, ret); + break; + } + case EAppMngr2CmdInstall : + { + InstallL(aStatus); + break; + } + case EAppMngr2CmdViewDetails: + { + ShowDetailsL(); + TRequestStatus* status = &aStatus; + User::RequestComplete(status, KErrNone); + break; + } + case EAppMngrCmdGoToUrl: + { + ShowInfoUrlL(); + TRequestStatus* status = &aStatus; + User::RequestComplete(status, KErrNone); + break; + } + default: + { + // Uknown command + TRequestStatus* status = &aStatus; + User::RequestComplete(status, KErrNotSupported); + break; + } + } + + LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletPackageInfo::HandleCommandL "); +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::HandleCommandResultL() +// --------------------------------------------------------------------------- +// +void CAppMngr2MidletPackageInfo::HandleCommandResultL(TInt /*aStatus*/) +{ + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::HandleCommandResultL "); + // iSWInstLauncher is the only thing that can be ongoing + if (iSWInstLauncher) + { + iSWInstLauncher->Close(); + delete iSWInstLauncher; + iSWInstLauncher = NULL; + } + + LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletPackageInfo::HandleCommandResultL "); +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::CancelCommandL() +// --------------------------------------------------------------------------- +// +void CAppMngr2MidletPackageInfo::CancelCommand() +{ + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::CancelCommand "); + if (iSWInstLauncher) + { + iSWInstLauncher->CancelAsyncRequest(SwiUI::ERequestInstall); + iSWInstLauncher->Close(); + delete iSWInstLauncher; + iSWInstLauncher = NULL; + } + LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletPackageInfo::CancelCommand "); +} + +// ----------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::HandleContentL() +// ----------------------------------------------------------------------------- +// +TBool CAppMngr2MidletPackageInfo::HandleContentL(const TDesC& /*aFileName*/, + const CAiwGenericParamList& /*aParamList*/, + TBool& /*aContinue */) +{ + LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletPackageInfo::HandleContentL "); + return EFalse; +} + +// ----------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::HandleDownloadedContentHandlerReserved1() +// ----------------------------------------------------------------------------- +// +TAny* CAppMngr2MidletPackageInfo::DownloadedContentHandlerReserved1( + TAny* /*aAnyParam*/) +{ + LOG(EJavaAppMngrPlugin, EInfo, " CAppMngrMidletPackageInfo::DownloadedContentHandlerReserved1 "); + return NULL; +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::JadFileName() +// --------------------------------------------------------------------------- +// +const TDesC& CAppMngr2MidletPackageInfo::JadFileName() const +{ + LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletPackageInfo::JadFileName "); + if (iJadFileName) + { + return *iJadFileName; + } + return KNullDesC; +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::JarFileName() +// --------------------------------------------------------------------------- +// +const TDesC& CAppMngr2MidletPackageInfo::JarFileName() const +{ + LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletPackageInfo::JarFileName "); + if (iJarFileName) + { + return *iJarFileName; + } + return KNullDesC; +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::MimeType() +// --------------------------------------------------------------------------- +// +const TDesC8& CAppMngr2MidletPackageInfo::MimeType() const +{ + LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletPackageInfo::MimeType "); + if (iMimeType) + { + return *iMimeType; + } + return KNullDesC8; +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::FileName() +// --------------------------------------------------------------------------- +// +const TDesC& CAppMngr2MidletPackageInfo::FileName() const +{ + LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletPackageInfo::FileName "); + if (iFileName) + { + return *iFileName; + } + return KNullDesC; +} + +// --------------------------------------------------------- +// CAppMngr2MidletPackageInfo::IsDRMProtected() +// --------------------------------------------------------- +// +TBool CAppMngr2MidletPackageInfo::IsDRMProtected() const +{ + return iIsDRMProtected; +} + +// --------------------------------------------------------- +// CAppMngr2MidletPackageInfo::ProtectedFileName() +// --------------------------------------------------------- +// +const TDesC& CAppMngr2MidletPackageInfo::ProtectedFileName() const +{ + if (iIsDRMProtected) + { + return *iFileName; + } + else + { + return KNullDesC; + } +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::CAppMngr2MidletPackageInfo() +// --------------------------------------------------------------------------- +// +CAppMngr2MidletPackageInfo::CAppMngr2MidletPackageInfo(CAppMngr2Runtime& aRuntime, + RFs& aFs, CAppMngr2MidletResourceHandler& aResourceHandler) : CAppMngr2PackageInfo(aRuntime, aFs), iResourceHandler(aResourceHandler) +{ +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::ConstructL() +// --------------------------------------------------------------------------- +// +void CAppMngr2MidletPackageInfo::ConstructL(const TDesC& aJadFileName, + const TDesC& aJarFileName) +{ + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::ConstructL "); + CAppMngr2PackageInfo::ConstructL(); // base class + + iIsDRMProtected = EFalse; + TEntry fileEntry; + + iJadFileName = aJadFileName.AllocL(); + iJarFileName = aJarFileName.AllocL(); + + if (aJadFileName != KNullDesC) + { + User::LeaveIfError(iFs.Entry(aJadFileName, fileEntry)); + iName = fileEntry.iName.AllocL(); + iFileName = aJadFileName.AllocL(); + iMimeType =SwiUI::KJadMIMEType().AllocL(); + } + else + { + User::LeaveIfError(iFs.Entry(aJarFileName, fileEntry)); + iName = fileEntry.iName.AllocL(); + iFileName = aJarFileName.AllocL(); + iMimeType = SwiUI::KJarMIMEType().AllocL(); + } + + // Leave if there is no installation file + User::LeaveIfNull(iFileName); + + if (aJarFileName != KNullDesC) + { + User::LeaveIfError(iFs.Entry(aJarFileName, fileEntry)); + iDetails = SizeStringWithUnitsL(fileEntry.iSize); + iIsDRMProtected = TAppMngr2DRMUtils::IsDRMProtected(aJarFileName); + } + else + { + std::auto_ptrreader( + new AppMngr2MidletManifestReader(iFs)); + + RPointerArray attributes; + + reader->ReadManifestL(aJadFileName, attributes); + + _LIT(KAttrJarSize, "MIDlet-Jar-Size"); + + for (TInt i = 0; i < attributes.Count(); i ++) + { + if (attributes[i]->Name() == KAttrJarSize) + { + TLex lex(attributes[i]->Value()); + TInt jarSize = 0; + lex.Val(jarSize); + // If there is error value is left as zero. + iDetails = SizeStringWithUnitsL(jarSize); + break; + } + } + + attributes.ResetAndDestroy(); + } + + iLocation = TAppMngr2DriveUtils::LocationFromFileNameL(*iFileName, iFs); + iLocationDrive = TDriveUnit(*iFileName); + + LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletPackageInfo::ConstructL "); +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::RemoveL() +// --------------------------------------------------------------------------- +// +void CAppMngr2MidletPackageInfo::RemoveL() +{ + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::RemoveL "); + if ((*iJadFileName).Length()) + { + User::LeaveIfError(iFs.Delete(*iJadFileName)); + } + if ((*iJarFileName).Length()) + { + User::LeaveIfError(iFs.Delete(*iJarFileName)); + } + LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletPackageInfo::RemoveL "); +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::InstallL() +// --------------------------------------------------------------------------- +// +void CAppMngr2MidletPackageInfo::InstallL(TRequestStatus& aStatus) +{ + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::InstallL "); + if (!iSWInstLauncher) + { + SwiUI::RSWInstLauncher* swInstLauncher + = new(ELeave) SwiUI::RSWInstLauncher; + CleanupStack::PushL(swInstLauncher); + User::LeaveIfError(swInstLauncher->Connect()); + CleanupStack::Pop(swInstLauncher); + iSWInstLauncher = swInstLauncher; + swInstLauncher = NULL; + } + iSWInstLauncher->Install(aStatus, *iFileName); + LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletPackageInfo::InstallL "); +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::ShowDetailsL() +// --------------------------------------------------------------------------- +// +void CAppMngr2MidletPackageInfo::ShowDetailsL() +{ + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::ShowDetailsL "); + SwiUI::CommonUI::CCUIDetailsDialog* details + = SwiUI::CommonUI::CCUIDetailsDialog::NewL(); + details->ExecuteLD(InfoIteratorL()); + LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletPackageInfo::ShowDetailsL "); +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::ShowInfoUrlL() +// --------------------------------------------------------------------------- +// +void CAppMngr2MidletPackageInfo::ShowInfoUrlL() +{ + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::ShowInfoUrlL "); + CBrowserLauncher* launcher = CBrowserLauncher::NewLC(); + // open browser with info url from jad + const TDesC* url = &InfoIteratorL().GetInfoUrlL(); + + TInt urlLength = url->Length(); + + HBufC* urlParam = HBufC::NewLC(urlLength + + KBrowserStartContinueParam().Length()); + TPtr urlParamPtr = urlParam->Des(); + urlParamPtr.Append(KBrowserStartContinueParam); + urlParamPtr.Append(*url); + + launcher->LaunchBrowserSyncEmbeddedL(urlParamPtr, this); + + CleanupStack::PopAndDestroy(urlParam); + CleanupStack::PopAndDestroy(launcher); + + LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletPackageInfo::ShowInfoUrlL "); +} + +// --------------------------------------------------------------------------- +// CAppMngr2MidletPackageInfo::InfoIteratorL() +// --------------------------------------------------------------------------- +// +CAppMngr2MidletInfoIterator& CAppMngr2MidletPackageInfo::InfoIteratorL() +{ + if (!iInfoIterator) + { + iInfoIterator = CAppMngr2MidletInfoIterator::NewL(*this, + EAppMngr2StatusNotInstalled, iFs, iResourceHandler); + } + return *iInfoIterator; +}