javamanager/javasettings/appmngrplugin/src/appmngr2midletsettingsview.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 27 Apr 2010 16:30:29 +0300
branchRCL_3
changeset 19 04becd199f91
permissions -rw-r--r--
Revision: v2.1.22 Kit: 201017

/*
* Copyright (c) 2003-2008 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:  CAppMngr2MidletSettingsView implementation
*
*/


// INCLUDE FILES
#include <aknViewAppUi.h>                       // CAknViewAppUi
#include <aknradiobuttonsettingpage.h>          // CAknRadioButtonSettingPage
#include <featmgr.h>                            // FeatureManager
#include <StringLoader.h>                       // StringLoader
#include <akntitle.h>                           // CAknTitlePane
#include <aknmessagequerydialog.h>              // CAknMessageQueryDialog
#include <AknUtils.h>                           // AknLayoutUtils
#include <hlplch.h>                             // HlpLauncher
#include "javaapplicationsettings.hlp.hrh"

#include <javaapplicationsettings.rsg>                   // Midlet resource IDs
#include <cmapplicationsettingsui.h>            // CCmApplicationSettingsUi

#include "appmngr2midletsettingscontainer.h"    // CAppMngr2MidletSettingsContainer
#include "appmngr2midletsettingsview.h"         // CAppMngr2MidletSettingsView
#include "javaapplicationsettings.hrh"                   // Midlet command IDs
#include "appmngr2midletsettingshandler.h"
#include "javasymbianoslayer.h"                 // STL <-- --> Symbian conv.
#include "securitystoragedatadefs.h"
#include "connectionmanager.h"                  // ConnectionManager.
#include "javacommonutils.h"
#include "logger.h"                     // LOG
#include "appmngr2midletresourcehandler.h" // CAppMngr2MidletResourceHandler

#include <vector>
#include <algorithm>

using namespace std;
using namespace java::util;

const int SECURITY_WARNINGS_MODE_PAGE = 1;
const int SECURITY_SETTINGS_PAGE = 2;
const int ON_SCREEN_KEYPAD_PAGE = 3;

const int SENSIBLE_FUNCTION_GROUPS = 9;
const int NET_ACCESS_SETTINGS_INDEX = 0;
const int LOW_LEVEL_NET_ACCESS_SETTINGS_INDEX = 1;
const int CALL_CONTROL_SETTINGS_INDEX = 2;
const int MESSAGING_SETTINGS_INDEX = 3;
const int RESTRICTED_MESSAGING_SETTINGS_INDEX = 4;
const int APPLICATION_AUTO_INVOCATION_SETTINGS_INDEX = 5;
const int LOCAL_CONNECTIVITY_SETTINGS_INDEX = 6;
const int MULTIMEDIA_RECORDING_SETTINGS_INDEX = 7;
const int READ_USER_DATA_ACCESS_SETTINGS_INDEX = 8;

const TUid KOwnUid = { 0x20016BF7 };  // Own Uid, used with help

// ================= MEMBER FUNCTIONS =======================

CAppMngr2MidletSettingsView* CAppMngr2MidletSettingsView::NewL(
    const TDesC& aMidletSuiteName,
    TUid aMidletSuiteUid,
    CAppMngr2MidletResourceHandler& aResourceHandler)
{
    LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletSettingsView::NewL ");
    CAppMngr2MidletSettingsView* self
    = new(ELeave) CAppMngr2MidletSettingsView(aResourceHandler);
    CleanupStack::PushL(self);
    self->ConstructL(aMidletSuiteName, aMidletSuiteUid);
    CleanupStack::Pop(self);
    LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletSettingsView::NewL ");
    return self;
}

// ---------------------------------------------------------
// CAppMngr2MidletSettingsView::CAppMngr2MidletSettingsView
// ---------------------------------------------------------
//
CAppMngr2MidletSettingsView::CAppMngr2MidletSettingsView(CAppMngr2MidletResourceHandler& aResourceHandler)
        : iContainer(NULL), iSettingsHandler(NULL), iOnscreenKeypadSettingsVisible(EFalse), iSecuritySettingsVisible(EFalse), iResourceFileOffset(0), iResourceHandler(aResourceHandler)
{
    LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletSettingsView::CAppMngr2MidletSettingsView ");
    LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletSettingsView::CAppMngr2MidletSettingsView ");
}

