--- a/idlefw/plugins/shortcutplugin/src/caiscutplugin.cpp Mon Mar 08 21:43:47 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,467 +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: Plug-in main class
-*
-*/
-
-
-#include <ecom/implementationproxy.h>
-#include <centralrepository.h>
-
-#include <aicontentobserver.h>
-#include <aipluginsettings.h>
-
-#include <platform/mw/aiscutuids.hrh>
-#include "aiscutpluginprivatecrkeys.h"
-#include "aiscutdefs.h"
-#include "aiscutcontentmodel.h"
-#include "caiscutplugin.h"
-#include "caiscutengine.h"
-#include "aiscutfactory.h"
-#include "caiscutshortcut.h"
-
-#include "debug.h"
-
-const TImplementationProxy KImplementationTable[] =
-{
- IMPLEMENTATION_PROXY_ENTRY(KImplUidScutPlugin, CAiScutPlugin::NewL)
-};
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CAiScutPlugin::CAiScutPlugin()
-{
-}
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CAiScutPlugin::ConstructL()
-{
- // Initialize the info which the fw uses to identify the plug-in.
- // Fill in only the uid at this point, the fw will send this back with the
- // name filled in later through SetPropertyL().
- iInfo.iUid.iUid = AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_SCUTPLUGIN;
-
- iContent = AiUtility::CreateContentItemArrayIteratorL(KAiScutContent);
- iResources = AiUtility::CreateContentItemArrayIteratorL(KAiScutResources);
- iEvents = AiUtility::CreateContentItemArrayIteratorL(KAiScutEvents);
-
- CRepository* repository = NULL;
- TRAP_IGNORE(repository = CRepository::NewL(KCRUidShortcutItems));
- // No leaving code here since 'repository' is not in cleanup stack.
- if (repository)
- {
- // A theme might not contain any publishable shortcuts at all, only
- // locked ones. To take this into account we must always delete old
- // theme-default settings to make sure the engine won't create any
- // unwanted shortcut objects. Any errors that might happen during
- // deletion are ignored to make sure the plug-in is kept alive.
- TUint32 errorKey;
-
- repository->Delete(KScutCenRepKeyThemeDefault, KScutCenRepKeyMask, errorKey);
- }
- delete repository;
-}
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CAiScutPlugin* CAiScutPlugin::NewL()
-{
- CAiScutPlugin* self = new (ELeave) CAiScutPlugin;
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
-}
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CAiScutPlugin::~CAiScutPlugin()
-{
- TRAP_IGNORE( DeleteDefaultShortcutsL() );
- Release(iContent);
- Release(iResources);
- Release(iEvents);
- delete iEngine;
- iObservers.Close();
-}
-
-// ---------------------------------------------------------------------------
-// Publishes the given shortcut.
-// ---------------------------------------------------------------------------
-//
-void CAiScutPlugin::PublishShortcutsL(RAiShortcutArray& aShortcuts)
-{
- TInt err = KErrNone;
- TInt observers = iObservers.Count();
- TInt shortcuts = aShortcuts.Count();
-
- for (TInt i = 0; i < observers; ++i)
- {
- MAiContentObserver* observer = iObservers[i];
- TBool transactionStarted = EFalse;
- TInt transactionId = reinterpret_cast<TInt>(this);
- err = observer->StartTransaction(transactionId);
-
- if (err != KErrNotSupported)
- {
- // The observer does not support transactions, check for real errors.
- User::LeaveIfError(err);
- transactionStarted = ETrue;
- }
- err = KErrAlreadyExists;
- for (TInt j = 0; j < shortcuts; j++)
- {
- CAiScutShortcut* shortcut = aShortcuts[j];
-
- if (shortcut->NeedsToBePublished())
- {
- shortcut->Publish(*this, *observer);
- err = KErrNone;
- }
- }
-
- if ( transactionStarted && err == KErrNone )
- {
- User::LeaveIfError(observer->Commit(transactionId));
- }
- else if ( transactionStarted )
- {
- User::LeaveIfError(observer->CancelTransaction(transactionId));
- }
- }
-}
-
-// ---------------------------------------------------------------------------
-// Is plug-in suspended or not.
-// ---------------------------------------------------------------------------
-//
-TBool CAiScutPlugin::IsAlive() const
-{
- return iAlive;
-}
-
-// ---------------------------------------------------------------------------
-// Resume reason
-// ---------------------------------------------------------------------------
-//
-TAiTransitionReason CAiScutPlugin::ResumeReason() const
- {
- return iResumeReason;
- }
-
-// ---------------------------------------------------------------------------
-// From class CAiContentPublisher.
-// Resumes the plug-in.
-// ---------------------------------------------------------------------------
-//
-void CAiScutPlugin::Resume(TAiTransitionReason aReason)
-{
- TRAP_IGNORE(DoResumeL(aReason));
-}
-
-// ---------------------------------------------------------------------------
-// Resumes the plug-in.
-// ---------------------------------------------------------------------------
-//
-void CAiScutPlugin::DoResumeL(TAiTransitionReason aReason)
-{
- __PRINT( __DBG_FORMAT( "XAI: CAiScutPlugin::Resume reason %d alive = %d"), aReason, iAlive);
- iResumeReason = aReason;
- // Reload the engine in case general theme changed or
- // the engine has been suspended.
- if (aReason == EAiGeneralThemeChanged || !iAlive)
- {
- // if general theme changed, free engine so that is will be
- // loaded again because shortcut icons must be re-created.
- FreeEngine();
- }
-
- if (!iEngine)
- {
- iEngine = AiScutFactory::CreateAiScutEngineL(*this);
- }
-
- iEngine->ResumeL( (iAlive == EFalse) ||
- (
- aReason != EAiBacklightOn &&
- aReason != EAiBacklightOff &&
- aReason != EAiIdleBackground &&
- aReason != EAiIdleForeground
- ),
- aReason
- );
-
- iAlive = ETrue;
-}
-
-// ---------------------------------------------------------------------------
-// From class CAiContentPublisher.
-// Suspends the plug-in.
-// ---------------------------------------------------------------------------
-//
-void CAiScutPlugin::Suspend(TAiTransitionReason aReason)
-{
- __PRINT( __DBG_FORMAT( "XAI: CAiScutPlugin::Suspend reason %d"), aReason);
-
- if (iEngine)
- {
- iEngine->Suspend();
- }
-
- iAlive = EFalse;
-}
-
-// ---------------------------------------------------------------------------
-// From class CAiContentPublisher.
-// Frees the plug-in engine.
-// ---------------------------------------------------------------------------
-//
-void CAiScutPlugin::Stop(TAiTransitionReason aReason)
-{
- __PRINT( __DBG_FORMAT( "XAI: CAiScutPlugin::Stop reason %d"), aReason);
-
- if ( aReason == EAiBackupRestoreStarted )
- {
- Suspend( aReason );
- }
- else
- {
- FreeEngine();
- }
-}
-// ---------------------------------------------------------------------------
-// From class CAiContentPublisher.
-// Adds the content observer / subscriber to plug-in.
-// ---------------------------------------------------------------------------
-//
-void CAiScutPlugin::SubscribeL(MAiContentObserver& aObserver)
-{
- iObservers.AppendL(&aObserver);
-}
-
-void CAiScutPlugin::DeleteDefaultShortcutsL()
- {
- // Ignore any errors that might occur when deleting
- // the default keys
- TUint32 errorKey;
- CRepository* cr = CRepository::NewL(KCRUidShortcutItems);
- cr->Delete(KScutCenRepKeyThemeDefault, KScutCenRepKeyMask, errorKey);
- delete cr;
- }
-
-// ---------------------------------------------------------------------------
-// From class CAiContentPublisher.
-// Configures the plug-in.
-// ---------------------------------------------------------------------------
-//
-void CAiScutPlugin::ConfigureL(RAiSettingsItemArray& aSettings)
-{
- CRepository* repository = NULL;
-
- TRAPD(err, repository = CRepository::NewL(KCRUidShortcutItems));
-
- if (err == KErrNotFound)
- {
- // CenRep file is missing from the image, this is a serious error.
- User::Leave(err);
- }
-
- // Write settings if repository was successfully opened. All other errors
- // are ignored to ensure that the plug-in is up and running, even if
- // crippled.
-
- // No leaving code here since 'repository' is not in cleanup stack.
- if (repository)
- {
- repository->StartTransaction(CRepository::EConcurrentReadWriteTransaction);
-
- // A theme might not contain any publishable shortcuts at all, only
- // locked ones. To take this into account we must always delete old
- // theme-default settings to make sure the engine won't create any
- // unwanted shortcut objects. Any errors that might happen during
- // deletion are ignored to make sure the plug-in is kept alive.
- TUint32 errorKey;
-
- repository->Delete(KScutCenRepKeyThemeDefault, KScutCenRepKeyMask, errorKey);
-
- __PRINTS( "XAI: CAiScutPlugin::ConfigureL");
-
- TInt count = aSettings.Count();
- if (count > 0)
- {
- // Write new shortcut definitions.
- for (TInt i = 0; i < count; ++i)
- {
- MAiPluginSettings* settings = aSettings[ i ];
-
- if( settings->AiPluginItemType() == EAiPluginSettingsItem )
- {
- MAiPluginSettingsItem& item = settings->AiPluginSettingsItem();
- TUint32 key = item.Key(); // implicit cast from TInt32 to TUint32.
-
- __PRINT( __DBG_FORMAT( "XAI: %d. key = 0x%x"), i+1, key);
-
- // Add the bit that indicates this is a default shortcut setting.
- key |= KScutFlagBitThemeDefault;
-
- // Ignore possible error and keep going.
- repository->Create(key, item.Value());
- }
- }
- }
-
- TUint32 info = 0;
- repository->CommitTransaction(info);
-
- delete repository;
- repository = NULL;
-
- if (iEngine)
- {
- iEngine->CreateShortcutsL();
- iEngine->ResumeL( ETrue, EAiGeneralThemeChanged );
- }
- }
-
- // We don't need to store the settings so clear the array.
- aSettings.ResetAndDestroy();
-}
-
-// ---------------------------------------------------------------------------
-// From class CAiContentPublisher.
-// Returns the extension interface.
-// ---------------------------------------------------------------------------
-//
-TAny* CAiScutPlugin::Extension(TUid aUid)
-{
- if (aUid == KExtensionUidProperty)
- {
- return static_cast<MAiPropertyExtension*>(this);
- }
- else if (aUid == KExtensionUidEventHandler)
- {
- return static_cast<MAiEventHandlerExtension*>(this);
- }
- else
- {
- return NULL;
- }
-}
-
-// ---------------------------------------------------------------------------
-// From class MAiEventHandlerExtension.
-// Handles an event sent by the AI framework.
-// ---------------------------------------------------------------------------
-//
-void CAiScutPlugin::HandleEvent(TInt aEvent, const TDesC& aParam)
-{
- if (iEngine)
- {
- // We have no way of reporting errors to framework so just ignore them.
- TRAP_IGNORE(iEngine->HandleAiEventL(aEvent, aParam));
- }
-}
-
-// ---------------------------------------------------------------------------
-// CAiScutPlugin::HasMenuItem
-//
-// ---------------------------------------------------------------------------
-//
-TBool CAiScutPlugin::HasMenuItem(const TDesC16& /*aMenuItem*/)
- {
- return EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// From class MAiPropertyExtension
-// Returns a plug-in property.
-// ---------------------------------------------------------------------------
-//
-TAny* CAiScutPlugin::GetPropertyL(TInt aProperty)
-{
- switch (aProperty)
- {
- case EAiPublisherInfo:
- return static_cast<TAiPublisherInfo*>(&iInfo);
-
- case EAiPublisherContent:
- return static_cast<MAiContentItemIterator*>(iContent);
-
- case EAiPublisherResources:
- return static_cast<MAiContentItemIterator*>(iResources);
-
- case EAiPublisherEvents:
- return static_cast<MAiContentItemIterator*>(iEvents);
-
- default:
- break;
- }
-
- return NULL;
-}
-
-// ---------------------------------------------------------------------------
-// From class MAiPropertyExtension
-// Sets a plug-in property to optimize the content model.
-// ---------------------------------------------------------------------------
-//
-void CAiScutPlugin::SetPropertyL(TInt aProperty, TAny* aValue)
- {
- if( aProperty == EAiPublisherInfo )
- {
- ASSERT( aValue );
-
- const TAiPublisherInfo* info(
- static_cast<const TAiPublisherInfo*>( aValue ) );
-
- iInfo = *info;
- }
- }
-
-// ---------------------------------------------------------------------------
-//
-//
-// ---------------------------------------------------------------------------
-//
-void CAiScutPlugin::FreeEngine()
-{
- delete iEngine;
- iEngine = NULL;
- iAlive = EFalse;
-}
-
-// ======== GLOBAL FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
-{
- aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy);
- return KImplementationTable;
-}
-
-// End of File.