javamanager/javasettings_qt/src/javaapplicationsettingsview_p.cpp
changeset 61 bf7ee68962da
child 67 63b81d807542
equal deleted inserted replaced
48:e0d6e9bd3ca7 61:bf7ee68962da
       
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 #include <hbmessagebox.h>
       
    18 #include <hbdataformviewitem.h>
       
    19 #include <hbcombobox.h>
       
    20 #include <hbpushbutton.h>
       
    21 #include <hbdataform.h>
       
    22 #include <hbdataformmodel.h>
       
    23 #include <hbdataformmodelitem.h>
       
    24 #include <hblabel.h>
       
    25 #include <hbaction.h>
       
    26 #include <QApplication>
       
    27 #include <QTranslator>
       
    28 #include <QLibraryInfo>
       
    29 #include <qnetworkconfigmanager.h>
       
    30 #include <qnetworkconfiguration.h>
       
    31 #include <algorithm>
       
    32 
       
    33 #include "javaapplicationsettings.h"
       
    34 #include "javaapplicationsettingsview.h"
       
    35 #include "javaapplicationsettingsview_p.h"
       
    36 #include "connectionmanager.h"
       
    37 #include "javacommonutils.h"
       
    38 
       
    39 #include "securitystoragedatadefs.h"
       
    40 #include "javastoragenames.h"
       
    41 
       
    42 #include "logger.h"
       
    43 
       
    44 QTM_USE_NAMESPACE
       
    45 
       
    46 using namespace java::settings;
       
    47 using namespace java::storage;
       
    48 using namespace java::util;
       
    49 using namespace std;
       
    50 
       
    51 const wchar_t ON_SCREEN_KEYPAD_VALUE_NO[] = L"0";
       
    52 const wchar_t ON_SCREEN_KEYPAD_VALUE_GAMEACTIONS[] = L"1";
       
    53 const wchar_t ON_SCREEN_KEYPAD_VALUE_NAVIGATION[] = L"2";
       
    54 
       
    55 JavaApplicationSettingsViewPrivate::JavaApplicationSettingsViewPrivate(const QString& aJavaAppUid):
       
    56         mMainForm(0), mModel(0), mGeneralSettingsGroup(0), mSecuritySettingsGroup(0), mNetConnSettingsUi(0), mAsyncToSyncCallEventLoop(0), mSecWarningAccepted(false), mDefaultConnId(0)
       
    57 {
       
    58     // init common values
       
    59     init();
       
    60 
       
    61     // init the suite UID from the application UID
       
    62     readSuiteUid(aJavaAppUid);
       
    63     if (mSuiteUid.size() <= 0)
       
    64     {
       
    65         ELOG1(EJavaSettings, "No suite found with uid %S", aJavaAppUid.toStdWString().c_str());
       
    66         return;
       
    67     }
       
    68     ELOG1(EJavaSettings, "Initializing settings for suite %S", mSuiteUid.c_str());
       
    69     
       
    70     // init access point settings ui
       
    71     mNetConnSettingsUi = new CmApplSettingsUi(this);
       
    72     mAsyncToSyncCallEventLoop = new QEventLoop();
       
    73 
       
    74     // read all settings
       
    75     readAllSettings();
       
    76 
       
    77     // init form
       
    78     mMainForm = new HbDataForm();
       
    79     mMainForm->setHeading(QString::fromStdWString(readFromStorage(PACKAGE_NAME, L"", L"", APPLICATION_PACKAGE_TABLE)));
       
    80     mModel = new HbDataFormModel();
       
    81 
       
    82     // init settings
       
    83     mGeneralSettingsGroup = mModel->appendDataFormGroup(
       
    84         QString(hbTrId(ID_GENERAL_GROUP_TITLE)), mModel->invisibleRootItem());
       
    85     initSettings(mGeneralSettings, mGeneralSettingsGroup);
       
    86     // append the security settings only if there are any user settings
       
    87     if (mExtraSettings.size() > 0)
       
    88     {
       
    89         mSecuritySettingsGroup = mModel->appendDataFormGroup(
       
    90             QString(hbTrId(ID_SECURITY_GROUP_TITLE)), mModel->invisibleRootItem());
       
    91         initSettings(mSecuritySettings, mSecuritySettingsGroup);
       
    92 
       
    93         // if security warnings is user defined -> add the extra settings, expand
       
    94         if (mSecuritySettings[0].getCurrentValue() == 1)
       
    95         {
       
    96             securityWarningsChanged(TXT_USER_DEFINED);
       
    97         }
       
    98     }
       
    99 
       
   100     // link form and model
       
   101     mMainForm->setModel(mModel);
       
   102     mMainForm->setExpanded(mModel->indexFromItem(mGeneralSettingsGroup), true);
       
   103     if (mExtraSettings.size() > 0)
       
   104     {
       
   105         mMainForm->setExpanded(mModel->indexFromItem(mSecuritySettingsGroup), (mSecuritySettings[0].getCurrentValue() == 1));
       
   106     }
       
   107 }
       
   108 
       
   109 void JavaApplicationSettingsViewPrivate::init(JavaApplicationSettingsView* aPublicView)
       
   110 {
       
   111     mPublicView = aPublicView;
       
   112 
       
   113     if (mMainForm)
       
   114     {
       
   115         // do the connect for the main form
       
   116         mPublicView->connect(mMainForm, SIGNAL(itemShown(const QModelIndex)),
       
   117                              mPublicView, SLOT(_q_dataItemDisplayed(const QModelIndex)));
       
   118 
       
   119         // set the form as view's widget
       
   120         mPublicView->setWidget(mMainForm);
       
   121     }
       
   122     else
       
   123     {
       
   124         // no settings available
       
   125         HbLabel* label = new HbLabel(TXT_SETTINGS_NOT_AVAILABLE, mPublicView);
       
   126         label->setAlignment(Qt::AlignVCenter);
       
   127     }
       
   128 
       
   129     // set title
       
   130     mPublicView->setTitle(TXT_SETTINGS_TITLE);
       
   131 }
       
   132 
       
   133 JavaApplicationSettingsViewPrivate::~JavaApplicationSettingsViewPrivate()
       
   134 {
       
   135     delete mMainForm;
       
   136     delete mModel;
       
   137     delete mNetConnSettingsUi;
       
   138     delete mAsyncToSyncCallEventLoop;
       
   139     foreach (QTranslator *translator, mTranslators) {
       
   140         qApp->removeTranslator(translator);
       
   141     }
       
   142     qDeleteAll(mTranslators);
       
   143     mTranslators.clear();
       
   144 }
       
   145 
       
   146 void JavaApplicationSettingsViewPrivate::readAllSettings()
       
   147 {
       
   148     // general settings
       
   149     initGeneralSettings();
       
   150 
       
   151     // security settings
       
   152     initSecuritySettings();
       
   153 }
       
   154 
       
   155 void JavaApplicationSettingsViewPrivate::init()
       
   156 {
       
   157     // init storage
       
   158     try
       
   159     {
       
   160         mStorage.reset(JavaStorage::createInstance());
       
   161         mStorage->open();
       
   162     }
       
   163     catch (JavaStorageException& aJse)
       
   164     {
       
   165         ELOG1(EJavaSettings, "Error while opening the storage %S", aJse.toString().c_str());
       
   166     }
       
   167 
       
   168     QTranslator translator;
       
   169     // load the correct translation of the localized strings for the cmmanager.
       
   170     // Load this one first since it contains the smallest amount of strings
       
   171     // (so it's ok to be searched last)
       
   172     installTranslator("cmapplsettingsui");
       
   173     installTranslator("cmmanager");
       
   174     // load the correct translation of the localized strings for the java settings
       
   175     // Current solution reads it from Z only (this does not work with IAD)
       
   176     // -> check if translator can handle path without drive letter (e.g. the resource
       
   177     // is loaded from the same drive where the DLL is loaded)
       
   178     installTranslator("javaruntimeapplicationsettings");
       
   179     // init strings
       
   180     TXT_BLANKET = QString(hbTrId(ID_BLANKET));
       
   181     TXT_SESSION = QString(hbTrId(ID_SESSION));
       
   182     TXT_ONESHOT = QString(hbTrId(ID_ONESHOT));
       
   183     TXT_DENIED = QString(hbTrId(ID_DENIED));
       
   184     TXT_SECURITY_LEVEL = QString(hbTrId(ID_SECURITY_LEVEL));
       
   185     TXT_USER_DEFINED = QString(hbTrId(ID_USER_DEFINED));
       
   186     TXT_SENSITIVE_SETTINGS = QString(hbTrId(ID_SENSITIVE_SETTINGS));
       
   187     TXT_SENSITIVE_SETTINGS_NET_USAGE = QString(hbTrId(ID_SENSITIVE_SETTINGS_NET_USAGE));
       
   188     TXT_MUTUALLY_EXCLUSIVE_SETTINGS = QString(hbTrId(ID_MUTUALLY_EXCLUSIVE_SETTINGS));
       
   189     TXT_OK = QString(hbTrId(ID_OK));
       
   190     TXT_CANCEL = QString(hbTrId(ID_CANCEL));
       
   191     TXT_SECURITY_WARNING_TITLE = QString(hbTrId(ID_SECURITY_WARNING_TITLE));
       
   192     TXT_NET_ACCESS = QString(hbTrId(ID_NET_ACCESS));
       
   193     TXT_LOW_LEVEL_NET_ACCESS = QString(hbTrId(ID_LOW_LEVEL_NET_ACCESS));
       
   194     TXT_NETWORK_CONNECTION = QString(hbTrId(ID_NETWORK_CONNECTION));
       
   195     TXT_SETTINGS_TITLE = QString(hbTrId(ID_SETTINGS_TITLE));
       
   196     TXT_SETTINGS_NOT_AVAILABLE = QString(hbTrId(ID_SETTINGS_NOT_AVAILABLE));
       
   197 
       
   198     // init the known localized settings names
       
   199     mLocalizedSettingsNames[QString::fromStdWString(NET_ACCESS_SETTINGS)] = TXT_NET_ACCESS;
       
   200     mLocalizedSettingsNames[QString::fromStdWString(LOW_LEVEL_NET_ACCESS_SETTINGS)] = TXT_LOW_LEVEL_NET_ACCESS;
       
   201     mLocalizedSettingsNames[QString::fromStdWString(MESSAGING_SETTINGS)] = QString(hbTrId(ID_MESSAGING));
       
   202     mLocalizedSettingsNames[QString::fromStdWString(RESTRICTED_MESSAGING_SETTINGS)] = QString(hbTrId(ID_RESTRICTED_MESSAGING));
       
   203     mLocalizedSettingsNames[QString::fromStdWString(CALL_CONTROL_SETTINGS)] = QString(hbTrId(ID_CALL_CONTROL));
       
   204     mLocalizedSettingsNames[QString::fromStdWString(LOCAL_CONNECTIVITY_SETTINGS)] = QString(hbTrId(ID_LOCAL_CONNECTIVITY));
       
   205     mLocalizedSettingsNames[QString::fromStdWString(MULTIMEDIA_RECORDING_SETTINGS)] = QString(hbTrId(ID_MULTIMEDIA_RECORDING));
       
   206     mLocalizedSettingsNames[QString::fromStdWString(WRITE_USER_DATA_ACCESS_SETTINGS)] = QString(hbTrId(ID_WRITE_USER_DATA_ACCESS));
       
   207     mLocalizedSettingsNames[QString::fromStdWString(READ_USER_DATA_ACCESS_SETTINGS)] = QString(hbTrId(ID_READ_USER_DATA_ACCESS));
       
   208     mLocalizedSettingsNames[QString::fromStdWString(LOCATION_SETTINGS)] = QString(hbTrId(ID_LOCATION));
       
   209     mLocalizedSettingsNames[QString::fromStdWString(LANDMARK_SETTINGS)] = QString(hbTrId(ID_LANDMARK));
       
   210     mLocalizedSettingsNames[QString::fromStdWString(AUTHENTICATION_SETTINGS)] = QString(hbTrId(ID_AUTHENTICATION));
       
   211     mLocalizedSettingsNames[QString::fromStdWString(SMART_CARD_COMMUNICATION_SETTINGS)] = QString(hbTrId(ID_SMART_CARD_COMMUNICATION));
       
   212     mLocalizedSettingsNames[QString::fromStdWString(APPLICATION_AUTO_INVOCATION_SETTINGS)] = QString(hbTrId(ID_APPLICATION_AUTO_INVOCATION));
       
   213     mLocalizedSettingsNames[QString::fromStdWString(BROADCAST_SETTINGS)] = QString(hbTrId(ID_BROADCAST));
       
   214     mLocalizedSettingsNames[QString::fromStdWString(NFC_WRITE_ACCESS_SETTINGS)] = QString(hbTrId(ID_NFC_WRITE_ACCESS));
       
   215     mLocalizedSettingsNames[QString::fromStdWString(URL_START_SETTINGS)] = QString(hbTrId(ID_URL_START));
       
   216     // init the display indexes associated with each settings
       
   217     mSettingsNamesIndexes[QString::fromStdWString(NET_ACCESS_SETTINGS)] = NET_ACCESS_SETTINGS_INDEX;
       
   218     mSettingsNamesIndexes[QString::fromStdWString(LOW_LEVEL_NET_ACCESS_SETTINGS)] = LOW_LEVEL_NET_ACCESS_SETTINGS_INDEX;
       
   219     mSettingsNamesIndexes[QString::fromStdWString(MESSAGING_SETTINGS)] = MESSAGING_SETTINGS_INDEX;
       
   220     mSettingsNamesIndexes[QString::fromStdWString(RESTRICTED_MESSAGING_SETTINGS)] = RESTRICTED_MESSAGING_SETTINGS_INDEX;
       
   221     mSettingsNamesIndexes[QString::fromStdWString(CALL_CONTROL_SETTINGS)] = CALL_CONTROL_SETTINGS_INDEX;
       
   222     mSettingsNamesIndexes[QString::fromStdWString(LOCAL_CONNECTIVITY_SETTINGS)] = LOCAL_CONNECTIVITY_SETTINGS_INDEX;
       
   223     mSettingsNamesIndexes[QString::fromStdWString(MULTIMEDIA_RECORDING_SETTINGS)] = MULTIMEDIA_RECORDING_SETTINGS_INDEX;
       
   224     mSettingsNamesIndexes[QString::fromStdWString(WRITE_USER_DATA_ACCESS_SETTINGS)] = WRITE_USER_DATA_ACCESS_SETTINGS_INDEX;
       
   225     mSettingsNamesIndexes[QString::fromStdWString(READ_USER_DATA_ACCESS_SETTINGS)] = READ_USER_DATA_ACCESS_SETTINGS_INDEX;
       
   226     mSettingsNamesIndexes[QString::fromStdWString(LOCATION_SETTINGS)] = LOCATION_SETTINGS_INDEX;
       
   227     mSettingsNamesIndexes[QString::fromStdWString(LANDMARK_SETTINGS)] = LANDMARK_SETTINGS_INDEX;
       
   228     mSettingsNamesIndexes[QString::fromStdWString(AUTHENTICATION_SETTINGS)] = AUTHENTICATION_SETTINGS_INDEX;
       
   229     mSettingsNamesIndexes[QString::fromStdWString(SMART_CARD_COMMUNICATION_SETTINGS)] = SMART_CARD_COMMUNICATION_SETTINGS_INDEX;
       
   230     mSettingsNamesIndexes[QString::fromStdWString(APPLICATION_AUTO_INVOCATION_SETTINGS)] = APPLICATION_AUTO_INVOCATION_SETTINGS_INDEX;
       
   231     mSettingsNamesIndexes[QString::fromStdWString(BROADCAST_SETTINGS)] = BROADCAST_SETTINGS_INDEX;
       
   232     mSettingsNamesIndexes[QString::fromStdWString(NFC_WRITE_ACCESS_SETTINGS)] = NFC_WRITE_ACCESS_SETTINGS_INDEX;
       
   233     mSettingsNamesIndexes[QString::fromStdWString(URL_START_SETTINGS)] = URL_START_SETTINGS_INDEX;
       
   234 }
       
   235 
       
   236 
       
   237 void JavaApplicationSettingsViewPrivate::initGeneralSettings()
       
   238 {
       
   239     QStringList settingsValues;
       
   240     vector<wstring> storageValues;
       
   241     if (!isInStorage(VALUE, NAME, L"Nokia-MIDlet-On-Screen-Keypad", APPLICATION_PACKAGE_ATTRIBUTES_TABLE))
       
   242     {
       
   243         // if the on screen keypad is predefined, it should not be changable by user
       
   244         // -> right now it is not added to settings list. It should be changed so that
       
   245         // the setting should not be editable by user
       
   246         settingsValues<<QString(hbTrId(ID_OSK_NO))<<QString(hbTrId(ID_OSK_GAME))<<QString(hbTrId(ID_OSK_NAVIGATION));
       
   247         storageValues.push_back(ON_SCREEN_KEYPAD_VALUE_NO);
       
   248         storageValues.push_back(ON_SCREEN_KEYPAD_VALUE_GAMEACTIONS);
       
   249         storageValues.push_back(ON_SCREEN_KEYPAD_VALUE_NAVIGATION);
       
   250         mGeneralSettings.append(JavaApplicationSettings(QString(hbTrId(ID_OSK)), settingsValues, ON_SCREEN_KEYPAD, MIDP_PACKAGE_TABLE, storageValues));
       
   251         readFromStorage(mGeneralSettings[0]);
       
   252     }
       
   253     settingsValues = QStringList();
       
   254     initNetworkConnection();
       
   255     settingsValues<<mNetConn.name;
       
   256     mGeneralSettings.append(JavaApplicationSettings(TXT_NETWORK_CONNECTION, settingsValues));
       
   257     mNetSettIndex = mGeneralSettings.size() - 1;
       
   258 }
       
   259 
       
   260 void JavaApplicationSettingsViewPrivate::initSecuritySettings()
       
   261 {
       
   262     QStringList settingsValues;
       
   263     vector<wstring> storageValues;
       
   264     settingsValues = QStringList();
       
   265     storageValues.clear();
       
   266     settingsValues<<QString(hbTrId(ID_SECURITY_LEVEL_DEFAULT))<<TXT_USER_DEFINED;
       
   267     storageValues.push_back(SECURITY_WARNINGS_DEFAULT_MODE);
       
   268     storageValues.push_back(SECURITY_WARNINGS_USER_DEFINED_MODE);
       
   269     mSecuritySettings.append(JavaApplicationSettings(TXT_SECURITY_LEVEL, settingsValues, SECURITY_WARNINGS, MIDP_PACKAGE_TABLE, storageValues));
       
   270     readFromStorage(mSecuritySettings[0]);
       
   271 
       
   272     // extra settings
       
   273     settingsValues = QStringList();
       
   274     storageValues.clear();
       
   275     settingsValues<<TXT_ONESHOT<<TXT_SESSION<<TXT_BLANKET<<TXT_DENIED;
       
   276     storageValues.push_back(ONESHOT_INTERACTION_MODE);
       
   277     storageValues.push_back(SESSION_INTERACTION_MODE);
       
   278     storageValues.push_back(BLANKET_INTERACTION_MODE);
       
   279     storageValues.push_back(DENIED_INTERACTION_MODE);
       
   280     vector<IndexedSettingsName> allSecuritySettings = readFromStorage(FUNCTION_GROUP, MIDP_FUNC_GRP_SETTINGS_TABLE, MIDP_PERMISSIONS_TABLE);
       
   281     // sort the security settings according to how they should be displayed
       
   282     std::sort(allSecuritySettings.begin(), allSecuritySettings.end(), AscendingSort());
       
   283     for(int i=0; i<allSecuritySettings.size(); i++)
       
   284     {
       
   285         QString rawSettingsName = QString::fromStdWString(allSecuritySettings[i].name);
       
   286         QString localizedSettingsName = rawSettingsName;
       
   287         if (mLocalizedSettingsNames.contains(rawSettingsName))
       
   288             localizedSettingsName = mLocalizedSettingsNames.value(rawSettingsName);
       
   289         mExtraSettings.append(JavaApplicationSettings(
       
   290             localizedSettingsName, settingsValues, CURRENT_SETTING,
       
   291             MIDP_FUNC_GRP_SETTINGS_TABLE, storageValues, FUNCTION_GROUP,
       
   292             allSecuritySettings[i].name, ALLOWED_SETTINGS));
       
   293         readFromStorage(mExtraSettings[i]);
       
   294         mSettingsIndexes[rawSettingsName] = i;
       
   295     }
       
   296 
       
   297     // configure the high risk lists
       
   298     configureLists();
       
   299 }
       
   300 
       
   301 void JavaApplicationSettingsViewPrivate::configureLists()
       
   302 {
       
   303     QList<JavaApplicationSettings*> highRiskList;
       
   304     QStringList highRiskSettingsNames;
       
   305     highRiskSettingsNames
       
   306         <<QString::fromStdWString(MULTIMEDIA_RECORDING_SETTINGS)
       
   307         <<QString::fromStdWString(READ_USER_DATA_ACCESS_SETTINGS);
       
   308     configureList(highRiskList, highRiskSettingsNames, mSettingsIndexes);
       
   309     // net access with multimedia and read user data
       
   310     attachList(QString::fromStdWString(NET_ACCESS_SETTINGS),highRiskList, mSettingsIndexes);
       
   311     // low level net access with multimedia and read user data
       
   312     attachList(QString::fromStdWString(LOW_LEVEL_NET_ACCESS_SETTINGS),highRiskList, mSettingsIndexes);
       
   313     // messaging with multimedia and read user data
       
   314     attachList(QString::fromStdWString(MESSAGING_SETTINGS),highRiskList, mSettingsIndexes);
       
   315     // restricted messaging with multimedia and read user data
       
   316     attachList(QString::fromStdWString(RESTRICTED_MESSAGING_SETTINGS),highRiskList, mSettingsIndexes);
       
   317     // call control with multimedia and read user data
       
   318     attachList(QString::fromStdWString(CALL_CONTROL_SETTINGS),highRiskList, mSettingsIndexes);
       
   319     // local connectivity with multimedia and read user data
       
   320     attachList(QString::fromStdWString(LOCAL_CONNECTIVITY_SETTINGS),highRiskList, mSettingsIndexes);
       
   321     // multimedia with net access, low level net access, messaging,
       
   322     // restricted messaging, call control and local connectivity
       
   323     highRiskList.clear();
       
   324     highRiskSettingsNames.clear();
       
   325     highRiskSettingsNames
       
   326         <<QString::fromStdWString(NET_ACCESS_SETTINGS)
       
   327         <<QString::fromStdWString(LOW_LEVEL_NET_ACCESS_SETTINGS)
       
   328         <<QString::fromStdWString(MESSAGING_SETTINGS)
       
   329         <<QString::fromStdWString(RESTRICTED_MESSAGING_SETTINGS)
       
   330         <<QString::fromStdWString(CALL_CONTROL_SETTINGS)
       
   331         <<QString::fromStdWString(LOCAL_CONNECTIVITY_SETTINGS)
       
   332         <<QString::fromStdWString(MULTIMEDIA_RECORDING_SETTINGS);
       
   333     configureList(highRiskList, highRiskSettingsNames, mSettingsIndexes);
       
   334     attachList(QString::fromStdWString(MULTIMEDIA_RECORDING_SETTINGS),highRiskList, mSettingsIndexes);
       
   335     // read user data with net access, low level net access, messaging,
       
   336     // restricted messaging, call control and local connectivity
       
   337     attachList(QString::fromStdWString(READ_USER_DATA_ACCESS_SETTINGS),highRiskList, mSettingsIndexes);
       
   338 
       
   339     // configure the mutually exclusive list
       
   340     QList<JavaApplicationSettings*> mutuallyExclusiveList;
       
   341     QStringList mutuallyExclusiveSettingsNames;
       
   342     mutuallyExclusiveSettingsNames
       
   343         <<QString::fromStdWString(APPLICATION_AUTO_INVOCATION_SETTINGS);
       
   344     configureList(mutuallyExclusiveList, mutuallyExclusiveSettingsNames, mSettingsIndexes);
       
   345     //net access with application auto invocation
       
   346     attachList(QString::fromStdWString(NET_ACCESS_SETTINGS),mutuallyExclusiveList, mSettingsIndexes, false /* is high risk list */);
       
   347     //low level net access with application auto invocation
       
   348     attachList(QString::fromStdWString(LOW_LEVEL_NET_ACCESS_SETTINGS),mutuallyExclusiveList, mSettingsIndexes, false /* is high risk list */);
       
   349     //application auto invocation with net access and low level net access
       
   350     mutuallyExclusiveList.clear();
       
   351     mutuallyExclusiveSettingsNames.clear();
       
   352     mutuallyExclusiveSettingsNames
       
   353         <<QString::fromStdWString(NET_ACCESS_SETTINGS)
       
   354         <<QString::fromStdWString(LOW_LEVEL_NET_ACCESS_SETTINGS);
       
   355     configureList(mutuallyExclusiveList, mutuallyExclusiveSettingsNames, mSettingsIndexes);
       
   356     attachList(QString::fromStdWString(APPLICATION_AUTO_INVOCATION_SETTINGS),mutuallyExclusiveList, mSettingsIndexes, false /* is high risk list */);
       
   357 }
       
   358 
       
   359 void JavaApplicationSettingsViewPrivate::initSettings(QVector<JavaApplicationSettings>& aSettings, HbDataFormModelItem * aParent)
       
   360 {
       
   361     for (int i=0; i<aSettings.size(); i++)
       
   362     {
       
   363         HbDataFormModelItem * appSettings = NULL;
       
   364         int currentValue = 0;
       
   365         switch(aSettings[i].getValues().size())
       
   366         {
       
   367             case 1:
       
   368                 appSettings  = mModel->appendDataFormItem(
       
   369                         HbDataFormModelItem::ToggleValueItem,
       
   370                         aSettings[i].getName(), aParent);
       
   371                 // make it a toogle button (-> get rid of the "pressed" ui effect)
       
   372                 if (appSettings)
       
   373                 {
       
   374                     appSettings->setContentWidgetData(QString("text"), aSettings[i].getValues()[0]);
       
   375                     appSettings->setContentWidgetData(QString("additionalText"), aSettings[i].getValues()[0]);
       
   376                 }
       
   377                 break;
       
   378             case 2:
       
   379                 appSettings  = mModel->appendDataFormItem(
       
   380                         HbDataFormModelItem::ToggleValueItem,
       
   381                         aSettings[i].getName(), aParent);
       
   382                 if (appSettings)
       
   383                 {
       
   384                     currentValue = aSettings[i].getCurrentValue();
       
   385                     if (currentValue < 0)
       
   386                     {
       
   387                         currentValue = 0;
       
   388                     }
       
   389                     appSettings->setContentWidgetData(QString("text"), aSettings[i].getValues()[currentValue]);
       
   390                     appSettings->setContentWidgetData(QString("additionalText"),aSettings[i].getValues()[1 - currentValue]);
       
   391                 }
       
   392                 break;
       
   393             default:
       
   394                 appSettings  = mModel->appendDataFormItem(
       
   395                         HbDataFormModelItem::ComboBoxItem,
       
   396                         aSettings[i].getName(), aParent);
       
   397                 if (appSettings)
       
   398                 {
       
   399                     appSettings->setContentWidgetData(QString("items"), aSettings[i].getValues());
       
   400                     appSettings->setContentWidgetData(QString("currentIndex"),aSettings[i].getCurrentValue());
       
   401                 }
       
   402         }
       
   403         aSettings[i].setId(appSettings);
       
   404     }
       
   405 }
       
   406 
       
   407 void JavaApplicationSettingsViewPrivate::writeSettings(JavaApplicationSettings& aSettings, const QString &aNewValue)
       
   408 {
       
   409     QStringList values = aSettings.getValues();
       
   410     int currentValue = aSettings.getCurrentValue();
       
   411     int newValue = aSettings.getValueIndex(aNewValue);
       
   412     if (newValue != -1 && currentValue != newValue)
       
   413     {
       
   414         // handle blanket settings
       
   415         if (aNewValue == TXT_BLANKET)
       
   416         {
       
   417             // check blanket settings
       
   418             if (!isBlanketAllowed(aSettings))
       
   419             {
       
   420                 // change back to the old value
       
   421                 HbComboBox * settingsCombo = static_cast<HbComboBox*>(itemToWidget(aSettings.getId()));
       
   422                 if (settingsCombo)
       
   423                 {
       
   424                     settingsCombo->setCurrentIndex(currentValue);
       
   425                 }
       
   426                 return;
       
   427             }
       
   428         }
       
   429         aSettings.setCurrentValue(newValue);
       
   430         writeToStorage(aSettings);
       
   431     }
       
   432 }
       
   433 
       
   434 bool JavaApplicationSettingsViewPrivate::isBlanketAllowed(const JavaApplicationSettings& aSettings)
       
   435 {
       
   436     // handle the high risk items
       
   437     QList<JavaApplicationSettings*> highRiskList = aSettings.getHighRiskList();
       
   438     // go through the list and see if any of the setings are in blanket
       
   439     for (int i=0; i<highRiskList.size(); i++)
       
   440     {
       
   441         if (highRiskList[i] &&
       
   442                 highRiskList[i]->getValue(highRiskList[i]->getCurrentValue())
       
   443                 == TXT_BLANKET)
       
   444         {
       
   445             QString secWarning = TXT_SENSITIVE_SETTINGS;
       
   446             QString LOCAL_CONNECTIVITY = QString(hbTrId(ID_LOCAL_CONNECTIVITY));
       
   447             if (aSettings.getName() != LOCAL_CONNECTIVITY
       
   448                 && highRiskList[i]->getName() != LOCAL_CONNECTIVITY)
       
   449             {
       
   450                 secWarning = TXT_SENSITIVE_SETTINGS_NET_USAGE;
       
   451             }
       
   452             if (!isSecurityWarningAccepted(
       
   453                 secWarning,TXT_OK,TXT_CANCEL ,TXT_SECURITY_WARNING_TITLE))
       
   454             {
       
   455                 LOG3(EJavaSettings, EInfo,"User did not accept the high risk due to having both \"%S\" and \"%S\" set to \"%S\"", aSettings.getName().toStdWString().c_str(), highRiskList[i]->getName().toStdWString().c_str(), TXT_BLANKET.toStdWString().c_str());
       
   456                 return false;
       
   457             }
       
   458             LOG3(EJavaSettings, EInfo,"User accepted the high risk due to having both \"%S\" and \"%S\" set to \"%S\"", aSettings.getName().toStdWString().c_str(), highRiskList[i]->getName().toStdWString().c_str(), TXT_BLANKET.toStdWString().c_str());
       
   459             break;
       
   460         }
       
   461     }
       
   462     // handle the mutually exclusive rules
       
   463     QList<JavaApplicationSettings*> mutuallyExclusiveList = aSettings
       
   464             .getMutuallyExclusiveList();
       
   465     // go through the list and see if any of the setings are in blanket
       
   466     for (int i=0; i<mutuallyExclusiveList.size(); i++)
       
   467     {
       
   468         if (mutuallyExclusiveList[i] && mutuallyExclusiveList[i]->getValue(
       
   469                     mutuallyExclusiveList[i]->getCurrentValue()) == TXT_BLANKET)
       
   470         {
       
   471             bool isBlanketAllowed = isSecurityWarningAccepted(
       
   472                 TXT_MUTUALLY_EXCLUSIVE_SETTINGS, TXT_OK, TXT_CANCEL, TXT_SECURITY_WARNING_TITLE);
       
   473             if (isBlanketAllowed)
       
   474             {
       
   475                 // change  the current value to the maximum allowed
       
   476                 bool isBlanket = true;
       
   477                 do
       
   478                 {
       
   479                     if (isBlanket)
       
   480                     {
       
   481                         QStringList allowedValues = mutuallyExclusiveList[i]->getValues();
       
   482                         int selectedValue = mutuallyExclusiveList[i]->getCurrentValue();
       
   483                         // select the maximum allowed value
       
   484                         for (int j=0; j<allowedValues.size(); j++)
       
   485                         {
       
   486                             if (allowedValues[j] == TXT_SESSION)
       
   487                             {
       
   488                                 selectedValue = j;
       
   489                                 break;
       
   490                             }
       
   491                             if (allowedValues[j] == TXT_ONESHOT)
       
   492                             {
       
   493                                 selectedValue = j;
       
   494                             }
       
   495                             else if (allowedValues[j] == TXT_DENIED
       
   496                                      && allowedValues[selectedValue] == TXT_BLANKET)
       
   497                             {
       
   498                                 selectedValue = j;
       
   499                             }
       
   500                         }
       
   501                         // set the maximum allowed value
       
   502                         mutuallyExclusiveList[i]->setCurrentValue(selectedValue);
       
   503                         HbComboBox * settingsCombo = static_cast<HbComboBox*>(itemToWidget(
       
   504                                                          mutuallyExclusiveList[i]->getId()));
       
   505                         if (settingsCombo)
       
   506                         {
       
   507                             settingsCombo->setCurrentIndex(selectedValue);
       
   508                         }
       
   509                         writeToStorage(*mutuallyExclusiveList[i]);
       
   510                         LOG4(EJavaSettings, EInfo,"Changing \"%S\" to \"%S\" led to changing \"%S\" to \"%S\" due to mutually exclusive rules", aSettings.getName().toStdWString().c_str(), TXT_BLANKET.toStdWString().c_str(), mutuallyExclusiveList[i]->getName().toStdWString().c_str(), allowedValues[selectedValue].toStdWString().c_str());
       
   511                     }
       
   512                     i++;
       
   513                     // end of list?
       
   514                     if (i >= mutuallyExclusiveList.size())
       
   515                     {
       
   516                         break;
       
   517                     }
       
   518                     // move on into the list
       
   519                     isBlanket = (mutuallyExclusiveList[i]->getValue(
       
   520                                      mutuallyExclusiveList[i]->getCurrentValue()) == TXT_BLANKET);
       
   521                 }
       
   522                 while (true);
       
   523             }
       
   524             else
       
   525             {
       
   526                 LOG1(EJavaSettings, EInfo,"User did not accept changes in \"%S\" due to mutually exclusive rules", mutuallyExclusiveList[i]->getName().toStdWString().c_str());
       
   527             }
       
   528             return isBlanketAllowed;
       
   529         }
       
   530     }
       
   531     return true;
       
   532 }
       
   533 
       
   534 void JavaApplicationSettingsViewPrivate::_q_settingsChanged(bool)
       
   535 {
       
   536     HbPushButton * sender = static_cast<HbPushButton*>(mPublicView->sender());
       
   537     if (sender)
       
   538     {
       
   539         JavaApplicationSettings* settings = findSettings(sender);
       
   540         if (settings == NULL)
       
   541         {
       
   542             return;
       
   543         }
       
   544         if (settings->getName() == TXT_SECURITY_LEVEL)
       
   545         {
       
   546             QString newValue = settings->getValue(1 - settings->getCurrentValue());
       
   547             securityWarningsChanged(newValue);
       
   548             writeSettings(*settings, newValue);
       
   549         }
       
   550         else if (settings->getName() == TXT_NETWORK_CONNECTION)
       
   551         {
       
   552             handleNetworkSettings();
       
   553         }
       
   554     }
       
   555 }
       
   556 void JavaApplicationSettingsViewPrivate::_q_settingsChanged(const QString& aNewValue)
       
   557 {
       
   558     HbComboBox * sender = static_cast<HbComboBox*>(mPublicView->sender());
       
   559     if (sender)
       
   560     {
       
   561         JavaApplicationSettings* settings = findSettings(sender);
       
   562         if (settings != NULL)
       
   563         {
       
   564             // any other settings are treated same
       
   565             writeSettings(*settings, aNewValue);
       
   566         }
       
   567     }
       
   568 }
       
   569 
       
   570 void JavaApplicationSettingsViewPrivate::securityWarningsChanged(const QString& aNewValue)
       
   571 {
       
   572     if (aNewValue == TXT_USER_DEFINED)
       
   573     {
       
   574         // append the extra settings and values
       
   575         for (int i=0; i<mExtraSettings.size(); i++)
       
   576         {
       
   577             if (mExtraSettings[i].getCurrentValue() >= 0 && mExtraSettings[i].getId() == 0)
       
   578             {
       
   579                 HbDataFormModelItem * appSettings = mModel->appendDataFormItem(
       
   580                                                         HbDataFormModelItem::ComboBoxItem,
       
   581                                                         mExtraSettings[i].getName(), mSecuritySettingsGroup);
       
   582                 if (appSettings)
       
   583                 {
       
   584                     mExtraSettings[i].setId(appSettings);
       
   585                     // when settings the items, the settingsChanged signal gets emitted with the first value
       
   586                     // as being the current value. This signal should be discarded (the first value is just
       
   587                     // an intermediate value towards the actual current value which gets set shortly).
       
   588                     // Therefore set the first value as the current value (this way the settingsChanged
       
   589                     // signal gets discarded) and change the current value back to the real current value
       
   590                     int currentValue = mExtraSettings[i].getCurrentValue();
       
   591                     mExtraSettings[i].setCurrentValue(0);
       
   592                     appSettings->setContentWidgetData(QString("items"), mExtraSettings[i].getValues());
       
   593                     mExtraSettings[i].setCurrentValue(currentValue);
       
   594                     appSettings->setContentWidgetData(QString("currentIndex"),mExtraSettings[i].getCurrentValue());
       
   595                 }
       
   596             }
       
   597         }
       
   598     }
       
   599     else
       
   600     {
       
   601         // remove the extra settings
       
   602         for (int i=0; i<mExtraSettings.size(); i++)
       
   603         {
       
   604             if (mExtraSettings[i].getId())
       
   605             {
       
   606                 HbComboBox * extraSettingsId = static_cast<HbComboBox*>(itemToWidget(mExtraSettings[i].getId()));
       
   607                 if (extraSettingsId)
       
   608                 {
       
   609                     mPublicView->disconnect(extraSettingsId, 0, 0, 0);
       
   610                     mModel->removeItem(mModel->indexFromItem(mExtraSettings[i].getId()));
       
   611                     mExtraSettings[i].setId(0);
       
   612                     mExtraSettings[i].disconnectFromUi();
       
   613                 }
       
   614             }
       
   615         }
       
   616     }
       
   617 }
       
   618 
       
   619 void JavaApplicationSettingsViewPrivate::handleNetworkSettings()
       
   620 {
       
   621     // init flags to show destinations and connection methods
       
   622     QFlags<CmApplSettingsUi::SelectionDialogItems> listItems;
       
   623     listItems |= CmApplSettingsUi::ShowDestinations;
       
   624     listItems |= CmApplSettingsUi::ShowConnectionMethods;
       
   625 
       
   626     // empty filter -> all bearer types included
       
   627     QSet<CmApplSettingsUi::BearerTypeFilter> filter;
       
   628     // reset the result
       
   629     mNetConnSelection.result = mNetConn.type;
       
   630     mNetConnSelection.id = mNetConn.id;
       
   631     // init settings ui with destinations, filter and initial selection
       
   632     mNetConnSettingsUi->setOptions(listItems, filter);
       
   633     mNetConnSettingsUi->setSelection(mNetConnSelection);
       
   634     // Connect the setting ui's signal with own slot where the mNetConnSelection is stored
       
   635     connect(mNetConnSettingsUi, SIGNAL(finished(uint)), this, SLOT(netConnSelected(uint)));
       
   636     // launch the setting ui
       
   637     mNetConnSettingsUi->open();
       
   638 }
       
   639 
       
   640 void JavaApplicationSettingsViewPrivate::_q_dataItemDisplayed(const QModelIndex aDataItemIndex)
       
   641 {
       
   642     HbDataFormModelItem *item = static_cast<HbDataFormModel*>(
       
   643                                     mMainForm->model())->itemFromIndex(aDataItemIndex);
       
   644     if (item == NULL)
       
   645     {
       
   646         return;
       
   647     }
       
   648     int itemType = item->data(HbDataFormModelItem::ItemTypeRole).toInt();
       
   649     HbComboBox * comboBox = NULL;
       
   650     HbPushButton * pushButton = NULL;
       
   651     HbWidget * widget = (qobject_cast<HbDataFormViewItem *>
       
   652         (mMainForm->itemByIndex(aDataItemIndex)))->dataItemContentWidget();
       
   653     JavaApplicationSettings* settings = findSettings(widget);
       
   654     if (settings == NULL)
       
   655     {
       
   656         // stop right here
       
   657         return;
       
   658     }
       
   659     switch(HbDataFormModelItem::DataItemType(itemType))
       
   660     {
       
   661         case HbDataFormModelItem::ComboBoxItem:
       
   662             comboBox = static_cast<HbComboBox*>(widget);
       
   663             if (settings->isConnectedToUi())
       
   664             {
       
   665                 // need to do a reconnect: disconnect followed by a connect
       
   666                 mPublicView->disconnect(comboBox,
       
   667                         SIGNAL(currentIndexChanged(const QString &)),
       
   668                         mPublicView,
       
   669                         SLOT(_q_settingsChanged(const QString &)));
       
   670             }
       
   671             mPublicView->connect(comboBox,
       
   672                                  SIGNAL(currentIndexChanged(const QString &)),
       
   673                                  mPublicView, SLOT(_q_settingsChanged(const QString &)),
       
   674                                  Qt::UniqueConnection);
       
   675             break;
       
   676         case HbDataFormModelItem::ToggleValueItem:
       
   677             pushButton = static_cast< HbPushButton*>(widget);
       
   678             if (settings->isConnectedToUi())
       
   679             {
       
   680                 // need to do a reconnect: disconnect followed by a connect
       
   681                 mPublicView->disconnect(pushButton,
       
   682                         SIGNAL(clicked(bool)),
       
   683                         mPublicView,
       
   684                         SLOT(_q_settingsChanged(bool)));
       
   685             }
       
   686             mPublicView->connect(pushButton,
       
   687                                  SIGNAL(clicked(bool)),
       
   688                                  mPublicView, SLOT(_q_settingsChanged(bool)),
       
   689                                  Qt::UniqueConnection);
       
   690             break;
       
   691     }
       
   692     settings->connectToUi();
       
   693 }
       
   694 
       
   695 void JavaApplicationSettingsViewPrivate::netConnSelected(uint aNetConnSelectionStatus)
       
   696 {
       
   697     if (aNetConnSelectionStatus == CmApplSettingsUi::ApplSettingsErrorNone)
       
   698     {
       
   699         mNetConnSelection = mNetConnSettingsUi->selection();
       
   700         // store the selection
       
   701         if (mNetConnSelection.id != mNetConn.id
       
   702             && mNetConnSelection.id != mDefaultConnId)
       
   703         {
       
   704             TRAPD(err,
       
   705                 switch(mNetConnSelection.result)
       
   706                 {
       
   707                     case CmApplSettingsUi::SelectionTypeDestination:
       
   708                         ConnectionManager::setDestinationNetworkIdL(mSuiteUid, mNetConnSelection.id);
       
   709                         break;
       
   710                     case CmApplSettingsUi::SelectionTypeConnectionMethod:
       
   711                         ConnectionManager::setApnIdL(mSuiteUid, mNetConnSelection.id);
       
   712                         break;
       
   713                 }
       
   714             );
       
   715             if (err == KErrNone)
       
   716             {
       
   717                 mNetConn.id = mNetConnSelection.id;
       
   718                 mNetConn.type = mNetConnSelection.result;
       
   719                 readNetworkConnectionName();
       
   720                 mGeneralSettings[mNetSettIndex].getId()->setContentWidgetData(QString("text"), mNetConn.name);
       
   721                 mGeneralSettings[mNetSettIndex].getId()->setContentWidgetData(QString("additionalText"), mNetConn.name);
       
   722             }
       
   723         }
       
   724     }
       
   725 }
       
   726 
       
   727 void JavaApplicationSettingsViewPrivate::securityWarningDismissed(HbAction* aDismissAction)
       
   728 {
       
   729     HbMessageBox *dlg = static_cast<HbMessageBox*>(sender());
       
   730     mSecWarningAccepted = (aDismissAction == dlg->actions().at(0));
       
   731     mAsyncToSyncCallEventLoop->exit();
       
   732 }
       
   733 
       
   734 void JavaApplicationSettingsViewPrivate::initNetworkConnection()
       
   735 {
       
   736     TRAP_IGNORE(
       
   737         mNetConn.id = ConnectionManager::getDestinationNetworkIdL(mSuiteUid);
       
   738         if (mNetConn.id == (uint)KJavaNetworkAccessNotSpecified)
       
   739         {
       
   740             mNetConn.id = ConnectionManager::getApnIdL(mSuiteUid);
       
   741         }
       
   742     );
       
   743     QNetworkConfigurationManager manager;
       
   744     QNetworkConfiguration defaultCfg = manager.defaultConfiguration();
       
   745     mDefaultConnId = defaultCfg.identifier().toInt();
       
   746     QNetworkConfiguration cfg = manager.configurationFromIdentifier(
       
   747         QString::number(mNetConn.id));
       
   748     if (!cfg.isValid())
       
   749     {
       
   750         cfg = defaultCfg;
       
   751     }
       
   752     mNetConn.name = QString(hbTrId(cfg.name().toUtf8()));
       
   753 }
       
   754 
       
   755 void JavaApplicationSettingsViewPrivate::readNetworkConnectionName()
       
   756 {
       
   757     QNetworkConfigurationManager manager;
       
   758     QNetworkConfiguration cfg = manager.configurationFromIdentifier(
       
   759         QString::number(mNetConn.id));
       
   760     if (!cfg.isValid())
       
   761     {
       
   762         cfg = manager.defaultConfiguration();
       
   763     }
       
   764     mNetConn.name = QString(hbTrId(cfg.name().toUtf8()));
       
   765 }
       
   766 
       
   767 JavaApplicationSettings* JavaApplicationSettingsViewPrivate::findSettings(HbWidget* aId)
       
   768 {
       
   769     JavaApplicationSettings* settings = findSettings(aId, mGeneralSettings);
       
   770     if (settings == NULL)
       
   771     {
       
   772         settings = findSettings(aId, mSecuritySettings);
       
   773         if (settings == NULL)
       
   774         {
       
   775             settings = findSettings(aId, mExtraSettings);
       
   776         }
       
   777     }
       
   778     return settings;
       
   779 }
       
   780 
       
   781 JavaApplicationSettings* JavaApplicationSettingsViewPrivate::findSettings(HbWidget* aId, QVector<JavaApplicationSettings>& aAllSettings)
       
   782 {
       
   783     for (int i=0; i<aAllSettings.size(); i++)
       
   784     {
       
   785         if (itemToWidget(aAllSettings[i].getId()) == aId)
       
   786         {
       
   787             return &aAllSettings[i];
       
   788         }
       
   789     }
       
   790     return NULL;
       
   791 }
       
   792 
       
   793 HbWidget * JavaApplicationSettingsViewPrivate::itemToWidget(const HbDataFormModelItem * aItem)
       
   794 {
       
   795     HbDataFormViewItem * viewItem = qobject_cast<HbDataFormViewItem *> (mMainForm->itemByIndex(
       
   796                                         mModel->indexFromItem(aItem)));
       
   797     if (viewItem)
       
   798     {
       
   799         return static_cast<HbWidget*>(viewItem->dataItemContentWidget());
       
   800     }
       
   801     return NULL;
       
   802 }
       
   803 
       
   804 bool JavaApplicationSettingsViewPrivate::isSecurityWarningAccepted(const QString& aText, const QString& aAcceptActionLabel, const QString& aRejectActionLabel, const QString& aHeadingText)
       
   805 {
       
   806     HbMessageBox securityWarning(HbMessageBox::MessageTypeQuestion);
       
   807     securityWarning.setDismissPolicy(HbDialog::NoDismiss);
       
   808     securityWarning.setTimeout(HbDialog::NoTimeout);
       
   809     securityWarning.setIconVisible(false);
       
   810     securityWarning.setText(aText);
       
   811     securityWarning.addAction(new HbAction(
       
   812             aAcceptActionLabel, &securityWarning));
       
   813     securityWarning.addAction(new HbAction(
       
   814             aRejectActionLabel, &securityWarning));
       
   815     securityWarning.setHeadingWidget(new HbLabel(aHeadingText));
       
   816     securityWarning.open(this, SLOT(securityWarningDismissed(HbAction*)));
       
   817     mAsyncToSyncCallEventLoop->exec();
       
   818     return mSecWarningAccepted;
       
   819 }
       
   820 
       
   821 void JavaApplicationSettingsViewPrivate::configureList(QList<JavaApplicationSettings*>& aList, const QStringList& aSettingsNames,  const QHash<QString, int>& aSettingsIndexes)
       
   822 {
       
   823     for(int i=0; i<aSettingsNames.size(); i++)
       
   824     {
       
   825         if (aSettingsIndexes.contains(aSettingsNames[i]))
       
   826         {
       
   827             aList << &(mExtraSettings[aSettingsIndexes.value(aSettingsNames[i])]);
       
   828         }
       
   829     }
       
   830 }
       
   831 
       
   832 void JavaApplicationSettingsViewPrivate::attachList(const QString& aSettingsName, const QList<JavaApplicationSettings*>& aList, const QHash<QString, int>& aSettingsIndexes, bool aIsHighRiskList)
       
   833 {
       
   834     if (aSettingsIndexes.contains(aSettingsName))
       
   835     {
       
   836         if (aIsHighRiskList)
       
   837         {
       
   838             mExtraSettings[aSettingsIndexes.value(aSettingsName)].setHighRiskList(aList);
       
   839         }
       
   840         else
       
   841         {
       
   842             mExtraSettings[aSettingsIndexes.value(aSettingsName)].setMutuallyExclusiveList(aList);
       
   843         }
       
   844     }
       
   845 }
       
   846 
       
   847 void JavaApplicationSettingsViewPrivate::installTranslator(const QString& aTranslationFileName)
       
   848 {
       
   849     QTranslator* translator = new QTranslator;
       
   850 
       
   851     // load the correct translation of the localized strings for the java settings
       
   852     if (translator->load(
       
   853             aTranslationFileName + "_" + QLocale::system().name(),
       
   854             QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
       
   855     {
       
   856         mTranslators.append(translator);
       
   857         qApp->installTranslator(translator);
       
   858     }
       
   859     else
       
   860     {
       
   861         delete translator;
       
   862         translator = NULL;
       
   863     }
       
   864 }
       
   865 
       
   866 void JavaApplicationSettingsViewPrivate::readFromStorage(JavaApplicationSettings& aSettings)
       
   867 {
       
   868     if (aSettings.getColumnName().size() > 0
       
   869             && aSettings.getTableName().size() > 0)
       
   870     {
       
   871         wstring value = L"";
       
   872 
       
   873         JavaStorageApplicationEntry_t query;
       
   874         JavaStorageApplicationList_t queryResult;
       
   875         JavaStorageEntry attr;
       
   876         attr.setEntry(ID, mSuiteUid);
       
   877         query.insert(attr);
       
   878         if (aSettings.getFilterColumnName().size() > 0)
       
   879         {
       
   880             attr.setEntry(aSettings.getFilterColumnName(), aSettings.getFilterColumnValue());
       
   881             query.insert(attr);
       
   882         }
       
   883         attr.setEntry(aSettings.getColumnName(), L"");
       
   884         query.insert(attr);
       
   885         if (aSettings.getValuesColumnName().size() > 0)
       
   886         {
       
   887             attr.setEntry(aSettings.getValuesColumnName(), L"");
       
   888             query.insert(attr);
       
   889         }
       
   890 
       
   891         try
       
   892         {
       
   893             mStorage->search(aSettings.getTableName(), query, queryResult);
       
   894         }
       
   895         catch (JavaStorageException& aJse)
       
   896         {
       
   897             // Don't leave. Set defaults.
       
   898             ELOG1(EJavaSettings, "Error while reading from storage %S", aJse.toString().c_str());
       
   899         }
       
   900 
       
   901         if (aSettings.getValuesColumnName().size() > 0)
       
   902         {
       
   903             findEntry(queryResult, aSettings.getValuesColumnName(), value);
       
   904             if (value.size() > 0)
       
   905             {
       
   906                 aSettings.setStorageValuesFilter(value);
       
   907                 filterSecuritySettings(aSettings);
       
   908             }
       
   909         }
       
   910 
       
   911         value = L"";
       
   912         findEntry(queryResult, aSettings.getColumnName(), value);
       
   913 
       
   914         if (value.size() > 0)
       
   915         {
       
   916             vector<wstring> storageValues = aSettings.getStorageValues();
       
   917             for (int i=0; i<storageValues.size(); i++)
       
   918             {
       
   919                 if (storageValues[i] == value)
       
   920                 {
       
   921                     aSettings.setCurrentValue(i);
       
   922                     break;
       
   923                 }
       
   924             }
       
   925             LOG2(EJavaSettings, EInfo,"Setting \"%S\" initialized to \"%S\"", aSettings.getName().toStdWString().c_str(), aSettings.getValue(aSettings.getCurrentValue()).toStdWString().c_str());
       
   926         }
       
   927     }
       
   928 }
       
   929 
       
   930 void JavaApplicationSettingsViewPrivate::filterSecuritySettings(JavaApplicationSettings& aSettings)
       
   931 {
       
   932     std::wstring allowedModes = aSettings.getStorageValuesFilter();
       
   933     if (allowedModes.size() <= 0)
       
   934     {
       
   935             return;
       
   936     }
       
   937     // The allowed modes info is stored as a 4-bit constant:
       
   938     //    X(oneshot)X(session)X(blanket)X(no)
       
   939     // e.g. 1011 (=11) means that oneshot, blanket and no are allowed.
       
   940     // The following constants are used to encode/decode the allowed modes
       
   941     // into/from a 4-bit number
       
   942     int INTERACTION_MODE_DENIED = 1;
       
   943     int INTERACTION_MODE_BLANKET = 2;
       
   944     int INTERACTION_MODE_SESSION = 4;
       
   945     int INTERACTION_MODE_ONESHOT = 8;
       
   946     TInt allowedInteractionModes = JavaCommonUtils::wstringToInt(allowedModes);
       
   947     int index = 0;
       
   948     int tmp = allowedInteractionModes & INTERACTION_MODE_ONESHOT;
       
   949     if (tmp <= 0)
       
   950     {
       
   951         aSettings.removeValue(index);
       
   952         index--;
       
   953     }
       
   954     index++;
       
   955     tmp = allowedInteractionModes & INTERACTION_MODE_SESSION;
       
   956     if (tmp <= 0)
       
   957     {
       
   958         aSettings.removeValue(index);
       
   959         index--;
       
   960     }
       
   961     index++;
       
   962     tmp = allowedInteractionModes & INTERACTION_MODE_BLANKET;
       
   963     if (tmp <= 0)
       
   964     {
       
   965         aSettings.removeValue(index);
       
   966         index--;
       
   967     }
       
   968     index++;
       
   969     tmp = allowedInteractionModes & INTERACTION_MODE_DENIED;
       
   970     if (tmp <= 0)
       
   971     {
       
   972         aSettings.removeValue(index);
       
   973     }
       
   974 }
       
   975 
       
   976 void JavaApplicationSettingsViewPrivate::writeToStorage(JavaApplicationSettings& aSettings)
       
   977 {
       
   978     if (aSettings.getTableName().size() <= 0
       
   979             || aSettings.getColumnName().size() <= 0)
       
   980     {
       
   981         // storage details are not provided -> no point in going further
       
   982         return;
       
   983     }
       
   984     JavaStorageApplicationEntry_t oldEntry;
       
   985     JavaStorageEntry attr;
       
   986     attr.setEntry(ID, mSuiteUid);
       
   987     oldEntry.insert(attr);
       
   988     JavaStorageApplicationEntry_t entry;
       
   989     if (aSettings.getFilterColumnName().size() > 0)
       
   990     {
       
   991         attr.setEntry(aSettings.getFilterColumnName(), aSettings.getFilterColumnValue());
       
   992         oldEntry.insert(attr);
       
   993     }
       
   994     attr.setEntry(aSettings.getColumnName(), aSettings.getStorageValues()[aSettings.getCurrentValue()]);
       
   995     entry.insert(attr);
       
   996 
       
   997     try
       
   998     {
       
   999         mStorage->update(aSettings.getTableName(), entry, oldEntry);
       
  1000     }
       
  1001     catch (JavaStorageException& aJse)
       
  1002     {
       
  1003         ELOG1(EJavaSettings, "Error while writing into storage %S", aJse.toString().c_str());
       
  1004     }
       
  1005     LOG2(EJavaSettings, EInfo,"Setting \"%S\" changed to \"%S\"", aSettings.getName().toStdWString().c_str(), aSettings.getValue(aSettings.getCurrentValue()).toStdWString().c_str());
       
  1006 
       
  1007 }
       
  1008 
       
  1009 void JavaApplicationSettingsViewPrivate::findEntry(const JavaStorageApplicationList_t& aQueryResult,
       
  1010         const std::wstring& aName,
       
  1011         std::wstring& aValue)
       
  1012 {
       
  1013     if (aQueryResult.size() > 0)
       
  1014     {
       
  1015         JavaStorageApplicationEntry_t entry = aQueryResult.front();
       
  1016         JavaStorageEntry findPattern;
       
  1017         findPattern.setEntry(aName, L"");
       
  1018         JavaStorageApplicationEntry_t::const_iterator findIterator =
       
  1019             entry.find(findPattern);
       
  1020         if (findIterator != entry.end())
       
  1021         {
       
  1022             aValue = findIterator->entryValue();
       
  1023         }
       
  1024     }
       
  1025 }
       
  1026 
       
  1027 bool JavaApplicationSettingsViewPrivate::isInStorage(const std::wstring& aColumnName, const std::wstring& aColumnFilterName, const std::wstring& aColumnFilterValue, const std::string& aTableName)
       
  1028 {
       
  1029     wstring value = readFromStorage(aColumnName, aColumnFilterName, aColumnFilterValue, aTableName);
       
  1030 
       
  1031     return (value.size() > 0);
       
  1032 }
       
  1033 
       
  1034 wstring JavaApplicationSettingsViewPrivate::readFromStorage(const std::wstring& aColumnName, const std::wstring& aColumnFilterName, const std::wstring& aColumnFilterValue, const std::string& aTableName)
       
  1035 {
       
  1036     wstring value = L"";
       
  1037 
       
  1038     JavaStorageApplicationEntry_t query;
       
  1039     JavaStorageApplicationList_t queryResult;
       
  1040     JavaStorageEntry attr;
       
  1041     attr.setEntry(ID, mSuiteUid);
       
  1042     query.insert(attr);
       
  1043     if (aColumnFilterName.size() > 0)
       
  1044     {
       
  1045         attr.setEntry(aColumnFilterName, aColumnFilterValue);
       
  1046         query.insert(attr);
       
  1047     }
       
  1048     attr.setEntry(aColumnName, L"");
       
  1049     query.insert(attr);
       
  1050 
       
  1051     try
       
  1052     {
       
  1053         mStorage->search(aTableName, query, queryResult);
       
  1054     }
       
  1055     catch (JavaStorageException& aJse)
       
  1056     {
       
  1057         // Don't leave. Set defaults.
       
  1058     }
       
  1059 
       
  1060     findEntry(queryResult, aColumnName, value);
       
  1061 
       
  1062     return value;
       
  1063 }
       
  1064 
       
  1065 vector<IndexedSettingsName> JavaApplicationSettingsViewPrivate::readFromStorage(const std::wstring& aColumnName, const std::string& aPrimaryTableName, const std::string& aSecondaryTableName)
       
  1066 {
       
  1067     vector<IndexedSettingsName> values;
       
  1068 
       
  1069     JavaStorageApplicationEntry_t query;
       
  1070     JavaStorageApplicationList_t queryResult;
       
  1071     JavaStorageEntry attr;
       
  1072     attr.setEntry(ID, mSuiteUid);
       
  1073     query.insert(attr);
       
  1074     attr.setEntry(aColumnName, L"");
       
  1075     query.insert(attr);
       
  1076 
       
  1077     try
       
  1078     {
       
  1079         mStorage->search(aPrimaryTableName, query, queryResult);
       
  1080 
       
  1081         JavaStorageApplicationList_t::const_iterator iterator;
       
  1082         JavaStorageApplicationList_t secondaryQueryResult;
       
  1083         for (iterator = queryResult.begin(); iterator != queryResult.end(); iterator++)
       
  1084         {
       
  1085             std::wstring name = L"";
       
  1086             JavaStorageApplicationEntry_t entry = (*iterator);
       
  1087             JavaStorageEntry findPattern;
       
  1088             findPattern.setEntry(aColumnName, L"");
       
  1089             JavaStorageApplicationEntry_t::const_iterator findIterator =
       
  1090                     entry.find(findPattern);
       
  1091             if (findIterator != entry.end())
       
  1092             {
       
  1093                 name = findIterator->entryValue();
       
  1094             }
       
  1095             if (name.size() > 0)
       
  1096             {
       
  1097                 entry.clear();
       
  1098                 query.clear();
       
  1099                 attr.setEntry(ID, mSuiteUid);
       
  1100                 query.insert(attr);
       
  1101                 attr.setEntry(aColumnName, name);
       
  1102                 query.insert(attr);
       
  1103                 secondaryQueryResult.clear();
       
  1104                 mStorage->search(aSecondaryTableName, query, secondaryQueryResult);
       
  1105                 if (secondaryQueryResult.size() > 0)
       
  1106                 {
       
  1107                     IndexedSettingsName value;
       
  1108                     value.name = name;
       
  1109                     value.index = LAST_SETTINGS_INDEX + 1;
       
  1110                     if (mSettingsNamesIndexes.contains(QString::fromStdWString(name)))
       
  1111                     {
       
  1112                         value.index = mSettingsNamesIndexes.value(QString::fromStdWString(name));
       
  1113                     }
       
  1114                     values.push_back(value);
       
  1115                 }
       
  1116             }
       
  1117         }
       
  1118     }
       
  1119     catch (JavaStorageException& aJse)
       
  1120     {
       
  1121         // Don't leave. Set defaults.
       
  1122     }
       
  1123 
       
  1124     return values;
       
  1125 }
       
  1126 
       
  1127 void JavaApplicationSettingsViewPrivate::readSuiteUid(const QString& aAppUid)
       
  1128 {
       
  1129     mSuiteUid = L"";
       
  1130     bool ok;
       
  1131     int tmp = aAppUid.toInt( &ok, 10 );
       
  1132     if (!ok)
       
  1133     {
       
  1134         return;
       
  1135     }
       
  1136     wstring appUid = L"";
       
  1137     appUid.append(L"[").append(QString("%1").arg(tmp, 0, 16).toStdWString()).append(L"]");
       
  1138 
       
  1139     JavaStorageApplicationEntry_t query;
       
  1140     JavaStorageApplicationList_t queryResult;
       
  1141     JavaStorageEntry attr;
       
  1142     attr.setEntry(ID, appUid);
       
  1143     query.insert(attr);
       
  1144     attr.setEntry(PACKAGE_ID, L"");
       
  1145     query.insert(attr);
       
  1146     try
       
  1147     {
       
  1148         mStorage->search(APPLICATION_TABLE, query, queryResult);
       
  1149     }
       
  1150     catch (JavaStorageException& aJse)
       
  1151     {
       
  1152         // Don't leave. Set defaults.
       
  1153         ELOG1(EJavaSettings, "Error while reading from storage %S", aJse.toString().c_str());
       
  1154     }
       
  1155     findEntry(queryResult, PACKAGE_ID, mSuiteUid);
       
  1156 }
       
  1157 
       
  1158 #include "moc_javaapplicationsettingsview.cpp"