--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gssettingsuis/Gs/GSDataCallPlugin/Src/GSDataCallPlugin.cpp Thu Dec 17 08:52:52 2009 +0200
@@ -0,0 +1,483 @@
+/*
+* Copyright (c) 2002, 2003 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: View for Data call sub-folder
+*
+*/
+
+
+// INCLUDE FILES
+#include "GSDataCallPlugin.h"
+#include "GSDataCallPluginModel.h"
+#include "GSDataCallPluginContainer.h"
+#include "GsDataCallPlugin.hrh"
+#include <gsdatacallplugin.mbg> // Icons
+#include <GsDataCallPluginRsc.rsg>
+#include <gsfwviewuids.h>
+#include <gsprivatepluginproviderids.h>
+
+#include <AknQueryDialog.h>
+#include <aknradiobuttonsettingpage.h>
+#include <aknViewAppUi.h>
+#include <featmgr.h>
+#include <StringLoader.h>
+#include <bautils.h>
+#include <coeaui.h>
+#include <eikfrlbd.h>
+#include <gulicon.h>
+#include <hlplch.h> // For HlpLauncher
+
+#include <gscommon.hrh>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+const TInt KGSAutodTimeIndex = 0;
+
+_LIT( KGSDataCallPluginResourceFileName, "z:GSDataCallPluginRsc.rsc" );
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ==============================
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ----------------------------------------------------------------------------
+// CGSDataCallPlugin::CGSDataCallPlugin()
+//
+// Constructor
+// ----------------------------------------------------------------------------
+//
+CGSDataCallPlugin::CGSDataCallPlugin()
+ : iResourceLoader( *iCoeEnv )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSDataCallPlugin::NewL()
+//
+// Symbian OS default constructor
+// ---------------------------------------------------------------------------
+CGSDataCallPlugin* CGSDataCallPlugin::NewL( TAny* /*aInitParams*/ )
+ {
+ CGSDataCallPlugin* self = new( ELeave ) CGSDataCallPlugin ();
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CGSDataCallPlugin::ConstructL()
+//
+// Symbian OS two-phased constructor
+// ---------------------------------------------------------------------------
+void CGSDataCallPlugin::ConstructL()
+ {
+ FeatureManager::InitializeLibL();
+ // Find the resource file
+ TParse parse;
+ parse.Set( KGSDataCallPluginResourceFileName,
+ &KDC_RESOURCE_FILES_DIR, NULL );
+ TFileName fileName( parse.FullName() );
+
+ // Get language of resource file
+ BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
+
+ // Open resource file
+ iResourceLoader.OpenL( fileName );
+
+ iModel = CGSDataCallPluginModel::NewL();
+
+ BaseConstructL( R_GS_DCALL_VIEW );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CGSDataCallPlugin::~CGSDataCallPlugin
+//
+// Destructor
+// ----------------------------------------------------------------------------
+CGSDataCallPlugin::~CGSDataCallPlugin()
+ {
+ FeatureManager::UnInitializeLib();
+ iResourceLoader.Close();
+ if ( iModel )
+ {
+ delete iModel;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// TUid CGSDataCallPlugin::Id()
+//
+// Returns view's ID.
+// ---------------------------------------------------------------------------
+TUid CGSDataCallPlugin::Id() const
+ {
+ return KGSDataCallPluginUid;
+ }
+
+
+// ========================= From CGSPluginInterface ==================
+
+// ----------------------------------------------------------------------------
+// CGSDataCallPlugin::GetCaption
+//
+// Return application/view caption.
+// ----------------------------------------------------------------------------
+//
+void CGSDataCallPlugin::GetCaptionL( TDes& aCaption ) const
+ {
+ // the resource file is already opened.
+ HBufC* result = StringLoader::LoadL( R_GS_DATACALL_VIEW_CAPTION );
+
+ aCaption.Copy( *result );
+ delete result;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CGSDataCallPlugin::PluginProviderCategory
+//
+// A means to identify the location of this plug-in in the framework.
+// ----------------------------------------------------------------------------
+//
+TInt CGSDataCallPlugin::PluginProviderCategory() const
+ {
+ //To identify internal plug-ins.
+ return KGSPluginProviderInternal;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CGSDataCallPlugin::Visible
+//
+// Provides the visibility status of self to framework.
+// ----------------------------------------------------------------------------
+//
+TBool CGSDataCallPlugin::Visible() const
+ {
+ TBool visible = EFalse;
+
+ if ( FeatureManager::FeatureSupported( KFeatureIdAppCsdSupport ) )
+ {
+ visible = ETrue;
+ }
+
+ return visible;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSDataCallPlugin::HandleCommandL(TInt aCommand)
+//
+// Handles commands directed to this class.
+// ---------------------------------------------------------------------------
+void CGSDataCallPlugin::HandleCommandL( TInt aCommand )
+ {
+ switch ( aCommand )
+ {
+ case EGSMSKCmdAppChange:
+ case EGSCmdAppChange:
+ HandleListBoxSelectionL();
+ break;
+ case EAknSoftkeyBack:
+ #ifdef RD_CONTROL_PANEL
+ iAppUi->ActivateLocalViewL( KGSAdminPluginUid );
+ #else //RD_CONTROL_PANEL
+ iAppUi->ActivateLocalViewL( KGSConPluginUid );
+ #endif //RD_CONTROL_PANEL
+ break;
+ case EAknCmdHelp:
+ {
+ if( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ HlpLauncher::LaunchHelpApplicationL(
+ iEikonEnv->WsSession(), iAppUi->AppHelpContextL() );
+ }
+ break;
+ }
+ default:
+ iAppUi->HandleCommandL( aCommand );
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSDataCallPlugin::UpdateListBoxL
+//
+// Updates listbox items.
+// ---------------------------------------------------------------------------
+//
+void CGSDataCallPlugin::UpdateListBoxL( TInt aItemId )
+ {
+ if( Container() )
+ {
+ Container()->UpdateListBoxL( aItemId );
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CGSDataCallPlugin::Container
+//
+// Return handle to container class.
+// ----------------------------------------------------------------------------
+//
+CGSDataCallPluginContainer* CGSDataCallPlugin::Container()
+ {
+ return static_cast<CGSDataCallPluginContainer*>( iContainer );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSDataCallPlugin::NewContainerL()
+//
+// Creates new iContainer.
+// ---------------------------------------------------------------------------
+//
+void CGSDataCallPlugin::NewContainerL()
+ {
+ iContainer = new( ELeave ) CGSDataCallPluginContainer;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CGSDataCallPlugin::DoActivateL
+//
+// First method called by the Avkon framwork to invoke a view.
+// ----------------------------------------------------------------------------
+//
+void CGSDataCallPlugin::DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )
+ {
+ CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CGSDataCallPlugin::DoDeactivate
+//
+// Called by the Avkon view framework when closing.
+// ----------------------------------------------------------------------------
+//
+void CGSDataCallPlugin::DoDeactivate()
+ {
+ CGSBaseView::DoDeactivate();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSDataCallPlugin::HandleListBoxSelectionL()
+//
+// Handles events raised through a rocker key.
+// ---------------------------------------------------------------------------
+void CGSDataCallPlugin::HandleListBoxSelectionL()
+ {
+ const TInt currentFeatureId = Container()->CurrentFeatureId();
+
+ switch ( currentFeatureId )
+ {
+ case KGSSettIdAutodiscon:
+ ShowDialupAutodisconSettingPageL();
+ break;
+ default:
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSDataCallPlugin::HandleSettingPageEventL
+//
+// Handle any setting page related events
+// ---------------------------------------------------------------------------
+//
+void CGSDataCallPlugin::HandleSettingPageEventL( CAknSettingPage* aSettingPage,
+ TAknSettingPageEvent aEventType )
+ {
+ TInt settingId = aSettingPage->SettingId();
+
+ if ( aEventType == EEventSettingOked )
+ {
+ TInt current;
+
+ switch ( settingId )
+ {
+ case KGSAutodisconSettingId:
+ current =
+ static_cast<CAknRadioButtonSettingPage*> ( aSettingPage )->
+ ListBoxControl()->CurrentItemIndex();
+ if ( current == KGSAutodTimeIndex )
+ {
+ ShowAutodisconTimeQueryL();
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CGSDataCallPlugin::ShowDialupAutodisconSettingPageL
+//
+// Display dialup auto disconnect setting page.
+// ---------------------------------------------------------------------------
+//
+void CGSDataCallPlugin::ShowDialupAutodisconSettingPageL()
+ {
+ TInt value = iModel->AutodisconnectTimeL();
+ TInt currentValue = 0; // magic number (user defined)
+
+ if ( value == static_cast<TInt> ( KGSTimeUnlimited ) )
+ {
+ currentValue = 1; // magic number (unlimited)
+ }
+
+ CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_AUTODISCON_TIME_SETTING_PAGE_LBX );
+ CleanupStack::PushL( items );
+
+ CAknRadioButtonSettingPage* dlg = new( ELeave ) CAknRadioButtonSettingPage(
+ R_AUTODISCON_TIME_SETTING_PAGE,
+ currentValue, items );
+
+ dlg->SetSettingId( KGSAutodisconSettingId );
+ dlg->SetSettingPageObserver( this );
+
+ if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
+ {
+ if ( currentValue == 1 ) // magic number (unlimited)
+ {
+ iModel->SetAutodisconnectTimeL( KGSTimeUnlimited );
+ }
+
+ UpdateListBoxL( KGSSettIdAutodiscon );
+ }
+
+ CleanupStack::PopAndDestroy( items );
+ }
+
+// ---------------------------------------------------------------------------
+// CGSDataCallPlugin::ShowAutodisconTimeQueryL()
+//
+// Display auto disconnect time query dialog.
+// ---------------------------------------------------------------------------
+//
+void CGSDataCallPlugin::ShowAutodisconTimeQueryL()
+ {
+ TInt time = iModel->AutodisconnectTimeL();
+ if ( time == static_cast<TInt> ( KGSTimeUnlimited ) )
+ {
+ time = KGSZeroMinutes;
+ }
+
+ CAknNumberQueryDialog* dlg = new( ELeave ) CAknNumberQueryDialog( time );
+ dlg->PrepareLC( R_AUTODISCON_TIME_NUMBER_QUERY );
+ CAknQueryControl *ctrl = ( CAknQueryControl* )dlg->Control( EGeneralQuery );
+ CEikEdwin *edwin = ( CEikEdwin* )ctrl->ControlByLayoutOrNull( ENumberLayout );
+ edwin->SetAknEditorNumericKeymap( EAknEditorPlainNumberModeKeymap );
+
+ if( dlg->RunLD() )
+ {
+ if ( time == KGSZeroMinutes )
+ {
+ time = static_cast<TInt> ( KGSTimeUnlimited );
+ }
+
+ iModel->SetAutodisconnectTimeL( time );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CGSDataCallPlugin::CreateIconL()
+//
+//
+// -----------------------------------------------------------------------------
+//
+CGulIcon* CGSDataCallPlugin::CreateIconL( const TUid aIconType )
+ {
+ //EMbm<Mbm_file_name><Bitmap_name>
+ CGulIcon* icon;
+ TParse* fp = new( ELeave ) TParse();
+ CleanupStack::PushL( fp );
+ fp->Set( KGSDataCallPluginIconDirAndName, &KDC_BITMAP_DIR, NULL );
+
+ if( aIconType == KGSIconTypeLbxItem )
+ {
+ icon = AknsUtils::CreateGulIconL(
+ AknsUtils::SkinInstance(),
+ KAknsIIDQgnPropSetConnData,
+ fp->FullName(),
+ EMbmGsdatacallpluginQgn_prop_set_conn_data,
+ EMbmGsdatacallpluginQgn_prop_set_conn_data_mask );
+ }
+ else
+ {
+ icon = CGSPluginInterface::CreateIconL( aIconType );
+ }
+
+ CleanupStack::PopAndDestroy( fp );
+
+ return icon;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CGSDataCallPlugin::DynInitMenuPaneL()
+//
+// dynamically handle help item if not supported
+// -----------------------------------------------------------------------------
+//
+void CGSDataCallPlugin::DynInitMenuPaneL( TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ if( aResourceId == R_GS_MENU_ITEM_HELP )
+ {
+ User::LeaveIfNull( aMenuPane );
+
+ if ( FeatureManager::FeatureSupported( KFeatureIdHelp ))
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+ }
+ }
+ }
+
+// End of File