telutils/dialpad/src/dialpademergencycalleventfilter.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:45:17 +0300
branchRCL_3
changeset 19 7d48bed6ce0c
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* 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: 
*
*/
#include <QKeyEvent>
#include <hblineedit.h>
#include <hbstringutil.h>
#include "dialpademergencycalleventfilter.h"
#include "dialpad.h"
#include "qtphonesrvlog.h"

#ifdef Q_OS_SYMBIAN
#include <cphcltemergencycall.h>
#include <phclttypes.h>
#endif //Q_OS_SYMBIAN


DialpadEmergencyCallEventFilter::DialpadEmergencyCallEventFilter(Dialpad* dialpad, QObject* parent) :
    QObject(parent), mDialpad(dialpad), mEmergency(0)
{
    PHONE_TRACE;
#ifdef Q_OS_SYMBIAN
    TRAP_IGNORE(mEmergency = CPhCltEmergencyCall::NewL( NULL ));
#endif // Q_OS_SYMBIAN
    mDialpad->setCallButtonEnabled(false);
    connect(&mDialpad->editor(),SIGNAL(contentsChanged()),
            this,SLOT(editorTextChanged()));
}

DialpadEmergencyCallEventFilter::~DialpadEmergencyCallEventFilter()
{
}

bool DialpadEmergencyCallEventFilter::eventFilter(QObject *watched, QEvent *event)
{
    PHONE_TRACE;
    Q_UNUSED(watched)
    
    bool eventFiltered = false;
#ifdef Q_OS_SYMBIAN
       
    const int eventType = event->type();
       
    if (eventType == QEvent::KeyPress) {
        QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
        const int keyCode = keyEvent->key();
        if (keyCode == Qt::Key_Yes ||
             keyCode == Qt::Key_Enter) {           
            if (isEmergencyNumber(editorText())) {
                createCall(editorText());
                eventFiltered = true;
            }            
        }
    }
#else
    Q_UNUSED(event)
#endif // Q_OS_SYMBIAN
    
    return eventFiltered;
}

bool DialpadEmergencyCallEventFilter::isEmergencyNumber(QString string)
{
    PHONE_TRACE;
    bool ret = false;
#ifdef Q_OS_SYMBIAN
    if (KPhCltTelephoneNumberLength >= string.length()) {
        TBool emergency;
        TPhCltTelephoneNumber number(reinterpret_cast<const TUint16*>(string.utf16()));
        if (mEmergency && 
           KErrNone == mEmergency->IsEmergencyPhoneNumber(number, emergency)) {
            ret = emergency;
        }               
    }
#else
    Q_UNUSED(string)
#endif // Q_OS_SYMBIAN
    return ret;
}

QString DialpadEmergencyCallEventFilter::editorText()
{
    PHONE_TRACE;
    return HbStringUtil::convertDigitsTo(
                mDialpad->editor().text(), WesternDigit);
}

void DialpadEmergencyCallEventFilter::createCall(const QString &phoneNumber)
{
    PHONE_TRACE2("phoneNumber:", phoneNumber);
#ifdef Q_OS_SYMBIAN
    TPtrC number (static_cast<const TUint16*>(phoneNumber.utf16()),
            phoneNumber.length());
    TRAP_IGNORE(mEmergency->DialEmergencyCallL(number));
#endif // Q_OS_SYMBIAN
}

void DialpadEmergencyCallEventFilter::editorTextChanged()
{
    mDialpad->setCallButtonEnabled(isEmergencyNumber(editorText())); 
}