// ---------------------------------------------------------
// CAppMngr2MidletSettingsView::ConstructL(const TRect& aRect)
// EPOC two-phased constructor
// ---------------------------------------------------------
//
void CAppMngr2MidletSettingsView::ConstructL(const TDesC& aMidletSuiteName,TUid aMidletSuiteUid)
{
    LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletSettingsView::ConstructL ");
    iResourceFileOffset = iResourceHandler.AddResourceFileL();
    BaseConstructL(R_APPMNGR_VIEW_CONTEXT_SPECIFIC);
    InitL(aMidletSuiteName,aMidletSuiteUid);
    LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletSettingsView::ConstructL ");
}

// ---------------------------------------------------------
// CAppMngr2MidletSettingsView::~CAppMngr2MidletSettingsView()
// Class destructor
// ---------------------------------------------------------
//
CAppMngr2MidletSettingsView::~CAppMngr2MidletSettingsView()
{
    LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletSettingsView::~CAppMngr2MidletSettingsView ");
    if (iContainer)
    {
        AppUi()->RemoveFromViewStack(*this, iContainer);
    }
    delete iSettingsHandler;
    delete iContainer;
    delete[] iBlanketSettings;
    LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletSettingsView::~CAppMngr2MidletSettingsView ");
}

// ---------------------------------------------------------
// TUid CAppMngr2MidletSettingsView::Id()
// Return settings view id
// ---------------------------------------------------------
//
TUid CAppMngr2MidletSettingsView::Id() const
{
    LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletSettingsView::Id ");
    return KMidletSuiteSettingsViewId;
}

// ---------------------------------------------------------
// CAppMngr2MidletSettingsView::HandleClientRectChange()
// ---------------------------------------------------------
//
void CAppMngr2MidletSettingsView::HandleClientRectChange()
{
    LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletSettingsView::HandleClientRectChange ");
    if (iContainer)
    {
        iContainer->SetRect(ClientRect());
    }
}

// ---------------------------------------------------------
// CAppMngr2MidletSettingsView::DoActivateL(...)
// Activates the view
// ---------------------------------------------------------
//
void CAppMngr2MidletSettingsView::DoActivateL(
    const TVwsViewId& aPrevViewId, TUid /*aCustomMessageId*/,
    const TDesC8& /*aCustomMessage*/)
{
    LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletSettingsView::DoActivateL ");
    iPrevViewId = aPrevViewId;
    iContainer->MakeVisible(ETrue);
    iContainer->SetRect(ClientRect());
    iContainer->ActivateL();
    iContainer->ListBox()->SetListBoxObserver(this);
    iContainer->ListBox()->DrawNow();
    LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletSettingsView::DoActivateL ");
}

// ---------------------------------------------------------------------------
// CAppMngr2MidletSettingsView::HandleCommandL(TInt aCommand)
// ---------------------------------------------------------------------------
void CAppMngr2MidletSettingsView::HandleCommandL(TInt aCommand)
{
    LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletSettingsView::HandleCommand ");
    switch (aCommand)
    {
    case EAknSoftkeyChange:
    case EAppMngrCmdOkPressed:
    case EAknSoftkeySelect:
    {
        HandleSettingsL();
        break;
    }
    case EAknSoftkeyBack:
    {
        AppUi()->ActivateLocalViewL(iPrevViewId.iViewUid);
        break;
    }
    case EAknSoftkeyExit:
    {
        static_cast<MEikCommandObserver*>(AppUi())->ProcessCommandL(EAknCmdExit);
        break;
    }
    case EAknCmdHelp:
        if (FeatureManager::FeatureSupported(KFeatureIdHelp))
        {
            CArrayFix<TCoeHelpContext>* contexts =
                new(ELeave) CArrayFixFlat<TCoeHelpContext>(1);
            CleanupStack::PushL(contexts);
            TCoeHelpContext context;
            context.iMajor = KOwnUid;
            context.iContext = HLP_JAVA_APPLICATION_SETTINGS;
            contexts->AppendL(context);
            CleanupStack::Pop(contexts);
            HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), contexts);
        }
        break;
    default:
    {
        AppUi()->HandleCommandL(aCommand);
        break;
    }
    }
    LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletSettingsView::HandleCommand ");
}


