--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/systemsettings/GSAccessoryPlugin/src/gsaccessoryplugin.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,461 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: View for Shortcuts sub-folder
+*
+*/
+
+
+#include <bautils.h>
+#include <eikmenup.h>
+#include <featmgr.h>
+#include <gsaccessoryplugin.rsg>
+#include <gsaccplugin.mbg>
+#include <gscommon.hrh>
+#include <gsfwviewuids.h>
+#include <gsprivatepluginproviderids.h>
+#include <hlplch.h> // For HlpLauncher
+#include <StringLoader.h>
+
+#include "acclocalviewids.h"
+#include "gsaccessoryplugin.h"
+#include "gsaccessoryplugin.hrh"
+#include "gsaccessorypluginconst.hrh"
+#include "gsaccessoryplugincontainer.h"
+#include "gsaccessorypluginmodel.h"
+#include "gsacchacview.h"
+#include "gsaccheadphonesview.h"
+#include "gsaccheadsetview.h"
+#include "gsaccloopsetview.h"
+#include "gsaccmusicstandview.h"
+#include "gsacctextphoneview.h"
+#include "gsacctvoutview.h"
+#include "gsaccwiredcarkitview.h"
+#include "gsaccwirelesscarkitview.h"
+#include "trace.h"
+
+// LOCAL CONSTANTS AND MACROS
+_LIT( KGSAccessoryPluginResourceFileName, "z:gsaccessoryplugin.rsc" );
+
+#ifdef __SCALABLE_ICONS
+_LIT( KGSAccPluginIconFileName, "\\resource\\apps\\gsaccplugin.mif" ); // svg file
+#else //__SCALABLE_ICONS
+_LIT( KGSAccPluginIconFileName, "\\resource\\apps\\gsaccplugin.mbm" ); // bitmap
+#endif //__SCALABLE_ICONS
+
+// ========================= LOCAL FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// ListIdToViewId
+// ---------------------------------------------------------------------------
+//
+static TUid ListIdToViewId( TInt aListId )
+ {
+ switch ( aListId )
+ {
+ case EGSHACListItemId: return KAccHACViewId;
+ case EGSHeadphonesListItemId: return KAccHeadphonesViewId;
+ case EGSHeadsetListItemId: return KAccHeadsetViewId;
+ case EGSLoopsetListItemId: return KAccLoopsetViewId;
+ case EGSMusicStandListItemId: return KAccMusicStandViewId;
+ case EGSTextPhoneListItemId: return KAccTextPhoneViewId;
+ case EGSTvOutListItemId: return KAccTvoutViewId;
+ case EGSWiredCarKitListItemId: return KAccWiredCarkitViewId;
+ case EGSWirelessCarKitListItemId: return KAccWirelessCarkitViewId;
+ default:
+ break;
+ }
+
+ return TUid::Null();
+ }
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::NewL()
+// ---------------------------------------------------------------------------
+//
+CGSAccessoryPlugin* CGSAccessoryPlugin::NewL( TAny* /*aInitParams*/ )
+ {
+ CGSAccessoryPlugin* self = new( ELeave ) CGSAccessoryPlugin();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::~CGSAccessoryPlugin
+// ---------------------------------------------------------------------------
+//
+CGSAccessoryPlugin::~CGSAccessoryPlugin()
+ {
+ FUNC_LOG;
+
+ // Do not call RemoveLocalViews(), iAppUi has already been deleted.
+ iSubViewIds.Close();
+ delete iModel;
+ iResourceLoader.Close();
+ FeatureManager::UnInitializeLib();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::NewContainerL()
+// ---------------------------------------------------------------------------
+//
+void CGSAccessoryPlugin::NewContainerL()
+ {
+ FUNC_LOG;
+
+ iContainer = new( ELeave ) CGSAccessoryPluginContainer( *iModel );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::HandleListBoxSelectionL()
+// ---------------------------------------------------------------------------
+//
+void CGSAccessoryPlugin::HandleListBoxSelectionL()
+ {
+ FUNC_LOG;
+
+ iRockerPress = ETrue;
+ TRAPD( error, SelectLocalViewL() );
+ ERROR( error, "Failed to select local view" );
+ iRockerPress = EFalse;
+ User::LeaveIfError( error );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::GetCaption
+// ---------------------------------------------------------------------------
+//
+void CGSAccessoryPlugin::GetCaptionL( TDes& aCaption ) const
+ {
+ FUNC_LOG;
+
+ // The resource file is already opened.
+ HBufC* result = StringLoader::LoadL( R_ACC_MAIN_VIEW_CAPTION );
+ aCaption.Copy( *result );
+ delete result;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::CreateIconL
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CGSAccessoryPlugin::CreateIconL( const TUid aIconType )
+ {
+ FUNC_LOG;
+
+ CGulIcon* icon( NULL );
+ if ( aIconType == KGSIconTypeLbxItem )
+ {
+ icon = AknsUtils::CreateGulIconL(
+ AknsUtils::SkinInstance(),
+ KAknsIIDQgnPropSetAccessorySub,
+ KGSAccPluginIconFileName,
+ EMbmGsaccpluginQgn_prop_set_accessory_sub,
+ EMbmGsaccpluginQgn_prop_set_accessory_sub_mask );
+ }
+ else
+ {
+ icon = CGSPluginInterface::CreateIconL( aIconType );
+ }
+
+ return icon;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::PluginProviderCategory
+// ---------------------------------------------------------------------------
+//
+TInt CGSAccessoryPlugin::PluginProviderCategory() const
+ {
+ // To identify internal plug-ins.
+ return KGSPluginProviderInternal;
+ }
+
+
+// ---------------------------------------------------------------------------
+// TUid CGSAccessoryPlugin::Id()
+// ---------------------------------------------------------------------------
+//
+TUid CGSAccessoryPlugin::Id() const
+ {
+ return TUid::Uid( KGSAccessoryPluginUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::ProcessCommandL
+// ---------------------------------------------------------------------------
+//
+void CGSAccessoryPlugin::ProcessCommandL( TInt aCommand )
+ {
+ FUNC_LOG;
+
+ if ( aCommand == EGSCmdAppOpen )
+ {
+ SelectLocalViewL();
+ }
+ else
+ {
+ CAknView::ProcessCommandL( aCommand );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::HandleCommandL
+// ---------------------------------------------------------------------------
+//
+void CGSAccessoryPlugin::HandleCommandL( TInt aCommand )
+ {
+ FUNC_LOG;
+
+ iRockerPress = EFalse;
+
+ switch ( aCommand )
+ {
+ case EAknSoftkeyOpen:
+ SelectLocalViewL();
+ break;
+ case EAknSoftkeyBack:
+ RemoveLocalViews();
+ iAppUi->ActivateLocalViewL( KGSGenPluginUid );
+ break;
+ case EAknCmdHelp:
+ {
+ if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ HlpLauncher::LaunchHelpApplicationL(
+ iEikonEnv->WsSession(), iAppUi->AppHelpContextL() );
+ }
+ break;
+ }
+ case EGSCmdAppSetasDefault:
+ ChangeDefaultAccessoryL();
+ break;
+ default:
+ iAppUi->HandleCommandL( aCommand );
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::DynInitMenuPaneL()
+// ---------------------------------------------------------------------------
+//
+void CGSAccessoryPlugin::DynInitMenuPaneL(
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ FUNC_LOG;
+
+ if ( aResourceId == R_GS_MENU_ITEM_HELP )
+ {
+ User::LeaveIfNull( aMenuPane );
+
+ if ( iRockerPress || !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ // Remove help if rocker key is pressed or help is not supported
+ aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse );
+ }
+ }
+ else if ( aResourceId == R_GS_MENU_ITEM_EXIT )
+ {
+ User::LeaveIfNull( aMenuPane );
+
+ if ( iRockerPress )
+ {
+ // Remove exit if rocker key is pressed
+ aMenuPane->SetItemDimmed( EAknCmdExit, ETrue );
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::CGSAccessoryPlugin()
+// ---------------------------------------------------------------------------
+//
+CGSAccessoryPlugin::CGSAccessoryPlugin()
+ : iResourceLoader( *iCoeEnv )
+ {
+ FUNC_LOG;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CGSAccessoryPlugin::ConstructL()
+ {
+ FUNC_LOG;
+
+ FeatureManager::InitializeLibL();
+
+ // Initialize the Model
+ iModel = CGSAccessoryPluginModel::NewL();
+
+ // TParse uses a lot of stack space, so allocate it from heap.
+ TParse* parse = new ( ELeave ) TParse;
+ CleanupStack::PushL( parse );
+ TInt errorCode = parse->Set(
+ KGSAccessoryPluginResourceFileName,
+ &KDC_RESOURCE_FILES_DIR,
+ NULL );
+ ERROR( errorCode, "parse::Set() failed" );
+ User::LeaveIfError( errorCode );
+
+ // TFileName uses a lot of stack space, so allocate it from heap.
+ TFileName* fileName = new ( ELeave ) TFileName( parse->FullName() );
+ CleanupStack::PushL( fileName );
+
+ // Get language of resource file
+ BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), *fileName );
+
+ // Open resource file
+ iResourceLoader.OpenL( *fileName );
+
+ CleanupStack::PopAndDestroy( fileName );
+ CleanupStack::PopAndDestroy( parse );
+
+ BaseConstructL( R_ACC_MAIN_VIEW );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::SelectLocalViewL()
+// ---------------------------------------------------------------------------
+//
+void CGSAccessoryPlugin::SelectLocalViewL()
+ {
+ FUNC_LOG;
+
+ CGSAccessoryPluginContainer* container =
+ static_cast<CGSAccessoryPluginContainer*>( iContainer );
+ TUid viewId = ListIdToViewId( container->CurrentFeatureId() );
+
+ if ( !LocalViewExists( viewId ) )
+ {
+ CGSAccBaseView* view( NULL );
+ // Unsupported items are already hidden - no need to check them here.
+ switch ( container->CurrentFeatureId() )
+ {
+ case EGSHeadsetListItemId:
+ view = CGSAccHeadsetView::NewLC( *iModel );
+ break;
+ case EGSHeadphonesListItemId:
+ view = CGSAccHeadphonesView::NewLC( *iModel );
+ break;
+ case EGSLoopsetListItemId:
+ view = CGSAccLoopsetView::NewLC( *iModel );
+ break;
+ case EGSTextPhoneListItemId:
+ view = CGSAccTextPhoneView::NewLC( *iModel );
+ break;
+ case EGSMusicStandListItemId:
+ view = CGSAccMusicStandView::NewLC( *iModel );
+ break;
+ case EGSWiredCarKitListItemId:
+ view = CGSAccWiredCarkitView::NewLC( *iModel );
+ break;
+ case EGSWirelessCarKitListItemId:
+ view = CGSAccWirelessCarkitView::NewLC( *iModel );
+ break;
+ case EGSTvOutListItemId:
+ view = CGSAccTvoutView::NewLC( *iModel );
+ break;
+ case EGSHACListItemId:
+ view = CGSAccHACView::NewLC( *iModel );
+ break;
+ default:
+ break;
+ }
+
+ if ( view )
+ {
+ iSubViewIds.AppendL( view->Id() ); // Store id
+ iAppUi->AddViewL( view );
+ CleanupStack::Pop( view );
+ }
+ }
+
+ iAppUi->ActivateLocalViewL( viewId ); // Activate the view
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::RemoveLocalViews()
+// ---------------------------------------------------------------------------
+//
+void CGSAccessoryPlugin::RemoveLocalViews()
+ {
+ FUNC_LOG;
+
+ TInt count = iSubViewIds.Count();
+ for ( TInt i = 0; i < count; i++ )
+ {
+ iAppUi->RemoveView( iSubViewIds[i] ); // Deletes the object also.
+ }
+ iSubViewIds.Reset(); // No need to close after this.
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::LocalViewExists()
+// ---------------------------------------------------------------------------
+//
+TBool CGSAccessoryPlugin::LocalViewExists( const TUid& aViewId ) const
+ {
+ FUNC_LOG;
+
+ return ( iSubViewIds.Find( aViewId ) != KErrNotFound );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSAccessoryPlugin::ChangeDefaultAccessoryL()
+// ---------------------------------------------------------------------------
+//
+void CGSAccessoryPlugin::ChangeDefaultAccessoryL()
+ {
+ FUNC_LOG;
+
+ CGSAccessoryPluginContainer* container =
+ static_cast<CGSAccessoryPluginContainer*>( iContainer );
+
+ TInt currentFeatureId = container->CurrentFeatureId();
+ TInt oldDefaultItem = iModel->DefaultAccessory();
+ if ( oldDefaultItem != currentFeatureId )
+ {
+ // Here we set the item selected as "Set as Default"
+ container->ChangeDefaultItemL( currentFeatureId, oldDefaultItem );
+ iModel->SetDefaultAccessoryL( currentFeatureId );
+ container->DrawNow();
+ }
+ }