diff -r bab96b7ed1a4 -r f39ed5e045e0 phoneapp/phoneuiqtviewadapter/src/phoneuiqtviewadapter.cpp --- a/phoneapp/phoneuiqtviewadapter/src/phoneuiqtviewadapter.cpp Tue Jun 15 14:14:38 2010 +0100 +++ b/phoneapp/phoneuiqtviewadapter/src/phoneuiqtviewadapter.cpp Thu Jul 22 16:33:21 2010 +0100 @@ -26,9 +26,9 @@ #include "tphonecmdparamcallheaderdata.h" #include "tphonecmdparamemergencycallheaderdata.h" #include "tphonecmdparamstring.h" +#include "tphonecmdparamkeycapture.h" #include "cphonepubsubproxy.h" #include "pevirtualengine.h" -#include "cphonepubsubproxy.h" #include "cphoneringingtonecontroller.h" #include "phoneresourceadapter.h" #include "phoneui.hrh" @@ -41,11 +41,14 @@ #include "phonemessagecontroller.h" #include "phoneindicatorcontroller.h" #include "qtphonelog.h" +#include "phonevisibilityhandler.h" +#include "phoneapplauncher.h" +#include "cphonecenrepproxy.h" + #include #include #include #include -#include #include #include #include @@ -54,25 +57,42 @@ #include #include #include -#include #include -#include #include #include +#include + //CONSTANTS static const int PHONE_CALL_NOT_FOUND = -1; +const TUid KCRUidTelTouchButtons = {0x2001B2E6}; +const TUint32 KTelIncallTouchButtons = 0x00000001; + + PhoneUIQtViewAdapter::PhoneUIQtViewAdapter (PhoneUIQtViewIF &view, QObject *parent) : - QObject (parent), m_view (view), m_idleUid(-1), - m_dialpadAboutToClose(false), m_homeScreenToForeground(false), - m_carModeEnabled(false) + QObject (parent), + m_view (view), + m_idleUid(-1), + m_bubbleWrapper(0), + m_ringingtonecontroller(0), + m_resourceAdapter(0), + m_noteController(0), + m_telephonyService(0), + m_uiCommandController(0), + m_messageController(0), + m_indicatorController(0), + m_dialpadAboutToClose(false), + m_homeScreenToForeground(false), + m_visibilityHandler(0), + m_appLauncher(0), + m_clearDialpadOnClose(true), + m_speakerAsDefaultButton(false) { m_bubbleWrapper = new PhoneBubbleWrapper(m_view.bubbleManager (), this); m_noteController = new PhoneNoteController(this); m_uiCommandController = new PhoneUiCommandController(view, this); - m_messageController = new PhoneMessageController(this); TRAPD( error, m_ringingtonecontroller = CPhoneRingingToneController::NewL () ); qt_symbian_throwIfError(error); @@ -85,20 +105,20 @@ m_telephonyService = new TelephonyService (this, this); m_indicatorController = new PhoneIndicatorController(this); + m_visibilityHandler = new PhoneVisibilityHandler(view, this); + m_appLauncher = new PhoneAppLauncher(this); + m_messageController = new PhoneMessageController(*m_appLauncher, this); + + int touchButton(-1); + if ( KErrNone == CPhoneCenRepProxy::Instance()->GetInt( + KCRUidTelTouchButtons, + KTelIncallTouchButtons, + touchButton ) ) { + if ( touchButton == 2 ) { + m_speakerAsDefaultButton = true; + } + } - // Define car mode pub sub key - int err = RProperty::Define( - KPSUidTelCarMode, - KTelCarMode, - RProperty::EInt, - KPhoneReadPolicy, - KPhoneWritePolicy); - - // Start listening to car mode changes - if(err == KErrNone) { - CPhonePubSubProxy::Instance()->NotifyChangeL(KPSUidTelCarMode, - KTelCarMode, this); - } } PhoneUIQtViewAdapter::~PhoneUIQtViewAdapter () @@ -149,17 +169,7 @@ case EPhoneViewSendToBackground: case EPhoneViewBringIdleToForeground: - if (m_homeScreenToForeground) { - RWsSession& wsSession = CEikonEnv::Static()->WsSession(); - - TApaTaskList taskList( wsSession ); - _LIT(KPhoneHsAppName,"hsapplication"); - TApaTask task = taskList.FindApp(KPhoneHsAppName); - task.BringToForeground(); - } else { - XQServiceUtil::toBackground(true); - } - + m_visibilityHandler->sendToBackground(m_homeScreenToForeground); m_homeScreenToForeground = false; break; case EPhoneViewRemoveAllCallHeaders: @@ -209,7 +219,10 @@ m_view.removeExpandAction(bubble); m_bubbleWrapper->removeCallHeader (aCallId); m_bubbleWrapper->bubbleManager().endChanges(); - m_indicatorController->clearActiveCallData(); + + if (!m_bubbleWrapper->bubbles().count()) { + m_indicatorController->clearActiveCallData(); + } } break; case EPhoneViewRemoveFromConference: @@ -286,8 +299,15 @@ m_noteController->showQuery(aCommandParam); break; case EPhoneViewOpenSoftRejectEditor: + m_visibilityHandler->hideDeviceDialogs(false); m_messageController->openSoftRejectMessageEditor(aCommandParam); break; + case EPhoneViewSetGlobalNotifiersDisabled: + hideDeviceDialogs(aCommandParam); + break; + case EPhoneViewLaunchLogs: + openLogs(aCommandParam); + break; default: break; } @@ -456,6 +476,58 @@ m_homeScreenToForeground = param->Boolean(); } break; + case EPhoneViewSetIhfFlag: { + TPhoneCmdParamBoolean *param = static_cast(aCommandParam); + + PhoneResourceAdapter::Instance()->buttonsController()-> + setButtonFlags(PhoneUIQtButtonsController::Ihf, + param->Boolean()); + } + break; + case EPhoneViewSetMuteFlag: { + TPhoneCmdParamBoolean *param = static_cast(aCommandParam); + + PhoneResourceAdapter::Instance()->buttonsController()-> + setButtonFlags(PhoneUIQtButtonsController::Mute, + param->Boolean()); + } + break; + case EPhoneViewSetBlueToothFlag: { + TPhoneCmdParamBoolean *param = static_cast(aCommandParam); + + PhoneResourceAdapter::Instance()->buttonsController()-> + setButtonFlags(PhoneUIQtButtonsController::Btaa, + param->Boolean()); + } + break; + case EPhoneViewSetBluetoothAvailableFlag: { + TPhoneCmdParamBoolean *param = static_cast(aCommandParam); + + PhoneResourceAdapter::Instance()->buttonsController()-> + setButtonFlags(PhoneUIQtButtonsController::BluetoothAvailable, + param->Boolean()); + } + break; + case EPhoneViewStartCapturingKey: { + TPhoneCmdParamKeyCapture *captureParam = + static_cast(aCommandParam); + Qt::Key qtKey; + + if (convertKey(captureParam->KeyCode(), qtKey)) { + m_view.captureKey(qtKey, true); + } + } + break; + case EPhoneViewStopCapturingKey: { + TPhoneCmdParamKeyCapture *captureParam = + static_cast(aCommandParam); + Qt::Key qtKey; + + if (convertKey(captureParam->KeyCode(), qtKey)) { + m_view.captureKey(qtKey, false); + } + } + break; default: break; } @@ -468,7 +540,11 @@ void PhoneUIQtViewAdapter::dialpadClosed() { + if (m_clearDialpadOnClose) { + m_view.clearDialpad(); + } m_dialpadAboutToClose = true; + m_clearDialpadOnClose = true; setCallMenu(); } @@ -559,7 +635,7 @@ if (1 == m_bubbleWrapper->bubbles().keys().count()) { setHidden(false); } - m_indicatorController->setActiveCallData( data.CLIText(), KNullDesC ); + m_indicatorController->setActiveCallData(); } void PhoneUIQtViewAdapter::createEmergencyCallHeader( @@ -578,6 +654,8 @@ m_bubbleWrapper->setCli (bubble, data.HeaderText ()); m_bubbleWrapper->setCiphering(bubble, data.CipheringIndicatorAllowed(), data.Ciphering()); m_bubbleWrapper->bubbleManager ().endChanges (); + + m_indicatorController->setActiveCallData(); } void PhoneUIQtViewAdapter::updateCallHeaderState ( @@ -617,6 +695,7 @@ m_bubbleWrapper->setDivert (bubble, data.Diverted ()); m_bubbleWrapper->bubbleManager ().endChanges (); } + m_indicatorController->setActiveCallData(); } @@ -674,13 +753,14 @@ bool emergencyCall = param.Boolean(); m_bubbleWrapper->bubbleManager ().startChanges (); - m_view.clearParticipantListActions(); QList bubbles = m_bubbleWrapper->bubbles().keys(); m_resourceAdapter->buttonsController()->setButtonFlags( PhoneUIQtButtonsController::DisableJoin, (5 <= m_bubbleWrapper->conferenceCallList().count())); + + setCommonButtonFlags(); for (int j = 0; j < bubbles.size(); ++j){ int callId = bubbles.at(j); @@ -706,7 +786,6 @@ } } - setParticipantListActions(); setExpandedConferenceCallHeader(); setBubbleSelectionFlag(); setMenu(); @@ -721,15 +800,25 @@ TPhoneCmdParamInteger &intParam = static_cast(*commandParam); - m_resourceAdapter->buttonsController()->setButtonFlags( - PhoneUIQtButtonsController::DisableJoin, - (5 <= m_bubbleWrapper->conferenceCallList().count())); - - QMap actions = m_resourceAdapter->convert (intParam.Integer ()); - QList values = actions.values(); - + setCommonButtonFlags(); + + int callId(-1); + int serviceId(-1); + if ( 0callStates().keys().size() ) { + int bubbleId = m_bubbleWrapper->bubbleManager().expandedBubble(); + callId = m_bubbleWrapper->callIdByBubbleId(bubbleId); + serviceId = m_bubbleWrapper->serviceIdByCallId(callId); + } + + QList actions = m_uiCommandController->toolBarActions( + intParam.Integer(), + m_bubbleWrapper->callStates(), + m_bubbleWrapper->serviceIds(), + serviceId, + callId ); + if (actions.count()) { - m_view.setToolbarActions(values); + m_view.setToolbarActions(actions); } qDeleteAll(actions); @@ -845,6 +934,8 @@ m_bubbleWrapper->setServiceId(callId,data.ServiceId()); m_bubbleWrapper->setCiphering(bubble, data.CipheringIndicatorAllowed(), data.Ciphering()); + + setParticipantListActions(); } void PhoneUIQtViewAdapter::conferenceCallId(int callId, TPhoneCommandParam *commandParam) @@ -863,8 +954,13 @@ { m_bubbleWrapper->bubbleManager().startChanges(); m_view.removeExpandAction(m_bubbleWrapper->bubbleId(KConferenceCallId)); + m_view.clearParticipantListActions(); m_bubbleWrapper->removeConferenceBubble(); m_bubbleWrapper->bubbleManager().endChanges(); + if (!m_bubbleWrapper->bubbles().count()) { + m_indicatorController->clearActiveCallData(); + } + } void PhoneUIQtViewAdapter::isConference(TPhoneCommandParam *commandParam) @@ -995,9 +1091,15 @@ void PhoneUIQtViewAdapter::bringToForeground() { - if(!m_carModeEnabled) { - m_view.bringToForeground(); - } + m_visibilityHandler->bringToForeground(); +} + +void PhoneUIQtViewAdapter::hideDeviceDialogs(TPhoneCommandParam *commandParam) +{ + Q_ASSERT (commandParam->ParamId () == TPhoneCommandParam::EPhoneParamIdBoolean); + TPhoneCmdParamBoolean* booleanParam = + static_cast(commandParam); + m_visibilityHandler->hideDeviceDialogs(booleanParam->Boolean()); } void PhoneUIQtViewAdapter::showGlobalNote( @@ -1017,6 +1119,7 @@ m_dialpadAboutToClose = false; m_view.showDialpad(); } else { + m_clearDialpadOnClose = false; m_view.hideDialpad(); } } @@ -1040,7 +1143,10 @@ m_bubbleWrapper->bubbleManager().endChanges(); } } - m_indicatorController->clearActiveCallData(); + if (!m_bubbleWrapper->bubbles().count()) { + m_indicatorController->clearActiveCallData(); + } + } void PhoneUIQtViewAdapter::getNumberFromDialpad( @@ -1131,20 +1237,6 @@ m_bubbleWrapper->bubbleManager().setBubbleSelectionDisabled(selectionFlag); } -void PhoneUIQtViewAdapter::HandlePropertyChangedL(const TUid& aCategory, - const TUint aKey, const TInt aValue) -{ - if((aCategory == KPSUidTelCarMode) && (aKey == KTelCarMode)) { - if(aValue == EPSCarModeOff) { - m_carModeEnabled = false; - } else if(aValue == EPSCarModeOn) { - m_carModeEnabled = true; - } else { - Q_ASSERT(false); - } - } -} - void PhoneUIQtViewAdapter::setHidden(bool hidden) { TRAP_IGNORE(SetHiddenL(hidden)); @@ -1170,12 +1262,59 @@ CAknSgcClient::AknSrv()->UpdateTaskList(); } } - void PhoneUIQtViewAdapter::openContacts() { - XQServiceRequest snd("com.nokia.services.phonebookappservices.Launch","launch()", false); - int retValue; - snd.send(retValue); + m_appLauncher->launchContacts(); +} + +void PhoneUIQtViewAdapter::openLogs(TPhoneCommandParam *commandParam) +{ + TPhoneCmdParamString* entryContent = + static_cast(commandParam); + + bool phoneVisible = m_visibilityHandler->phoneVisible(); + + m_homeScreenToForeground = false; + m_visibilityHandler->sendToBackground(m_homeScreenToForeground); + + if (phoneVisible) { + // Activate logs dialer only if telephone is on the top. + m_appLauncher->launchLogs( + LogsServices::ViewAll, + true, + QString::fromUtf16( + entryContent->String()->Ptr(), + entryContent->String()->Length())); + } +} + +void PhoneUIQtViewAdapter::setCommonButtonFlags() +{ + m_resourceAdapter->buttonsController()->setButtonFlags( + PhoneUIQtButtonsController::FullConference, + (5 <= m_bubbleWrapper->conferenceCallList().count())); + + m_resourceAdapter->buttonsController()->setButtonFlags( + PhoneUIQtButtonsController::IhfAsPushButton, + m_speakerAsDefaultButton); +} + +bool PhoneUIQtViewAdapter::convertKey( + TKeyCode symbianKey, Qt::Key &qtKey) +{ + bool ret = false; + + switch(symbianKey) { + case EKeyNo: { + qtKey = Qt::Key_No; + ret = true; + } + break; + default: + break; + } + + return ret; }