// ---------------------------------------------------------------------------
// CAppMngr2MidletSettingsView::HandleListBoxEventL
//
// ---------------------------------------------------------------------------
//
void CAppMngr2MidletSettingsView::HandleListBoxEventL(CEikListBox* /*aListBox*/,
        TListBoxEvent aEventType)
{
    LOG(EJavaAppMngrPlugin, EInfo, " CAppMngr2MidletSettingsView::HandleListBoxEventL ");
    switch (aEventType)
    {
    case EEventEnterKeyPressed:
    case EEventItemDoubleClicked:
    case EEventItemSingleClicked:
        HandleSettingsL();
        break;
    default:
        break;
    }
}

void CAppMngr2MidletSettingsView::HandleSettingsL()
{
    switch (iContainer->ListBox()->CurrentItemIndex())
    {
    case 0:
        ShowAccessPointPageL();
        break;
    case 1:
        if (iOnscreenKeypadSettingsVisible)
        {
            ShowPageL(ON_SCREEN_KEYPAD_PAGE);
        }
        else if (iSecuritySettingsVisible)
        {
            ShowPageL(SECURITY_WARNINGS_MODE_PAGE);
        }
        break;
    case 2:
        if (iOnscreenKeypadSettingsVisible && iSecuritySettingsVisible)
        {
            ShowPageL(SECURITY_WARNINGS_MODE_PAGE);
            break;
        }
    default:
        ShowPageL(SECURITY_SETTINGS_PAGE);
    }
}

/**
 * Start settings page
 */
void CAppMngr2MidletSettingsView::ShowAccessPointPageL()
{
    TUint32 snapId = JavaCommonUtils::wstringToInt(iContainer->GetListBoxItem(0).getValue().getId());

    // show the dialog
    CCmApplicationSettingsUi* handler = CCmApplicationSettingsUi::NewLC();
    TUint listItems = CMManager::EShowAlwaysAsk
                      | CMManager::EShowDefaultConnection
                      | CMManager::EShowDestinations;
    TBearerFilterArray filter;
    TCmSettingSelection selection;
    switch (snapId)
    {
    case(TUint)KAlwaysAskId:
        selection.iResult = CMManager::EAlwaysAsk;
        break;
    case(TUint)KJavaNetworkAccessNotSpecified:
    case(TUint)KDefaultConnection:
        selection.iResult = CMManager::EDefaultConnection;
        break;
    default:    // User defined SNAP
        selection.iResult = CMManager::EDestination;
    }
    selection.iId = snapId;
    TBool ret = handler->RunApplicationSettingsL(selection, listItems, filter);
    CleanupStack::PopAndDestroy(handler);
    if (ret)
    {
        switch (selection.iResult)
        {
        case CMManager::EAlwaysAsk:
            snapId = (TUint)KAlwaysAskId;
            break;
        case CMManager::EDestination:
            snapId = selection.iId;
            break;
        case CMManager::EDefaultConnection:
            snapId = (TUint)KDefaultConnection;
            break;
        default:
            User::Leave(KErrNotSupported);
        }
        CAppMngr2SuiteSnapItem* snap = new(ELeave) CAppMngr2SuiteSnapItem;
        CleanupStack::PushL(snap);
        snap->iId = snapId;
        iSettingsHandler->SetSnapL(*snap);
        CleanupStack::PopAndDestroy(snap);
        CAppMngr2SuiteSnapItem* newSnap = iSettingsHandler->GetSnapL();
        CleanupStack::PushL(newSnap);
        iContainer->RefreshListBoxContentL(0,  0, AppMngr2MidletSettingsUtil::SnapToListItem(*newSnap, true /* enabled */));
        CleanupStack::PopAndDestroy(newSnap);
    }

    LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletSettingsHandler::ShowSuiteSnapSelectDialogL ");
}

/**
 * Start page
 */
