browserui/operatormenu/src/OperatorMenuAppUi.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:31:04 +0100
branchRCL_3
changeset 48 8e6fa1719340
parent 0 84ad3b177aa3
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201032 Kit: 201035

/*
* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:  COperatorMenuAppUi implementation
*
*/


// INCLUDE FILES
#include "OperatorMenuAppUi.h"

#include <featmgr.h>
#include <bldvariant.hrh>
#include <FeatMgr.h>

#include <centralrepository.h>
#include <menu2internalCRkeys.h>
// CONSTANTS
_LIT(KUrlLaunchParameter, "4 ");
_LIT(KLongZeroLaunchParameter, "5");
const TInt KUrlLaunchParamLength = 2;

const TInt KCenRepBufferSize = 255;
const TText KStrComma = ',';
#define KOperatorMenuUID 0x10008D5E

// ================= LOCAL FUNCTIONS ========================

// ----------------------------------------------------------------------------
// OperatorMenuUIDText
//
// @param aOperatorMenuUid buffer to set OperatorMenu UID as text
// ----------------------------------------------------------------------------
//
void OperatorMenuUIDText( TDes& aOperatorMenuUid )
    {
    // TUid method name return UID in format [UID], but we need only UID part.
    TUidName uidName( TUid::Uid( KOperatorMenuUID ).Name() );
    aOperatorMenuUid.Copy( uidName.Mid( 1, KMaxUidName - 2 ) );
    aOperatorMenuUid.UpperCase();
    }

// ----------------------------------------------------------------------------
// SetOperatorMenuHiddenInAppShellL
//
// @param aHidden Whether OperatorMenu should be hidden
// ----------------------------------------------------------------------------
//
void SetOperatorMenuHiddenInAppShellL( TBool aHidden )
    {
    CRepository* appShellRepository = CRepository::NewL( KCRUidMenu );
    CleanupStack::PushL( appShellRepository );

    // Read current value of the app shell hidden apps key
    TBuf<KCenRepBufferSize> keyContent;
    TInt err = appShellRepository->Get( KMenuHideApplication, keyContent );
    if ( err != KErrNone )
        {
        User::Leave( err );
        }

    TBool updated( EFalse );

    TBuf<8> OperatorMenuUid;
    OperatorMenuUIDText( OperatorMenuUid );
    
    // Search for PoC uid in the content (ignore case)
    TInt offset = keyContent.FindC( OperatorMenuUid );
    if ( offset == KErrNotFound && aHidden )
        {
        // PoC is not in the list but should be
        //
        __ASSERT_ALWAYS( keyContent.Length() + 9 < KCenRepBufferSize,
                         User::Leave( KErrOverflow ) );
        if ( keyContent.Length() > 0 )
            {
            keyContent.Append( KStrComma );
            }
        keyContent.Append( OperatorMenuUid );
        updated = ETrue;
        }
    else if ( offset != KErrNotFound && !aHidden )
        {
        // PoC is in the list but shouldn't be
        //
        if ( offset == 0 )
            {
            // Delete PoC uid and following comma (if any)
            keyContent.Delete( 0, Min( 9, keyContent.Length() ) );
            updated = ETrue;
            }
        else if ( keyContent[offset - 1] == ',' )
            {
            // Delete PoC uid and preceding comma
            keyContent.Delete( offset - 1, 9 );
            updated = ETrue;
            }
        else
            {
            User::Leave( KErrCorrupt );
            }
        }

    if ( updated )
        {
        err = appShellRepository->Set( KMenuHideApplication, keyContent );
        if ( err != KErrNone )
            {
            User::Leave( err );
            }
        }

    CleanupStack::PopAndDestroy( appShellRepository );
    }

// ----------------------------------------------------------
// COperatorDelayedStarter::COperatorDelayedStarter(COperatorMenuAppUi* aOperatorMenuAppUi)
// ----------------------------------------------------------
//
COperatorDelayedStarter::COperatorDelayedStarter(COperatorMenuAppUi* aOperatorMenuAppUi)
:   CActive( EPriorityLow )
	{
	CActiveScheduler::Add( this );
	iOperatorMenuAppUi = aOperatorMenuAppUi;
	}

