--- a/idlefw/plugins/shortcutplugin/src/caiscutsettingsapplist.cpp Tue Feb 02 00:23:10 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1087 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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: Application list for settings listbox
-*
-*/
-
-
-#include <msvuids.h> // For KMsvRootIndexEntryIdValue
-#include <SenduiMtmUids.h>
-#include <StringLoader.h>
-
-#include <aiscutsettingsres.rsg>
-#include <aiscuttexts.rsg>
-
-#include <featmgr.h>
-#include <centralrepository.h>
-#include <settingsinternalcrkeys.h>
-#include <javaregistry.h>
-#include <javaregistryentry.h>
-#include <pathinfo.h>
-
-#include "caiscutsettingsapplist.h"
-#include "taiscutparser.h"
-#include "caiscutsettingsitem.h"
-#include "aiscutdefs.h"
-#include <activeidle2domaincrkeys.h>
-
-#include "debug.h"
-
-using namespace Java;
-
-
-const TInt KDriveAndColon = 2; //drive char and colon string length, e.g. "c:"
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CAiScutSettingsAppList::CAiScutSettingsAppList(CCoeEnv* aEnv, MAiScutListObserver& aObserver)
- : CActive(CActive::EPriorityLow) // Background task priority.
- // Higher priority would block the wait dialog.
- , iEnv(aEnv)
- , iObserver(aObserver)
- {
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::ConstructL()
- {
- User::LeaveIfError(iApaSession.Connect());
- iMsvSession = CMsvSession::OpenAsObserverL(*this);
-
- CActiveScheduler::Add(this);
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CAiScutSettingsAppList* CAiScutSettingsAppList::NewL(CCoeEnv* aEnv,
- MAiScutListObserver& aObserver)
- {
- CAiScutSettingsAppList* self = new (ELeave) CAiScutSettingsAppList(aEnv, aObserver);
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CAiScutSettingsAppList::~CAiScutSettingsAppList()
- {
- if (IsActive())
- {
- Cancel();
- }
-
- delete iAppNotifier;
- delete iMsvSession;
- iApaSession.Close();
- iListItems.ResetAndDestroy();
- iMailboxes.Close(); // Do not call ResetAndDestroy() to this.
- }
-
-// ---------------------------------------------------------------------------
-// From MDesCArray
-// Returns the number of descriptor elements in a descriptor array.
-// ---------------------------------------------------------------------------
-//
-TInt CAiScutSettingsAppList::MdcaCount() const
- {
- return iListItems.Count();
- }
-
-// ---------------------------------------------------------------------------
-// From MDesCArray
-// Indexes into a descriptor array.
-// ---------------------------------------------------------------------------
-//
-TPtrC CAiScutSettingsAppList::MdcaPoint(TInt aIndex) const
- {
- if (aIndex < 0 || aIndex >= iListItems.Count())
- {
- TPtrC ret(KNullDesC);
- return ret;
- }
- return iListItems[aIndex]->Caption();
- }
-
-// ---------------------------------------------------------------------------
-// From class MMsvSessionObserver.
-// Handles an event from the message server.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::HandleSessionEventL(
- TMsvSessionEvent aEvent, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
- {
- TBool updated = ETrue;
- TBool added = EFalse;
-
- switch (aEvent)
- {
- case EMsvEntriesCreated:
- case EMsvEntriesDeleted:
- case EMsvEntriesChanged:
- if (iObserving)
- {
- CMsvEntry* rootEntry = GetRootEntryL();
-
- CleanupStack::PushL(rootEntry);
- TBuf<255> mailboxId;
-
- // Reset iMailboxes
- for (TInt j = iMailboxes.Count() - 1; j >= 0; --j)
- {
- RemoveMailboxL(iMailboxes[j]->Params());
- }
-
- // Add all mailboxes
- for (TInt i = rootEntry->Count() - 1; i >= 0; --i)
- {
- const TMsvEntry& tentry = (*rootEntry)[i];
-
- if (tentry.iMtm == KSenduiMtmImap4Uid || tentry.iMtm == KSenduiMtmPop3Uid)
- {
- mailboxId.Num(tentry.Id());
- AddMailboxL(tentry.iDetails, mailboxId);
- }
- }
-
- CleanupStack::PopAndDestroy(rootEntry);
- }
-
- if (updated)
- {
- iObserver.HandleScutListEventL(MAiScutListObserver::EAppListUpdated, added);
- }
- break;
-
- default:
- break;
- }
- }
-
-// ---------------------------------------------------------------------------
-// From class MApaAppListServObserver.
-// Handles a change in the application list.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::HandleAppListEvent(TInt /*aEvent*/)
- {
- TRAP_IGNORE(UpdateAppListL());
- }
-
-// ---------------------------------------------------------------------------
-// Starts the asynchronous application list initialization.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::StartL()
- {
- iListItems.ResetAndDestroy();
-
- AddStaticItemsL();
- AddMailboxesL();
- AddExtraItemsFromCRL();
-
- if (iApaSession.GetAllApps() == KErrNone &&
- iApaSession.AppCount(iTotalAppCount) == KErrNone)
- {
- CompleteSelf();
- }
- }
-
-// ---------------------------------------------------------------------------
-// Checks if the application list is ready to be shown.
-// ---------------------------------------------------------------------------
-//
-TBool CAiScutSettingsAppList::IsReady() const
- {
- return iReady;
- }
-
-// ---------------------------------------------------------------------------
-// Tells the application list to start or stop observing for changes.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::SetObservingL(TBool aObserving)
- {
- delete iAppNotifier;
- iAppNotifier = NULL;
-
- if (aObserving)
- {
- UpdateAppListL();
-
- iAppNotifier = CApaAppListNotifier::NewL(this, CActive::EPriorityStandard);
- }
-
- iObserving = aObserving;
- }
-
-// ---------------------------------------------------------------------------
-// Finds the index of the given settings item in the application list.
-// ---------------------------------------------------------------------------
-//
-TInt CAiScutSettingsAppList::FindIndex(CAiScutSettingsItem& aItem)
- {
- TInt index = KErrNotFound;
-
- TAiScutParser parser;
- parser.Parse(aItem.Value());
- TPtrC params(parser.Get(EScutDefParamNameAndValue));
-
- TUid uid = aItem.Uid();
- for (TInt i = iListItems.Count() - 1; i >= 0; --i)
- {
- CAppListItem* item = iListItems[i];
- if ( (item->Uid() == uid) && params.Compare(item->Params()) == 0)
- {
- index = i;
- break;
- }
- // Url => compare the whole url not just the parameters
- else if( item->Type() == EAiScutSettingTypeUrl )
- {
- if ( parser.Get(EScutDefComplete).Compare(item->Params()) == 0 )
- {
- index = i;
- break;
- }
- }
- }
-
- return index;
- }
-
-// ---------------------------------------------------------------------------
-// Returns target application data from the given index.
-// ---------------------------------------------------------------------------
-//
-TInt CAiScutSettingsAppList::GetDataByIndex(TInt aIndex, TUid& aUid,
- TPtrC& aParams, TPtrC& aCaption, TAiScutSettingType& aType ) const
- {
- if (aIndex >= 0 && aIndex < iListItems.Count())
- {
- CAppListItem* item = iListItems[aIndex];
- aUid = item->Uid();
- aType = item->Type();
- aParams.Set(item->Params());
- aCaption.Set(item->Caption());
- return KErrNone;
- }
-
- return KErrNotFound;
- }
-
-// ---------------------------------------------------------------------------
-// From CActive
-// Implements cancellation of an outstanding request.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::DoCancel()
- {
- }
-
-// ---------------------------------------------------------------------------
-// From CActive
-// Performs one step of the app list initialization.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::RunL()
- {
- TApaAppInfo appInfo;
- TInt err = GetNextValidApp(appInfo);
-
- switch (err)
- {
- case KErrNone:
- AddApplicationL(appInfo);
- CompleteSelf();
- break;
-
- case RApaLsSession::ENoMoreAppsInList:
- iReady = ETrue;
- iObserver.HandleScutListEventL(MAiScutListObserver::EAppListReady, EFalse);
- break;
-
- //Indicates that an RApaLsSession member function was called before the session's
- // application list is fully populated.
- case RApaLsSession::EAppListInvalid:
- StartL(); // Just try again.
- break;
-
- default:
- User::LeaveIfError(err);
- break;
- }
- }
-
-// ---------------------------------------------------------------------------
-// From CActive
-// Handles an error situation.
-// ---------------------------------------------------------------------------
-//
-TInt CAiScutSettingsAppList::RunError(TInt aError)
- {
- return aError;
- }
-
-// ---------------------------------------------------------------------------
-// Completes own request status to make sure active scheduler calls RunL again.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::CompleteSelf()
- {
- if (!IsActive())
- {
- TRequestStatus* status = &iStatus;
- User::RequestComplete(status, KErrNone);
- SetActive();
- }
- }
-
-// ---------------------------------------------------------------------------
-// Adds an application to the list.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::AddApplicationL(TApaAppInfo& aAppInfo)
- {
- TBool allowed = ETrue;
-
- // EasyVoIP is only added when VoIP is supported
- if (aAppInfo.iUid == KScutEasyVoIPApplicationUid)
- {
- // Check VoIP variation status
- TInt voipStatus = 0;
- // For checking VoIP variation status
- CRepository* repository = CRepository::NewL(KCRUidTelephonySettings);
- repository->Get(KDynamicVoIP, voipStatus);
- delete repository;
- allowed = (voipStatus && FeatureManager::FeatureSupported(KFeatureIdCommonVoip));
-
- __PRINTS( "XAI: CAiScutSettingsAppList::AddApplicationL");
- __PRINT( __DBG_FORMAT( "XAI: voipStatus = %d, allowed = %d"), voipStatus, allowed);
- }
-
- // VoIP launcher is always invisible in shortcuts.
- if (aAppInfo.iUid == KScutVoIPLauncherUid)
- {
- allowed = EFalse;
- }
-
- if (iObserver.IsHidden(aAppInfo.iUid))
- {
- allowed = EFalse;
- }
-
- if (allowed)
- {
- CAppListItem* listItem = CAppListItem::NewLC(aAppInfo.iUid, aAppInfo.iCaption);
- listItem->SetType( EAiScutSettingTypeApplication );
- TLinearOrder<CAppListItem> sortMethod(CAppListItem::CompareCaption);
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- CleanupStack::Pop(listItem);
- }
- }
-
-// ---------------------------------------------------------------------------
-// Adds the static list items to the application list.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::AddStaticItemsL()
- {
- HBufC* caption = NULL;
- CAppListItem* listItem = NULL;
- TLinearOrder<CAppListItem> sortMethod(CAppListItem::CompareCaption);
-
- // Connectivity Status item
- caption = StringLoader::LoadLC(R_SCUT_SETTINGS_CONNECTIVITY_STATUS, iEnv);
- listItem = CAppListItem::NewLC(KScutGeneralSettingsUid, *caption);
- listItem->SetParamsL(KScutParamConnectivityView);
- listItem->SetType( EAiScutSettingTypeApplication );
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- CleanupStack::Pop(listItem);
- CleanupStack::PopAndDestroy(caption);
- caption = NULL;
- listItem = NULL;
-
- // New Message item.
- caption = StringLoader::LoadLC(R_SCUT_SETTINGS_NEW_MSG, iEnv);
- listItem = CAppListItem::NewLC(KScutMessagingUid, *caption);
- listItem->SetParamsL(KScutParamNewMsg);
- listItem->SetType( EAiScutSettingTypeApplication );
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- CleanupStack::Pop(listItem);
- CleanupStack::PopAndDestroy(caption);
- caption = NULL;
- listItem = NULL;
-
- // New Email item.
- caption = StringLoader::LoadLC(R_SCUT_SETTINGS_NEW_EMAIL, iEnv);
- listItem = CAppListItem::NewLC(KScutMessagingUid, *caption);
- listItem->SetParamsL(KScutParamNewEmail);
- listItem->SetType( EAiScutSettingTypeApplication );
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- CleanupStack::Pop(listItem);
- CleanupStack::PopAndDestroy(caption);
- caption = NULL;
- listItem = NULL;
-
-#ifdef __SYNCML_DS_EMAIL
- // New SyncML mail item.
- caption = StringLoader::LoadLC(R_SCUT_SETTINGS_NEW_SYNCML_MAIL, iEnv);
- listItem = CAppListItem::NewLC(KScutMessagingUid, *caption);
- listItem->SetParamsL(KScutParamNewSyncMLMail);
- listItem->SetType( EAiScutSettingTypeApplication );
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- CleanupStack::Pop(listItem);
- CleanupStack::PopAndDestroy(caption);
- caption = NULL;
- listItem = NULL;
-#endif
-
- if (FeatureManager::FeatureSupported(KFeatureIdMmsPostcard)
- && IsInRom( KScutPostcardEditorUid ) )
- {
- // New Postcard item.
- caption = StringLoader::LoadLC(R_SCUT_SETTINGS_NEW_POSTCARD, iEnv);
- listItem = CAppListItem::NewLC(KScutMessagingUid, *caption);
- listItem->SetParamsL(KScutParamNewPostcard);
- listItem->SetType( EAiScutSettingTypeApplication );
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- CleanupStack::Pop(listItem);
- CleanupStack::PopAndDestroy(caption);
- caption = NULL;
- listItem = NULL;
- }
-
- if (FeatureManager::FeatureSupported(KFeatureIdAudioMessaging))
- {
- // New Audio Message item.
- caption = StringLoader::LoadLC(R_SCUT_SETTINGS_NEW_AUDIO_MSG, iEnv);
- listItem = CAppListItem::NewLC(KScutMessagingUid, *caption);
- listItem->SetParamsL(KScutParamNewAudioMsg);
- listItem->SetType( EAiScutSettingTypeApplication );
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- CleanupStack::Pop(listItem);
- CleanupStack::PopAndDestroy(caption);
- caption = NULL;
- listItem = NULL;
- }
-
- // Select Message type item.
- caption = StringLoader::LoadLC(R_SCUT_SETTINGS_SELECT_MSG_TYPE, iEnv);
- listItem = CAppListItem::NewLC(KScutMessagingUid, *caption);
- listItem->SetParamsL(KScutParamSelectMsgType);
- listItem->SetType( EAiScutSettingTypeApplication );
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- CleanupStack::Pop(listItem);
- CleanupStack::PopAndDestroy(caption);
- caption = NULL;
- listItem = NULL;
- // Installation view.
- caption = StringLoader::LoadLC(R_SCUT_SETTINGS_APPMNGR, iEnv);
- listItem = CAppListItem::NewLC(KScutGeneralSettingsUid, *caption);
- listItem->SetParamsL(KScutParamInstallationsView);
- listItem->SetType( EAiScutSettingTypeApplication );
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- CleanupStack::Pop(listItem);
- CleanupStack::PopAndDestroy(caption);
- caption = NULL;
- listItem = NULL;
- }
-
-// ---------------------------------------------------------------------------
-// Adds extra list items to the application list.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::AddExtraItemsL()
- {
- // No Effect item.
- HBufC* caption = StringLoader::LoadLC(R_SCUT_SETTINGS_NO_EFFECT, iEnv);
- CAppListItem* listItem = CAppListItem::NewLC(KScutSettingsDllUid, *caption);
- listItem->SetParamsL(KScutParamNoEffect);
- listItem->SetType( EAiScutSettingTypeApplication );
- User::LeaveIfError(iListItems.Insert(listItem, 0)); // insert as first item.
- CleanupStack::Pop(listItem);
- CleanupStack::PopAndDestroy(caption);
- }
-
-void CAiScutSettingsAppList::AddExtraItemsFromCRL()
- {
- CRepository *cr = CRepository::NewL( TUid::Uid( KCRUidActiveIdleLV ) );
- User::LeaveIfNull( cr );
-
- CleanupStack::PushL( cr );
-
- TUint32 crKey = KAIExtraShortcutsKeyRangeStart;
- TBool moreSettings = ETrue;
- TInt err = KErrNone;
- TAiScutParser parser;
-
- HBufC* settingValue = HBufC::NewLC(NCentralRepositoryConstants::KMaxUnicodeStringLength);
- TPtr settingValuePtr = settingValue->Des();
-
- while( moreSettings )
- {
- err = cr->Get( crKey++, settingValuePtr );
- if ( err == KErrNone && settingValue->Length() > 0 )
- {
- CAppListItem* listItem = NULL;
- parser.Parse( *settingValue );
-
- // First try to find the custom title
- HBufC* caption = HBufC::NewLC( settingValue->Length() );
- TPtr captionPtr = caption->Des();
- TInt err = parser.CustomTitle( captionPtr );
- TUid appUid = parser.Uid();
-
- if ( err != KErrNone || caption->Length() <= 0 )
- {
- CleanupStack::PopAndDestroy( caption );
- caption = NULL;
- }
-
- if ( !caption )
- {
- // Web address...
- if ( parser.Type() == EScutWebAddress || parser.Type() == EScutUnknown )
- {
- TUriParser parser;
- TInt err = parser.Parse(*settingValue);
-
- if (err == KErrNone)
- {
- // Remove scheme from the url.
- caption = parser.Extract(EUriHost).AllocLC();
- }
- else
- {
- caption = settingValue->AllocLC();
- }
- }
- // ...application. Nothing else supported at the moment
- else
- {
- TApaAppInfo appInfo;
- err = iApaSession.GetAppInfo(appInfo, appUid);
- if (err == KErrNone)
- {
- caption = appInfo.iCaption.AllocLC();
- }
- }
- }
- if ( caption )
- {
- listItem = CAppListItem::NewLC( KNullUid , *caption );
- listItem->SetParamsL( *settingValue );
- listItem->SetType( EAiScutSettingTypeUrl );
- TLinearOrder<CAppListItem> sortMethod(CAppListItem::CompareCaption);
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- CleanupStack::Pop( listItem );
- CleanupStack::PopAndDestroy( caption );
- }
- }
- else
- {
- moreSettings = EFalse;
- }
- }
-
-
-
- CleanupStack::PopAndDestroy( settingValue );
- CleanupStack::PopAndDestroy( cr );
- }
-// ---------------------------------------------------------------------------
-// Removes extra list items from the application list.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::RemoveExtraItemsL()
- {
- // No Effect item.
- CAppListItem* listItem = iListItems[0];
- iListItems.Remove(0);
- if (listItem)
- {
- delete listItem;
- listItem = NULL;
- }
- }
-
-// ---------------------------------------------------------------------------
-// Returns the root entry containing mailboxes.
-// ---------------------------------------------------------------------------
-//
-CMsvEntry* CAiScutSettingsAppList::GetRootEntryL()
- {
- return iMsvSession->GetEntryL(KMsvRootIndexEntryIdValue);
- }
-
-// ---------------------------------------------------------------------------
-// Adds remote mailboxes to the application list.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::AddMailboxesL()
- {
- CMsvEntry* rootEntry = GetRootEntryL();
-
- CleanupStack::PushL(rootEntry);
- TBuf<255> mailboxId;
-
- for (TInt i = rootEntry->Count() - 1; i >= 0; --i)
- {
- const TMsvEntry& tentry = (*rootEntry)[i];
-
- if (tentry.iMtm == KSenduiMtmImap4Uid || tentry.iMtm == KSenduiMtmPop3Uid)
- {
- mailboxId.Num(tentry.Id());
- AddMailboxL(tentry.iDetails, mailboxId);
- }
- }
-
- CleanupStack::PopAndDestroy(rootEntry);
- }
-
-// ---------------------------------------------------------------------------
-// Adds a mailbox to the list.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::AddMailboxL(const TDesC& aMailbox, const TDesC& aMailboxId)
-{
- CAppListItem* listItem = CAppListItem::NewLC(KScutMessagingUid, aMailbox);
-
- // Insert params containing mailbox id
- HBufC* params = HBufC::NewLC(KScutParamMailbox().Length() + aMailboxId.Length());
- params->Des().Copy(KScutParamMailbox);
- params->Des().Append(aMailboxId);
- listItem->SetParamsL(*params);
- listItem->SetType( EAiScutSettingTypeApplication );
- CleanupStack::PopAndDestroy(params);
-
- TLinearOrder<CAppListItem> sortMethod(CAppListItem::CompareCaption);
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- CleanupStack::Pop(listItem);
- User::LeaveIfError(iMailboxes.Append(listItem));
- listItem = NULL;
-}
-
-// ---------------------------------------------------------------------------
-// Removes a mailbox from the list.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::RemoveMailboxL(const TDesC& aMailboxParam)
- {
- for (TInt i = iListItems.Count() - 1; i >= 0; --i)
- {
- CAppListItem* listItem = iListItems[i];
- if (aMailboxParam.Compare(listItem->Params()) == 0)
- {
- // Also remove the mailbox from the mailbox array
- for (TInt j = iMailboxes.Count() - 1; j >= 0; --j)
- {
- if (aMailboxParam.Compare(iMailboxes[j]->Params()) == 0)
- {
- iMailboxes.Remove(j);
- }
- }
-
- iListItems.Remove(i);
- delete listItem;
- listItem = NULL;
-
- break;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// Gets the next valid application from application architecture server.
-// ---------------------------------------------------------------------------
-//
-TInt CAiScutSettingsAppList::GetNextValidApp(TApaAppInfo& aAppInfo)
- {
- TInt err = KErrNone;
- TBool validAppFound = EFalse;
-
- while (!validAppFound)
- {
- TApaAppInfo appInfo;
- err = iApaSession.GetNextApp(appInfo);
- if (err == KErrNone)
- {
- TApaAppCapabilityBuf capBuf;
- TApaAppCapability cap;
-
- if ((iApaSession.GetAppCapability(capBuf, appInfo.iUid) == KErrNone))
- {
- cap = capBuf();
-
- TInt screenNumber(0);
- err = iApaSession.GetDefaultScreenNumber( screenNumber, appInfo.iUid );
-
- if ((err == KErrNone) && (cap.iAppIsHidden == EFalse) && (screenNumber == 0))
- {
- aAppInfo = appInfo;
- validAppFound = ETrue;
- }
- }
- }
- else
- {
- return err;
- }
- }
-
- return err;
- }
-
-// ---------------------------------------------------------------------------
-// Updates the application list.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::UpdateAppListL()
- {
- TBool updated = EFalse;
- TBool added = EFalse;
-
- TInt totalAppCount = 0;
-
- if (iApaSession.AppCount(totalAppCount) == KErrNone)
- {
- if (totalAppCount < iTotalAppCount)
- {
- RemoveUninstalledAppFromListL(iTotalAppCount - totalAppCount);
- updated = ETrue;
- added = EFalse;
- }
- else if (totalAppCount > iTotalAppCount)
- {
- AddInstalledAppToListL(totalAppCount - iTotalAppCount);
- updated = ETrue;
- added = ETrue;
- }
-
- iTotalAppCount = totalAppCount;
- }
-
- if (updated)
- {
- iObserver.HandleScutListEventL(MAiScutListObserver::EAppListUpdated, added);
- }
- }
-
-// ---------------------------------------------------------------------------
-// Figures out which application is missing from the list and adds it.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::AddInstalledAppToListL(TInt aCount)
- {
- TInt added = 0;
- TApaAppInfo appInfo;
- TInt err = GetNextValidApp(appInfo);
-
- while (err == KErrNone)
- {
- TBool found = EFalse;
-
- for (TInt i = iListItems.Count() - 1; i >= 0; --i)
- {
- if (iListItems[i]->Uid() == appInfo.iUid)
- {
- found = ETrue;
- break;
- }
- }
-
- if (!found)
- {
- AddApplicationL(appInfo);
- if (++added == aCount)
- {
- // Found all of them, no need to go further
- return ;
- }
- }
-
- err = GetNextValidApp(appInfo);
- }
-
- // create registry
- CJavaRegistry* registry = CJavaRegistry::NewLC();
-
- // get all uids stored in registry
- RArray<TUid> uids;
- registry->GetRegistryEntryUidsL( uids );
-
- CleanupClosePushL(uids);
-
- for (TInt javaIndex = 0; javaIndex < uids.Count(); ++javaIndex)
- {
- TInt found = EFalse;
- for (TInt listIndex = 0; listIndex < iListItems.Count(); ++listIndex )
- {
- if (iListItems[listIndex]->Uid() == uids[javaIndex])
- {
- found = ETrue;
- }
- }
- if (!found)
- {
- // get registry entry by uid (i.e. the first entry)
- CJavaRegistryEntry* entry =
- registry->RegistryEntryL( uids[javaIndex] );
- if( entry )
- {
- CleanupStack::PushL(entry);
-
- // get entry properties (i.e. name)
- const TDesC& name = entry->Name();
- TUid uid = entry->Uid();
-
- CAppListItem* listItem = CAppListItem::NewLC(uid, name);
- listItem->SetType( EAiScutSettingTypeApplication );
- TLinearOrder<CAppListItem> sortMethod(CAppListItem::CompareCaption);
- if (entry->Type() >= EGeneralApplication)
- {
- User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
- ++added;
- }
- else
- {
- delete listItem;
- }
- CleanupStack::Pop(listItem);
-
- CleanupStack::PopAndDestroy(entry);
- }
- if (added == aCount)
- {
- break;
- }
- }
- }
- CleanupStack::PopAndDestroy(); // uids
- CleanupStack::PopAndDestroy(registry);
- }
-
-// ---------------------------------------------------------------------------
-// Figures out which application should not be in the list and removes it.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::RemoveUninstalledAppFromListL(TInt aCount)
- {
- TInt removed = 0;
-
- for (TInt i = iListItems.Count() - 1; i >= 0; --i)
- {
- CAppListItem* listItem = iListItems[i];
- TApaAppInfo ignored;
- if (iApaSession.GetAppInfo(ignored, listItem->Uid()) == KErrNotFound)
- {
- iListItems.Remove(i);
- delete listItem;
- listItem = NULL;
-
- if (++removed == aCount)
- {
- return ;
- }
- }
- }
- // create registry
- CJavaRegistry* registry = CJavaRegistry::NewLC();
- // get all uids stored in registry
- RArray<TUid> uids;
- registry->GetRegistryEntryUidsL( uids );
-
- CleanupClosePushL(uids);
-
- for (TInt listIndex = iListItems.Count(); listIndex >= 0 ; --listIndex )
- {
- TInt found = EFalse;
- for (TInt javaIndex = 0; javaIndex < uids.Count(); ++javaIndex)
- {
- if (iListItems[listIndex]->Uid() == uids[javaIndex])
- {
- found = ETrue;
- }
- }
- if (!found)
- {
- // Item removed, remove from item list
- CAppListItem* listItem = iListItems[listIndex];
- iListItems.Remove(listIndex);
- delete listItem;
- if (++removed == aCount)
- {
- break;
- }
- }
- }
- CleanupStack::PopAndDestroy(); // uids
- CleanupStack::PopAndDestroy(registry);
- }
-
-TBool CAiScutSettingsAppList::IsNonNative(const TUid& aUid)
- {
- TBool ret = EFalse;
-
- const TUid KMidletAppType = { 0x10210E26 };
- TUid typeuid = KNullUid;
-
- if (KErrNone == iApaSession.GetAppType(typeuid, aUid))
- {
- if (typeuid == KMidletAppType)
- {
- ret = ETrue;
- }
- }
-
- return ret;
- }
-
-
-TBool CAiScutSettingsAppList::IsInRom( const TUid& aUid )
- {
- TBool inROM = EFalse;
-
- TApaAppInfo appInfo;
- if( iApaSession.GetAppInfo( appInfo, aUid ) == KErrNone )
- {
- // Does the full path start with z:
- if( appInfo.iFullName.FindC(
- PathInfo::RomRootPath().Left( KDriveAndColon ) ) >= 0 )
- {
- inROM = ETrue;
- }
- }
- return inROM;
- }
-
-
-// ---------------------------------------------------------------------------
-// Nested class to store individual application list items
-// ---------------------------------------------------------------------------
-//
-CAiScutSettingsAppList::CAppListItem::CAppListItem(TUid aUid) : iUid(aUid)
- {
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::CAppListItem::ConstructL(const TDesC& aCaption)
- {
- iCaption = aCaption.AllocL();
- // Defaults to application
- iType = EAiScutSettingTypeApplication;
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CAiScutSettingsAppList::CAppListItem* CAiScutSettingsAppList::CAppListItem::NewLC(
- TUid aUid, const TDesC& aCaption)
- {
- CAppListItem* self = new (ELeave) CAppListItem(aUid);
- CleanupStack::PushL(self);
- self->ConstructL(aCaption);
- return self;
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CAiScutSettingsAppList::CAppListItem::~CAppListItem()
- {
- delete iCaption;
- delete iParams;
- }
-
-// ---------------------------------------------------------------------------
-// Compare method used to add the items to the list in sorted order.
-// ---------------------------------------------------------------------------
-//
-TInt CAiScutSettingsAppList::CAppListItem::CompareCaption(const CAppListItem& aFirst,
- const CAppListItem& aSecond)
- {
- return aFirst.iCaption->Des().CompareC(*aSecond.iCaption);
- }
-
-// ---------------------------------------------------------------------------
-// Returns the item target application uid.
-// ---------------------------------------------------------------------------
-//
-TUid CAiScutSettingsAppList::CAppListItem::Uid() const
- {
- return iUid;
- }
-
-// ---------------------------------------------------------------------------
-// Returns the item target application caption.
-// ---------------------------------------------------------------------------
-//
-TPtrC CAiScutSettingsAppList::CAppListItem::Caption() const
- {
- return TPtrC(*iCaption);
- }
-
-// ---------------------------------------------------------------------------
-// Returns the possible parameters for item target.
-// ---------------------------------------------------------------------------
-//
-TPtrC CAiScutSettingsAppList::CAppListItem::Params() const
- {
- TPtrC params;
- if (iParams)
- {
- params.Set(*iParams);
- }
- return params;
- }
-
-// ---------------------------------------------------------------------------
-// Sets the parameters for the item target.
-// ---------------------------------------------------------------------------
-//
-void CAiScutSettingsAppList::CAppListItem::SetParamsL(const TDesC& aParams)
- {
- HBufC* newParams = aParams.AllocL();
- delete iParams;
- iParams = newParams;
- }
-
-TAiScutSettingType CAiScutSettingsAppList::CAppListItem::Type() const
-{
- return iType;
-}
-
-void CAiScutSettingsAppList::CAppListItem::SetType( TAiScutSettingType aType )
-{
- iType = aType;
-}
-// End of File.