void CAppMngr2MidletSettingsView::ShowPageL(int pageId)
{
    TInt listBoxContentCurrentItemIndex = iContainer->ListBox()->CurrentItemIndex();
    if (!iOnscreenKeypadSettingsVisible)
    {
        listBoxContentCurrentItemIndex++;
    }
    ListItem currentItem = iContainer->GetListBoxItem(listBoxContentCurrentItemIndex);
    TInt selectionIndex = currentItem.getCurrentValue();
    int currentSelection = currentItem.getCurrentValue();
    vector<LocalizedString> values = currentItem.getValues();

    if (values.size() == 1)
    {
        // stop right here
        return;
    }

    if (values.size() == 2)
    {
        // if there are only two values, then do a quick selection (change to the other one)
        selectionIndex = (currentSelection == 0 ? 1 : 0);
    }
    else
    {
        // if there are more than two values, go on show the list
        CDesCArrayFlat* itemArray = new(ELeave) CDesCArrayFlat(values.size());
        CleanupStack::PushL(itemArray);
        for (int i=0; i<values.size(); i++)
        {
            wstring value = values[i].getValue();
            TPtr ptr((unsigned short*)value.c_str(), value.size());
            ptr.SetLength(value.size());
            itemArray->AppendL(ptr);
        }
        CAknSettingPage* dlg = new(ELeave) CAknRadioButtonSettingPage(
            AppMngr2MidletSettingsUtil::GetLocalizedSettingsName(
                currentItem.getName().getId()),
            selectionIndex, itemArray);

        // execute the setting page and check if the setting value was changed:
        dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged);
        CleanupStack::PopAndDestroy(itemArray);
    }
    // handle the selection
    if (currentSelection != selectionIndex)
    {
        iContainer->SetListBoxItemValue(
            listBoxContentCurrentItemIndex,
            selectionIndex);
        int err = KErrNone;
        MidletSuiteSecuritySettings settings;
        switch (pageId)
        {
        case SECURITY_WARNINGS_MODE_PAGE:
            err = iSettingsHandler->SetSecurityWarningsMode(
                      (selectionIndex == 0 ? SECURITY_WARNINGS_DEFAULT_MODE:SECURITY_WARNINGS_USER_DEFINED_MODE));
            if (err == KErrNone)
            {
                iContainer->RefreshListBoxContentL(
                    listBoxContentCurrentItemIndex,
                    selectionIndex,
                    (selectionIndex == 1) /* aAllEnabled*/);
            }
            break;
        case SECURITY_SETTINGS_PAGE:
            settings = AppMngr2MidletSettingsUtil::ListItemToSettings(
                           iContainer->GetListBoxItem(listBoxContentCurrentItemIndex));
            if (!CheckBlanketSettingsL(settings))
            {
                err = KErrNotFound;
                break;
            }
            err = iSettingsHandler->SetSecuritySettings(
                      settings.getName(), settings.getCurrentInteractionMode());
            if (err == KErrNone)
            {
                if (settings.getCurrentInteractionMode() == BLANKET_INTERACTION_MODE)
                {
                    // "blanket mode, if selected by the user, MUST NOT result in any
                    // additional prompts" (MIDP spec) -> mark down that the prompt
                    // in blanket mode was shown
                    iSettingsHandler->SetUserSecuritySettingsPromptFlag(
                        settings.getName(),
                        true /* prompt is blanket mode was shown */);
                }
                // do the refresh
                iContainer->RefreshListBoxContentL(
                    listBoxContentCurrentItemIndex, selectionIndex);
            }
            break;
        case ON_SCREEN_KEYPAD_PAGE:
            err = iSettingsHandler->SetOnScreenKeypadValueL(
                      iContainer->GetListBoxItem(listBoxContentCurrentItemIndex)
                      .getValue().getId());
            if (err == KErrNone)
            {
                iContainer->RefreshListBoxContentL(
                    listBoxContentCurrentItemIndex,  selectionIndex);
            }
            break;
        }
        if (err != KErrNone)
        {
            // roll back to the original selection for the value
            iContainer->SetListBoxItemValue(
                listBoxContentCurrentItemIndex, currentSelection);
        }
    }
}

