bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialoginputwidget.cpp
author hgs
Tue, 19 Oct 2010 15:09:34 +0300
changeset 70 f5508c13dfe0
parent 57 5ebadcda06cb
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     1
/*
70
hgs
parents: 57
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     3
* All rights reserved.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     8
*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     9
* Initial Contributors:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    11
*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    12
* Contributors:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    13
*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    14
* Description:  BtDeviceDialogWidget class implementation.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    15
*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    16
*/
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    17
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    18
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    19
#include "btdevicedialoginputwidget.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    20
#include "btdevicedialogplugintrace.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    21
#include <bluetoothdevicedialogs.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    22
#include <hbaction.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    23
#include <hbdialog.h>
42
hgs
parents: 29
diff changeset
    24
#include <hblabel.h>
hgs
parents: 29
diff changeset
    25
#include <hbvalidator.h>
70
hgs
parents: 57
diff changeset
    26
#include <hbparameterlengthlimiter.h>
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    27
#include "btdevicedialogpluginerrors.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    28
42
hgs
parents: 29
diff changeset
    29
const int PASSCODE_MAX_LEN = 16; // from BT specs
hgs
parents: 29
diff changeset
    30
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    31
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    32
    class Constructor
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    33
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    34
BtDeviceDialogInputWidget::BtDeviceDialogInputWidget(
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    35
        const QVariantMap &parameters)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    36
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    37
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    38
    // set properties
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    39
    mLastError = NoError;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    40
    mShowEventReceived = false;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    41
    mInputDialog = new HbInputDialog();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    42
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    43
    resetProperties();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    44
    constructInputDialog(parameters);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    45
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    46
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    47
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    48
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    49
    Set parameters, implementation of interface
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    50
    Invoked when HbDeviceDialog::update calls.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    51
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    52
bool BtDeviceDialogInputWidget::setDeviceDialogParameters(
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    53
    const QVariantMap &parameters)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    54
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    55
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    56
    mLastError = NoError;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    57
    processParam(parameters);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    58
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    59
    return true;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    60
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    61
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    62
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    63
    Get error, implementation of interface
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    64
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    65
int BtDeviceDialogInputWidget::deviceDialogError() const
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    66
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    67
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    68
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    69
    return mLastError;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    70
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    71
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    72
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    73
    Close notification, implementation of interface
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    74
 */ 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    75
void BtDeviceDialogInputWidget::closeDeviceDialog(bool byClient)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    76
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    77
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    78
    Q_UNUSED(byClient);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    79
    // Closed by client or internally by server -> no action to be transmitted.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    80
    mSendAction = false;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    81
    mInputDialog->close();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    82
    // If show event has been received, close is signalled from hide event. If not,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    83
    // hide event does not come and close is signalled from here.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    84
    if (!mShowEventReceived) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    85
        emit deviceDialogClosed();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    86
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    87
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    88
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    89
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    90
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    91
    Return display widget, implementation of interface
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    92
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    93
HbDialog *BtDeviceDialogInputWidget::deviceDialogWidget() const
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    94
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    95
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    96
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    97
    return mInputDialog;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    98
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    99
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   100
QObject *BtDeviceDialogInputWidget::signalSender() const
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   101
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   102
    return const_cast<BtDeviceDialogInputWidget*>(this);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   103
}     
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   104
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   105
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   106
    Construct display widget
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   107
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   108
bool BtDeviceDialogInputWidget::constructInputDialog(const QVariantMap &parameters)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   109
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   110
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   111
    // analyze the parameters to compose the properties of the widget
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   112
    processParam(parameters);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   113
    connect(mInputDialog, SIGNAL(finished(HbAction*)), this, SLOT(inputClosed(HbAction*)));
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   114
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   115
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   116
    return true;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   117
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   118
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   119
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   120
    Take parameter values and generate relevant property of this widget
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   121
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   122
void BtDeviceDialogInputWidget::processParam(const QVariantMap &parameters)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   123
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   124
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   125
42
hgs
parents: 29
diff changeset
   126
    QString keyStr, prompt,title,regExp;
hgs
parents: 29
diff changeset
   127
    QVariant name;
70
hgs
parents: 57
diff changeset
   128
    bool minLenRequired = false;
hgs
parents: 57
diff changeset
   129
    
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   130
    keyStr.setNum( TBluetoothDialogParams::EResource );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   131
    // Validate if the resource item exists.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   132
    QVariantMap::const_iterator i = parameters.constFind( keyStr );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   133
    // item of ResourceId is not found, can't continue.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   134
    if ( i == parameters.constEnd() ) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   135
        mLastError = UnknownDeviceDialogError;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   136
        return;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   137
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   138
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   139
    QVariant param = parameters.value( keyStr );
70
hgs
parents: 57
diff changeset
   140
  
hgs
parents: 57
diff changeset
   141
    if(param.toInt() != EPinInput)
hgs
parents: 57
diff changeset
   142
        {
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   143
        mLastError = ParameterError;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   144
        return;
70
hgs
parents: 57
diff changeset
   145
        }
hgs
parents: 57
diff changeset
   146
    mInputDialog->setInputMode(HbInputDialog::RealInput);
