gssettingsuis/Gs/GSApplication/Src/GSUi.cpp
author hgs
Thu, 04 Nov 2010 13:38:47 +0800
changeset 68 13e71d907dc3
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
68
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  General Settings User Interface
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
// INCLUDE FILES
hgs
parents:
diff changeset
    20
#include    <bldvariant.hrh>
hgs
parents:
diff changeset
    21
#include    <eikapp.h>
hgs
parents:
diff changeset
    22
#include    <avkon.hrh>
hgs
parents:
diff changeset
    23
#include    <akncontext.h>
hgs
parents:
diff changeset
    24
#include    <aknnotewrappers.h>
hgs
parents:
diff changeset
    25
#include    <aknnavi.h>
hgs
parents:
diff changeset
    26
#include    <aknnavide.h>
hgs
parents:
diff changeset
    27
#include    <akntabgrp.h>
hgs
parents:
diff changeset
    28
#include    <akntitle.h>
hgs
parents:
diff changeset
    29
#include    <AknUtils.h>
hgs
parents:
diff changeset
    30
#include    <AknsConstants.h> // For determining skin change
hgs
parents:
diff changeset
    31
#include    <barsread.h>
hgs
parents:
diff changeset
    32
#include    <StringLoader.h>
hgs
parents:
diff changeset
    33
#include    <gsapp.rsg>
hgs
parents:
diff changeset
    34
#include    <eikenv.h>
hgs
parents:
diff changeset
    35
#include    <ConeResLoader.h>
hgs
parents:
diff changeset
    36
#include    <apgcli.h>
hgs
parents:
diff changeset
    37
#include    <f32file.h>
hgs
parents:
diff changeset
    38
#include    <hlplch.h> // For HlpLauncher
hgs
parents:
diff changeset
    39
#include    <w32std.h>
hgs
parents:
diff changeset
    40
#include    <eikproc.h> // Embedding CC in GS
hgs
parents:
diff changeset
    41
#include    <aknclearer.h> // Embedding CC in GS
hgs
parents:
diff changeset
    42
#include    <apacln.h> // Embedding CC in GS
hgs
parents:
diff changeset
    43
#include    <PSVariables.h>
hgs
parents:
diff changeset
    44
#include    <e32std.h> // The USER class
hgs
parents:
diff changeset
    45
#include    <featmgr.h>
hgs
parents:
diff changeset
    46
#include    <s32mem.h>
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
#include    <gsplugininterface.h>
hgs
parents:
diff changeset
    49
#include    <gsbaseview.h>
hgs
parents:
diff changeset
    50
#include    <gsfwviewuids.h>
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
#include  <apgwgnam.h>
hgs
parents:
diff changeset
    53
#include    "GsLogger.h"
hgs
parents:
diff changeset
    54
#include    "GSUi.h"
hgs
parents:
diff changeset
    55
#include    <gsmainview.h>
hgs
parents:
diff changeset
    56
#include    "GSDocument.h"
hgs
parents:
diff changeset
    57
#include    "gssettingid.h"
hgs
parents:
diff changeset
    58
#include    <mgswatchdog.h>
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
// System Includes
hgs
parents:
diff changeset
    61
#include  <e32property.h>
hgs
parents:
diff changeset
    62
#include <sbdefs.h>
hgs
parents:
diff changeset
    63
using namespace conn;
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
//CONSTANTS
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
const TInt KGSPhoneAppID = 0x100058b3;
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
// ----------------------------------------------------
hgs
parents:
diff changeset
    74
// CGSUi::CGSUi()
hgs
parents:
diff changeset
    75
//
hgs
parents:
diff changeset
    76
// Default constructor.
hgs
parents:
diff changeset
    77
// ----------------------------------------------------
hgs
parents:
diff changeset
    78
CGSUi::CGSUi()
hgs
parents:
diff changeset
    79
    {
hgs
parents:
diff changeset
    80
    }
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
// ----------------------------------------------------
hgs
parents:
diff changeset
    84
