diff -r 63339781d179 -r 09b1ac925e3f cpsecplugins/devicelockplugin/src/cpdevicelockpluginview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpsecplugins/devicelockplugin/src/cpdevicelockpluginview.cpp Tue Aug 31 16:04:40 2010 +0300 @@ -0,0 +1,647 @@ +/* + * Copyright (c) 2009 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 "cpdevicelockpluginview.h" +#include +#include +#include +#include +#include +#include "cpremotelockdataformviewitem.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "debug.h" +#include +#include +#include <../../inc/cpsecplugins.h> + + + +/* + ***************************************************************** + * Name : CpDeviceLockPluginView() + * Parameters : QGraphicsItem* + * Return value: None + * Description : constructor + ***************************************************************** + */ +CpDeviceLockPluginView::CpDeviceLockPluginView(QGraphicsItem *parent /*= 0*/) +: CpBaseSettingView(0,parent) + { + QTranslator *translator = new QTranslator(); + QString lang = QLocale::system().name(); + QString path = "Z:/resource/qt/translations/"; + bool fine = translator->load("devicelocking_en.qm", path); + if (fine) + qApp->installTranslator(translator); + + QTranslator *commontranslator = new QTranslator(); + + fine = commontranslator->load("common_" + lang, path); + if (fine) + qApp->installTranslator(commontranslator); + + TSecUi::InitializeLibL(); + mUiSecuSettings = CSecuritySettings::NewL(); + mRemoteLockSettings = CRemoteLockSettings::NewL(); + iALPeriodRep = CRepository::NewL(KCRUidSecuritySettings); + + mRemoteLockSettingClicked = false; + mHack = 0; + HbDataForm *form = qobject_cast (widget()); + if (form) + { + QGraphicsLinearLayout *layout = new QGraphicsLinearLayout( + Qt::Vertical); + QList protoTypeList = form->itemPrototypes(); + protoTypeList.append(new CpRemoteLockDataFormViewItem()); + form->setItemPrototypes(protoTypeList); + form->setHeading(hbTrId("txt_cp_dblist_device_lock")); + + //DataFormModel + formModel = new HbDataFormModel(); + + //lockcode + HbDataFormModelItem + *lockCodeItem = + new HbDataFormModelItem( + static_cast (CpRemoteLockDataFormViewItem::CpCodeEditItem), + hbTrId("txt_devicelocking_dialog_lock_code")); + lockCodeItem->setContentWidgetData("echomode", HbLineEdit::Password); + lockCodeItem->setContentWidgetData("text", "1234"); + lockCodeItem->setContentWidgetData("readonly", true); + form->addConnection(lockCodeItem, SIGNAL(clicked()), this, + SLOT(onLockCodeClicked())); + formModel->appendDataFormItem(lockCodeItem); + + //Autolock period + mAutolockPeriodItem = new HbDataFormModelItem( + HbDataFormModelItem::ComboBoxItem, hbTrId( + "txt_devicelocking_formlabel_automatic_locking")); + TInt autoLockVal; + TInt err = iALPeriodRep->Get(KSettingsAutoLockTime, autoLockVal); + TInt index = GetAutoLockIndex(autoLockVal); + Dprint((_L("Current AL period value %d"),autoLockVal)); + RDEBUG("err", err); + RDEBUG("index", index); + RDEBUG("autoLockVal", autoLockVal); + //TODO: need to set autoLockVal in editor + QStringList autolockPeriodList; + autolockPeriodList << hbTrId("txt_devicelocking_button_off") + << hbTrId("txt_devicelocking_setlabel_val_when_keys_screen") + << hbTrId("txt_devicelocking_setlabel_val_5_minutes") + << hbTrId("txt_devicelocking_setlabel_val_30_minutes") + << hbTrId("txt_devicelocking_setlabel_val_60_minutes"); + mAutolockPeriodItem->setContentWidgetData(QString("items"), + autolockPeriodList); + mAutolockPeriodItem->setContentWidgetData(QString("currentIndex"), + index); + mAutolockPeriodItem->setContentWidgetData(QString("editable"), true); + QVariant themeComboData = mAutolockPeriodItem->contentWidgetData( + QString("currentIndex")); + mThemeComboPrevIndex = themeComboData.toInt(); + + form->addConnection(mAutolockPeriodItem, + SIGNAL(currentIndexChanged(int)), this, + SLOT(onAutoLockChanged(int))); + //form->addConnection(mAutolockPeriodItem,SIGNAL(editTextChanged(const QString&)), this, SLOT(onAutoTextChanged(const QString&))); + formModel->appendDataFormItem(mAutolockPeriodItem); + + //LockWhenSimChange + mLockWhenSimChangeItem = new HbDataFormModelItem( + HbDataFormModelItem::ToggleValueItem, hbTrId( + "txt_devicelocking_formlabel_lock_when_sim_changed")); + TBool lockVal = mUiSecuSettings->IsLockEnabledL( + RMobilePhone::ELockPhoneToICC); + Dprint((_L("LockWhenSimChange enabled %d"),lockVal)); + RDEBUG("lockVal", lockVal); + if (lockVal) + { + mLockWhenSimChangeItem->setContentWidgetData("text", hbTrId( + "txt_remotelocking_button_sim_changed_on")); + mLockWhenSimChangeItem->setContentWidgetData("additionalText", + hbTrId("txt_devicelocking_button_sim_changed_off")); + } + else + { + mLockWhenSimChangeItem->setContentWidgetData("text", hbTrId( + "txt_devicelocking_button_sim_changed_off")); + mLockWhenSimChangeItem->setContentWidgetData("additionalText", + hbTrId("txt_remotelocking_button_sim_changed_on")); + } + mLockWhenSimChangeItem->setContentWidgetData("readonly", true); + mPrevSIMLockData = mLockWhenSimChangeItem->contentWidgetData(QString( + "text")); + + connect(formModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), + this, SLOT(onSIMLockDataChanged(QModelIndex,QModelIndex))); + formModel->appendDataFormItem(mLockWhenSimChangeItem); + + //Remote Lock Setting + TBool enabled = true; + TBool val = mRemoteLockSettings->GetEnabled(enabled); + Dprint((_L("Remote Lock Setting enabled %d"),val)); + RDEBUG("val", val); + mDeviceRemoteLockItem = new HbDataFormModelItem( + HbDataFormModelItem::ToggleValueItem, hbTrId( + "txt_devicelocking_subhead_remote_locking")); + + if (val && enabled) + { + mDeviceRemoteLockItem->setContentWidgetData("text", hbTrId( + "txt_devicelocking_button_remote_on")); + mDeviceRemoteLockItem->setContentWidgetData("additionalText", + hbTrId("txt_devicelocking_button_remote_off")); + } + else + { + mDeviceRemoteLockItem->setContentWidgetData("text", hbTrId( + "txt_devicelocking_button_remote_off")); + mDeviceRemoteLockItem->setContentWidgetData("additionalText", + hbTrId("txt_devicelocking_button_remote_on")); + } + + mPrevRemLockData = mDeviceRemoteLockItem->contentWidgetData(QString( + "text")); + QString s = mPrevRemLockData.toString(); + connect(formModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), + this, SLOT(onRemoteLockDataChanged(QModelIndex,QModelIndex))); + formModel->appendDataFormItem(mDeviceRemoteLockItem); + + //Remote lock message + mRemoteLockMessageItem + = new HbDataFormModelItem( + static_cast (CpRemoteLockDataFormViewItem::CpCodeEditItem), + hbTrId("txt_devicelocking_formlabel_locking_message")); + mRemoteLockMessageItem->setContentWidgetData("echoMode", + HbLineEdit::Password); + mRemoteLockMessageItem->setContentWidgetData("text", "1111"); + mRemoteLockMessageItem->setContentWidgetData("readOnly", true); + + if (mPrevRemLockData.toString() == hbTrId( + "txt_devicelocking_button_remote_on")) + mRemoteLockMessageItem->setEnabled(true); + else + mRemoteLockMessageItem->setEnabled(false); + + form->addConnection(mRemoteLockMessageItem, SIGNAL(clicked()), this, + SLOT(onLockMessageClicked())); + formModel->appendDataFormItem(mRemoteLockMessageItem); + + form->setModel(formModel); + layout->addItem(form); + setLayout(layout); + } + } + + +/* + ***************************************************************** + * Name : ~CpDeviceLockPluginView() + * Parameters : None + * Return value: None + * Description : destructor + ***************************************************************** + */ +CpDeviceLockPluginView::~CpDeviceLockPluginView() + { + TSecUi::UnInitializeLib(); +} + + +/* + ***************************************************************** + * Name : onLockCodeClicked() + * Parameters : None + * Return value: None + * Description : Enables user to change the lock code + ***************************************************************** + */ +void CpDeviceLockPluginView::onLockCodeClicked() + { + Dprint(_L("CpDeviceLockPluginView::onLockCodeClicked()..Enter")); + RDEBUG("0", 0); + mUiSecuSettings->ChangeSecCodeL(); + Dprint(_L("CpDeviceLockPluginView::onLockCodeClicked()..Exit")); +} + + +/* + ************************************************************************ + * Name : onAutoLockChanged() + * Parameters : int + * Return value: None + * Description : handles the data when automatic lock timings are changed + ************************************************************************ + */ +void CpDeviceLockPluginView::onAutoLockChanged(int index) + { + Dprint(_L("CpDeviceLockPluginView::onAutoLockChanged()..Enter")); + RDEBUG("index", index); + if (index != mThemeComboPrevIndex) + { + //TODO: need to set user entered/selected value + TInt lockValue = GetValueAtIndex(index); + TInt newAutoLockVal = mUiSecuSettings->ChangeAutoLockPeriodL( + lockValue); + RDEBUG("newAutoLockVal", newAutoLockVal); + RDEBUG("lockValue", lockValue); + if (newAutoLockVal == lockValue) + { + Dprint(_L("onAutoLockChanged().AL setting success !!")); + RDEBUG("success", 1); + TInt err = iALPeriodRep->Set(KSettingsAutoLockTime, lockValue); + RDEBUG("err", err); + mThemeComboPrevIndex = index; + } + else + { + Dprint(_L("onAutoLockChanged()..Setting to previous value")); + RDEBUG("previous", 0); + QVariant data(mThemeComboPrevIndex); + mAutolockPeriodItem->setContentWidgetData( + QString("currentIndex"), data); + } + + } + Dprint(_L("CpDeviceLockPluginView::onAutoLockChanged()..Exit")); + RDEBUG("0", 0); +} + + +/* + ************************************************************************* + * Name : onLockMessageClicked() + * Parameters : None + * Return value: None + * Description : verifies security code and enables user to change the lock + * message + ************************************************************************** + */ +void CpDeviceLockPluginView::onLockMessageClicked() + { + Dprint(_L("CpDeviceLockPluginView::onLockMessageClicked()..Exit")); + RDEBUG("0", 0); + TBuf remoteLockCode; + TBool remoteLockStatus(EFalse); + TInt retVal = KErrNone; + TInt autoLockVal = -1; + retVal = mUiSecuSettings->ChangeRemoteLockStatusL(remoteLockStatus, + remoteLockCode, autoLockVal); + RDEBUG("retVal", retVal); + RDEBUG("autoLockVal", autoLockVal); + RDEBUG("remoteLockStatus", remoteLockStatus); + if (retVal) + { + Dprint(_L("CpDeviceLockPluginView::onLockMessageClicked()..ChangeRemoteLockStatusL sucess")); + RDEBUG("sucess", 1); + } + else + { + Dprint(_L("CpDeviceLockPluginView::onLockMessageClicked()..ChangeRemoteLockStatusL failed")); + RDEBUG("failed", 0); + } + Dprint(_L("CpDeviceLockPluginView::onLockMessageClicked()..Exit")); + RDEBUG("0", 0); +} + + +/* + ************************************************************************* + * Name : onAutoTextChanged() + * Parameters : QString& + * Return value: None + * Description : + ************************************************************************** + */ +/* + *This slot can be enabled once fix from obit team for this siganl is available + */ + +#if 0 +void CpDeviceLockPluginView::onAutoTextChanged(const QString& aText) + { + Dprint(_L("CpDeviceLockPluginView::onAutoTextChanged()..Enter")); + RDEBUG("0", 0); + //TBool ret = DisplaySecurityDialog(); + Dprint(_L("CpDeviceLockPluginView::onAutoTextChanged()..Exit")); + RDEBUG("0", 0); + } +#endif + +/* + ************************************************************************* + * Name : onRemoteLockDataChanged() + * Parameters : QModelIndex + * Return value: None + * Description : handles the data when remote lock settings is changed + ************************************************************************** + */ +void CpDeviceLockPluginView::onRemoteLockDataChanged(QModelIndex aStartIn,QModelIndex aEndIn) + { + Q_UNUSED(aEndIn); + Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..Enter")); + RDEBUG("0", 0); + HbDataFormModelItem *item = formModel->itemFromIndex(aStartIn); + + if ((item->type() == HbDataFormModelItem::ToggleValueItem) + && (item->data(HbDataFormModelItem::LabelRole).toString() + == hbTrId("txt_devicelocking_subhead_remote_locking"))) + { + RDEBUG("mHack", mHack); + //The following If-Else condition should be removed once orbit team fix the issue with datachanged() signal + /**************************************************************************************************************** + if ((mHack % 2) == 0) //need to capture second datachanged() signal , not first one. + { + mHack++; + return; + } + else + { + mHack++; + } + /****************************************************************************************************************/ + TInt autoLockVal; + TInt retVal = KErrNone; + TBuf remoteLockCode; + TBool remoteLockStatus(EFalse); + CRemoteLockSettings *remoteLockSetting = CRemoteLockSettings::NewL(); + TInt err = iALPeriodRep->Get(KSettingsAutoLockTime, autoLockVal); + RDEBUG("err", err); + RDEBUG("autoLockVal", autoLockVal); + RDEBUG("retVal", retVal); + QVariant remLockData = mDeviceRemoteLockItem->contentWidgetData( + QString("text")); + if (remLockData.toString() == hbTrId( + "txt_devicelocking_button_remote_on")) + { + remoteLockStatus = ETrue; + retVal = mUiSecuSettings->ChangeRemoteLockStatusL( + remoteLockStatus, remoteLockCode, autoLockVal); + } + else + { + remoteLockStatus = EFalse; + retVal = mUiSecuSettings->ChangeRemoteLockStatusL( + remoteLockStatus, remoteLockCode, autoLockVal); + } + RDEBUG("retVal", retVal); + if (retVal == KErrNone) + { + RDEBUG("remoteLockStatus", remoteLockStatus); + if (remoteLockStatus) + { + if (remoteLockSetting->SetEnabledL(remoteLockCode)) + { + Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..remoteLockSetting->SetEnabledL success")); + RDEBUG("success", 1); + mPrevRemLockData + = mDeviceRemoteLockItem->contentWidgetData( + QString("text")); + } + else + { + RollbackRemoteLockSettingState(); + Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..remoteLockSetting->SetEnabledL failed")); + RDEBUG("failed", 0); + } + } + else + { + if (mRemoteLockSettings->SetDisabled()) + { + Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..remoteLockSetting->SetDisabled success")); + RDEBUG("success", 1); + mPrevRemLockData + = mDeviceRemoteLockItem->contentWidgetData( + QString("text")); + } + else + { + RollbackRemoteLockSettingState(); + Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..remoteLockSetting->SetDisabled failed")); + RDEBUG("failed", 0); + } + } + } + else + { + Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..RollbackRemoteLockSettingState")); + RDEBUG("Rollback", 0); + RollbackRemoteLockSettingState(); + } + delete remoteLockSetting; + } + Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..Exit")); + RDEBUG("0", 0); +} + + +/* + ************************************************************************* + * Name : onSIMLockDataChanged() + * Parameters : QModelIndex + * Return value: None + * Description : handles the data afer Lock when SIM changed settings is + * changed + ************************************************************************** + */ +void CpDeviceLockPluginView::onSIMLockDataChanged(QModelIndex aStartIn, QModelIndex aEndIn) + { + Q_UNUSED(aEndIn); + HbDataFormModelItem *item = formModel->itemFromIndex(aStartIn); + + if ((item->type() == HbDataFormModelItem::ToggleValueItem) + && (item->data(HbDataFormModelItem::LabelRole).toString() + == hbTrId( + "txt_devicelocking_formlabel_lock_when_sim_changed"))) + { + RDEBUG("mHack", mHack); + //The following If-Else condition should be removed once orbit team fix the issue with datachanged() signal + /****************************************************************************************************************/ + if ((mHack % 2) == 0) //need to capture second datachanged() signal , not first one. + { + mHack++; + return; + } + else + { + mHack++; + } + /****************************************************************************************************************/ + + TBool ret = mUiSecuSettings->ChangeSimSecurityL(); + RDEBUG("ret", ret); + if (!ret) + { + /* + * disconnect to datachanged() signal as we are not interested in this signal + * generated as a part of setContentWidgetData() API call below + */ + disconnect(formModel, + SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, + SLOT(onSIMLockDataChanged(QModelIndex,QModelIndex))); + QVariant txt = mLockWhenSimChangeItem->contentWidgetData(QString( + "text")); + QVariant additionalText = + mLockWhenSimChangeItem->contentWidgetData(QString( + "additionalText")); + + mLockWhenSimChangeItem->setContentWidgetData(QString("text"), + additionalText); + mLockWhenSimChangeItem->setContentWidgetData(QString( + "additionalText"), txt); + /* + * Now connect back to datachanged() signal . + */ + connect(formModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), + this, SLOT(onSIMLockDataChanged(QModelIndex,QModelIndex))); + } + } +} + + +/* + ************************************************************************* + * Name : GetAutoLockIndex() + * Parameters : TInt + * Return value: TInt + * Description : returns corresponding index for the given autolock value + ************************************************************************** + */ +TInt CpDeviceLockPluginView::GetAutoLockIndex(TInt aValue) + { + TInt index = 0; + RDEBUG("ret", aValue); + switch (aValue) + { + case 0: + index = 0; + break; + case 65535: + index = 1; + break; + case 5: + index = 2; + break; + case 30: + index = 3; + break; + case 60: + index = 4; + break; + default: + break; + } + RDEBUG("index", index); + return index; + } + + +/* + ************************************************************************* + * Name : GetValueAtIndex() + * Parameters : TInt + * Return value: TInt + * Description : returns the corresponding autolock value for the given + * index. + ************************************************************************** + */ +TInt CpDeviceLockPluginView::GetValueAtIndex(TInt aIndex) + { + TInt value = 0; + RDEBUG("aIndex", aIndex); + switch (aIndex) + { + case 0: + value = 0; + break; + case 1: + value = 65535; + break; + case 2: + value = 5; + break; + case 3: + value = 30; + break; + case 4: + value = 60; + break; + default: + break; + } + RDEBUG("value", value); + return value; +} + + +/* + ************************************************************************* + * Name : RollbackRemoteLockSettingState() + * Parameters : None + * Return value: None + * Description : If Remote Lock Settings fails or user cancels the settings + * then this function resets to previous value. + ************************************************************************** + */ +void CpDeviceLockPluginView::RollbackRemoteLockSettingState() + { + RDEBUG("0", 0); + /* + * disconnect to datachanged() signal as we are not interested in this signal + * generated as a part of setContentWidgetData() API call below + */ + disconnect(formModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), + this, SLOT(onRemoteLockDataChanged(QModelIndex,QModelIndex))); + + QVariant txt = mDeviceRemoteLockItem->contentWidgetData(QString("text")); + QVariant additionaltxt = mDeviceRemoteLockItem->contentWidgetData( + QString("additionalText")); + mDeviceRemoteLockItem->setContentWidgetData(QString("text"), + additionaltxt); + mDeviceRemoteLockItem->setContentWidgetData(QString("additionalText"), + txt); + /* + * Now connect back to datachanged() signal . + */ + connect(formModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, + SLOT(onRemoteLockDataChanged(QModelIndex,QModelIndex))); + + if (mPrevRemLockData.toString() == hbTrId( + "txt_devicelocking_button_remote_on")) + mRemoteLockMessageItem->setEnabled(true); + else + mRemoteLockMessageItem->setEnabled(false); + RDEBUG("0", 0); + }