diff -r e8e63152f320 -r 2a9601315dfc javamanager/javasettings/appmngrplugin/src/appmngr2midletsettingsview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javamanager/javasettings/appmngrplugin/src/appmngr2midletsettingsview.cpp Mon May 03 12:27:20 2010 +0300 @@ -0,0 +1,772 @@ +/* +* 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 // CAknViewAppUi +#include // CAknRadioButtonSettingPage +#include // FeatureManager +#include // StringLoader +#include // CAknTitlePane +#include // CAknMessageQueryDialog +#include // AknLayoutUtils +#include // HlpLauncher +#include "javaapplicationsettings.hlp.hrh" + +#include // Midlet resource IDs +#include // 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 +#include + +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(AppUi())->ProcessCommandL(EAknCmdExit); + break; + } + case EAknCmdHelp: + if (FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + CArrayFix* contexts = + new(ELeave) CArrayFixFlat(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 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; iAppendL(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& aAllSettings) +{ + iBlanketSettings = new bool[SENSIBLE_FUNCTION_GROUPS]; + for (int i=0; iSetMopParent(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 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 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; iInitListBoxContentL(listBoxItems); + AppUi()->AddToStackL(*this, iContainer); + LOG(EJavaAppMngrPlugin, EInfo, " - CAppMngr2MidletSettingsView::InitL "); +} + +void CAppMngr2MidletSettingsView::HandleMutuallyExclusiveSettingsL(const MidletSuiteSecuritySettings& aSettings) +{ + for (int i=0; i 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 values = listItem1.getValues(); + for (int j=0; jRefreshListBoxContentL(listItem1, listItem2); + } + } + } +} + +// End of File +