// CGSUi::~CGSUi()
hgs
parents:
diff changeset
    85
// destructor
hgs
parents:
diff changeset
    86
//
hgs
parents:
diff changeset
    87
// ----------------------------------------------------
hgs
parents:
diff changeset
    88
CGSUi::~CGSUi()
hgs
parents:
diff changeset
    89
    {
hgs
parents:
diff changeset
    90
    GSDocument().PrepareForUIDestruction();
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
    FeatureManager::UnInitializeLib();
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
    //Embedding - removing created document
hgs
parents:
diff changeset
    95
    if ( iEmbedded )
hgs
parents:
diff changeset
    96
        {
hgs
parents:
diff changeset
    97
        iEikonEnv->Process()->DestroyDocument( iEmbedded );
hgs
parents:
diff changeset
    98
        }
hgs
parents:
diff changeset
    99
    if( iEComNotifier )
hgs
parents:
diff changeset
   100
        {
hgs
parents:
diff changeset
   101
        delete iEComNotifier;
hgs
parents:
diff changeset
   102
        }
hgs
parents:
diff changeset
   103
    }
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
// ----------------------------------------------------
hgs
parents:
diff changeset
   107
// CGSUi::ConstructL()
hgs
parents:
diff changeset
   108
//
hgs
parents:
diff changeset
   109
// Symbian OS two-phased constructor
hgs
parents:
diff changeset
   110
// ----------------------------------------------------
hgs
parents:
diff changeset
   111
void CGSUi::ConstructL()
hgs
parents:
diff changeset
   112
    {
hgs
parents:
diff changeset
   113
    __GSLOGSTRING( "[CGSUi] ConstructL()" );
hgs
parents:
diff changeset
   114
    FeatureManager::InitializeLibL();
hgs
parents:
diff changeset
   115
    BaseConstructL( EAknEnableSkin | EAknEnableMSK |EAknSingleClickCompatible );
hgs
parents:
diff changeset
   116
    TInt backupInfo = 0;
hgs
parents:
diff changeset
   117
  const TInt error = RProperty::Get( TUid::Uid( KUidSystemCategoryValue ),
hgs
parents:
diff changeset
   118
                             KUidBackupRestoreKey,
hgs
parents:
diff changeset
   119
                             backupInfo );
hgs
parents:
diff changeset
   120
  // We check if the backup/restore process is underway
hgs
parents:
diff changeset
   121
  if  ( error == KErrNone )
hgs
parents:
diff changeset
   122
    {
hgs
parents:
diff changeset
   123
        // Work out what kind of operation is underway:
hgs
parents:
diff changeset
   124
    if ( ( backupInfo & KBURPartTypeMask ) == EBURNormal ||
hgs
parents:
diff changeset
   125
         ( backupInfo & KBURPartTypeMask ) == EBURUnset )
hgs
parents:
diff changeset
   126
      {
hgs
parents:
diff changeset
   127
      ConstructViewsL();
hgs
parents:
diff changeset
   128
      //Activate the main view to be the first view when
hgs
parents:
diff changeset
   129
      // application is opened.
hgs
parents:
diff changeset
   130
      SetDefaultViewL( *iMainView );
hgs
parents:
diff changeset
   131
      }
hgs
parents:
diff changeset
   132
    else
hgs
parents:
diff changeset
   133
      {
hgs
parents:
diff changeset
   134
      if ( ( backupInfo & KBURPartTypeMask) == EBURBackupFull ||
hgs
parents:
diff changeset
   135
           ( backupInfo & KBURPartTypeMask) == EBURBackupPartial )
hgs
parents:
diff changeset
   136
        {
hgs
parents:
diff changeset
   137
            // Backup In Progress.. show a Note and Dont Launch GS
hgs
parents:
diff changeset
   138
            ShowNoteGsNotOpenedDuringBackupRestoreL();
hgs
parents:
diff changeset
   139
        }
hgs
parents:
diff changeset
   140
      else if ( ( backupInfo & KBURPartTypeMask) == EBURRestoreFull ||
hgs
parents:
diff changeset
   141
                ( backupInfo & KBURPartTypeMask) == EBURRestorePartial )
hgs
parents:
diff changeset
   142
        {
hgs
parents:
diff changeset
   143
            // Restore In Progress.. show a Note and Dont Launch GS
hgs
parents:
diff changeset
   144
                    ShowNoteGsNotOpenedDuringBackupRestoreL();
hgs
parents:
diff changeset
   145
        }
hgs
parents:
diff changeset
   146
      }
hgs
parents:
diff changeset
   147
    }
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
    GSDocument().PreparePluginCacheL( *this );
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
    // This will observe plugin install events.
hgs
parents:
diff changeset
   152
    iEComNotifier = CGSEComNotifier::NewL( this, GSDocument().GetImplInfo() );
hgs
parents:
diff changeset
   153
    }
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
// ----------------------------------------------------
hgs
parents:
diff changeset
   157
