bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialogquerywidget.cpp
author hgs
Fri, 23 Jul 2010 15:57:13 +0300
changeset 47 9e2a905b887f
parent 42 b72428996822
child 57 5ebadcda06cb
permissions -rw-r--r--
201029_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     1
/*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
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 "btdevicedialogquerywidget.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>
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    25
#include "btdevicedialogpluginerrors.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    26
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    27
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    28
    class Constructor
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    29
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    30
BtDeviceDialogQueryWidget::BtDeviceDialogQueryWidget(
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    31
        HbMessageBox::MessageBoxType type, const QVariantMap &parameters)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    32
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    33
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    34
    // set properties
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    35
    mLastError = NoError;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    36
    mShowEventReceived = false;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    37
    mMessageBox = new HbMessageBox(type);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    38
    resetProperties();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    39
    constructQueryDialog(parameters);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    40
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    41
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    42
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    43
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    44
    Set parameters, implementation of interface
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    45
    Invoked when HbDeviceDialog::update calls.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    46
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    47
bool BtDeviceDialogQueryWidget::setDeviceDialogParameters(
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    48
    const QVariantMap &parameters)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    49
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    50
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    51
    mLastError = NoError;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    52
    processParam(parameters);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    53
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    54
    return true;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    55
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    56
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    57
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    58
    Get error, implementation of interface
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    59
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    60
int BtDeviceDialogQueryWidget::deviceDialogError() const
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    61
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    62
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    63
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    64
    return mLastError;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    65
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    66
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    67
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    68
    Close notification, implementation of interface
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    69
 */ 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    70
void BtDeviceDialogQueryWidget::closeDeviceDialog(bool byClient)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    71
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    72
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    73
    Q_UNUSED(byClient);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    74
    // Closed by client or internally by server -> no action to be transmitted.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    75
    mSendAction = false;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    76
    mMessageBox->close();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    77
    // If show event has been received, close is signalled from hide event. If not,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    78
    // hide event does not come and close is signalled from here.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    79
    if (!mShowEventReceived) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    80
        emit deviceDialogClosed();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    81
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    82
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    83
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    84
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    85
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    86
    Return display widget, implementation of interface
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    87
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    88
HbDialog *BtDeviceDialogQueryWidget::deviceDialogWidget() const
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    89
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    90
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    91
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    92
    return mMessageBox;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    93
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    94
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    95
QObject *BtDeviceDialogQueryWidget::signalSender() const
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    96
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    97
    return const_cast<BtDeviceDialogQueryWidget*>(this);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    98
}        
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    99
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   100
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   101
    Construct display widget
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   102
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   103
bool BtDeviceDialogQueryWidget::constructQueryDialog(const QVariantMap &parameters)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   104
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   105
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   106
    // analyze the parameters to compose the properties of the message box widget 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   107
    processParam(parameters);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   108
 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   109
    connect(mMessageBox, SIGNAL(finished(HbAction*)), this, SLOT(messageBoxClosed(HbAction*)));
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   110
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   111
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   112
    return true;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   113
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   114
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   115
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   116
    Take parameter values and generate relevant property of this widget
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   117
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   118
void BtDeviceDialogQueryWidget::processParam(const QVariantMap &parameters)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   119
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   120
    TRACE_ENTRY
42
hgs
parents: 29
diff changeset
   121
    QString keyStr, prompt,title;
hgs
parents: 29
diff changeset
   122
    QVariant name,param,addval;
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   123
    keyStr.setNum( TBluetoothDialogParams::EResource );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   124
    // Validate if the resource item exists.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   125
    QVariantMap::const_iterator i = parameters.constFind( keyStr );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   126
    // item of ResourceId is not found, can't continue.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   127
    if ( i == parameters.constEnd() ) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   128
        mLastError = UnknownDeviceDialogError;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   129
        return;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   130
    }
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   131
42
hgs
parents: 29
diff changeset
   132
    param = parameters.value( keyStr );
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   133
    int key = param.toInt();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   134
    switch ( key ) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   135
        case ENumericComparison:
42
hgs
parents: 29
diff changeset
   136
            prompt = QString( hbTrId( "txt_bt_info_does_this_code_match_the_code_on_1" ) );
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   137
            break;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   138
        case EPasskeyDisplay:
42
hgs
parents: 29
diff changeset
   139
            prompt = QString( hbTrId( "txt_bt_info_enter_the_following_code_to_the_1" ) );
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   140
            break;
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   141
        case EPairingFailureRetry:
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   142
            prompt = QString( hbTrId( "txt_bt_info_pairing_with_1_failed_either_the_pas" ) );
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   143
            break;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   144
        case EPairingFailureOk:
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   145
            prompt = QString( hbTrId( "txt_bt_info_unable_to_pair_with_1" ) );
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   146
            break;
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   147
        // Input dialogs
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   148
        case EPinInput:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   149
        case EObexPasskeyInput:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   150
        // NULL parameters
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   151
        case ENoResource:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   152
        case EUnusedResource:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   153
        default:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   154
            mLastError = ParameterError;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   155
            break;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   156
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   157
    int repls = prompt.count( QString( "%" ) );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   158
    if ( repls > 0 ) {
42
hgs
parents: 29
diff changeset
   159
        name = parameters.value( QString::number( TBluetoothDeviceDialog::EDeviceName ) );
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   160
        prompt = prompt.arg( name.toString() );
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   161
        if(key != EPairingFailureRetry && key != EPairingFailureOk)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   162
            {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   163
            addval = parameters.value( QString::number( TBluetoothDeviceDialog::EAdditionalDesc ) );
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   164
            // todo: Formating the prompt need to be discussed with UI designer
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   165
            // The passcode could be displayed on a separate row if it the label did support
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   166
            // the use of newline escape character.
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   167
            prompt.append(tr("\n\n")); // insert 2 newlines for clarity
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   168
            prompt.append(addval.toString());
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   169
            if(key == EPasskeyDisplay)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   170
                {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   171
                prompt.append("\n");   
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   172
                }
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   173
            }
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   174
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   175
    // set property value to this dialog widget
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   176
    if(key != EPairingFailureRetry && key != EPairingFailureOk)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   177
        {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   178
        title = QString(hbTrId("txt_bt_title_pairing_with_1"));
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   179
        title = title.arg(name.toString());
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   180
        mMessageBox->setHeadingWidget(new HbLabel(title));
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   181
        mMessageBox->setIconVisible(false);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   182
        mMessageBox->setStandardButtons( HbMessageBox::Yes | HbMessageBox::No);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   183
        }
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   184
    else
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   185
        {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   186
        if(key == EPairingFailureRetry)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   187
            {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   188
            mMessageBox->setStandardButtons( HbMessageBox::Retry | HbMessageBox::Cancel);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   189
            }
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   190
        else
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   191
            {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   192
            mMessageBox->setStandardButtons( HbMessageBox::Ok);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   193
            }
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   194
        }
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   195
    mMessageBox->setText( prompt );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   196
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   197
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   198
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   199
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   200
    Reset properties to default values
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   201
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   202
void BtDeviceDialogQueryWidget::resetProperties()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   203
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   204
    TRACE_ENTRY
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   205
    // set to default values
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   206
    mMessageBox->setModal(true);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   207
    mMessageBox->setTimeout(HbDialog::NoTimeout);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   208
    mMessageBox->setDismissPolicy(HbDialog::NoDismiss);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   209
    mSendAction = true;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   210
    TRACE_EXIT
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   211
    return;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   212
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   213
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   214
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   215
void BtDeviceDialogQueryWidget::messageBoxClosed(HbAction* action)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   216
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   217
    QVariantMap data;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   218
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   219
    HbMessageBox *dlg=static_cast<HbMessageBox*>(sender());
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   220
    if(dlg->actions().first() == action) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   221
        //Yes
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   222
        data.insert( QString( "result" ), QVariant(true));
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   223
    } 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   224
    else if(dlg->actions().at(1) == action) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   225
        //No
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   226
        data.insert( QString( "result" ), QVariant(false));
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   227
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   228
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   229
    emit deviceDialogData(data);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   230
    emit deviceDialogClosed();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   231
    mSendAction = false;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   232
}