// ---------------------------------------------------------
// CAppMngr2MidletSettingsView::DoDeactivate()
// Deactivate this view
// ---------------------------------------------------------
//
void CAppMngr2MidletSettingsView::DoDeactivate()
{
    LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletSettingsView::DoDeactivate ");
    if (iContainer)
    {
        iContainer->MakeVisible(EFalse);
    }
    if (iResourceFileOffset > 0)
    {
        iResourceHandler.DeleteResourceFile(iResourceFileOffset);
        iResourceFileOffset = 0;
    }
    LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletSettingsView::DoDeactivate ");
}

// ---------------------------------------------------------
// CAppMngr2MidletSettingsView::ShowWarningSecDlgL()
// high risk (net acces, messaging, call control, local connectivity) + (multimedia, read user data)
// ---------------------------------------------------------
//
bool CAppMngr2MidletSettingsView::ShowWarningSecDlgL(bool networkUsage)
{
    HBufC* header = StringLoader::LoadLC(R_JAVA_SEC_HEADER);
    HBufC* warning_sec = NULL;
    if (networkUsage)
    {
        warning_sec = StringLoader::LoadLC(R_JAVA_QUERY_MIDLET_PERM_NET);
    }
    else
    {
        warning_sec = StringLoader::LoadLC(R_JAVA_QUERY_MIDLET_PERM_SEC);
    }
    CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL(*warning_sec);
    CleanupStack::PushL(dlg);
    dlg->PrepareLC(R_APPMNGR_QUERY_DIALOG_OK_CANCEL);
    dlg->QueryHeading()->SetTextL(*header);
    dlg->QueryHeading()->SetLayout(CAknPopupHeadingPane::EQueryHeadingPane);
    CleanupStack::Pop(dlg);
    bool ret = (dlg->RunLD() == EAknSoftkeyOk);
    CleanupStack::PopAndDestroy(warning_sec);
    CleanupStack::PopAndDestroy(header);
    return ret;
}

// ---------------------------------------------------------
// CAppMngr2MidletSettingsView::ShowWarningExclDlgL()
// mutually exclusive auto invocation + net access
// ---------------------------------------------------------
//
bool CAppMngr2MidletSettingsView::ShowWarningExclDlgL()
{
    HBufC* header = StringLoader::LoadLC(R_JAVA_SEC_HEADER);
    HBufC* warning_excl = StringLoader::LoadLC(R_JAVA_QUERY_MIDLET_PERM_EXCL);
    CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL(*warning_excl);
    CleanupStack::PushL(dlg);
    dlg->PrepareLC(R_APPMNGR_QUERY_DIALOG_OK_CANCEL);
    dlg->QueryHeading()->SetTextL(*header);
    dlg->QueryHeading()->SetLayout(CAknPopupHeadingPane::EQueryHeadingPane);
    CleanupStack::Pop(dlg);
    bool ret = (dlg->RunLD() == EAknSoftkeyOk);
    CleanupStack::PopAndDestroy(warning_excl);
    CleanupStack::PopAndDestroy(header);
    return ret;
}

/**
 */