// CGSUi::ConstructViewsL()
hgs
parents:
diff changeset
   158
//
hgs
parents:
diff changeset
   159
// ----------------------------------------------------
hgs
parents:
diff changeset
   160
void CGSUi::ConstructViewsL()
hgs
parents:
diff changeset
   161
    {
hgs
parents:
diff changeset
   162
    __GSLOGSTRING( "[CGSUi] Constructing views..." );
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
    iMainView = CGSMainView::NewL();
hgs
parents:
diff changeset
   165
    AddViewL( iMainView );         // transfer ownership to CAknViewAppUi
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
    __GSLOGSTRING( "[CGSUi] Constructing views done." );
hgs
parents:
diff changeset
   168
    }
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
// ----------------------------------------------------
hgs
parents:
diff changeset
   172
// CGSUi::HandleCommandL(TInt aCommand)
hgs
parents:
diff changeset
   173
//
hgs
parents:
diff changeset
   174
//
hgs
parents:
diff changeset
   175
// ----------------------------------------------------
hgs
parents:
diff changeset
   176
void CGSUi::HandleCommandL( TInt aCommand )
hgs
parents:
diff changeset
   177
    {
hgs
parents:
diff changeset
   178
    __GSLOGSTRING1( "[CGSUi] HandleCommandL(%d)", aCommand );
hgs
parents:
diff changeset
   179
    switch ( aCommand )
hgs
parents:
diff changeset
   180
        {
hgs
parents:
diff changeset
   181
        case EEikCmdExit:
hgs
parents:
diff changeset
   182
        case EAknCmdExit:
hgs
parents:
diff changeset
   183
        case EAknSoftkeyExit:
hgs
parents:
diff changeset
   184
        #ifdef GS_ENABLE_WATCH_DOG
hgs
parents:
diff changeset
   185
            GSDocument().WatchDog()->ReportCleanExitL();
hgs
parents:
diff changeset
   186
        #endif
hgs
parents:
diff changeset
   187
            Exit();
hgs
parents:
diff changeset
   188
            break;
hgs
parents:
diff changeset
   189
        default:
hgs
parents:
diff changeset
   190
            break;
hgs
parents:
diff changeset
   191
        }
hgs
parents:
diff changeset
   192
    }
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
// ----------------------------------------------------
hgs
parents:
diff changeset
   196
// CGSUi::HandleResourceChangeL()
hgs
parents:
diff changeset
   197
//
hgs
parents:
diff changeset
   198
//
hgs
parents:
diff changeset
   199
// ----------------------------------------------------
hgs
parents:
diff changeset
   200
//
hgs
parents:
diff changeset
   201
void CGSUi::HandleResourceChangeL( TInt aType )
hgs
parents:
diff changeset
   202
    {
hgs
parents:
diff changeset
   203
    CAknViewAppUi::HandleResourceChangeL( aType );
hgs
parents:
diff changeset
   204
    }
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
// ----------------------------------------------------
hgs
parents:
diff changeset
   208
// CGSUi::HandleKeyEventL()
hgs
parents:
diff changeset
   209
