diff -r 8ee96d21d9bf -r 7e0eff37aedb gssettingsuis/Gs/GSDisplayPlugin/Src/GSDisplayPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gssettingsuis/Gs/GSDisplayPlugin/Src/GSDisplayPlugin.cpp Wed Sep 01 12:20:44 2010 +0100 @@ -0,0 +1,1340 @@ +/* +* Copyright (c) 2005-2007 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 Display sub-folder +* +*/ + + +// INCLUDE FILES +#include "GSDisplayPlugin.h" + +#ifdef FF_POWER_SAVE + #include "GSDisplayPluginAO.h" +#endif // FF_POWER_SAVE + +#include "GSDisplayPluginModel.h" +#include "GSDisplayPluginContainer.h" +#include "GsDisplayPlugin.hrh" +#include "GsLogger.h" + +#include +#include // For HlpLauncher +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // Image selection +#include +#include +#include +#include +#include +#include +#include // Icons + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS +const TInt KGSImageWelcomeNote = 2; +// MACROS + +// LOCAL CONSTANTS AND MACROS +//_LIT( KGSWelcomeNoteTextValue, "" ); +//_LIT( KGSScreenSaverTextValue, "" ); + +_LIT( KGSDisplayPluginResourceFileName, "z:GSDisplayPluginRsc.rsc" ); + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS ============================== + +// ========================= MEMBER FUNCTIONS ================================= + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::CGSDisplayPlugin() +// +// Constructor +// ---------------------------------------------------------------------------- +// +CGSDisplayPlugin::CGSDisplayPlugin() + : iUpdateSSText( EFalse ), + iUpdateWNote( ETrue ), + iReshowOprtSetPage( EFalse ), + iResourceLoader( *iCoeEnv ) + { + } + + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::NewL() +// +// Symbian OS default constructor +// ---------------------------------------------------------------------------- +CGSDisplayPlugin* CGSDisplayPlugin::NewL( TAny* /*aInitParams*/ ) + { + CGSDisplayPlugin* self = new( ELeave ) CGSDisplayPlugin(); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::ConstructL() +// +// Symbian OS two-phased constructor +// ---------------------------------------------------------------------------- +void CGSDisplayPlugin::ConstructL() + { + FeatureManager::InitializeLibL(); + + // Find the resource file + TParse parse; + parse.Set( KGSDisplayPluginResourceFileName, + &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 ); + + BaseConstructL( R_GS_DISPL_VIEW ); + +#ifdef FF_POWER_SAVE + iPsmActive = CGSDisplayPluginAO::NewL(); + iPsmActive->SetView( this ); +#endif // FF_POWER_SAVE + } + + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::~CGSDisplayPlugin +// +// Destructor +// ---------------------------------------------------------------------------- +CGSDisplayPlugin::~CGSDisplayPlugin() + { + CloseDialog(); + FeatureManager::UnInitializeLib(); + iResourceLoader.Close(); + +#ifdef FF_POWER_SAVE + delete iPsmActive; +#endif // FF_POWER_SAVE + + if ( iImageHandler ) + { + delete iImageHandler; + } + + if ( iModel ) + { + iModel = NULL; + } + } + + +// ---------------------------------------------------------------------------- +// TUid CGSDisplayPlugin::Id() +// +// Returns plug-in's ID. +// ---------------------------------------------------------------------------- +TUid CGSDisplayPlugin::Id() const + { + return KGSDisplayPluginUid; + } + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::HandleCommandL +// +// Handles commands directed to this class. +// ---------------------------------------------------------------------------- +void CGSDisplayPlugin::HandleCommandL( TInt aCommand ) + { + switch ( aCommand ) + { + case EGSMSKCmdAppChange: + if ( EGSSettIdOperatorLogo == Container()->CurrentFeatureId() ) + { + ChangeOperatorLogoSettingL( EFalse ); + break; + } + case EGSCmdAppChange: + HandleListBoxSelectionL(); + break; + case EAknSoftkeyBack: + #ifdef RD_CONTROL_PANEL + iAppUi->ActivateLocalViewL( KGSGenPluginUid ); + #else //RD_CONTROL_PANEL + iAppUi->ActivateLocalViewL( KGSPrslnPluginUid ); + #endif //RD_CONTROL_PANEL + break; + case EGSCmdShowPowerSaveLedSettingPage: + ShowPowerSaveLedSettingPageL( ETrue ); + break; + case EAknCmdHelp: + { + if( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), iAppUi->AppHelpContextL() ); + } + break; + } + default: + iAppUi->HandleCommandL( aCommand ); + break; + } + } + + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::UpdateListBoxL +// +// +// ---------------------------------------------------------------------------- +// +void CGSDisplayPlugin::UpdateListBoxL( TInt aItemId ) + { + if( Container() ) + { + Container()->UpdateListBoxL( aItemId ); + } + } + + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::Container +// +// Return handle to container class. +// ---------------------------------------------------------------------------- +// +CGSDisplayPluginContainer* CGSDisplayPlugin::Container() + { + return static_cast( iContainer ); + } + + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::NewContainerL() +// Creates new iContainer. +// +// ---------------------------------------------------------------------------- +// +void CGSDisplayPlugin::NewContainerL() + { + // container takes a CAknView pointer + iContainer = new( ELeave ) CGSDisplayPluginContainer( /* *this*/ ); + } + + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::DoActivateL +// +// First method called by the Avkon framwork to invoke a view. +// ---------------------------------------------------------------------------- +// +void CGSDisplayPlugin::DoActivateL( const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ) + { + CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage ); + iModel = Container()->Model(); + } + + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::DoDeactivate +// +// Called by the Avkon view framework when closing. +// ---------------------------------------------------------------------------- +// +void CGSDisplayPlugin::DoDeactivate() + { + CGSBaseView::DoDeactivate(); + } + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::HandleListBoxSelectionL() +// +// Handles events raised through a rocker key +// ---------------------------------------------------------------------------- +void CGSDisplayPlugin::HandleListBoxSelectionL() + { + const TInt currentFeatureId = Container()->CurrentFeatureId(); + + switch ( currentFeatureId ) + { + case EGSSettIdContrast: + if( iModel->ContrastL() != KErrNotSupported ) + { +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() == EPsmsrvModePowerSave ) + { + // If PSM is on, block setting: + DisplayBlockNoteL(); + } + else + { +#endif // FF_POWER_SAVE + ShowContrastSettingPageL(); +#ifdef FF_POWER_SAVE + } +#endif // FF_POWER_SAVE + } + + + break; + case EGSSettIdBrightness: + if( FeatureManager::FeatureSupported( KFeatureIdBrightnessControl) ) + { +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() == EPsmsrvModePowerSave ) + { + // If PSM is on, block setting: + DisplayBlockNoteL(); + } + else + { +#endif // FF_POWER_SAVE + ShowBrightnessSettingPageL(); +#ifdef FF_POWER_SAVE + } +#endif // FF_POWER_SAVE + } + break; + case EGSSettIdSSP: +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() == EPsmsrvModePowerSave ) + { + // If PSM is on, block setting: + DisplayBlockNoteL(); + } + else + { +#endif // FF_POWER_SAVE + ShowScreenSaverPeriodSettingPageL(); +#ifdef FF_POWER_SAVE + } +#endif // FF_POWER_SAVE + break; + case EGSSettIdBacklight: +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() == EPsmsrvModePowerSave ) + { + // If PSM is on, block setting: + DisplayBlockNoteL(); + } + else + { +#endif // FF_POWER_SAVE + ShowBacklightSettingPageL ( ); +#ifdef FF_POWER_SAVE + } +#endif // FF_POWER_SAVE + break; + case EGSSettIdAmbientLightSensor: + { +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() == EPsmsrvModePowerSave ) + { + // If PSM is on, block setting: + DisplayBlockNoteL(); + } + else + { +#endif // FF_POWER_SAVE + ShowAmbientLightSensorSettingPageL(); +#ifdef FF_POWER_SAVE + } +#endif // FF_POWER_SAVE + } + break; + case EGSSettIdWNI: + ShowWelcomeNoteSettingPageL(); + break; + case EGSSettIdDisplayTextSize: + if ( FeatureManager::FeatureSupported ( KFeatureIdUiZoom ) ) + { + ShowDisplayTextSizeSettingPageL(); + } + break; + case EGSSettIdPowerSaveLed: + { +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() == EPsmsrvModePowerSave ) + { + // If PSM is on, block setting: + DisplayBlockNoteL(); + } + else + { +#endif // FF_POWER_SAVE + ShowPowerSaveLedSettingPageL( EFalse ); +#ifdef FF_POWER_SAVE + } +#endif // FF_POWER_SAVE + } + break; + case EGSSettIdOperatorLogo: + do + { + iReshowOprtSetPage = EFalse; + ChangeOperatorLogoSettingL( ETrue ); + } + while ( iReshowOprtSetPage ); + break; + default: + break; + } + } + +// ========================= From CGSPluginInterface ================== + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::GetCaption +// +// Return application/view caption. +// ---------------------------------------------------------------------------- +// +void CGSDisplayPlugin::GetCaptionL( TDes& aCaption ) const + { + // the resource file is already opened. + HBufC* result = StringLoader::LoadL( R_GS_DISPLAY_VIEW_CAPTION ); + + aCaption.Copy( *result ); + delete result; + } + + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::PluginProviderCategory +// +// A means to identify the location of this plug-in in the framework. +// ---------------------------------------------------------------------------- +// +TInt CGSDisplayPlugin::PluginProviderCategory() const + { + //To identify internal plug-ins. + return KGSPluginProviderInternal; + } + + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowContrastSettingPageL() +// +// Display the contrast setting page. +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ShowContrastSettingPageL() + { + TInt currentValue; + TInt oldValue; + oldValue = iModel->ContrastL(); + + currentValue = oldValue; + + CAknSliderSettingPage* dlg = new( ELeave ) CAknSliderSettingPage( + R_CONTRAST_SETTING_PAGE, currentValue ); + + dlg->SetSettingId( KGSContrastSettingId ); + dlg->SetSettingPageObserver( this ); + + if ( !dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() != EPsmsrvModePowerSave ) + { +#endif //FF_POWER_SAVE + iModel->SetContrastL( oldValue ); +#ifdef FF_POWER_SAVE + } +#endif //FF_POWER_SAVE + } + UpdateListBoxL( EGSSettIdContrast ); + } + + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowBrightnessSettingPageL() +// +// Display the brightness setting page. +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ShowBrightnessSettingPageL() + { + TInt currentValue; + TInt oldValue = iModel->BrightnessL(); + + currentValue = oldValue; + + CAknSliderSettingPage* dlg = new( ELeave ) CAknSliderSettingPage( + R_BRIGHTNESS_SETTING_PAGE, currentValue ); + + dlg->SetSettingId( KGSBrightnessSettingId ); + dlg->SetSettingPageObserver( this ); + + if ( !dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged ) ) + { +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() != EPsmsrvModePowerSave ) + { +#endif //FF_POWER_SAVE + iModel->SetBrightnessL( oldValue ); +#ifdef FF_POWER_SAVE + } +#endif //FF_POWER_SAVE + } + UpdateListBoxL( EGSSettIdBrightness ); + } + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowAmbientLightSensorSettingPageL() +// +// Display the ambient light sensor setting page. +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ShowAmbientLightSensorSettingPageL() + { + TInt currentValue; + TInt oldValue = iModel->AmbientLightSensorL(); + + currentValue = oldValue; + + CAknSliderSettingPage* dlg = new( ELeave ) CAknSliderSettingPage( + R_AMBIENT_LIGHT_SENSOR_SETTING_PAGE, currentValue ); + + dlg->SetSettingId( KGSAmbientLightSensorId ); + dlg->SetSettingPageObserver( this ); + + if ( !dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() != EPsmsrvModePowerSave ) + { +#endif //FF_POWER_SAVE + iModel->SetAmbientLightSensorL( oldValue ); +#ifdef FF_POWER_SAVE + } +#endif //FF_POWER_SAVE + } + UpdateListBoxL( EGSSettIdAmbientLightSensor ); + } + + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowScreenSaverPeriodSettingPageL() +// +// Display the screen saver period (time out) setting page. +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ShowScreenSaverPeriodSettingPageL() + { + TInt sliderValue = iModel->ScreenSaverAndKeyguardPeriodL(); + + CAknSettingPage* dlg = new( ELeave ) CAknSliderSettingPage( + R_SCREEN_SAVER_PERIOD_SETTING_PAGE, sliderValue ); + + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() == EPsmsrvModePowerSave ) + { + DisplayBlockNoteL(); + } + else + { +#endif //FF_POWER_SAVE + iModel->SetScreenSaverAndKeyguardPeriodL( sliderValue ); +#ifdef FF_POWER_SAVE + } +#endif //FF_POWER_SAVE + UpdateListBoxL( EGSSettIdSSP ); + } + } + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowBacklightSettingPageL() +// +// Display the backlight time-out setting page. +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ShowBacklightSettingPageL() + { + TInt sliderValue = iModel->BacklightPeriodL(); + + CAknSettingPage* dlg = new( ELeave ) CAknSliderSettingPage( + R_BACKLIGHT_PERIOD_SETTING_PAGE, sliderValue ); + + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() == EPsmsrvModePowerSave ) + { + DisplayBlockNoteL(); + } + else + { +#endif //FF_POWER_SAVE + iModel->SetBacklightPeriodL( sliderValue ); +#ifdef FF_POWER_SAVE + } +#endif //FF_POWER_SAVE + UpdateListBoxL( EGSSettIdBacklight ); + } + } + + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::HandleSettingPageEventL +// +// Handle any setting page related events +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::HandleSettingPageEventL( CAknSettingPage* aSettingPage, + TAknSettingPageEvent aEventType ) + { + TInt id = aSettingPage->SettingId(); + + if ( aEventType == EEventSettingChanged ) + { + switch ( id ) + { + case KGSContrastSettingId: + if( iModel->ContrastL() != KErrNotSupported ) + { +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() == EPsmsrvModePowerSave ) + { + DisplayBlockNoteL(); + static_cast( aSettingPage )-> + SliderControl()->SetValueL( iModel->ContrastL() ); + } + else + { +#endif //FF_POWER_SAVE + iModel->SetContrastL( static_cast + ( aSettingPage )->SliderControl()->Value() ); +#ifdef FF_POWER_SAVE + } +#endif //FF_POWER_SAVE + } + break; + case KGSBrightnessSettingId: + if( FeatureManager::FeatureSupported( + KFeatureIdBrightnessControl) ) + { +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() == EPsmsrvModePowerSave ) + { + DisplayBlockNoteL(); + static_cast( aSettingPage )-> + SliderControl()->SetValueL( iModel->BrightnessL() ); + } + else + { +#endif //FF_POWER_SAVE + iModel->SetBrightnessL( static_cast + ( aSettingPage )->SliderControl()->Value() ); +#ifdef FF_POWER_SAVE + } +#endif //FF_POWER_SAVE + } + break; + case KGSAmbientLightSensorId: +#ifdef FF_POWER_SAVE + if ( iPsmActive->Mode() == EPsmsrvModePowerSave ) + { + DisplayBlockNoteL(); + static_cast( aSettingPage )-> + SliderControl()->SetValueL( iModel->AmbientLightSensorL() ); + } + else + { +#endif //FF_POWER_SAVE + iModel->SetAmbientLightSensorL( static_cast + ( aSettingPage )->SliderControl()->Value() ); +#ifdef FF_POWER_SAVE + } +#endif //FF_POWER_SAVE + break; + default: + break; + } + } + + if ( aEventType == EEventSettingOked ) + { + TInt current; + + switch ( id ) + { + case KGSWelcomeNoteSettingId: + current = + static_cast ( aSettingPage )-> + ListBoxControl()->CurrentItemIndex(); + if ( current == KGSWNTextIndex ) + { + ShowWelcomeNoteTextQueryL(); + } + else if ( current == KGSWNImageIndex ) + { + aSettingPage->MakeVisible(EFalse); + ShowWelcomeNoteImageListL(); + } + break; + default: + break; + } + } + } + + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::VerifySelectionL() +// +// An overloaded method from MMGFetchVerifier interface class +// --------------------------------------------------------------------------- +// +TBool CGSDisplayPlugin::VerifySelectionL( const MDesCArray* aSelectedFiles ) + { + const TBool KGSDrmProtectedContent = ETrue; + + TBool ret = ETrue; + // + if ( aSelectedFiles->MdcaCount() == 1 ) + { + const TPtrC fileName( aSelectedFiles->MdcaPoint( 0 ) ); + + // First, check if the selected file is DRM protected + if ( ret && CheckDRMProtectionL( fileName ) == + KGSDrmProtectedContent ) + { + // display the note to user + // Show information note + HBufC* prompt = iCoeEnv->AllocReadResourceLC( + R_GS_DRM_NOT_ALLOWED ); + + CAknInformationNote* note = + new( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *prompt ); + + CleanupStack::PopAndDestroy( prompt ); + ret = EFalse; + } + + // Next, check whether the image header is valid + if ( ret ) + { + CImageDecoder* imageDecoder = NULL; + TRAPD( err, imageDecoder = CImageDecoder::FileNewL( + iCoeEnv->FsSession(), fileName, ContentAccess::EPeek ) ); + + if ( err != KErrNone ) + { + // Show information note + HBufC* prompt = iCoeEnv->AllocReadResourceLC( + R_GS_IMAGE_CORRUPTED ); + CAknInformationNote* note = + new( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD(*prompt); + CleanupStack::PopAndDestroy( prompt ); + + ret = EFalse; + } + delete imageDecoder; + } + } + + return ret; + } + + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowWelcomeNoteSettingPageL() +// +// Display welcome note setting page +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ShowWelcomeNoteSettingPageL() + { + iUpdateWNote = ETrue; + + CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL( + R_WELCOME_NOTE_SETTING_PAGE_LBX ); + CleanupStack::PushL( items ); + + TInt currentItem = iModel->WelcomeNoteTypeL(); + iWelcomeNoteType = currentItem; + + CAknSettingPage* dlg = new( ELeave ) CAknRadioButtonSettingPage( + R_WELCOME_NOTE_SETTING_PAGE, + currentItem, items ); + + dlg->SetSettingId( KGSWelcomeNoteSettingId ); + dlg->SetSettingPageObserver(this); + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) + && iUpdateWNote && currentItem != KGSImageWelcomeNote + ) + { + iModel->SetWelcomeNoteTypeL( currentItem ); + UpdateListBoxL( EGSSettIdWNI ); + } + + CleanupStack::PopAndDestroy( items ); + } + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowWelcomeNoteTextQueryL() +// +// Display welcome note text input dialog +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ShowWelcomeNoteTextQueryL() + { + TBuf note; + iModel->WelcomeNoteTextL( note ); + + CAknTextQueryDialog* dlg = new ( ELeave ) CAknTextQueryDialog( note ); + if( dlg->ExecuteLD( R_WELCOME_NOTE_TEXT_QUERY ) ) + { + iModel->SetWelcomeNoteTextL( note ); + iUpdateWNote = ETrue; + } + else + { + iUpdateWNote = EFalse; + } + } + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowWelcomeNoteImageListL() +// +// Display welcome note image list from media gallery +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ShowWelcomeNoteImageListL() + { + // If the MGFetch already launched, return. + if ( iLaunchedImageFetch ) + { + return; + } + CDesCArray* selectedFiles = new ( ELeave ) CDesCArrayFlat( 1 ); + CleanupStack::PushL( selectedFiles ); + + iLaunchedImageFetch = ETrue; + TBool ret = MGFetch::RunL( *selectedFiles, EImageFile, EFalse, this ); + iLaunchedImageFetch = EFalse; + + if ( ret && selectedFiles->MdcaCount() == 1 ) + { + iImageHandler = CGSAsyncImageHandling::NewL( iCoeEnv->FsSession(), + this, KGSWelcomeNoteImgPath ); + + TPtrC imagePath = selectedFiles->MdcaPoint( 0 ); + + //attempting to create private directory + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL( fs ); + TInt ret = fs.CreatePrivatePath( 2 ); + CleanupStack::PopAndDestroy(); //fs + + TRAPD( error, + iModel->BackgroundImage()->SetWelcomeNoteImageL( imagePath, *iImageHandler ) + ); + + if ( error == KErrNone ) + { + // Show wait note + ShowImageLoadWaitNoteL(); + } + else + { + HandleImageErrorsL( error ); + } + } + else + { + iUpdateWNote = EFalse; + } + + CleanupStack::PopAndDestroy( selectedFiles ); + } + + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowDisplayTextSizeSettingPageL() +// +// Display display text size setting page +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ShowDisplayTextSizeSettingPageL() + { + CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL( + R_DISPLAY_TEXT_SIZE_SETTING_PAGE_LBX ); + CleanupStack::PushL( items ); + + TInt currentItem = iModel->DisplayTextSizeL(); + // get the UI index from container + Container()->MapZoomLevelToUi( currentItem ); + // store the current value for comparison + TInt oldItem = currentItem; + + CAknSettingPage* dlg = new( ELeave ) CAknRadioButtonSettingPage( + R_DISPLAY_TEXT_SIZE_SETTING_PAGE, + currentItem, items ); + + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { + if( currentItem != oldItem ) + { + // get the Avkon value from UI index + Container()->MapZoomLevelFromUi( currentItem ); + // set Avkon value to CenRep. As an additional check, confirm + // from feature manager that zooming is supported. + if ( FeatureManager::FeatureSupported ( KFeatureIdUiZoom ) ) + { + iModel->SetDisplayTextSizeL( currentItem ); + } + // now inform all open apps of the switch + // note that app needs software event capability to call this API + TWsEvent event; + event.SetType( KEikDynamicLayoutVariantSwitch ); + iEikonEnv->WsSession().SendEventToAllWindowGroups( event ); + } + + UpdateListBoxL( EGSSettIdDisplayTextSize ); + } + + CleanupStack::PopAndDestroy( items ); + } + + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowPowerSaveLedSettingPageL() +// +// Display the screen saver object setting page. +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ShowPowerSaveLedSettingPageL( TBool aSettingPage ) + { + + CDesCArrayFlat* items = + iCoeEnv->ReadDesC16ArrayResourceL( R_POWER_SAVE_LED_SETTING_PAGE_LBX ); + CleanupStack::PushL( items ); + + TInt currentItem = iModel->PowerSaveLedL(); + + if( aSettingPage ) + { + CAknRadioButtonSettingPage* dlg = + new ( ELeave ) CAknRadioButtonSettingPage( + R_POWER_SAVE_LED_SETTING_PAGE, + currentItem, items ); + + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { + iModel->SetPowerSaveLedL( currentItem ); + UpdateListBoxL( EGSSettIdPowerSaveLed ); + } + } + else + { + iModel->SetPowerSaveLedL( !currentItem ); + UpdateListBoxL( EGSSettIdPowerSaveLed ); + } + CleanupStack::PopAndDestroy( items ); + } + + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ImageHandlingComplete() +// +// Method derived from MGSSyncImageHandlingObserver +// Run when the asynchronous image converting is complete +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ImageHandlingCompleteL( TInt aError ) + { + if ( aError != KErrNone ) + { + HandleImageErrorsL( aError ); + } + else + { + iModel->SetWelcomeNoteTypeL( KGSImageWelcomeNote ); + UpdateListBoxL( EGSSettIdWNI ); + } + HideImageLoadWaitNoteL(); + + if( iImageHandler ) + { + delete iImageHandler; + iImageHandler = NULL; + } + } + + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowImageLoadWaitNoteL() +// +// Display image load wait note dialog. +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ShowImageLoadWaitNoteL() + { + if ( !iWaitDialog ) + { + iWaitDialog = new( ELeave ) CAknWaitDialog( + ( REINTERPRET_CAST(CEikDialog**, + &iWaitDialog ) ), ETrue ); + + iWaitDialog->ExecuteDlgLD( CAknNoteDialog::ENoTone, + R_IMAGE_LOAD_WAIT_NOTE ); + } + } + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::HideImageLoadWaitNoteL() +// +// Hide image load wait note dialog. +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::HideImageLoadWaitNoteL() + { + if ( iWaitDialog ) + { + iWaitDialog->ProcessFinishedL(); // deletes the dialog + iWaitDialog = NULL; + } + } + + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::CheckDRMProtectionL +// +// Check if the selected image file is DRM protected. +// --------------------------------------------------------------------------- +// +TBool CGSDisplayPlugin::CheckDRMProtectionL( const TDesC& aOriginalFileName ) + { + TBool isProtected( EFalse ); + DRMCommon* drmClient = DRMCommon::NewL(); + CleanupStack::PushL( drmClient ); + TInt error = drmClient->Connect(); + if ( error != DRMCommon::EOk ) + { + User::Leave( KErrCorrupt ); + } + + if ( aOriginalFileName != KNullDesC ) + { + error = drmClient->IsProtectedFile( aOriginalFileName, isProtected ); + if ( error != DRMCommon::EOk ) + { + User::Leave( KErrCorrupt ); + } + } + + CleanupStack::PopAndDestroy( drmClient ); + return isProtected; + } + +// --------------------------------------------------------------------------- +// CGSDisplayPlugin::HandleImageErrorsL +// +// Prompt image related errors to the user +// --------------------------------------------------------------------------- +// +void CGSDisplayPlugin::HandleImageErrorsL( TInt aError ) + { + if ( aError ) + { + TInt resourceId; + switch( aError ) + { + case KErrNotSupported: + case KErrUnderflow: + // Image is corrupted or in wrong format + resourceId = R_GS_IMAGE_CORRUPTED; + break; + case KErrDiskFull: + case KErrNoMemory: + // Image is too large + resourceId = R_GS_IMAGE_TOO_LARGE; + break; + default: + // Better to give some error message than result in CONE5 panic: + resourceId = R_GS_IMAGE_CORRUPTED; + //User::LeaveIfError( aError ); + break; + } + + // Show information note + HBufC* prompt = iCoeEnv->AllocReadResourceLC( resourceId ); + CAknInformationNote* note = new( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *prompt ); + + // Restoring previous welcome note value + iModel->SetWelcomeNoteTypeL( iWelcomeNoteType ); + UpdateListBoxL( EGSSettIdWNI ); + CleanupStack::PopAndDestroy( prompt ); + } + } + + +// ---------------------------------------------------------------------------- +// CGSDisplayPlugin::DynInitMenuPaneL() +// +// Display the dynamic menu +// ---------------------------------------------------------------------------- +void CGSDisplayPlugin::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + // show or hide the 'help' menu item when supported + if( aResourceId == R_GS_MENU_ITEM_HELP ) + { + User::LeaveIfNull( aMenuPane ); + + if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse ); + } + else + { + aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); + } + } + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// +// ---------------------------------------------------------------------------------- +// CGSDisplayPlugin::UpdateViewL() +// ---------------------------------------------------------------------------------- +// +void CGSDisplayPlugin::UpdateViewL() + { + // Check what view is active, update if needed. + // If displaying main view, update all PSM changed items. + TVwsViewId activeView; + CEikonEnv::Static()->EikAppUi()->GetActiveViewId( activeView ); +// if( activeView.iViewUid == Id() ) + { + __GSLOGSTRING( "[CGSDisplayPlugin] I am active!!!" ); + // Not too elegant - update only items that are affected by PSM + UpdateListBoxL( EGSSettIdContrast ); + UpdateListBoxL( EGSSettIdBrightness ); + UpdateListBoxL( EGSSettIdAmbientLightSensor ); +// UpdateListBoxL( EGSSettIdDisplayTextSize ); + UpdateListBoxL( EGSSettIdSSP ); +// UpdateListBoxL( EGSSettIdSSO ); +// UpdateListBoxL( EGSSettIdWNI ); + UpdateListBoxL( EGSSettIdBacklight ); +// UpdateListBoxL( EGSSettIdPowerSaveLed ); + UpdateListBoxL( EGSSettIdOperatorLogo ); + } + } + +#ifdef FF_POWER_SAVE +// ---------------------------------------------------------------------------------- +// CGSDisplayPlugin::DisplayBlockNoteL() +// ---------------------------------------------------------------------------------- +void CGSDisplayPlugin::DisplayBlockNoteL() + { + HBufC* prompt = iCoeEnv->AllocReadResourceLC( + R_GS_POWER_SAVING_PROTECTED_SETTINGS_INFONOTE ); + CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *prompt ); + CleanupStack::PopAndDestroy( prompt ); + } +#endif // FF_POWER_SAVE + + +// ----------------------------------------------------------------------------- +// CGSDisplayPlugin::CreateIconL() +// +// +// ----------------------------------------------------------------------------- +// +CGulIcon* CGSDisplayPlugin::CreateIconL( const TUid aIconType ) + { + //EMbm + CGulIcon* icon; + + if( aIconType == KGSIconTypeLbxItem ) + { + icon = AknsUtils::CreateGulIconL( + AknsUtils::SkinInstance(), + KAknsIIDQgnPropCpDevDisp, + KGSDefaultDisplayIconFileName, + EMbmGsdisplaypluginQgn_prop_cp_dev_disp, + EMbmGsdisplaypluginQgn_prop_cp_dev_disp_mask ); + } + else + { + icon = CGSPluginInterface::CreateIconL( aIconType ); + } + + return icon; + } + + +// ----------------------------------------------------------------------------- +// CGSDisplayPlugin::ChangeOperatorLogoSettingL() +// +// +// ----------------------------------------------------------------------------- +// +void CGSDisplayPlugin::ChangeOperatorLogoSettingL( TBool aUseSettingPage ) + { + TInt currentValue = iModel->OperatorLogoL(); + TBool isValueUpdated = EFalse; + + if ( aUseSettingPage ) + { + isValueUpdated = ShowOperatorLogoSettingPageL( currentValue ); + } + else + { + if( currentValue == KGSSettingOff ) + { + currentValue = KGSSettingOn; + } + else + { + currentValue = KGSSettingOff; + } + isValueUpdated = ETrue; + } + // Value has been changed -> store it: + if ( isValueUpdated ) + { + iModel->SetOperatorLogoL( currentValue ); + + UpdateListBoxL( EGSSettIdOperatorLogo ); + } + } + + +// ----------------------------------------------------------------------------- +// CGSDisplayPlugin::ShowOperatorLogoSettingPageL() +// +// Note: Lbx index of each value is only internal to this function. The +// parameter given and modified is the actual operator logo value. +// ----------------------------------------------------------------------------- +// +TBool CGSDisplayPlugin::ShowOperatorLogoSettingPageL( + TInt& aOperatorLogoValue ) + { + TBool isValueUpdated = EFalse; + TInt previousValue = aOperatorLogoValue; + TInt selectedIndex; + + // Match aOperatorLogoValue value to lbx item index: + switch( aOperatorLogoValue ) + { + case KGSSettingOn: + selectedIndex = KGSOpLogoLbxIndexOn; + break; + case KGSSettingOff: + selectedIndex = KGSOpLogoLbxIndexOff; + break; + } + + CDesCArrayFlat* items = + iCoeEnv->ReadDesC16ArrayResourceL( R_OPLOGO_ON_OFF_SETTING_PAGE_LBX ); + CleanupStack::PushL( items ); + + if ( !iOprtLogoSettingPage ) + { + iOprtLogoSettingPage = new (ELeave) CAknRadioButtonSettingPage( + R_OPERATOR_LOGO_SETTING_PAGE, + selectedIndex, + items ); + } + + TBool ret = iOprtLogoSettingPage->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ); + iOprtLogoSettingPage = NULL; + CleanupStack::PopAndDestroy( items ); + + // Match selected lbx item index to aOperatorLogoValue: + switch( selectedIndex ) + { + case KGSOpLogoLbxIndexOn: + aOperatorLogoValue = KGSSettingOn; + break; + case KGSOpLogoLbxIndexOff: + aOperatorLogoValue = KGSSettingOff; + break; + } + + if( aOperatorLogoValue != previousValue ) + { + isValueUpdated = ETrue; + } + return isValueUpdated; + } + +// ----------------------------------------------------------------------------- +// CGSDisplayPlugin::CloseDialog +// +// +// ----------------------------------------------------------------------------- +// +void CGSDisplayPlugin::CloseDialog() + { + //Send ESC key sequence to setting dialog, so that it closes itself. + if ( iOprtLogoSettingPage ) + { + iReshowOprtSetPage = ETrue; + TKeyEvent event; + event.iCode = EKeyEscape; + event.iScanCode = EStdKeyEscape; + event.iRepeats = 0; + TRAP_IGNORE( iCoeEnv->SimulateKeyEventL( event, EEventKeyDown ); + iCoeEnv->SimulateKeyEventL( event, EEventKey ); + iCoeEnv->SimulateKeyEventL( event, EEventKeyUp ); ); + } + } +// End of File + +