--- a/phoneapp/phoneuiview2/src/phoneuiqtview.cpp Tue Jun 15 14:14:38 2010 +0100
+++ b/phoneapp/phoneuiview2/src/phoneuiqtview.cpp Thu Jul 22 16:33:21 2010 +0100
@@ -27,6 +27,7 @@
#include <xqserviceutil.h>
#include <xqkeycapture.h>
#include <dialpad.h>
+#include <dialpadkeyhandler.h>
#include "phoneuiqtview.h"
#include "phoneaction.h"
@@ -35,33 +36,40 @@
PhoneUIQtView::PhoneUIQtView (HbMainWindow &window, QGraphicsItem *parent) :
HbView (parent),
m_window(window),
+ m_bubbleManager(0),
+ m_signalMapper(0),
m_volumeSlider (0),
m_expandSignalMapper(0),
m_participantListSignalMapper(0),
m_volumeCommandId(0),
+ m_backAction(0),
+ m_dialpad(0),
+ m_menuSignalMapper(0),
m_keyCapture(0),
- m_networkInfo(0)
+ m_networkInfo(0),
+ m_dialpadKeyHandler(0),
+ m_restrictedMode(false)
{
// Set network name
m_networkInfo = new QSystemNetworkInfo(this);
- QString networkName = m_networkInfo->networkName(QSystemNetworkInfo::GsmMode);
- connect(m_networkInfo, SIGNAL (networkNameChanged(QSystemNetworkInfo::NetworkMode,QString)), this, SLOT(networkNameChanged(QSystemNetworkInfo::NetworkMode, QString)));
+ QString networkName = m_networkInfo->networkName(QSystemNetworkInfo::WcdmaMode);
+ if(networkName.isEmpty()) {
+ networkName = m_networkInfo->networkName(QSystemNetworkInfo::GsmMode);
+ }
+ connect(m_networkInfo, SIGNAL (networkNameChanged(QSystemNetworkInfo::NetworkMode,QString)),
+ this, SLOT(networkNameChanged(QSystemNetworkInfo::NetworkMode, QString)));
setTitle(networkName);
// Capturing long press of end key
m_keyCapture = new XqKeyCapture();
- m_keyCapture->captureLongKey(Qt::Key_No);
- m_keyCapture->captureKey(Qt::Key_No);
// Dialpad
m_dialpad = new Dialpad(m_window);
m_dialpad->setCallButtonEnabled(false);
m_dialpad->setTapOutsideDismiss(true);
- connect(&m_dialpad->editor(),SIGNAL(contentsChanged()),
- SLOT(onEditorContentChanged()));
connect(m_dialpad,SIGNAL(aboutToClose()),this,
SLOT(dialpadClosed()));
-
+
// Call handling widget
m_bubbleManager = new BubbleManager (this);
setWidget(m_bubbleManager);
@@ -85,14 +93,14 @@
setNavigationAction(m_backAction);
createToolBarActions();
+
+ // Set restricted mode off, normal state
+ setRestrictedMode(false);
}
PhoneUIQtView::~PhoneUIQtView ()
{
-
- foreach (HbAction *action, m_toolbarActions ) {
- delete action;
- }
+ qDeleteAll(m_toolbarActions);
m_window.removeEventFilter(this);
delete m_volumeSlider;
delete m_dialpad;
@@ -165,9 +173,8 @@
foreach (HbAction *action, m_participantListActions ) {
m_participantListSignalMapper->removeMappings(action);
- delete action;
}
-
+ qDeleteAll(m_participantListActions);
m_participantListActions.clear();
delete m_participantListSignalMapper;
m_participantListSignalMapper = 0;
@@ -365,13 +372,17 @@
void PhoneUIQtView::clearAndHideDialpad()
{
m_dialpad->editor().setText(QString(""));
- hideDialpad();
+ m_dialpad->closeDialpad();
+}
+
+void PhoneUIQtView::clearDialpad()
+{
+ m_dialpad->editor().setText(QString(""));
}
void PhoneUIQtView::bringToForeground()
{
m_window.show();
- m_window.raise();
}
void PhoneUIQtView::setMenuActions(const QList<PhoneAction*>& actions)
@@ -399,6 +410,23 @@
return *menu();
}
+void PhoneUIQtView::captureKey(Qt::Key key, bool capture)
+{
+ if (capture) {
+ if (!m_keyCaptures.contains(key)) {
+ m_keyCapture->captureLongKey(key);
+ m_keyCapture->captureKey(key);
+ m_keyCaptures.append(key);
+ }
+ } else {
+ if (m_keyCaptures.contains(key)) {
+ m_keyCapture->cancelCaptureKey(key);
+ m_keyCapture->cancelCaptureLongKey(key);
+ m_keyCaptures.removeOne(key);
+ }
+ }
+}
+
void PhoneUIQtView::handleOrientationChange(Qt::Orientation orientation)
{
if (orientation==Qt::Horizontal) {
@@ -426,23 +454,34 @@
emit dialpadIsAboutToClose();
}
-bool PhoneUIQtView::eventFilter(QObject * /*watched*/, QEvent * event)
+bool PhoneUIQtView::eventFilter(QObject *watched, QEvent * event)
{
+ Q_UNUSED(watched);
PHONE_DEBUG2("PhoneUIQtView::eventFilter event type:", event->type());
+
+ // Allow send key only when there is callbutton enabled or no text in input field
+ bool sendKeyAllowed = m_dialpad->isCallButtonEnabled() ||
+ (m_dialpad->editor().text().length() == 0);
+
if(event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
PHONE_DEBUG2("PhoneUIQtView::eventFilter pressed key:", keyEvent->key());
PHONE_DEBUG2("PhoneUIQtView::eventFilter isAutoRepeat:", keyEvent->isAutoRepeat());
- emit keyPressed(keyEvent);
- keyEvent->accept();
+ if ( (keyEvent->key() != Qt::Key_Yes && keyEvent->key() != Qt::Key_Enter) ||
+ sendKeyAllowed) {
+ emit keyPressed(keyEvent);
+ keyEvent->accept();
+ }
return false;
} else if(event->type() == QEvent::KeyRelease) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
PHONE_DEBUG2("PhoneUIQtView::eventFilter released key:", keyEvent->key());
- emit keyReleased(keyEvent);
- keyEvent->accept();
-
+ if ( (keyEvent->key() != Qt::Key_Yes && keyEvent->key() != Qt::Key_Enter) ||
+ sendKeyAllowed) {
+ emit keyReleased(keyEvent);
+ keyEvent->accept();
+ }
return false;
} else if (event->type() == QEvent::WindowActivate){
PHONE_DEBUG("PhoneUIQtView::eventFilter WindowActivate");
@@ -459,10 +498,7 @@
void PhoneUIQtView::setDialpadPosition()
{
- // workaround to tsw error JMKN-83NAPU (fix coming in MCL wk14)
- // QRectF screenRect(m_window.layoutRect());
- QRectF screenRect = (m_window.orientation() == Qt::Horizontal) ?
- QRectF(0,0,640,360) : QRectF(0,0,360,640);
+ QRectF screenRect(m_window.layoutRect());
if (m_window.orientation() == Qt::Horizontal) {
// dialpad takes half of the screen
@@ -506,17 +542,41 @@
void PhoneUIQtView::setBackButtonVisible(bool visible)
{
- if (visible) {
- setNavigationAction(m_backAction);
- }
- else {
- setNavigationAction(0);
+ if (!m_restrictedMode) {
+ m_backAction->setEnabled(visible);
}
}
+void PhoneUIQtView::setRestrictedMode(bool restrictedMode)
+{
+ m_restrictedMode = restrictedMode;
+ m_backAction->setEnabled(!restrictedMode);
+ m_dialpad->setCallButtonEnabled(false);
+ m_dialpad->editor().setText(""); // Clead dialpad
+ if (m_restrictedMode) {
+ delete m_dialpadKeyHandler;
+ m_dialpadKeyHandler = 0;
+ m_dialpadKeyHandler = new DialpadKeyHandler(
+ m_dialpad, DialpadKeyHandler::EmergencyCall, this);
+ disconnect(&m_dialpad->editor(),SIGNAL(contentsChanged()),
+ this, SLOT(onEditorContentChanged())); // Let emergency handler do updating
+ } else {
+ delete m_dialpadKeyHandler;
+ m_dialpadKeyHandler = 0;
+ // enable key sequence handling during a call
+ m_dialpadKeyHandler = new DialpadKeyHandler(
+ m_dialpad, DialpadKeyHandler::KeySequence, this);
+ connect(&m_dialpad->editor(),SIGNAL(contentsChanged()),
+ SLOT(onEditorContentChanged())); // Update our self
+ }
+
+}
+
void PhoneUIQtView::networkNameChanged(QSystemNetworkInfo::NetworkMode mode, const QString &netName)
{
- if(mode == QSystemNetworkInfo::GsmMode) {
+ if((mode == QSystemNetworkInfo::GsmMode) ||
+ (mode == QSystemNetworkInfo::WcdmaMode)) {
setTitle(netName);
}
}
+