diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstatereferenceplugins/custcmd/src/cmdpublishstartupmode.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/systemstatereferenceplugins/custcmd/src/cmdpublishstartupmode.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,229 @@ +// Copyright (c) 2008-2009 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: +// + +/** + @file + @internalComponent + @released +*/ + +#include +#include +#include +#include + +#include "cmdpublishstartupmode.h" +#include "ssmuiproviderdll.h" +#include "ssmdebug.h" + + +/** + * Constructs and returns a new custom command, leaving on errors. + * + * @internalComponent + */ +CCustomCmdPublishStartupMode* CCustomCmdPublishStartupMode::NewL() + { + CCustomCmdPublishStartupMode* self = new (ELeave) CCustomCmdPublishStartupMode(); + return self; + } + +CCustomCmdPublishStartupMode::CCustomCmdPublishStartupMode() +: CActive(EPriorityNormal) + { + CActiveScheduler::Add(this); + } + +CCustomCmdPublishStartupMode::~CCustomCmdPublishStartupMode() + { + Deque(); + //Cancel the request if there is any + iSsmMiscAdaptation.Cancel(); + + //Close RSsmMiscAdaptation + iSsmMiscAdaptation.Close(); + + delete iRepository; + } + +/** + * Initializes this custom command. This consists of connecting to the required servers. + * + * @internalComponent + */ +TInt CCustomCmdPublishStartupMode::Initialize(CSsmCustomCommandEnv* /*aCmdEnv*/) + { + iHiddenResetPckg = EFalse; + iState = EInitial; + // Connect to the central repository + TRAPD(err, iRepository = CRepository::NewL(KCRUidStartup)); + if(KErrNone != err && KErrNotFound != err) + { + return err; + } + + //Connect to RSsmMiscAdaptation + err = iSsmMiscAdaptation.Connect(); + return err; + } + +/** + * Destory this object and any resources allocated to it. + * + * @internalComponent + */ +void CCustomCmdPublishStartupMode::Close() + { + } + +void CCustomCmdPublishStartupMode::Release() + { + delete this; + } + +/** + * Issues the required requests to publish the startup mode. Completes aStatus upon completion. + * + * @internalComponent + */ +void CCustomCmdPublishStartupMode::Execute(const TDesC8& /*aParams*/, TRequestStatus& aStatus) + { + // Remember our completion value + iReturnStatus = &aStatus; + aStatus = KRequestPending; + iState = ERequestingStartupMode; + + // Issue request + iSsmMiscAdaptation.GetGlobalStartupMode(iStartupModePckg, iStatus); + SetActive(); + } + +void CCustomCmdPublishStartupMode::PublishStartupModeL() + { + if(iStatus != KErrNone) + { + DEBUGPRINT2A("Request GetGlobalStartupMode returned error: %d", iStatus.Int()); + User::Leave(iStatus.Int()); + } + + // Publish startup mode + TInt err = RProperty::Set(CSsmUiSpecific::StartupPSUid(), KPSGlobalStartupMode, iStartupModePckg()); + if(KErrNone != err) + { + DEBUGPRINT2A("Publishing startup mode returned error: %d", err); + User::Leave(err); + } + + iState = ERequestingHiddenReset; + iSsmMiscAdaptation.GetHiddenReset(iHiddenResetPckg, iStatus); + SetActive(); + } + +void CCustomCmdPublishStartupMode::PublishHiddenResetL() + { + DEBUGPRINT2A("Request GetHiddenReset completed with errorcode: %d", iStatus.Int()); + // Only if we've been able to open the repository it is published from. + if(iRepository != NULL) + { + // Retrieve startup reason + TInt startupReason = 0; + TInt err = iRepository->Get(KStartupReason, startupReason); + + if (KErrNone == err) + { + if ( startupReason == ENormalStartup && + iStatus.Int() == KErrNone && // Hidden reset query was successful + iHiddenResetPckg()) + { + DEBUGPRINT1A("Hidden reset detected"); + startupReason = EUnknownReset; + } + + // Publish startup reason + err = RProperty::Set(CSsmUiSpecific::StartupPSUid(), KPSStartupReason, startupReason); + if(KErrNone != err) + { + DEBUGPRINT2A("Publishing startup reason returned error: %d", err); + User::Leave(err); + } + DEBUGPRINT2A( "Startup reason set to %d", startupReason); + } + } + + // Command complete, signal back + User::RequestComplete(iReturnStatus, KErrNone); + // Reset iReturnStatus so it is not completed again in future + iReturnStatus = NULL; + } + +/** + * From CActive::RunL() + * + * @internalComponent + */ +void CCustomCmdPublishStartupMode::RunL() + { + switch(iState) + { + case ERequestingStartupMode: + { + PublishStartupModeL(); + break; + } + case ERequestingHiddenReset: + { + PublishHiddenResetL(); + break; + } + default: + { + User::Leave(KErrArgument); + } + } + } + +/** + * From CActive::DoCancel() + * + * @internalComponent + */ +void CCustomCmdPublishStartupMode::DoCancel() + { + //Cancel the request if there is any + iSsmMiscAdaptation.Cancel(); + } + +/** + * From CActive::RunError() + * + * @internalComponent + */ +TInt CCustomCmdPublishStartupMode::RunError(TInt aError) + { + DEBUGPRINT2A("CCustomCmdPublishStartupMode::RunError received error: %d", aError); + User::RequestComplete(iReturnStatus, aError); + // We've returned the error via the status so return KErrNone here. + return KErrNone; + } + +void CCustomCmdPublishStartupMode::ExecuteCancel() + { + Cancel(); + if(iReturnStatus != NULL) + { + User::RequestComplete(iReturnStatus, KErrCancel); + iReturnStatus = NULL; + } + }