// ----------------------------------------------------------
// COperatorDelayedStarter::~COperatorDelayedStarter()
// ----------------------------------------------------------
//
COperatorDelayedStarter::~COperatorDelayedStarter()
	{
	Cancel();
	Deque();
	}

// ----------------------------------------------------------
// COperatorDelayedStarter::Start()
// ----------------------------------------------------------
//
void COperatorDelayedStarter::Start()
	{
	SetActive();
	TRequestStatus* reqStat= &iStatus;
	User::RequestComplete( reqStat, KErrNone );
	}

// ----------------------------------------------------------
// COperatorDelayedStarter::RunL()
// ----------------------------------------------------------
//
void COperatorDelayedStarter::RunL()
	{
	iOperatorMenuAppUi->LaunchBrowserL();
	}

// ----------------------------------------------------------
// COperatorDelayedStarter::
// ----------------------------------------------------------
//
void COperatorDelayedStarter::DoCancel()
	{
	}

// ================= MEMBER FUNCTIONS =======================
//

// ----------------------------------------------------------
// COperatorMenuAppUi::COperatorMenuAppUi()
// ----------------------------------------------------------
//
COperatorMenuAppUi::COperatorMenuAppUi()
	{	
	}

// ----------------------------------------------------------
// COperatorMenuAppUi::ConstructL()
// ----------------------------------------------------------
//
void COperatorMenuAppUi::ConstructL()
    {
    BaseConstructL(/* ENoScreenFurniture |*/ ENonStandardResourceFile /*| ENoAppResourceFile | EAknEnableSkin*/ );
    
	// Connect to HttpCacheManager central repository
    iRepository = CRepository::NewL( KCRUidCacheManager );
	// Connect to OperatorMenu central repository
    iRepositoryOp = CRepository::NewL( KCrUidOperatorMenu );

	//Launch the browser with the Operator specific Url
	//or with default AP's homepage if Operator domain url not available
	//LaunchBrowserL();
	iLaunched = EFalse;
    
    TBool OperatorMenuSupport = FeatureManager::FeatureSupported( KFeatureIdOperatorMenu );
    if ( OperatorMenuSupport )
        {
        iDelayedStarter = new (ELeave) COperatorDelayedStarter( this );
	    iDelayedStarter->Start();
        }
    else
        {
        SetOperatorMenuHiddenInAppShellL( ETrue );
		Exit();
		}
	}
// ----------------------------------------------------
// COperatorMenuAppUi::~COperatorMenuAppUi()
// ----------------------------------------------------
//
COperatorMenuAppUi::~COperatorMenuAppUi()
    {
    delete iRepository;
    delete iRepositoryOp;

	if( iOverriddenSettings )
		{
		delete iOverriddenSettings;
		iOverriddenSettings = NULL;
		}
	if( iDelayedStarter )
		{
		delete iDelayedStarter;
		iDelayedStarter = NULL;
		}
   }


// ----------------------------------------------------
// COperatorMenuAppUi::HandleKeyEventL(
// ----------------------------------------------------
//
TKeyResponse COperatorMenuAppUi::HandleKeyEventL( 
    const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/ )
    {
    return EKeyWasNotConsumed;
    }

// ----------------------------------------------------
// COperatorMenuAppUi::HandleCommandL(TInt aCommand)
// ----------------------------------------------------
//
void COperatorMenuAppUi::HandleCommandL( TInt aCommand )
    {
    switch ( aCommand )
        {
        case EAknSoftkeyBack:
		case EAknSoftkeyExit:
        case EEikCmdExit:
		case EAknCmdExit:
            {
            Exit();
            break;
            }
        default:
            break;      
        }
    }

// ----------------------------------------------------
// COperatorMenuAppUi::HandleContentL
// Handles the content coming from the embedded browser.
// Returns EFalse: content will be passed on to framework
// ----------------------------------------------------
//    
TBool COperatorMenuAppUi::HandleContentL( const TDesC& /*aFileName*/, const CAiwGenericParamList& /*aParamList*/, TBool& aContinue )
	{
	aContinue = EFalse;
	return EFalse;
	}                                      