void CAppMngr2MidletSettingsView::InitSettings(const std::vector<MidletSuiteSecuritySettings>& aAllSettings)
{
    iBlanketSettings = new bool[SENSIBLE_FUNCTION_GROUPS];
    for (int i=0; i<SENSIBLE_FUNCTION_GROUPS; i++)
    {
        iBlanketSettings[i] = false;
    }
    for (int i=0; i<aAllSettings.size(); i++)
    {
        if (aAllSettings[i].getName() == NET_ACCESS_SETTINGS)
        {
            iMutuallyExclusiveSettings.push_back(aAllSettings[i]);
            iBlanketSettings[NET_ACCESS_SETTINGS_INDEX] =
                (aAllSettings[i].getCurrentInteractionMode() == BLANKET_INTERACTION_MODE);
        }
        else if (aAllSettings[i].getName() == LOW_LEVEL_NET_ACCESS_SETTINGS)
        {
            iBlanketSettings[LOW_LEVEL_NET_ACCESS_SETTINGS_INDEX] =
                (aAllSettings[i].getCurrentInteractionMode() == BLANKET_INTERACTION_MODE);
        }
        else if (aAllSettings[i].getName() == MESSAGING_SETTINGS)
        {
            iBlanketSettings[MESSAGING_SETTINGS_INDEX] =
                (aAllSettings[i].getCurrentInteractionMode() == BLANKET_INTERACTION_MODE);
        }
        else if (aAllSettings[i].getName() == RESTRICTED_MESSAGING_SETTINGS)
        {
            iBlanketSettings[RESTRICTED_MESSAGING_SETTINGS_INDEX] =
                (aAllSettings[i].getCurrentInteractionMode() == BLANKET_INTERACTION_MODE);
        }
        else if (aAllSettings[i].getName() == CALL_CONTROL_SETTINGS)
        {
            iBlanketSettings[CALL_CONTROL_SETTINGS_INDEX] =
                (aAllSettings[i].getCurrentInteractionMode() == BLANKET_INTERACTION_MODE);
        }
        else if (aAllSettings[i].getName() == LOCAL_CONNECTIVITY_SETTINGS)
        {
            iBlanketSettings[LOCAL_CONNECTIVITY_SETTINGS_INDEX] =
                (aAllSettings[i].getCurrentInteractionMode() == BLANKET_INTERACTION_MODE);
        }
        else if (aAllSettings[i].getName() == MULTIMEDIA_RECORDING_SETTINGS)
        {
            iBlanketSettings[MULTIMEDIA_RECORDING_SETTINGS_INDEX] =
                (aAllSettings[i].getCurrentInteractionMode() == BLANKET_INTERACTION_MODE);
        }
        else if (aAllSettings[i].getName() == READ_USER_DATA_ACCESS_SETTINGS)
        {
            iBlanketSettings[READ_USER_DATA_ACCESS_SETTINGS_INDEX] =
                (aAllSettings[i].getCurrentInteractionMode() == BLANKET_INTERACTION_MODE);
        }
        else if (aAllSettings[i].getName() == APPLICATION_AUTO_INVOCATION_SETTINGS)
        {
            iMutuallyExclusiveSettings.push_back(aAllSettings[i]);
            iBlanketSettings[APPLICATION_AUTO_INVOCATION_SETTINGS_INDEX] =
                (aAllSettings[i].getCurrentInteractionMode() == BLANKET_INTERACTION_MODE);
        }
    }
}

void CAppMngr2MidletSettingsView::UpdateBlanketSettings(const MidletSuiteSecuritySettings& aSettings, bool aBlanket)
{
    if (aSettings.getName() == NET_ACCESS_SETTINGS)
    {
        iBlanketSettings[NET_ACCESS_SETTINGS_INDEX] = aBlanket;
    }
    else if (aSettings.getName() == LOW_LEVEL_NET_ACCESS_SETTINGS)
    {
        iBlanketSettings[LOW_LEVEL_NET_ACCESS_SETTINGS_INDEX] = aBlanket;
    }
    else if (aSettings.getName() == MESSAGING_SETTINGS)
    {
        iBlanketSettings[MESSAGING_SETTINGS_INDEX] = aBlanket;
    }
    else if (aSettings.getName() == RESTRICTED_MESSAGING_SETTINGS)
    {
        iBlanketSettings[RESTRICTED_MESSAGING_SETTINGS_INDEX] = aBlanket;
    }
    else if (aSettings.getName() == CALL_CONTROL_SETTINGS)
    {
        iBlanketSettings[CALL_CONTROL_SETTINGS_INDEX] = aBlanket;
    }
    else if (aSettings.getName() == LOCAL_CONNECTIVITY_SETTINGS)
    {
        iBlanketSettings[LOCAL_CONNECTIVITY_SETTINGS_INDEX] = aBlanket;
    }
    else if (aSettings.getName() == MULTIMEDIA_RECORDING_SETTINGS)
    {
        iBlanketSettings[MULTIMEDIA_RECORDING_SETTINGS_INDEX] = aBlanket;
    }
    else if (aSettings.getName() == READ_USER_DATA_ACCESS_SETTINGS)
    {
        iBlanketSettings[READ_USER_DATA_ACCESS_SETTINGS_INDEX] = aBlanket;
    }
    else if (aSettings.getName() == APPLICATION_AUTO_INVOCATION_SETTINGS)
    {
        iBlanketSettings[APPLICATION_AUTO_INVOCATION_SETTINGS_INDEX] = aBlanket;
    }
}