//
hgs
parents:
diff changeset
   210
//
hgs
parents:
diff changeset
   211
// ----------------------------------------------------
hgs
parents:
diff changeset
   212
TKeyResponse CGSUi::HandleKeyEventL( const TKeyEvent& aKeyEvent,
hgs
parents:
diff changeset
   213
                                     TEventCode aType )
hgs
parents:
diff changeset
   214
    {
hgs
parents:
diff changeset
   215
    __GSLOGSTRING1( "[CGSUi] HandleKeyEventL(code:%d)", aKeyEvent.iCode );
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
    CAknNavigationControlContainer* naviContainer =
hgs
parents:
diff changeset
   218
        static_cast<CAknNavigationControlContainer*>
hgs
parents:
diff changeset
   219
        ( StatusPane()->ControlL( TUid::Uid(EEikStatusPaneUidNavi ) ) );
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
    TKeyResponse response = EKeyWasNotConsumed;
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
    if( naviContainer )
hgs
parents:
diff changeset
   224
        {
hgs
parents:
diff changeset
   225
        CAknNavigationDecorator* naviDec = naviContainer->Top();
hgs
parents:
diff changeset
   226
        if( naviDec )
hgs
parents:
diff changeset
   227
            {
hgs
parents:
diff changeset
   228
            CCoeControl* decControl = naviDec->DecoratedControl();
hgs
parents:
diff changeset
   229
            if( decControl)
hgs
parents:
diff changeset
   230
                {
hgs
parents:
diff changeset
   231
                response = decControl->OfferKeyEventL( aKeyEvent, aType );
hgs
parents:
diff changeset
   232
                }
hgs
parents:
diff changeset
   233
            }
hgs
parents:
diff changeset
   234
        }
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
    return response;
hgs
parents:
diff changeset
   237
    }
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
// ----------------------------------------------------
hgs
parents:
diff changeset
   241
// CGSUi::PhoneIdle()
hgs
parents:
diff changeset
   242
//
hgs
parents:
diff changeset
   243
//
hgs
parents:
diff changeset
   244
// ----------------------------------------------------
hgs
parents:
diff changeset
   245
//
hgs
parents:
diff changeset
   246
void CGSUi::PhoneIdle()
hgs
parents:
diff changeset
   247
    {
hgs
parents:
diff changeset
   248
    TRAP_IGNORE( CreateActivateViewEventL( TVwsViewId( TUid::Uid( KGSPhoneAppID ),
hgs
parents:
diff changeset
   249
        TUid::Uid( KGSPhoneAppID ) ), KNullUid, KNullDesC8() ) );
hgs
parents:
diff changeset
   250
    }
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
hgs
parents:
diff changeset
   253
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   254
// CGSUi::EmbedAppL()
hgs
parents:
diff changeset
   255
//
hgs
parents:
diff changeset
   256
// Launches application as embedded.
hgs
parents:
diff changeset
   257
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   258
//
hgs
parents:
diff changeset
   259
void CGSUi::EmbedAppL( const TAppInfo& aApp )
hgs
parents:
diff changeset
   260
    {
hgs
parents:
diff changeset
   261
    if ( iEmbedded )
hgs
parents:
diff changeset
   262
        {
hgs
parents:
diff changeset
   263
        iEikonEnv->Process()->DestroyDocument( iEmbedded );
hgs
parents:
diff changeset
   264
        iEmbedded = NULL;
hgs
parents:
diff changeset
   265
        }
hgs
parents:
diff changeset
   266
    CAknLocalScreenClearer* clearer = CAknLocalScreenClearer::NewLC();
hgs
parents:
diff changeset
   267
    CEikProcess* process = iEikonEnv->Process();
hgs
parents:
diff changeset
   268
    TApaApplicationFactory apaAppFactory( aApp.iUid );
hgs
parents:
diff changeset
   269
    iEmbedded = process->AddNewDocumentL( apaAppFactory );
hgs
parents:
diff changeset
   270
    TApaDocCleanupItem cleanup( process, iEmbedded );
hgs
parents:
diff changeset
   271
    CleanupStack::PushL( cleanup );
hgs
parents:
diff changeset
   272
    iEmbedded->NewDocumentL();
hgs
parents:
diff changeset
   273
    CleanupStack::Pop();
hgs
parents:
diff changeset
   274
    iEmbedded->EditL( NULL );
hgs
parents:
diff changeset
   275
    CleanupStack::PopAndDestroy( clearer );
hgs
parents:
diff changeset
   276
    }
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   280
// CGSUi::Document()
hgs
parents:
diff changeset
   281
