browserui/operatormenu/src/OperatorMenuAppUi.cpp
changeset 0 84ad3b177aa3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/operatormenu/src/OperatorMenuAppUi.cpp	Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,406 @@
+/*
+* 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  
+