// ----------------------------------------------------
// COperatorMenuAppUi::DownloadedContentHandlerReserved1
// ( Reserved for future use )
// ----------------------------------------------------
//
TAny* COperatorMenuAppUi::DownloadedContentHandlerReserved1( TAny* /*aAnyParam*/ )
	{
	// Empty implementation.		
	return NULL;
	}

// ----------------------------------------------------
// COperatorMenuAppUi::LaunchBrowserL()
// ----------------------------------------------------
//
void COperatorMenuAppUi::LaunchBrowserL() 
    {
	TBool LaunchWithUrl( EFalse );
    TInt value;

	if( !iLaunched )
	    {
	    iLaunched = ETrue;
	    
	    //If centralrepository of HttpCahemanager is available...
        if ( iRepository )
	        {
    		// Read the URL from CacheManager central repository
	        if ( KErrNone == iRepository->Get( KOperatorDomainUrl, iUrl ) )
				{
				LaunchWithUrl = ETrue;
				}
	        }

	    //If centralrepository of OperatorMenu is available...
        if ( iRepositoryOp )
	        {
            delete iOverriddenSettings;
            iOverriddenSettings = NULL;

            iOverriddenSettings = new (ELeave) TBrowserOverriddenSettings;

            //Read the values to override
            if ( KErrNone == iRepositoryOp->Get( KOpMenuVerticalLayoutEnabled, value ) )
                {
                iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsSmallScreen, (TUint) value);
                }
            if ( KErrNone == iRepositoryOp->Get( KOpMenuAutoLoadImages, value ) )
                {
                iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsAutoLoadImages, (TUint) value);
                }
            if ( KErrNone == iRepositoryOp->Get( KOpMenuFontSize, value ) )
                {
                iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsFontSize, (TUint) value);
                }
            if ( KErrNone == iRepositoryOp->Get( KOpMenuFullScreen, value ) )
                {
                iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsFullScreen, (TUint) value);
                }
            if ( KErrNone == iRepositoryOp->Get( KOpMenuDefAp, value ) )
	            {
                iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsCustomAp, (TUint) value);
	            }
            }
        }

	// Launch browser according to the given launch type
	if( LaunchWithUrl && iUrl.Length() )
		{
		LaunchBrowserEmbeddedWithOperatorUrlL();
		} 
	else
		{
		LaunchBrowserEmbeddedWithDefaultAPHomepageL();
		}
    Exit();
    }

// ----------------------------------------------------
// COperatorMenuAppUi::LaunchBrowserEmbeddedWithUrlL
// ----------------------------------------------------
//
void COperatorMenuAppUi::LaunchBrowserEmbeddedWithOperatorUrlL()
	{
	//Pass the operator specific url to browser
	//(read from cachemanager ini file in LaunchBrowserL)
    HBufC* url = NULL;
	url = HBufC::NewLC( iUrl.Length() + KUrlLaunchParamLength );
	url->Des().Append( KUrlLaunchParameter );
	url->Des().Append( iUrl );
	
	CBrowserLauncher* launcher = CBrowserLauncher::NewLC();

    launcher->LaunchBrowserSyncEmbeddedL( url->Des(), this, iOverriddenSettings );

	CleanupStack::PopAndDestroy(); //Launcher
	CleanupStack::PopAndDestroy();  // url HBufC
	}

// ----------------------------------------------------
// COperatorMenuAppUi::NotifyExit
// ----------------------------------------------------
//
void COperatorMenuAppUi::NotifyExit(TExitMode /*aMode*/)
	{
	}

void COperatorMenuAppUi::LaunchBrowserEmbeddedWithDefaultAPHomepageL()
	{
	//Start the browser with parameter "5" to launch to default AP homepage
	CBrowserLauncher* launcher = CBrowserLauncher::NewLC();

    launcher->LaunchBrowserSyncEmbeddedL( KLongZeroLaunchParameter, this, iOverriddenSettings );

	CleanupStack::PopAndDestroy();
	}

// ----------------------------------------------------
// COperatorMenuAppUi::HandleStatusPaneSizeChange
// ----------------------------------------------------
//
void COperatorMenuAppUi::HandleStatusPaneSizeChange()
	{
	}
// End of File