//
hgs
parents:
diff changeset
   282
//
hgs
parents:
diff changeset
   283
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   284
//
hgs
parents:
diff changeset
   285
CGSDocument& CGSUi::GSDocument() const
hgs
parents:
diff changeset
   286
    {
hgs
parents:
diff changeset
   287
    CGSDocument* doc = static_cast< CGSDocument* >( Document() );
hgs
parents:
diff changeset
   288
    return *doc;
hgs
parents:
diff changeset
   289
    }
hgs
parents:
diff changeset
   290
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   293
// CGSUi::ShowNoteGsNotOpenedDuringBackupRestoreL()
hgs
parents:
diff changeset
   294
//
hgs
parents:
diff changeset
   295
//
hgs
parents:
diff changeset
   296
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   297
//
hgs
parents:
diff changeset
   298
void CGSUi::ShowNoteGsNotOpenedDuringBackupRestoreL()
hgs
parents:
diff changeset
   299
    {
hgs
parents:
diff changeset
   300
    HBufC* prompt =
hgs
parents:
diff changeset
   301
     StringLoader::LoadL( R_CONFIRM_NOTE_GS_EXIT_BACKUP_RESTORE_STRING );
hgs
parents:
diff changeset
   302
    CleanupStack::PushL( prompt );
hgs
parents:
diff changeset
   303
    CAknInformationNote* note =
hgs
parents:
diff changeset
   304
                new( ELeave ) CAknInformationNote( ETrue );
hgs
parents:
diff changeset
   305
    note->ExecuteLD( *prompt );
hgs
parents:
diff changeset
   306
    CleanupStack::PopAndDestroy( prompt );
hgs
parents:
diff changeset
   307
#ifdef GS_ENABLE_WATCH_DOG
hgs
parents:
diff changeset
   308
    GSDocument().WatchDog()->ReportCleanExitL();
hgs
parents:
diff changeset
   309
#endif
hgs
parents:
diff changeset
   310
    Exit();
hgs
parents:
diff changeset
   311
    }
hgs
parents:
diff changeset
   312
hgs
parents:
diff changeset
   313
hgs
parents:
diff changeset
   314
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   315
// CGSUi::HandleMessageL
hgs
parents:
diff changeset
   316
// Handles messages sent from gslauncher
hgs
parents:
diff changeset
   317
//
hgs
parents:
diff changeset
   318
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   319
//
hgs
parents:
diff changeset
   320
MCoeMessageObserver::TMessageResponse CGSUi::HandleMessageL(
hgs
parents:
diff changeset
   321
    TUint32 /*aClientHandleOfTargetWindowGroup*/,
hgs
parents:
diff changeset
   322
    TUid /*aMessageUid*/,
hgs
parents:
diff changeset
   323
    const TDesC8 &aMessageParameters )
