diff -r 594d59766373 -r 7d48bed6ce0c satui/satapp/src/satappserverdispatcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/satui/satapp/src/satappserverdispatcher.cpp Tue Aug 31 15:45:17 2010 +0300 @@ -0,0 +1,586 @@ +/* +* Copyright (c) 2010 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: Receives UI commands from SAT server and converts to QT +* +*/ + +// qt +#include +#include +#include +// symbian +#include +#include + +// sat +#include +#include "satappserverdispatcher.h" +#include "satappaction.h" +#include "satappconstant.h" + + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::SatAppServerDispatcher +// ---------------------------------------------------------------------------- +// +SatAppServerDispatcher::SatAppServerDispatcher(QObject *parent) : + QObject(parent) +{ + qDebug("SATAPP: SatAppServerDispatcher::SatAppServerDispatcher"); + QT_TRAP_THROWING(ConnectSatSessionL()); +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::~SatAppServerDispatcher +// ---------------------------------------------------------------------------- +// +SatAppServerDispatcher::~SatAppServerDispatcher() +{ + qDebug("SATAPP: SatAppServerDispatcher::~SatAppServerDispatcher"); + DisconnectSatSession(); +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::menuSelection +// ---------------------------------------------------------------------------- +// +void SatAppServerDispatcher::menuSelection(SatAppAction* action) +{ + qDebug("SATAPP: SatAppServerDispatcher::menuSelection >"); + if ( ESatSuccess == action->response() ) { + // user selected item from menu + int menuItem = action->value(KeySelection).toInt(); + int helpRequested = action->value(KeyHelpRequested).toBool(); + qDebug("SATAPP: SatAppServerDispatcher::MenuSelection item=%d", + menuItem); + iSat.Adapter()->MenuSelection(menuItem, helpRequested); + } else if (ESatSessionTerminatedByUser == action->response()) { + // session terminated while executing the menu action + qDebug("SATAPP: SatAppServerDispatcher::SessionTerminated"); + iSat.Adapter()->SessionTerminated(EEndKeyUsed); + } + delete action; + qDebug("SATAPP: SatAppServerDispatcher::menuSelection <"); +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::userCancelResponse +// ---------------------------------------------------------------------------- +// +void SatAppServerDispatcher::userCancelSession(SatAppAction* action) +{ + qDebug("SATAPP: SatAppServerDispatcher::userCancelSession"); + if (action && ESatBackwardModeRequestedByUser == action->response()){ + iSat.Adapter()->SessionTerminated(ESessionCancel); + } + delete action; + action = 0; +} + + +// **************************************************************************** +// * ************************************************************************ * +// * * SYMBIAN PART * * +// * ************************************************************************ * +// **************************************************************************** + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::ConnectSatSessionL +// ---------------------------------------------------------------------------- +// +void SatAppServerDispatcher::ConnectSatSessionL() +{ + qDebug("SATAPP: SatAppServerDispatcher::ConnectSatSessionL>"); + //Register to Server as subsession + //If Server is not up, this function call may take time + iSatSession.ConnectL(); + iSat.RegisterL(iSatSession, this); + if (!iSat.Adapter()) + User::Leave(KErrNotFound); + qDebug("SATAPP: SatAppServerDispatcher::ConnectSatSessionL<"); +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::DisconnectSatSession +// ---------------------------------------------------------------------------- +// +void SatAppServerDispatcher::DisconnectSatSession() +{ + qDebug("SATAPP: SatAppServerDispatcher::DisconnectSatSession>"); + iSat.Close(); + iSatSession.Close(); + qDebug("SATAPP: SatAppServerDispatcher::DisconnectSatSession<"); +} + +// ---------------------------------------------------------------------------- +// My own quick string -> descriptor conversion function :-) +// ---------------------------------------------------------------------------- +// +void s2d(const QString str, TDes& desc) +{ + desc.Copy(reinterpret_cast(str.utf16()), str.length()); +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::DisplayTextL +// ---------------------------------------------------------------------------- +// +TSatUiResponse SatAppServerDispatcher::DisplayTextL( const TDesC& aText, + const TDesC& aSimApplicationName, + const TSatIconId& aIconId, + TBool& aRequestedIconDisplayed, + const TBool aSustainedText, + const TTimeIntervalSeconds aDuration, + const TBool aWaitUserToClear ) +{ + qDebug("SATAPP: SatAppServerDispatcher::DisplayTextL >"); + Q_UNUSED(aIconId); + SatAppAction action(ESatDisplayTextAction); + // validate + if (aText.Length()== 0 || aText.Length()>RSat::KTextToDisplayMaxSize){ + qDebug("SATAPP: SatAppServerDispatcher::DisplayText no text"); + aRequestedIconDisplayed = EFalse; + return ESatFailure; + } + + QT_TRYCATCH_LEAVING( + // ensure state + emit stopShowWaitNote(); + + // call + action.set(KeyText,aText); + action.set(KeyApplicationName, aSimApplicationName); + action.set(KeySustainedText, aSustainedText); + action.set(KeyDuration, const_cast(aDuration)); + action.set(KeyWaitUserToClear, aWaitUserToClear); + + emit displayText(action); + action.waitUntilCompleted(); + ); + + // return + qDebug("SATAPP: SatAppServerDispatcher::DisplayTextL action.response() %x<", + action.response()); + return action.response(); +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::GetInkeyL +// ---------------------------------------------------------------------------- +// +TSatUiResponse SatAppServerDispatcher::GetInkeyL( + const TDesC& aText, + const TSatCharacterSet aCharacterSet, + TChar& aInput, + const TBool aHelpIsAvailable, + const TSatIconId& aIconId, + TBool& aRequestedIconDisplayed, + TUint& aDuration, + const TBool aImmediateDigitResponse ) +{ + Q_UNUSED(aHelpIsAvailable); + Q_UNUSED(aIconId); + + qDebug("SATAPP: SatAppServerDispatcher::GetInkeyL >"); + + // validate + aRequestedIconDisplayed = EFalse; + if (ESatYesNo == aCharacterSet && aText.Length() == 0) { + qDebug("SATAPP: CSatUiObserver::GetInkey return ESatFailure"); + return ESatFailure; + } + + SatAppAction action(ESatGetInkeyAction); + QT_TRYCATCH_LEAVING( + // ensure state + emit stopShowWaitNote(); + + // call + action.set(KeyText,aText); + action.set(KeyCharacterSet,(int)aCharacterSet); + action.set(KeyInKey,(int)aInput); + // convert from SAT time units(?) to milliseconds + action.set(KeyDuration,(int)aDuration*KSymbianTimeConvertQtTime); + action.set(KeyImmediate,(bool)aImmediateDigitResponse); + emit getInkey(action); + action.waitUntilCompleted(); + // convert from milliseconds to SAT time units(?) + aDuration = + action.value(KeyDuration).toInt()/KSymbianTimeConvertQtTime; + aInput = action.value(KeyInKey).toInt(); + ); + + // return + qDebug("SATAPP: SatAppServerDispatcher::GetInkeyL <"); + return action.response(); +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::GetInputL +// ---------------------------------------------------------------------------- +// +TSatUiResponse SatAppServerDispatcher::GetInputL( + const TDesC& aText, + const TSatCharacterSet aCharacterSet, + TDes& aInput, + const TInt aMinLength, + const TInt aMaxLength, + const TBool aHideInput, + const TBool aHelpIsAvailable, + const TSatIconId& aIconId, + TBool& aRequestedIconDisplayed ) +{ + Q_UNUSED(aHelpIsAvailable); + Q_UNUSED(aIconId); + qDebug("SATAPP: SatAppServerDispatcher::GetInputL >"); + + // validate + aRequestedIconDisplayed = EFalse; + if ((aCharacterSet == ESatCharSmsDefaultAlphabet || + aCharacterSet == ESatCharUcs2Alphabet) && + aHideInput) { + qDebug("SATAPP: SatAppServerDispatcher::GetInput return ESatFailure"); + return ESatFailure; + } + + SatAppAction action(ESatGetInputAction); + QT_TRYCATCH_LEAVING( + // ensure state + emit stopShowWaitNote(); + + // call + action.set(KeyText,aText); + action.set(KeyCharacterSet,(int)aCharacterSet); + action.set(KeyInputString,aInput); + action.set(KeyMinLength,aMinLength); + action.set(KeyMaxLength,aMaxLength); + action.set(KeyHideInput,(bool)aHideInput); + emit getInput(action); + action.waitUntilCompleted(); + s2d(action.value(KeyInputString).toString(), aInput); + ) + + // return + qDebug("SATAPP: SatAppServerDispatcher::GetInputL <"); + return action.response(); +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::SetUpMenuL +// ---------------------------------------------------------------------------- +// +TSatUiResponse SatAppServerDispatcher::SetUpMenuL( + const TDesC& aText, + const MDesCArray& aMenuItems, + const CArrayFixFlat* aMenuItemNextActions, + const TBool aHelpIsAvailable, + const TSatIconId& aIconId, + const CArrayFixFlat* aMenuIcons, + const enum TSatIconQualifier aIconListQualifier, + const enum TSatSelectionPreference aSelectionPreference ) +{ + Q_UNUSED(aMenuItemNextActions); + Q_UNUSED(aHelpIsAvailable); + Q_UNUSED(aIconId); + Q_UNUSED(aMenuIcons); + Q_UNUSED(aIconListQualifier); + Q_UNUSED(aSelectionPreference); + qDebug("SATAPP: SatAppServerDispatcher::SetUpMenuL >"); + + QT_TRYCATCH_LEAVING( + + // validate + if (!aMenuItems.MdcaCount()) { + emit clearScreen(); + QCoreApplication::instance()->quit(); + return ESatSuccess; + } + + // ensure state + emit stopShowWaitNote(); + + // call + SatAppAction* action = new SatAppAction(ESatSetUpMenuAction, this); + action->set(KeyText,aText); + action->set(KeyMenu,aMenuItems); + // connect for asynchronous menu selection + connect( + action,SIGNAL(actionCompleted(SatAppAction*)), + this,SLOT(menuSelection(SatAppAction*))); + + emit setUpMenu(*action); + ) + + // return + qDebug("SATAPP: SatAppServerDispatcher::SetUpMenuL <"); + return ESatSuccess; +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::SelectItemL +// ---------------------------------------------------------------------------- +// +TSatUiResponse SatAppServerDispatcher::SelectItemL( + const TDesC& aText, + const MDesCArray& aMenuItems, + const CArrayFixFlat* aMenuItemNextActions, + const TInt aDefaultItem, + TUint8& aSelection, + const TBool aHelpIsAvailable, + const TSatIconId& aIconId, + const CArrayFixFlat* aMenuIcons, + const enum TSatIconQualifier aIconListQualifier, + TBool& aRequestedIconDisplayed, + const enum TSatSelectionPreference aSelectionPreference ) +{ + Q_UNUSED(aMenuItemNextActions); + Q_UNUSED(aHelpIsAvailable); + Q_UNUSED(aIconId); + Q_UNUSED(aMenuIcons); + Q_UNUSED(aIconListQualifier); + Q_UNUSED(aRequestedIconDisplayed); + Q_UNUSED(aSelectionPreference); + TSatUiResponse resp(ESatFailure); + SatAppAction action(ESatSelectItemAction); + qDebug("SATAPP: SatAppServerDispatcher::SelectItemL >"); + + QT_TRYCATCH_LEAVING( + // ensure state + emit stopShowWaitNote(); + + // call + action.set(KeyText,aText); + action.set(KeyMenu,aMenuItems); + action.set(KeyDefault,aDefaultItem); + emit selectItem(action); + action.waitUntilCompleted(); + resp = action.response(); + if ( ESatSuccess == resp ) { + aSelection = static_cast( + action.value(KeySelection).toInt()); + } + ) + + // return + qDebug("SATAPP: SatAppServerDispatcher::SelectItemL <"); + return resp; +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::PlayTone +// ---------------------------------------------------------------------------- +// +TSatUiResponse SatAppServerDispatcher::PlayTone( + const TDesC& aText, + const TSatTone aTone, + const TTimeIntervalMicroSeconds aDuration, + const TSatIconId& aIconId, + TBool& aRequestedIconDisplayed ) +{ + Q_UNUSED(aIconId); + aRequestedIconDisplayed = EFalse; + TSatUiResponse resp(ESatSuccess); + qDebug("SATAPP: SatAppServerDispatcher::PlayTone >"); + SatAppAction action(ESatPlayToneAction); + int err(KErrNone); + QT_TRYCATCH_ERROR( + err, + // ensure state + emit stopShowWaitNote(); + + // call + action.set(KeyText,aText); + action.set(KeyToneId,aTone); + action.set(KeyDuration, const_cast(aDuration)); + emit playTone(action); + action.waitUntilCompleted(); + resp = action.response(); + ) + + // return + qDebug("SATAPP: SatAppServerDispatcher::PlayTone err = %d<", err); + return resp; +} + + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::ConfirmCommand +// ---------------------------------------------------------------------------- +// +void SatAppServerDispatcher::ConfirmCommand( + const TSatSQueryCommand aCommandId, + const TSatAlphaIdStatus aAlphaIdStatus, + const TDesC& aText, + const TDesC& aAdditionalText, + TBool& aActionAccepted, + const TSatIconId& aIconId, + TBool& aRequestedIconDisplayed, + TBool& aTerminatedByUser ) +{ + qDebug("SATAPP: SatAppServerDispatcher::ConfirmCommand >"); + Q_UNUSED(aIconId); + aRequestedIconDisplayed = EFalse; + aTerminatedByUser = EFalse; + //ConfirmAction + SatAppAction action(ESatConfirmAction); + qDebug("SATAPP: SatAppServerDispatcher::ConfirmCommand"); + int err(KErrNone); + QT_TRYCATCH_ERROR( + err, + emit stopShowWaitNote(); + + action.set(KeyQueryCommandId, aCommandId); + action.set(KeyAlphaIdStatus, aAlphaIdStatus); + action.set(KeyText, aText); + action.set(KeyAdditionalText, aAdditionalText); + action.set(KeyActionAccepted, aActionAccepted); + + emit confirmCommand(action); + action.waitUntilCompleted(); + if (ESatSuccess == action.response() ) { + aActionAccepted = ETrue; + } + ) + qDebug("SATAPP: SatAppServerDispatcher::ConfirmCommand err = %d <", err); +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::Notification +// ---------------------------------------------------------------------------- +// +TSatUiResponse SatAppServerDispatcher::Notification( + const TSatSNotifyCommand aCommandId, + const TSatAlphaIdStatus aAlphaIdStatus, + const TDesC& aText, + const TSatIconId& aIconId, + TBool& aRequestedIconDisplayed, + const TSatControlResult aControlResult ) +{ + Q_UNUSED(aIconId); + Q_UNUSED(aRequestedIconDisplayed); + qDebug("SATAPP: SatAppServerDispatcher::Notification command id=%d", + aCommandId); + + TSatUiResponse res(ESatFailure); + int err(KErrNone); + switch (aCommandId) + { + // With cancel + case ESatSSendDataNotify: // fall through + case ESatSReceiveDataNotify: // fall through + case ESatSSendDtmfNotify: // fall through + { + QT_TRYCATCH_ERROR( + err, + emit stopShowWaitNote(); + SatAppAction *action = new SatAppAction(ESatNotifyAction, this); + action->set(KeyText, aText); + action->set(KeyCommandId, aCommandId); + action->set(KeyAlphaIdStatus, aAlphaIdStatus); + action->set(KeyControlResult, aControlResult); + // connect for asynchronous menu selection + connect( + action,SIGNAL(actionCompleted(SatAppAction*)), + this,SLOT(userCancelSession(SatAppAction*))); + emit notification(*action); + res = ESatSuccess; + ) + break; + } + // Without cancel + case ESatSMoSmControlNotify: // fall through + case ESatSCallControlNotify: // fall through + case ESatSSendUssdNotify: // fall through + case ESatSSendSsNotify: // fall through + case ESatSSendSmsNotify: // fall through + case ESatSCloseChannelNotify: // fall through + { + QT_TRYCATCH_ERROR( + err, + emit stopShowWaitNote(); + SatAppAction a(ESatNotifyAction); + a.set(KeyText, aText); + a.set(KeyCommandId, aCommandId); + a.set(KeyAlphaIdStatus, aAlphaIdStatus); + a.set(KeyControlResult, aControlResult); + emit notification(a); + res = ESatSuccess; + ) + break; + } + default: + { + break; + } + } + qDebug("SATAPP: SatAppServerDispatcher::Notification < ret=%d", err); + return res; +} + +// ---------------------------------------------------------------------------- +// SatAppServerDispatcher::EventNotification +// ---------------------------------------------------------------------------- +// +void SatAppServerDispatcher::EventNotification( + const TSatSEvent aEventId, + const TSatSEventStatus aEventStatus, + const TInt aError ) +{ + qDebug( "SATAPP: SatAppServerDispatcher::EventNotification aEventId %d", + aEventId ); + Q_UNUSED(aEventStatus); + Q_UNUSED(aError); + int err(KErrNone); + + QT_TRYCATCH_ERROR( err, + switch ( aEventId ) + { + case ESatSSmEndEvent: + case ESatSsEndEvent: + case ESatSDtmfEndEvent: + { + emit stopShowWaitNote(); + break; + } + case ESatSClearScreenEvent: + { + qDebug("SATAPP: ClearScreen event"); + emit clearScreen(); + break; + } + case ESatSsErrorEvent: + { + qDebug("SATAPP: Notifying Ss error" ); + // If error occurred (and Alpha ID provided), notify user + emit showSsErrorNote(); + break; + } + case ESatSCloseSatUiAppEvent: + { + qDebug(" Close UI event" ); + emit clearScreen(); + QCoreApplication::instance()->quit(); + break; + } + default: + { + qDebug("SATAPP: Unknown event occured: %i", aEventId); + break; + } + } + ) // end QT_TRYCATCH_ERROR + qDebug("SATAPP: SatAppServerDispatcher::EventNotification err = %d<", err); +} + +//End of file