bool CAppMngr2MidletSettingsView::CheckBlanketSettingsL(const MidletSuiteSecuritySettings& aSettings)
{
    if (aSettings.getCurrentInteractionMode() != BLANKET_INTERACTION_MODE)
    {
        UpdateBlanketSettings(aSettings, false);
        return true;
    }
    if ((aSettings.getName() == NET_ACCESS_SETTINGS
            && iBlanketSettings[APPLICATION_AUTO_INVOCATION_SETTINGS_INDEX])
            || (aSettings.getName() == APPLICATION_AUTO_INVOCATION_SETTINGS
                && iBlanketSettings[NET_ACCESS_SETTINGS_INDEX]))
    {
        bool accept = ShowWarningExclDlgL();
        if (accept)
        {
            UpdateBlanketSettings(aSettings, true);
            // change the other setting to the next maximum allowed
            HandleMutuallyExclusiveSettingsL(aSettings);
        }
        return accept;
    }
    if (((aSettings.getName() == NET_ACCESS_SETTINGS
            || aSettings.getName() == LOW_LEVEL_NET_ACCESS_SETTINGS
            || aSettings.getName() == MESSAGING_SETTINGS
            || aSettings.getName() == RESTRICTED_MESSAGING_SETTINGS
            || aSettings.getName() == CALL_CONTROL_SETTINGS
            || aSettings.getName() == LOCAL_CONNECTIVITY_SETTINGS)
            && (iBlanketSettings[MULTIMEDIA_RECORDING_SETTINGS_INDEX]
                || iBlanketSettings[READ_USER_DATA_ACCESS_SETTINGS_INDEX]))
            || ((aSettings.getName() == MULTIMEDIA_RECORDING_SETTINGS
                 || aSettings.getName() == READ_USER_DATA_ACCESS_SETTINGS)
                && (iBlanketSettings[NET_ACCESS_SETTINGS_INDEX]
                    || iBlanketSettings[LOW_LEVEL_NET_ACCESS_SETTINGS_INDEX]
                    || iBlanketSettings[MESSAGING_SETTINGS_INDEX]
                    || iBlanketSettings[RESTRICTED_MESSAGING_SETTINGS_INDEX]
                    || iBlanketSettings[CALL_CONTROL_SETTINGS_INDEX]
                    || iBlanketSettings[LOCAL_CONNECTIVITY_SETTINGS_INDEX])))
    {
        bool accept = ShowWarningSecDlgL(
                          (aSettings.getName() != LOCAL_CONNECTIVITY_SETTINGS
                           && !iBlanketSettings[LOCAL_CONNECTIVITY_SETTINGS_INDEX]));
        if (accept)
        {
            UpdateBlanketSettings(aSettings, true);
        }
        return accept;
    }
    else if (aSettings.getCurrentInteractionMode() == BLANKET_INTERACTION_MODE)
    {
        UpdateBlanketSettings(aSettings, true);
    }
    return true;
}

