satui/satshellcontroller/src/csatshellcontroller.cpp
branchRCL_3
changeset 20 987c9837762f
parent 19 7d48bed6ce0c
child 21 0a6dd2dc9970
--- a/satui/satshellcontroller/src/csatshellcontroller.cpp	Tue Aug 31 15:45:17 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,551 +0,0 @@
-/*
-* Copyright (c) 2003-2010 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: 
-*     This file contains the SAT Shell Controller class that is responsible
-*     for the actual implementation of the following functionality:
-*       - add SAT UI application to Desk (or similar)
-*       - remove SAT UI application from Desk (or similar)
-*       - bring SAT UI application to foreground if it already is up
-*           and running
-*       - launching the SAT UI application
-*       - launching the Browser
-*       - resolving default access point
-*       - bring Browser to the foreground
-*
-*
-*/
-
-
-//  INCLUDE FILES
-#include <w32std.h>             // RWsSession
-#include <apaid.h>              // TApaAppInfo
-#include <apacmdln.h>           // CApaCommandLine
-#include <apgcli.h>             // RApaLsSession
-#include <apgtask.h>            // TApaTaskList
-#include <apgwgnam.h>           // CApaWindowGroupName
-#include <MenuSatInterface.h>   // CMenuSATInterface
-#include <DocumentHandler.h>    // KWmlcHandler
-#include "csatshellcontroller.h"
-
-// Browser Cen Rep Keys.
-#ifdef __SERIES60_NATIVE_BROWSER
-//    #include <BrowserUiSDKCRKeys.h> Commented out to allow sat server boot TB10.1 
-//    #include <BrowserUiInternalCRKeys.h>
-#endif // __SERIES60_NATIVE_BROWSER
-#include "tflogger.h"
-
-// CONSTANTS
-const TUid KUidSatUi = { 0x101f4ce0 };
-_LIT( KFour, "4" );                     // Browser parameter.
-_LIT( KFive, "5" );                     // Browser parameter.
-_LIT( KSpace, " " );                    // Used as Browser parameter.
-static const TUid KEmptyUid = { KErrNotFound };
-static const TUid KUidBrowser = { KWmlcHandler };
-const TInt KTimerTime( 2000000 );       // 2 seconds.
-const TInt KBrowserParamAndTwoSpaces( 3 );
-#ifndef __SERIES60_NATIVE_BROWSER
-    const TUid KCRUidBrowser = { 0x10008D39 };
-    const TUint32 KBrowserDefaultAccessPoint( 0x0000000E );
-#endif // __SERIES60_NATIVE_BROWSER
-
-// ================= MEMBER FUNCTIONS =======================================
-
-// C++ default constructor can NOT contain any code that
-// might leave.
-//
-CSatShellController::CSatShellController():
-    iUidWmlBrowser( TUid::Uid( KWmlcHandler ))
-    {
-    TFLOGSTRING( "CSatShellController::CSatShellController called-exit" )
-    }
-
-// Symbian OS constructor
-void CSatShellController::ConstructL()
-    {
-    TFLOGSTRING( "CSatShellController::ConstructL called" )
-
-    // Timer is used to get the Browser application to the foreground.
-    iTimer = CPeriodic::NewL( EPriorityNormal );
-
-    TFLOGSTRING( "CSatShellController::ConstructL exit" )
-    }
-
-// Two-phased constructor.
-CSatShellController* CSatShellController::NewL()
-    {
-    TFLOGSTRING( "CSatShellController::NewL called" )
-
-    CSatShellController* self = new ( ELeave ) CSatShellController;
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    TFLOGSTRING( "CSatShellController::NewL exit" )
-    return self;
-    }
-
-
-// Destructor
-CSatShellController::~CSatShellController()
-    {
-    TFLOGSTRING( "CSatShellController::~CSatShellController called" )
-
-    // Frees resources.
-    if ( iTimer )
-        {
-        iTimer->Cancel();
-        }
-    delete iTimer;
-
-    TFLOGSTRING( "CSatShellController::~CSatShellController exit" )
-    }
-
-// ---------------------------------------------------------
-// CSatShellController::AddSatUiL
-// Adds SAT UI Client application to phone's
-// Application Shell (or similar).
-// ---------------------------------------------------------
-//
-void CSatShellController::AddSatUiL(
-    TDesC& aName )
-    {
-    TFLOGSTRING( "CSatShellController::AddSatUiL(name) called" )
-
-    iSimAppName = aName;
-
-    CMenuSATInterface* menu = new ( ELeave ) CMenuSATInterface;
-    menu->MakeSatUiVisible( ETrue, aName );
-    delete menu;
-
-    TFLOGSTRING( "CSatShellController::AddSatUiL exit" )
-    }
-
-//------------------------------------------------------------
-// CSatShellController::AddSatUiL
-// Adds SAT UI Client application to phone's
-// Application Shell (or similar).
-// ---------------------------------------------------------
-//
-void CSatShellController::AddSatUiL(
-    TDesC& aName, TUint8 aIconId )
-    {
-    TFLOGSTRING( "CSatShellController::AddSatUiL(name,icon) called" )
-
-    iSimAppName = aName;
-
-    CMenuSATInterface* menu = new ( ELeave ) CMenuSATInterface;
-    menu->MakeSatUiVisible( ETrue, aName, aIconId );
-    delete menu;
-
-    TFLOGSTRING( "CSatShellController::AddSatUiL exit" )
-    }
-
-// ---------------------------------------------------------
-// CSatShellController::RemoveSatUiL
-// Removes SAT UI Client application from phone's
-// Application Shell (or similar).
-// ---------------------------------------------------------
-//
-
-void CSatShellController::RemoveSatUiL()
-    {
-    TFLOGSTRING( "CSatShellController::RemoveSatUiL called" )
-
-    CMenuSATInterface* menu = new ( ELeave ) CMenuSATInterface;
-    menu->MakeSatUiVisible( EFalse, iSimAppName );
-    delete menu;
-
-    TFLOGSTRING( "CSatShellController::RemoveSatUiL exit" )
-    }
-
-// ---------------------------------------------------------
-// CSatShellController::LaunchSatUiL
-// Launches SAT UI Client application.
-// ---------------------------------------------------------
-//
-void CSatShellController::LaunchSatUiL()
-    {
-    TFLOGSTRING( "CSatShellController::LaunchSatUiL called" )
-
-    RApaLsSession rapaLsSession;
-    User::LeaveIfError( rapaLsSession.Connect() );
-    CleanupClosePushL( rapaLsSession );
-    TThreadId id( static_cast<TInt64>( 0 ) );
-    TApaAppInfo appInfo;
-
-    User::LeaveIfError( rapaLsSession.GetAppInfo( appInfo, KUidSatUi ) );
-    CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
-    cmdLine->SetExecutableNameL( appInfo.iFullName );
-    cmdLine->SetCommandL( EApaCommandOpen );
-    rapaLsSession.StartApp( *cmdLine, id );
-
-    CleanupStack::PopAndDestroy( cmdLine );
-    CleanupStack::PopAndDestroy( &rapaLsSession );
-
-    TFLOGSTRING( "CSatShellController::LaunchSatUiL exit" )
-    }
-
-
-// ---------------------------------------------------------
-// CSatShellController::BringBrowserToForeground
-// Brings the Browser to foreground.
-// ---------------------------------------------------------
-//
-void CSatShellController::BringBrowserToForeground() const
-    {
-    TFLOGSTRING( "CSatShellController::BringBrowserToForeground called" )
-
-    BringApplicationToForeground( iUidWmlBrowser );
-
-    TFLOGSTRING( "CSatShellController::BringBrowserToForeground exit" )
-    }
-
-// ---------------------------------------------------------
-// CSatShellController::BringBrowserToForegroundAfterPeriod
-// Brings the Browser to foreground after time has passed.
-// ---------------------------------------------------------
-//
-void CSatShellController::BringBrowserToForegroundAfterPeriod()
-    {
-    TFLOGSTRING(
-        "CSatShellController::BringBrowserToForegroundAfterPeriod called" )
-
-    if ( !iTimer->IsActive() )
-        {
-        TFLOGSTRING(
-            "CSatShellController::BringBrowserToForegroundAfterPeriod \
-             start iTimer" )
-        iTimer->Start( KTimerTime,
-                       KTimerTime,
-                       TCallBack( TimerCompleted, this ) );
-        }
-
-    TFLOGSTRING(
-        "CSatShellController::BringBrowserToForegroundAfterPeriod exit" )
-    }
-
-// ---------------------------------------------------------
-// CSatShellController::BringSatUiToForeground
-// Brings the SAT UI application to foreground.
-// ---------------------------------------------------------
-//
-void CSatShellController::BringSatUiToForeground()
-    {
-    TFLOGSTRING( "CSatShellController::BringSatUiToForeground called" )
-
-    CheckSatUiStatus();
-    BringApplicationToForeground( KUidSatUi );
-
-    TFLOGSTRING( "CSatShellController::BringSatUiToForeground exit" )
-    }
-
-// ---------------------------------------------------------
-// CSatShellController::BringApplicationToForeground
-// Brings the SAT UI application to foreground.
-// ---------------------------------------------------------
-//
-void CSatShellController::BringApplicationToForeground(
-    const TUid& aAppUid ) const
-    {
-    TFLOGSTRING( "CSatShellController::BringApplicationToForeground called" )
-
-    RWsSession wsSession;
-    // Open the WS server session.
-    if ( KErrNone == wsSession.Connect() )
-        {
-        TFLOGSTRING( "CSatShellController::BringApplicationToForeground \
-            open WS server session" )
-        TApaTaskList tasklist( wsSession );
-        // Find the task with uid
-        TApaTask task = tasklist.FindApp( aAppUid );
-        task.BringToForeground();
-        wsSession.Close();
-        }
-
-    TFLOGSTRING( "CSatShellController::BringApplicationToForeground exit" )
-    }
-
-// ---------------------------------------------------------
-// CSatShellController::SetSatUiToBackground
-// Sets SAT UI Application to background if needed.
-// ---------------------------------------------------------
-//
-void CSatShellController::SetSatUiToBackground() const
-    {
-    TFLOGSTRING( "CSatShellController::SetSatUiToBackground called" )
-    
-    if ( iSetSatUiToBackground )
-        {
-        RWsSession wsSession;
-        // Open the WS server session.
-        if ( KErrNone == wsSession.Connect() )
-            {
-            TFLOGSTRING( "CSatShellController::SetSatUiToBackground \
-                open WS server session" )
-            TApaTaskList tasklist( wsSession );
-            // Find the task with uid
-            TApaTask task = tasklist.FindApp( KUidSatUi );
-            task.SendToBackground();
-            wsSession.Close();
-            }            
-        }
-                    
-    TFLOGSTRING( "CSatShellController::SetSatUiToBackground exit" )                    
-    }
-
-// ---------------------------------------------------------
-// CSatShellController::CycleSatUiBackwards
-// Brings the SAT UI application to foreground.
-// ---------------------------------------------------------
-//
-void CSatShellController::CycleSatUiBackwards()
-    {
-    TFLOGSTRING( "CSatShellController::BringSatUiToForeground called" )
-
-    RWsSession wsSession;
-    // Open the WS server session.
-    if ( KErrNone == wsSession.Connect() )
-        {
-        TFLOGSTRING( "CSatShellController::CycleSatUiBackwards \
-            open WS server session" )
-        TApaTaskList taskList( wsSession );
-        // Finds topmost application.
-        TApaTask task = taskList.FindByPos(0);
-        iTimer->Cancel();
-
-        CApaWindowGroupName* name = 0;
-        TRAPD( err,
-            name = CApaWindowGroupName::NewL( wsSession, task.WgId() ) );
-
-        if ( name )
-            {
-            // Check is that Browser is foremost application.
-            if ( !err && ( name->AppUid() == KUidBrowser ) )
-                {
-                TFLOGSTRING(
-                    "CSatShellController::BSUTF Browser is in foreground" )
-                }
-            else
-                {
-                TFLOGSTRING(
-                    "CSatShellController::BSUTF Browser isn't in foreground" )
-                TApaTask browserTask = taskList.FindApp( KUidBrowser );
-                browserTask.BringToForeground();
-                iTimer->Start(
-                    KTimerTime, KTimerTime, TCallBack( TimerCompleted, this ) );
-                }
-
-            delete name;
-            }
-
-        wsSession.Close();
-        }
-
-    TFLOGSTRING( "CSatShellController::BringSatUiToForeground exit" )
-    }
-
-// ---------------------------------------------------------
-// CSatShellController::TimerCompleted
-// Callback function. Completes after predefined
-// time has passed
-// ---------------------------------------------------------
-//
-TInt CSatShellController::TimerCompleted( TAny* aObject )
-    {
-    TFLOGSTRING( "CSatShellController::TimerCompleted called" )
-
-    if ( aObject )
-        {
-        STATIC_CAST( CSatShellController*, aObject )->CycleSatUiBackwards();
-        }
-
-    TFLOGSTRING( "CSatShellController::TimerCompleted exit" )
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------
-// CSatShellController::LaunchBrowserL
-// Launch XHTML-browser
-// Browser launched with parameter
-// "4" + "<Space>" + "<Url>" + "<Space>" + "<UID of App>" or "5"
-// More information see Browser API Specification Document
-// ---------------------------------------------------------
-//
-TInt CSatShellController::LaunchBrowserL( const TDesC& aUrl,
-     TUid aAccessPointUid )
-    {
-    TFLOGSTRING( "CSatShellController::LaunchBrowserL called" )
-
-    TInt errorCode( KErrNone );
-    HBufC* param = HBufC::NewLC( aUrl.Length() + KMaxUidName +
-        KBrowserParamAndTwoSpaces );
-    
-    TFLOGSTRING2( "CSatShellController::LaunchBrowserL length of aUrl: %d", \
-        aUrl.Length() )
-    if ( aUrl.Length() > 0 )
-        {
-        param->Des().Copy( KFour );
-        param->Des().Append( KSpace );
-        param->Des().Append( aUrl );
-        TFLOGSTRING2( "CSatShellController::LaunchBrowserL \
-                      aAccessPointUid: %d", aAccessPointUid )
-        // Create script for Browser if not empty accesspoint UID.
-        if ( aAccessPointUid != KEmptyUid )
-            {
-            TFLOGSTRING( "CSatShellController::LaunchBrowserL not empty \
-                accesspoint" )
-            // Uid is in decimal format
-            param->Des().Append( KSpace );
-            param->Des().AppendNum( aAccessPointUid.iUid );
-            }
-
-        }
-    else
-        {
-        param->Des().Copy( KFive );
-        }
-
-    User::LeaveIfError( iWsSession.Connect() );
-
-    TFLOGSTRING2( "CSatShellController::LaunchBrowserL \
-                   param string: %S", param )
-    TApaTaskList taskList( iWsSession );
-    TApaTask task = taskList.FindApp( iUidWmlBrowser );
-
-    // If browser already open.
-    if ( task.Exists() )
-        {
-        TFLOGSTRING( "CSatShellController::LaunchBrowserL browser open" )
-        HBufC8* param8 = HBufC8::NewLC( param->Length() );
-        param8->Des().Append( *param );
-        errorCode = task.SendMessage( TUid::Uid( 0 ), param8->Des() );
-        CleanupStack::PopAndDestroy( param8 );
-        }
-    else
-        {
-        TFLOGSTRING( "CSatShellController::LaunchBrowserL launch browser" )
-        // Launch the Browser.
-        TThreadId id( static_cast<TInt64>( 0 ) );
-        RApaLsSession rapaLsSession;
-        User::LeaveIfError( rapaLsSession.Connect() );
-        errorCode = rapaLsSession.StartDocument( *param, iUidWmlBrowser, id );
-        rapaLsSession.Close();
-        }
-
-    BringBrowserToForeground();
-
-    iWsSession.Close();
-    CleanupStack::PopAndDestroy( param );
-
-    TFLOGSTRING2( "CSatShellController::LaunchBrowserL exit %d", errorCode )
-    return errorCode;
-    }
-
-// -----------------------------------------------------------------------------
-// CSatShellController::ResolveDefaultAccesspoint
-// Resolves Browser's default accesspoint.
-// -----------------------------------------------------------------------------
-//
-TInt CSatShellController::ResolveDefaultAccesspoint()
-    {
-    TFLOGSTRING( "CSatShellController::ResolveDefaultAccesspoint called" )
-
-    // Initialize with error value for wrong access point.
-    TInt apInt( KErrNotFound );
-/* Commented out to enable SAT Server boot,
-add TB10.1 implementation later
-
-    TInt err( KErrNone );
-    CRepository* repository = NULL;
-
-    // Which UID to monitor.
-    TRAP( err, repository = CRepository::NewL( KCRUidBrowser ) );
-
-    if ( ( KErrNone == err  ) && repository )
-        {
-        err = repository->StartTransaction(
-            CRepository::EReadWriteTransaction );
-        err = repository->Get( KBrowserDefaultAccessPoint, apInt );
-        TFLOGSTRING2( "CSatShellController::ResolveDefaultAccesspoint \
-        KBrowserDefaultAccessPoint: %d", apInt )
-        }
-
-    delete repository;
-    repository = NULL;
-*/
-    TFLOGSTRING( "CSatShellController::ResolveDefaultAccesspoint exit" )
-    return apInt;
-    }
-
-// -----------------------------------------------------------------------------
-// CSatShellController::CheckSatUiStatus
-// Check if SatUi is needed to set to background.
-// -----------------------------------------------------------------------------
-//
-void CSatShellController::CheckSatUiStatus()
-    {
-    TFLOGSTRING( "CSatShellController::CheckSatUiStatus called" )
-    
-    // if SatUi task is found and SatUi is not in foreground flag is set ETrue
-    iSetSatUiToBackground = EFalse;
-
-    RWsSession wsSession;
-    // Open the WS server session.
-    if ( KErrNone == wsSession.Connect() )
-        {
-        TFLOGSTRING( "CSatShellController::CheckSatUiStatus \
-            open WS server session" )
-        TApaTaskList tasklist( wsSession );
-        TApaTask satUiTask = tasklist.FindApp( KUidSatUi );
-        
-        if ( satUiTask.Exists() )
-            {
-            TFLOGSTRING(
-                 "CSatShellController::CheckSatUiStatus task exists" )
-            TApaTask topMostTask = tasklist.FindByPos( 0 );
-            
-            if ( topMostTask.ThreadId() != satUiTask.ThreadId() )
-                {
-                TFLOGSTRING(
-                    "CSatShellController::CheckSatUiStatus set SatUI to BG" )
-                iSetSatUiToBackground = ETrue;                    
-                }
-            }
-            
-        wsSession.Close();
-        }
-        
-    TFLOGSTRING( "CSatShellController::CheckSatUiStatus exit" )
-    }
-    
-// ================= OTHER EXPORTED FUNCTIONS ===============================
-
-EXPORT_C MSatShellController* NewSatController()
-    {
-    TFLOGSTRING( "CSatShellController::NewSatController called" )
-
-    MSatShellController* satController = NULL;
-    TRAPD( err, satController = CSatShellController::NewL() )
-    if ( KErrNone != err )
-        {
-        TFLOGSTRING2( "   CSatShellController::NewSatController \
-            failed: %d", err )
-        satController = NULL;
-        }
-
-    TFLOGSTRING( "CSatShellController::NewSatController exit" )
-    return satController;
-    }
-
-//  End of File