bluetoothengine/btui/btuidelegate/btdelegatepower.cpp
author hgs
Mon, 17 May 2010 11:06:23 +0300
changeset 31 a0ea99b6fa53
parent 29 48ae3789ce00
child 40 997690c3397a
child 42 b72428996822
permissions -rw-r--r--
201019_1
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) 2010 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: 
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 "btdelegatepower.h"
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    20
#include <btsettingmodel.h>
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    21
#include <btdevicemodel.h>
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    22
#include <hbmessagebox.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    23
#include <bluetoothuitrace.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    24
#include <hbaction.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    25
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    26
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    27
    Constructor.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    28
 */
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    29
BtDelegatePower::BtDelegatePower(            
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    30
        BtSettingModel* settingModel, 
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    31
        BtDeviceModel* deviceModel, QObject *parent )
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    32
    : BtAbstractDelegate( settingModel, deviceModel, parent )
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    33
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    34
    TRAP_IGNORE( mBtengSettings = CBTEngSettings::NewL(this) );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    35
    Q_CHECK_PTR( mBtengSettings );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    36
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    37
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    38
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    39
/*!
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    40
    Destructor.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    41
 */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    42
BtDelegatePower::~BtDelegatePower()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    43
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    44
    delete mBtengSettings;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    45
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    46
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    47
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    48
void BtDelegatePower::exec( const QVariant &params )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    49
{   
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    50
    if (params.toInt()){//turn power OFF
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    51
        
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    52
        switchBTOff();     
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    53
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    54
    else{//turn power ON  
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    55
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    56
        switchBTOn();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    57
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    58
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    59
       
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    60
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    61
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    62
void BtDelegatePower::switchBTOn()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    63
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    64
    int err = 0;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    65
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    66
    //check if device is in OFFLINE mode first
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    67
    TBTEnabledInOfflineMode enabledInOffline = EBTDisabledInOfflineMode;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    68
    if (checkOfflineMode(enabledInOffline)){
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    69
    //if (1){
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    70
        if (enabledInOffline){
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    71
        //if (1){
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    72
            // BT is allowed to be enabled in offline mode, show query.
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    73
            HbMessageBox::question( tr("Turn Bluetooth on in offline mode?"),this, 
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    74
				SLOT(btOnQuestionClose(HbAction*)));
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    75
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    76
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    77
        else{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    78
            //if BT is not allowed to be enabled in offline mode, show message and complete
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    79
            HbMessageBox::warning(tr("Bluetooth not allowed to be turned on in offline mode"),this, 
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
    80
				SLOT(btOnWarningClose()));
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    81
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    82
        
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    83
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    84
    else{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    85
        //set BT on if the not in offline mode
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    86
        err = mBtengSettings->SetPowerState((TBTPowerStateValue)(1));
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    87
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    88
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    89
    if ( err ) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    90
        QString info = "Unable to switch BT power ON" ;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    91
        emit commandCompleted(KErrGeneral);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    92
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    93
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    94
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    95
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    96
void BtDelegatePower::btOnQuestionClose(HbAction *action)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    97
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    98
    HbMessageBox *dlg = static_cast<HbMessageBox*>(sender());
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    99
    int err = 0;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   100
    if(action == dlg->actions().at(0)) 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   101
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   102
        //user chooses "yes" for using BT in offline 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   103
        err = mBtengSettings->SetPowerState((TBTPowerStateValue)(1));
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   104
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   105
    else
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   106
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   107
        //if user chooses "NO", emits the signal
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   108
        emit commandCompleted(KErrNone);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   109
           
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   110
    }     
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   111
    if ( err ) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   112
        QString info = "Unable to switch BT power ON" ;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   113
        emit commandCompleted(KErrGeneral);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   114
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   115
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   116
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   117
void BtDelegatePower::btOnWarningClose()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   118
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   119
    emit commandCompleted(KErrNone);        
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   120
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   121
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   122
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   123
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   124
void BtDelegatePower::switchBTOff()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   125
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   126
    int err = 0;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   127
    err = mBtengSettings->SetPowerState((TBTPowerStateValue)(0));
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   128
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   129
    if ( err ) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   130
        QString info = "Unable to switch BT power OFF" ;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   131
        emit commandCompleted(KErrGeneral);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   132
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   133
        
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   134
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   135
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   136
void BtDelegatePower::btOffDialogClose(HbAction *action)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   137
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   138
    Q_UNUSED( action );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   139
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   140
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   141
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   142
void BtDelegatePower::PowerStateChanged( TBTPowerStateValue aState )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   143
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   144
    Q_UNUSED( aState );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   145
    emit commandCompleted(KErrNone);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   146
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   147
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   148
//Method derived from MBTEngSettingsObserver, no need to be implemented here
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   149
void BtDelegatePower::VisibilityModeChanged( TBTVisibilityMode aState )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   150
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   151
    Q_UNUSED( aState );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   152
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   153
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   154
bool BtDelegatePower::checkOfflineMode(TBTEnabledInOfflineMode& aEnabledInOffline)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   155
{
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   156
    TCoreAppUIsNetworkConnectionAllowed offline = ECoreAppUIsNetworkConnectionAllowed;  
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   157
   
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   158
    mBtengSettings->GetOfflineModeSettings(offline, aEnabledInOffline);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   159
    return (!offline);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   160
    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   161
}
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   162
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   163
/*if (params.toBool()) {  // turning power on
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   164
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   165
        // find out if local device is in offline mode
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   166
        QModelIndex idx = mModel->index( Btuim::OfflineMode, 0);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   167
        QVariant var = mModel->data( idx, Qt::EditRole );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   168
        bool offlineMode = var.toBool();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   169
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   170
        // find out whether BT is allowed in offline mode
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   171
        var = mModel->data( idx, Btuim::SettingAdditionalParam );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   172
        bool activationAllowed = var.toBool();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   173
        
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   174
        if (offlineMode) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   175
            // in offline mode
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   176
            if (activationAllowed) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   177
                HbMessageBox *messageBox = new HbMessageBox(); 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   178
                // BT is allowed to be enabled in offline mode, show query.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   179
                if (messageBox->question( tr("Activate Bluetooth in offline mode?") )) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   180
                    ret = mModel->setData(index, value, role);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   181
                }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   182
                delete messageBox;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   183
            }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   184
            else {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   185
                // BT is not allowed to be activated in offline mode, show note.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   186
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   187
                HbDialog *mShowOnlyPopup = new HbDialog();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   188
                mShowOnlyPopup->setAttribute(Qt::WA_DeleteOnClose);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   189
                mShowOnlyPopup->setModal(false);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   190
                mShowOnlyPopup->setBackgroundFaded(false);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   191
                mShowOnlyPopup->setDismissPolicy( HbPopup::NoDismiss  );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   192
                mShowOnlyPopup->setTimeout( 5000 );  // 5 sec
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   193
                HbLabel *label = new HbLabel( tr("Bluetooth is not allowed in offline mode") );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   194
                label->setAlignment(Qt::AlignCenter);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   195
                QSizeF popupSize(350,100);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   196
                mShowOnlyPopup->setMinimumSize(popupSize);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   197
                mShowOnlyPopup->setContentWidget(label);                
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   198
                mShowOnlyPopup->show();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   199
            }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   200
        } 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   201
        else {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   202
            // not in offline mode, forward the request to model. 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   203
            ret =  mModel->setData(index, value, role);    
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   204
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   205
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   206
    else {   // turning power off
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   207
        // first check if existing connections
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   208
        QModelIndex idx = mModel->index(Btuim::BtConnections, 0);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   209
        QVariant var = mModel->data(idx, Qt::EditRole);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   210
        bool ok;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   211
        TInt connNum = var.toInt( &ok );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   212
        BTUI_ASSERT_X( ok, "BtUiSettingsDelegate::setData", "wrong qvariant type");
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   213
        if (connNum) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   214
            // there is at least 1 active connection, show query.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   215
            HbMessageBox *messageBox = new HbMessageBox(); 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   216
            if (messageBox->question( tr("Turn Bluetooth off even though connections exist?") )) {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   217
                ret = mModel->setData(index, value, role);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   218
            }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   219
            delete messageBox;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   220
        } 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   221
        else {  
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   222
            // no active connections exist, forward the request to model.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   223
            ret =  mModel->setData(index, value, role);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   224
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   225
    }*/
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   226
    //emit commandCompleted(err);
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   227
        //return ret;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   228
    //return false;