/*
* 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 <coeaui.h>
#include <hlplch.h> // For HlpLauncher
#include <gulicon.h>
#include <bautils.h>
#include <featmgr.h>
#include <StringLoader.h>
#include <aknnotedialog.h>
#include <AknWaitDialog.h>
#include <aknslider.h>
#include <aknradiobuttonsettingpage.h>
#include <aknslidersettingpage.h>
#include <aknnotewrappers.h>
#include <aknViewAppUi.h>
#include <AknsWallpaperUtils.h>
#include <AknWaitDialog.h>
#include <akntextsettingpage.h>
#include <telephonydomainpskeys.h>
#include <imageconversion.h>
#include <MGFetch.h> // Image selection
#include <DRMCommon.h>
#include <GsDisplayPluginRsc.rsg>
#include <gsprivatepluginproviderids.h>
#include <gsmainview.h>
#include <gsbasecontainer.h>
#include <gscommon.hrh>
#include <gsdisplayplugin.mbg> // 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<CGSDisplayPluginContainer*>( 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() == EPsmsrvModeNormal )
{
#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() == EPsmsrvModeNormal )
{
#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() == EPsmsrvModeNormal )
{
#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<CAknSliderSettingPage*>( aSettingPage )->
SliderControl()->SetValueL( iModel->ContrastL() );
}
else
{
#endif //FF_POWER_SAVE
iModel->SetContrastL( static_cast<CAknSliderSettingPage*>
( 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<CAknSliderSettingPage*>( aSettingPage )->
SliderControl()->SetValueL( iModel->BrightnessL() );
}
else
{
#endif //FF_POWER_SAVE
iModel->SetBrightnessL( static_cast<CAknSliderSettingPage*>
( 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<CAknSliderSettingPage*>( aSettingPage )->
SliderControl()->SetValueL( iModel->AmbientLightSensorL() );
}
else
{
#endif //FF_POWER_SAVE
iModel->SetAmbientLightSensorL( static_cast<CAknSliderSettingPage*>
( 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<CAknRadioButtonSettingPage*> ( 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<KGSMaxWNText> 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<Mbm_file_name><Bitmap_name>
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