hgs
parents:
diff changeset
   324
  {
hgs
parents:
diff changeset
   325
  const TUint8* ptr = aMessageParameters.Ptr();
hgs
parents:
diff changeset
   326
  __GSLOGSTRING1( "[CGSUi::HandleMessageL] aMessageParameters: %S", &aMessageParameters );
hgs
parents:
diff changeset
   327
hgs
parents:
diff changeset
   328
  FindAndKillEmbeddedAppL();
hgs
parents:
diff changeset
   329
hgs
parents:
diff changeset
   330
  TUid viewUid;
hgs
parents:
diff changeset
   331
  TUid uid2;
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
  RDesReadStream str;
hgs
parents:
diff changeset
   334
  str.Open(aMessageParameters);
hgs
parents:
diff changeset
   335
  str >> viewUid;
hgs
parents:
diff changeset
   336
  str >> uid2;
hgs
parents:
diff changeset
   337
  HBufC8* msg8 = HBufC8::NewLC(str, 1024);
hgs
parents:
diff changeset
   338
  str.Close();
hgs
parents:
diff changeset
   339
hgs
parents:
diff changeset
   340
  __GSLOGSTRING1( "[CGSUi::HandleMessageL] Launching  view 0x%x ", viewUid.iUid );
hgs
parents:
diff changeset
   341
  TVwsViewId id( KUidGS , viewUid );
hgs
parents:
diff changeset
   342
  if ( !View(viewUid) )
hgs
parents:
diff changeset
   343
	  {
hgs
parents:
diff changeset
   344
	  GSDocument().CreateShimmedViewL(viewUid);
hgs
parents:
diff changeset
   345
	  }
hgs
parents:
diff changeset
   346
  ActivateViewL( id, uid2, *msg8 );
hgs
parents:
diff changeset
   347
  CleanupStack::PopAndDestroy( msg8 );
hgs
parents:
diff changeset
   348
  return MCoeMessageObserver::EMessageNotHandled;
hgs
parents:
diff changeset
   349
  }
hgs
parents:
diff changeset
   350
hgs
parents:
diff changeset
   351
hgs
parents:
diff changeset
   352
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   353
// CGSUi::FindAndKillEmbeddedAppL()
hgs
parents:
diff changeset
   354
// Find possiple child app of GS, and kill it.
hgs
parents:
diff changeset
   355
//
hgs
parents:
diff changeset
   356
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   357
//
hgs
parents:
diff changeset
   358
TInt CGSUi::FindAndKillEmbeddedAppL()
hgs
parents:
diff changeset
   359
    {
hgs
parents:
diff changeset
   360
    RWsSession ws  = CEikonEnv::Static()->WsSession();
hgs
parents:
diff changeset
   361
    TApaTaskList taskList( ws );
hgs
parents:
diff changeset
   362
    TApaTask gstask = taskList.FindApp( KUidGS  ); // Find GS
hgs
parents:
diff changeset
   363
hgs
parents:
diff changeset
   364
    if ( gstask.Exists() ) // Task should exist
hgs
parents:
diff changeset
   365
        {
hgs
parents:
diff changeset
   366
        TInt gswgid = gstask.WgId();
hgs
parents:
diff changeset
   367
        RArray<RWsSession::TWindowGroupChainInfo> wgrp;
hgs
parents:
diff changeset
   368
        ws.WindowGroupList( &wgrp );
hgs
parents:
diff changeset
   369
        TInt i = 0;
hgs
parents:
diff changeset
   370
hgs
parents:
diff changeset
   371
        // Loop window groups, find GS's child app
hgs
parents:
diff changeset
   372
        for ( i=0; i < wgrp.Count() ; ++i )
hgs
parents:
diff changeset
   373
            {
hgs
parents:
diff changeset
   374
            TBuf<100> name;
hgs
parents:
diff changeset
   375
            ws.GetWindowGroupNameFromIdentifier( wgrp[i].iId , name );
hgs
parents:
diff changeset
   376
            RWsSession::TWindowGroupChainInfo wginfo = wgrp[i];
hgs
parents:
diff changeset
   377
            __GSLOGSTRING3( "[CGSUi] wginfo %d (%d) '%S'",  wginfo.iId, wginfo.iParentId, &( name.Left( 20 ) )  );
hgs
parents:
diff changeset
   378
            if ( wginfo.iParentId == gswgid ) // Child of GS found
hgs
parents:
diff changeset
   379
                {
hgs
parents:
diff changeset
   380
                CApaWindowGroupName* windowName1 = CApaWindowGroupName::NewLC( ws, wginfo.iId );
hgs
parents:
diff changeset
   381
                TUid embeddeeuid;
hgs
parents:
diff changeset
   382
                embeddeeuid = windowName1->AppUid();
hgs
parents:
diff changeset
   383
                TApaTask embeddee = taskList.FindApp( embeddeeuid );
hgs
parents:
diff changeset
   384
hgs
parents:
diff changeset
   385
                // Kill the child app
hgs
parents:
diff changeset
   386
                if ( embeddee.Exists() )
hgs
parents:
diff changeset
   387
                    {
hgs
parents:
diff changeset
   388
                    __GSLOGSTRING2( "[CGSUi] Embeddee: 0x%x  Embeddee thread=0x%x",
hgs
parents:
diff changeset
   389
                                    embeddeeuid.iUid,
hgs
parents:
diff changeset
   390
                                    embeddee.ThreadId() );
hgs
parents:
diff changeset
   391
                    embeddee.KillTask();
hgs
parents:
diff changeset
   392
                    }
hgs
parents:
diff changeset
   393
                CleanupStack::PopAndDestroy( windowName1 );  //windowName1
hgs
parents:
diff changeset
   394
                }
hgs
parents:
diff changeset
   395
            }
hgs
parents:
diff changeset
   396
        wgrp.Close();
hgs
parents:
diff changeset
   397
        }
hgs
parents:
diff changeset
   398
    return KErrNone;
hgs
parents:
diff changeset
   399
    }