void CAppMngr2MidletSettingsView::InitL(const TDesC& aMidletSuiteName,TUid aMidletSuiteUid)
{
    LOG(EJavaAppMngrPlugin, EInfo, " + CAppMngr2MidletSettingsView::InitL ");

    // init the settings handler
    iSettingsHandler = CAppMngr2MidletSettingsHandler::NewL(aMidletSuiteName,aMidletSuiteUid, iResourceHandler);
    // Show on-screen Keypad settings only in devices having touch display
    iOnscreenKeypadSettingsVisible = AknLayoutUtils::PenEnabled();
    // Construct the container and make it visible
    iContainer = new(ELeave) CAppMngr2MidletSettingsContainer(*this);
    // Set the MObjectProvider parent for the container window
    iContainer->SetMopParent(this);
    iContainer->ConstructL(ClientRect());
    HBufC* jamSetTitle = StringLoader::LoadLC(R_JAVA_SET_TITLE, aMidletSuiteName);
    CEikStatusPane* statusPane = StatusPane();
    CAknTitlePane* titlePane;
    titlePane = (CAknTitlePane*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle));
    titlePane->SetTextL(jamSetTitle->Des());
    CleanupStack::PopAndDestroy(jamSetTitle);
    // fill in the list items
    std::vector<ListItem> listBoxItems;
    // access point
    CAppMngr2SuiteSnapItem* snap = iSettingsHandler->GetSnapL();
    CleanupStack::PushL(snap);
    listBoxItems.push_back(AppMngr2MidletSettingsUtil::SnapToListItem(
                               *snap, true /* enabled */));
    CleanupStack::PopAndDestroy(snap);
    // on screen Keypad
    wstring onScreenKeypad = iSettingsHandler->GetOnScreenKeypadValueL();
    if (iSettingsHandler->OnScreenKeypadValuePreDefinedL())
    {
        iOnscreenKeypadSettingsVisible = EFalse;
    }
    listBoxItems.push_back(AppMngr2MidletSettingsUtil::OnScreenKeypadToListItem(
                               onScreenKeypad, iOnscreenKeypadSettingsVisible));
    // security warnings mode
    vector<MidletSuiteSecuritySettings> settings;
    iSettingsHandler->GetSecuritySettings(settings);
    iSecuritySettingsVisible = (settings.size() > 0);
    wstring securityWarningsMode = iSettingsHandler->GetSecurityWarningsMode();
    listBoxItems.push_back(AppMngr2MidletSettingsUtil::SecurityWarningsModeToListItem(
                               securityWarningsMode, iSecuritySettingsVisible));
    // blanket settings
    InitSettings(settings);
    // function groups
    for (int i=0; i<settings.size(); i++)
    {
        listBoxItems.push_back(AppMngr2MidletSettingsUtil::SettingsToListItem(
                                   settings[i],
                                   (iSecuritySettingsVisible && securityWarningsMode == SECURITY_WARNINGS_USER_DEFINED_MODE)));
    }
    // sort the vector
    std::sort(listBoxItems.begin(), listBoxItems.end(),
              AppMngr2MidletSettingsUtil::AscendingListItemSort());
    iContainer->InitListBoxContentL(listBoxItems);
    AppUi()->AddToStackL(*this, iContainer);
    LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletSettingsView::InitL ");
}

void CAppMngr2MidletSettingsView::HandleMutuallyExclusiveSettingsL(const MidletSuiteSecuritySettings& aSettings)
{
    for (int i=0; i<iMutuallyExclusiveSettings.size(); i++)
    {
        if (iMutuallyExclusiveSettings[i].getName() != aSettings.getName())
        {
            TInt allowedInteractionModes = JavaCommonUtils::wstringToInt(
                                               iMutuallyExclusiveSettings[i].getAllowedInteractionModes());
            wstring currentInteractionMode = iMutuallyExclusiveSettings[i]
                                             .getCurrentInteractionMode();
            if ((allowedInteractionModes & INTERACTION_MODE_SESSION) > 0)
            {
                currentInteractionMode = SESSION_INTERACTION_MODE;
            }
            else if ((allowedInteractionModes & INTERACTION_MODE_ONESHOT) > 0)
            {
                currentInteractionMode = ONESHOT_INTERACTION_MODE;
            }
            else if ((allowedInteractionModes & INTERACTION_MODE_DENIED) > 0)
            {
                currentInteractionMode = DENIED_INTERACTION_MODE;
            }
            int err = iSettingsHandler->SetSecuritySettings(
                          iMutuallyExclusiveSettings[i].getName(), currentInteractionMode);
            if (err == KErrNone)
            {
                UpdateBlanketSettings(iMutuallyExclusiveSettings[i], false);
                // do the refresh
                ListItem listItem1 = AppMngr2MidletSettingsUtil::SettingsToListItem(
                                         iMutuallyExclusiveSettings[i], true);
                ListItem listItem2(listItem1);
                std::vector<LocalizedString> values = listItem1.getValues();
                for (int j=0; j<values.size(); j++)
                {
                    if (values[j].getId() == currentInteractionMode)
                    {
                        listItem2.setCurrentValue(j);
                        break;
                    }
                }
                iContainer->RefreshListBoxContentL(listItem1, listItem2);
            }
        }
    }
}

// End of File