hgs
parents: 57
diff changeset
   147
    name = parameters.value( QString::number( TBluetoothDeviceDialog::EDeviceName ) );
hgs
parents: 57
diff changeset
   148
    title = HbParameterLengthLimiter(hbTrId("txt_bt_title_pairing_with_1")).arg(name.toString());
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   149
    
70
hgs
parents: 57
diff changeset
   150
    // Set minimum input length requirements
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   151
    keyStr.setNum( TBluetoothDeviceDialog::EAdditionalDesc );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   152
    i = parameters.constFind( keyStr );
70
hgs
parents: 57
diff changeset
   153
    // Min Length required
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   154
    if ( i != parameters.constEnd() ) {
70
hgs
parents: 57
diff changeset
   155
        minLenRequired = true;
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   156
        param = parameters.value( keyStr );
70
hgs
parents: 57
diff changeset
   157
        regExp = "^\\d{%1,}$";
42
hgs
parents: 29
diff changeset
   158
        regExp.arg(param.toString());
hgs
parents: 29
diff changeset
   159
        HbValidator* validator = new HbValidator(mInputDialog->lineEdit());
hgs
parents: 29
diff changeset
   160
        validator->addField(
hgs
parents: 29
diff changeset
   161
                new QRegExpValidator(
hgs
parents: 29
diff changeset
   162
                        QRegExp(regExp, Qt::CaseInsensitive), validator ),"");
hgs
parents: 29
diff changeset
   163
        mInputDialog->setValidator(validator);
hgs
parents: 29
diff changeset
   164
    }else{
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   165
        // Minimum requirement is to have at least 1 digit
70
hgs
parents: 57
diff changeset
   166
        regExp = "^\\d{1,}$";
42
hgs
parents: 29
diff changeset
   167
        HbValidator* validator = new HbValidator(mInputDialog->lineEdit());
hgs
parents: 29
diff changeset
   168
        validator->addField(
hgs
parents: 29
diff changeset
   169
                new QRegExpValidator(
hgs
parents: 29
diff changeset
   170
                        QRegExp(regExp, Qt::CaseInsensitive), validator ),"");
hgs
parents: 29
diff changeset
   171
        mInputDialog->setValidator(validator);    
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   172
    }
70
hgs
parents: 57
diff changeset
   173
    if(minLenRequired)
hgs
parents: 57
diff changeset
   174
        {
hgs
parents: 57
diff changeset
   175
        // Todo : The string ID for the localization is not available yet
hgs
parents: 57
diff changeset
   176
        // for string : "Enter %1 digit passcode for device %2:"
hgs
parents: 57
diff changeset
   177
        // I'm using the "Enter the passcode for device %1" instead
hgs
parents: 57
diff changeset
   178
        prompt = HbParameterLengthLimiter(hbTrId("txt_bt_dialog_please_enter_the_passcode_for_1" )).arg(name.toString());
hgs
parents: 57
diff changeset
   179
        }
hgs
parents: 57
diff changeset
   180
    else
hgs
parents: 57
diff changeset
   181
        {
hgs
parents: 57
diff changeset
   182
        prompt = HbParameterLengthLimiter(hbTrId("txt_bt_dialog_please_enter_the_passcode_for_1" )).arg(name.toString());
hgs
parents: 57
diff changeset
   183
        }
42
hgs
parents: 29
diff changeset
   184
    mInputDialog->setHeadingWidget(new HbLabel(title));
hgs
parents: 29
diff changeset
   185
    mInputDialog->lineEdit(0)->setMaxLength(PASSCODE_MAX_LEN);
hgs
parents: 29
diff changeset
   186
    mInputDialog->lineEdit(0)->setText(tr("")); // clear the input field
hgs
parents: 29
diff changeset
   187
    mInputDialog->setPromptText(prompt);
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   188
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   189
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   190
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   191
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   192
    Reset properties to default values
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   193
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   194
void BtDeviceDialogInputWidget::resetProperties()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   195
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   196
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   197
    // set to default values
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   198
    mInputDialog->setModal(true);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   199
    mInputDialog->setTimeout(HbDialog::NoTimeout);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   200
    mInputDialog->setDismissPolicy(HbDialog::NoDismiss);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   201
    mSendAction = true;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   202
    // Todo: clean the Validator
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   203
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   204
    return;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   205
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   206
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   207
void BtDeviceDialogInputWidget::inputClosed(HbAction *action)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   208
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   209
    QVariantMap data;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   210
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   211
    HbInputDialog *dlg=static_cast<HbInputDialog*>(sender());
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   212
    if(dlg->actions().first() == action) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   213
        //Ok
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   214
        QVariant result( dlg->value().toString().toUtf8() );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   215
        data.insert( QString( "result" ), QVariant(true));
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   216
        data.insert( QString( "input" ), result );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   217
   } 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   218
    else if(dlg->actions().at(1) == action) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   219
        //Cancel
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   220
        data.insert( QString( "result" ), QVariant(false));
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   221
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   222
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   223
    emit deviceDialogData(data);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   224
    emit deviceDialogClosed();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   225
    mSendAction = false;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   226
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   227
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   228