hgs
parents:
diff changeset
   400
hgs
parents:
diff changeset
   401
hgs
parents:
diff changeset
   402
hgs
parents:
diff changeset
   403
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   404
//
hgs
parents:
diff changeset
   405
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   406
//
hgs
parents:
diff changeset
   407
void CGSUi::HandleEComEvent( TEComEvent aEvent )
hgs
parents:
diff changeset
   408
    {
hgs
parents:
diff changeset
   409
    /**
hgs
parents:
diff changeset
   410
     * Quietly close GS if GS-plugin is uninstalled. This is a precaution for
hgs
parents:
diff changeset
   411
     * scenario where GS-plugin is uninstalled and GS tries to access the
hgs
parents:
diff changeset
   412
     * plugin even though plugin's resources do not exist anymore.
hgs
parents:
diff changeset
   413
     *
hgs
parents:
diff changeset
   414
     * More sophisticated solution would have been to update whole GS plugin
hgs
parents:
diff changeset
   415
     * structure but this would have been overkill for this very rare use
hgs
parents:
diff changeset
   416
     * scenario and rather impossible due to BC requirements.
hgs
parents:
diff changeset
   417
     */
hgs
parents:
diff changeset
   418
    __GSLOGSTRING1( "[CGSUi::HandleEComEvent] aEvent:%d", aEvent );
hgs
parents:
diff changeset
   419
hgs
parents:
diff changeset
   420
    switch( aEvent )
hgs
parents:
diff changeset
   421
        {
hgs
parents:
diff changeset
   422
        case MGSEComObserver::EPluginRemoved:
hgs
parents:
diff changeset
   423
            __GSLOGSTRING( "[CGSUi::HandleAppListEvent] Closing GS..." );
hgs
parents:
diff changeset
   424
            #ifdef GS_ENABLE_WATCH_DOG
hgs
parents:
diff changeset
   425
                TRAP_IGNORE( GSDocument().WatchDog()->ReportCleanExitL() );
hgs
parents:
diff changeset
   426
            #endif
hgs
parents:
diff changeset
   427
            Exit();
hgs
parents:
diff changeset
   428
            break;
hgs
parents:
diff changeset
   429
        default:
hgs
parents:
diff changeset
   430
            break;
hgs
parents:
diff changeset
   431
        }
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
    }
hgs
parents:
diff changeset
   434
hgs
parents:
diff changeset
   435
hgs
parents:
diff changeset
   436
hgs
parents:
diff changeset
   437
hgs
parents:
diff changeset
   438
//End of File