codhandler/roapapp/src/RoapAppUi.cpp
changeset 0 dd21522fd290
child 13 10e98eab6f85
equal deleted inserted replaced
-1:000000000000 0:dd21522fd290
       
     1 /*
       
     2 * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *      Implementation of class CRoapAppUi.   
       
    16 *      
       
    17 *
       
    18 */
       
    19 
       
    20 
       
    21 #include <avkon.hrh>
       
    22 #include <eikbtgpc.h>
       
    23 #include <eikapp.h>
       
    24 #include <apgcli.h>
       
    25 #include <RoapApp.rsg>
       
    26 #include <avkon.rsg>
       
    27 #include <AknNoteWrappers.h>
       
    28 #include <AknQueryDialog.h>
       
    29 #include <StringLoader.h>
       
    30 #include <DocumentHandler.h>
       
    31 #include <DcfRep.h>
       
    32 #include <caf/caf.h>
       
    33 #include <DRMCommon.h>
       
    34 #include <aknmessagequerydialog.h>
       
    35 #include <AknNoteDialog.h>                  
       
    36 #include <FeatMgr.h>                    
       
    37 #include <hlplch.h>             
       
    38 #include <RoapDef.h>
       
    39 #include "RoapAppUi.h"
       
    40 #include "RoapAppView.h" 
       
    41 #include "RoapAppDocument.h" 
       
    42 #include "RoapAppData.h" 
       
    43 #include "RoapAppWaitDialog.h" 
       
    44 #include "RoapApp.hrh"
       
    45 #include "RoapAppPanic.h"
       
    46 #include "RequestCompleteCallback.h"
       
    47 #include "RoapAppLogger.h"
       
    48 #include <HttpDownloadMgrCommon.h>
       
    49 
       
    50 #ifdef __SERIES60_HELP
       
    51 // Context-Sensitve Help File
       
    52 #include <csxhelp/browser.hlp.hrh>
       
    53 #endif // __SERIES60_HELP
       
    54 //#include "browser.hlp.hrh" // replace with DRMUI.hlp.hrh when ready 
       
    55 
       
    56 // ================= CONSTANTS =======================
       
    57 /// For launching more info DRM_HLP_REGISTRATION
       
    58 _LIT(KDRM_HLP_REGISTRATION,"DRM_HLP_REGISTRATION"); 
       
    59 
       
    60 /// Temp file directory:
       
    61 _LIT( KRoapTempFilePath, "c:\\system\\temp\\" );
       
    62 
       
    63 /// Next Line
       
    64 _LIT( KNextLine, "\n" );
       
    65 
       
    66 // ROAP App UID
       
    67 LOCAL_D const TUid KROAPAppUid = { 0x10008d64 };
       
    68 
       
    69 // BrowserNG UID
       
    70 LOCAL_D const TUid KCRUidBrowser   = {0x10008D39};
       
    71 
       
    72 // KBrowserDefaultAccessPoint
       
    73 LOCAL_D const TInt KBrowserDefaultAccessPoint = 0x0E;
       
    74 
       
    75 
       
    76 // ================= MEMBER FUNCTIONS =======================
       
    77 
       
    78 // ----------------------------------------------------------
       
    79 // CRoapAppUi::CRoapAppUi()
       
    80 // ----------------------------------------------------------
       
    81 //
       
    82 CRoapAppUi::CRoapAppUi()
       
    83     {
       
    84     CLOG(( 2, _L("*** CRoapAppUi::CRoapAppUi") ));
       
    85     }
       
    86 
       
    87 // ----------------------------------------------------------
       
    88 // CRoapAppUi::ConstructL()
       
    89 // ----------------------------------------------------------
       
    90 //
       
    91 void CRoapAppUi::ConstructL()
       
    92     {
       
    93     BaseConstructL( EAknEnableMSK | EAknEnableSkin );
       
    94     iView = CRoapAppView::NewL( ClientRect(), this );
       
    95     iCallback = new ( ELeave ) CRequestCompleteCallback();
       
    96     
       
    97     TRAPD( err, iDownloadMgr.ConnectL( KROAPAppUid, *this, EFalse ) );
       
    98 	User::LeaveIfError(err);
       
    99     
       
   100 #ifndef __WINSCW__
       
   101 
       
   102     CRepository *repository = CRepository::NewL( KCRUidBrowser );
       
   103 
       
   104     TInt retVal(0);
       
   105     repository->Get(KBrowserDefaultAccessPoint, retVal);
       
   106     delete repository;
       
   107     repository = NULL;
       
   108     
       
   109     CLOG(( 2, _L("   KBrowserDefaultAccessPoint: %d"), retVal ));
       
   110     
       
   111     iDownloadMgr.SetIntAttribute(EDlMgrIap, retVal );
       
   112     
       
   113 #endif
       
   114     
       
   115     iPostResponseURLDownLoad = EFalse;	
       
   116  
       
   117     }
       
   118 
       
   119 // ----------------------------------------------------------
       
   120 // CRoapAppUi::~CRoapAppUi()
       
   121 // ----------------------------------------------------------
       
   122 //
       
   123 CRoapAppUi::~CRoapAppUi()
       
   124     {
       
   125     
       
   126  CLOG(( 2, _L("*** -> CRoapAppUi::~CRoapAppUi") ));
       
   127        
       
   128     if( iDownloadMgr.Handle() )
       
   129  	    {
       
   130  	    iDownloadMgr.DeleteAll();
       
   131  	    iDownloadMgr.Close();
       
   132  	    }
       
   133     
       
   134     // We must Cancel the model before deleting the callback.
       
   135     RoapDocument()->Engine().Cancel();
       
   136     delete iCallback;
       
   137     delete iDocHandler;
       
   138     delete iWaitNote;
       
   139     delete iView;
       
   140     if ( iDoorObserver )
       
   141         {
       
   142         iDoorObserver->NotifyExit( MApaEmbeddedDocObserver::ENoChanges );
       
   143         }
       
   144     iFile.Close();
       
   145     iFs.Close();
       
   146     CLOG(( 2, _L("<- CRoapAppUi::~CRoapAppUi") ));
       
   147     }
       
   148 
       
   149 // ----------------------------------------------------------
       
   150 // CRoapAppUi::OpenFileL()
       
   151 // ----------------------------------------------------------
       
   152 //
       
   153 void CRoapAppUi::OpenFileL( const TDesC& aFileName )
       
   154     {
       
   155     CLOG(( 2, _L("-> CRoapAppUi::OpenFileL aFileName<%S>"), &aFileName ));
       
   156 
       
   157     iPostResponseURLDownLoad = EFalse;	
       
   158     Document()->OpenFileL( ETrue, aFileName, iCoeEnv->FsSession() );
       
   159     CLOG(( 2, _L("<- CRoapAppUi::OpenFileL") ));
       
   160     }
       
   161 
       
   162 // ----------------------------------------------------------
       
   163 // CRoapAppUi::HandleCommandL()
       
   164 // ----------------------------------------------------------
       
   165 //
       
   166 void CRoapAppUi::HandleCommandL( TInt aCommand )
       
   167     {
       
   168     CLOG(( 2, _L("-> CRoapAppUi::HandleCommandL aCommand(0x%x)"), \
       
   169         aCommand ));
       
   170     switch ( aCommand )
       
   171         {
       
   172         // From blank screen show during startup (incl. parsing).
       
   173         case EAknSoftkeyBack:
       
   174         // CAknShutter generated command.
       
   175         case EEikCmdExit:
       
   176             {
       
   177             Exit();
       
   178             break;
       
   179             }
       
   180 
       
   181         case EAknSoftkeyEmpty:
       
   182             {
       
   183             break;
       
   184             }
       
   185         
       
   186         case ERoapAppCmdCancel:
       
   187             {
       
   188             CancelRoap();
       
   189             break;
       
   190             }
       
   191         default:
       
   192             {
       
   193             CLOG(( 0, _L("  unknown command") ));
       
   194             __ASSERT_DEBUG
       
   195                 ( EFalse, RoapAppPanic( ERoapAppUnknownCommand ) );
       
   196             break;
       
   197             }
       
   198         }
       
   199     CLOG(( 2, _L("<- CRoapAppUi::HandleCommandL") ));
       
   200     }
       
   201 
       
   202 // ----------------------------------------------------------
       
   203 // CRoapAppUi::ProcessCommandParametersL()
       
   204 // ----------------------------------------------------------
       
   205 //
       
   206 TBool CRoapAppUi::ProcessCommandParametersL
       
   207 ( TApaCommand aCommand, TFileName& aDocumentName, const TDesC8& /*aTail*/ )
       
   208     {
       
   209     CLOG(( 2, _L("-> CRoapAppUi::ProcessCommandParametersL") ));
       
   210     CLOG(( 2, _L("   CRoapAppUi: aCommand: %d / aDocumentName: %S"), aCommand, &aDocumentName ));
       
   211     if ( aCommand == EApaCommandOpen )
       
   212         {
       
   213         OpenFileL( aDocumentName );
       
   214         }
       
   215     CLOG(( 2, _L("<- CRoapAppUi::ProcessCommandParametersL") ));
       
   216     return EFalse;
       
   217     }
       
   218 
       
   219 // ----------------------------------------------------------
       
   220 // CRoapAppUi::HandleResourceChangeL()
       
   221 // ----------------------------------------------------------
       
   222 //
       
   223 void CRoapAppUi::HandleResourceChangeL( TInt aType )
       
   224     {
       
   225     CAknAppUi::HandleResourceChangeL( aType );
       
   226     if ( aType == KEikDynamicLayoutVariantSwitch )
       
   227         {
       
   228         iView->SetRect( ClientRect() );
       
   229         }
       
   230     iView->HandleResourceChange( aType );
       
   231     }
       
   232 
       
   233 // ----------------------------------------------------------
       
   234 // CRoapAppUi::ConnectionConfL()
       
   235 // ----------------------------------------------------------
       
   236 //
       
   237 TBool CRoapAppUi::ConnectionConfL()
       
   238     {
       
   239     // TODO ask user.
       
   240     return ETrue;
       
   241     }
       
   242     
       
   243 // ----------------------------------------------------------
       
   244 // CRoapAppUi::ContactRiConfL()
       
   245 // ----------------------------------------------------------
       
   246 //
       
   247 TBool CRoapAppUi::ContactRiConfL()
       
   248     {
       
   249     // TODO ask user.
       
   250     return ETrue;
       
   251     }
       
   252     
       
   253 // ----------------------------------------------------------
       
   254 // CRoapAppUi::TransIdConfL()
       
   255 // ----------------------------------------------------------
       
   256 //
       
   257 TBool CRoapAppUi::TransIdConfL()
       
   258     {
       
   259     return EFalse;
       
   260     }
       
   261     
       
   262 // ----------------------------------------------------------
       
   263 // CRoapAppUi::RightsObjectDetailsL()
       
   264 // ----------------------------------------------------------
       
   265 //
       
   266 void CRoapAppUi::RightsObjectDetailsL
       
   267 ( const RPointerArray<CDRMRights>& /*aRightsList*/ )
       
   268     {
       
   269     // TODO
       
   270     }
       
   271 		    
       
   272 // ----------------------------------------------------------
       
   273 // CRoapAppUi::ContentDownloadInfoL()
       
   274 // ----------------------------------------------------------
       
   275 //
       
   276 void CRoapAppUi::ContentDownloadInfoL
       
   277 ( TPath& aTempFolder, TFileName& aContentName, TInt& aMaxSize )
       
   278     {
       
   279     aTempFolder = KRoapTempFilePath;
       
   280     aContentName = KNullDesC;
       
   281     aMaxSize = -1;  // -1 == 'unknown'.
       
   282     }
       
   283 
       
   284 // ----------------------------------------------------------
       
   285 // CRoapAppUi::ContentDetailsL()
       
   286 // ----------------------------------------------------------
       
   287 //
       
   288 void CRoapAppUi::ContentDetailsL
       
   289 ( const TDesC& /*aPath*/, const TDesC8& /*aType*/, const TUid& /*aAppUid*/ )
       
   290     {
       
   291     // TODO
       
   292     }
       
   293                                       
       
   294 // ----------------------------------------------------------
       
   295 // CRoapAppUi::HandleDCFPartL()
       
   296 // ----------------------------------------------------------
       
   297 //
       
   298 void CRoapAppUi::HandleDCFPartL( const TDesC8& /*aFilename*/ )
       
   299     {
       
   300     // DRM Engine does not support multipart ROAP response yet.
       
   301     // This method will never be called.
       
   302     User::Leave( KErrNotSupported );
       
   303     }
       
   304         
       
   305 // ----------------------------------------------------------
       
   306 // CRoapAppUi::RoapProgressInfoL()
       
   307 // ----------------------------------------------------------
       
   308 //
       
   309 void CRoapAppUi::RoapProgressInfoL( const TInt /*aProgressInfo*/ )
       
   310     {
       
   311     }
       
   312 
       
   313 // ----------------------------------------------------------
       
   314 // CRoapAppUi::ErrorUrlL()
       
   315 // ----------------------------------------------------------
       
   316 //
       
   317 void CRoapAppUi::ErrorUrlL( const TDesC8& /* aErrorUrl */)
       
   318 {	
       
   319 }
       
   320 
       
   321 // ----------------------------------------------------------
       
   322 // CRoapAppUi::PostResponseUrlL()
       
   323 // ----------------------------------------------------------
       
   324 //
       
   325 void CRoapAppUi::PostResponseUrlL( const TDesC8& aPrUrl )
       
   326 {
       
   327     CLOG(( 2, _L("-> CRoapAppUi::PostResponseUrlL(\n    %S)"), &aPrUrl ));
       
   328 
       
   329     TBool retVal( ETrue );    
       
   330  
       
   331     //RoapApp is made as client of DownloadMgr. A new download session is created with PostResponse URL,
       
   332     //which handles the response like in any other download
       
   333     RHttpDownload& download = iDownloadMgr.CreateDownloadL(aPrUrl, retVal );
       
   334     download.SetBoolAttribute( EDlAttrNoContentTypeCheck, ETrue );
       
   335     //set the Download status of PostResponse URL 
       
   336     iPostResponseURLDownLoad = ETrue;
       
   337     User::LeaveIfError( download.Start());
       
   338 
       
   339 }
       
   340 		
       
   341 // ----------------------------------------------------------
       
   342 // CRoapAppUi::HandleServerAppExit()
       
   343 // ----------------------------------------------------------
       
   344 //
       
   345 void CRoapAppUi::HandleServerAppExit( TInt /*aReason*/ )
       
   346     {
       
   347     RunAppShutter();
       
   348     }
       
   349 
       
   350 // ---------------------------------------------------------
       
   351 // CRoapAppUi::LaunchHelpL()
       
   352 // ---------------------------------------------------------
       
   353 //
       
   354 void CRoapAppUi::LaunchHelpL( const TDesC& aContext )
       
   355     {
       
   356     CArrayFix<TCoeHelpContext>* contexts = 
       
   357         new(ELeave) CArrayFixFlat<TCoeHelpContext>( 1 );
       
   358     CleanupStack::PushL( contexts );
       
   359     TCoeHelpContext context;
       
   360     context.iMajor = KDRMHelperUid;
       
   361     context.iContext = aContext;
       
   362     contexts->AppendL( context );
       
   363     CleanupStack::Pop(); // contexts
       
   364     
       
   365     #ifdef __SERIES60_HELP
       
   366     HlpLauncher::LaunchHelpApplicationL( iCoeEnv->WsSession(), contexts );
       
   367     #endif // __SERIES60_HELP
       
   368     }
       
   369 
       
   370 
       
   371 // ----------------------------------------------------------
       
   372 // CRoapAppUi::ShowRoapCallback(TAny* aPtr)
       
   373 // ----------------------------------------------------------
       
   374 //
       
   375 
       
   376 TInt CRoapAppUi::ShowRoapCallback( TAny* aPtr )
       
   377 {
       
   378     TInt err( KErrNone );    
       
   379     CRoapAppUi* self = static_cast<CRoapAppUi*>(aPtr);
       
   380     TRAP( err, self->LaunchHelpL( KDRM_HLP_REGISTRATION ) ); // KOSS_HLP_SAVED_PAGES for testing       
       
   381     return err;        
       
   382 }
       
   383 
       
   384 
       
   385 // ----------------------------------------------------------
       
   386 // CRoapAppUi::HandleTriggerParsedL()
       
   387 // ----------------------------------------------------------
       
   388 //
       
   389 void CRoapAppUi::HandleTriggerParsedL()
       
   390     {
       
   391     CLOG(( 2, _L("-> CRoapAppUi::HandleTriggerParsedL") ));
       
   392     TBool doRoap( ETrue );
       
   393     const CRoapAppData& data( RoapDocument()->Data() );
       
   394 
       
   395     if ( data.iContextStatus == Roap::EInvalidContext )
       
   396         {
       
   397 #ifdef RD_DRM_SILENT_RIGHTS_ACQUISITION
       
   398         HBufC* header = StringLoader::LoadLC( R_QTN_DRM_MSQ_QRY_TITLE_REGISTRAT ); 
       
   399         HBufC* regtxt = StringLoader::LoadLC( R_QTN_DRM_MSQ_QUERY_REGISTRATION );
       
   400         HBufC* moreinfo = NULL; 
       
   401         TBool helpFeature = FeatureManager::FeatureSupported( KFeatureIdHelp );
       
   402         if ( helpFeature )
       
   403             {        
       
   404             moreinfo = StringLoader::LoadLC( R_QTN_DRM_MSQ_QUERY_LINK_MORE_INF  );
       
   405             }
       
   406         else 
       
   407             {
       
   408             moreinfo = KNullDesC().AllocLC();
       
   409             }
       
   410                 
       
   411 
       
   412         HBufC* regtxt_moreinfo = HBufC::NewLC(regtxt->Length() + moreinfo->Length() + 1 );
       
   413         TPtr regPtr( regtxt_moreinfo->Des() );
       
   414         regPtr += *regtxt;
       
   415         regPtr += KNextLine; 
       
   416         regPtr += *moreinfo; 
       
   417       
       
   418         
       
   419         CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *regtxt_moreinfo );
       
   420         dlg->PrepareLC( R_ROAP_REGISTERCANCEL_QUERY  );
       
   421 
       
   422         CAknPopupHeadingPane* hPane = dlg->QueryHeading();
       
   423         if ( hPane )                                         
       
   424             {
       
   425             hPane->SetTextL( *header );
       
   426             }
       
   427             
       
   428         if ( helpFeature )
       
   429             {        
       
   430             // set link 
       
   431             dlg->SetLinkTextL(*moreinfo);
       
   432             TCallBack callback(ShowRoapCallback, this); 
       
   433             dlg->SetLink(callback);             
       
   434             } 
       
   435         
       
   436         TInt ret = dlg->RunLD();
       
   437         if( ret != EAknSoftkeyYes ) 
       
   438             {
       
   439             doRoap = EFalse; 
       
   440             }            
       
   441          CleanupStack::PopAndDestroy(4); // header, regtxt, moreinfo, regtxt_moreinfo    
       
   442 #else  // for RD_DRM_SILENT_RIGHTS_ACQUISITION
       
   443         // No valid RI context, ROAP will involve device registration.
       
   444         // User must confirm.
       
   445         CLOG(( 4, _L("  invalid RI context") ));
       
   446         CAknQueryDialog* dialog = CAknQueryDialog::NewL();
       
   447         dialog->PrepareLC( R_ROAP_APP_CONFIRM_QUERY );
       
   448         HBufC* prompt;
       
   449         if ( data.iRiAlias )
       
   450             {
       
   451             // "Registration with %U needed. Register phone?"
       
   452             HBufC* riAlias16 = HBufC::NewLC( data.iRiAlias->Length() );
       
   453             riAlias16->Des().Copy( *data.iRiAlias );
       
   454             prompt = StringLoader::LoadL
       
   455                 ( R_QTN_DRM_QUERY_REGISTER_WITH_U, *riAlias16, iCoeEnv );
       
   456             CleanupStack::PopAndDestroy( riAlias16 );
       
   457             CleanupStack::PushL( prompt );
       
   458             }
       
   459         else
       
   460             {
       
   461             // "Registration with content provider needed. Register phone?"
       
   462             prompt = StringLoader::LoadLC
       
   463                 ( R_QTN_DRM_QUERY_REGISTER_WITH_CP, iCoeEnv );
       
   464             }
       
   465         dialog->SetPromptL( *prompt );
       
   466         CleanupStack::PopAndDestroy( prompt );
       
   467         if ( !dialog->RunLD() ) 
       
   468             {
       
   469             CLOG(( 4, _L("  cancelled") ));
       
   470             doRoap = EFalse;    // User cancelled registration.
       
   471             }
       
   472 #endif // for RD_DRM_SILENT_RIGHTS_ACQUISITION
       
   473     }
       
   474         
       
   475     if ( doRoap )
       
   476         {
       
   477         StartRoapL();
       
   478         }
       
   479     else
       
   480         {
       
   481           CAknNoteDialog* dialog = new (ELeave) CAknNoteDialog
       
   482               (CAknNoteDialog::EConfirmationTone,CAknNoteDialog::EUndefinedTimeout);
       
   483           dialog->PrepareLC( R_ROAP_REGISTER_CANCEL_OK_INFO );
       
   484           HBufC* infoPrompt = StringLoader::LoadLC
       
   485               ( R_QTN_DRM_INFO_PHONE_NOT_REGISTER, iCoeEnv );
       
   486           dialog->SetTextL( *infoPrompt); 
       
   487 		  CleanupStack::PopAndDestroy( infoPrompt ); 
       
   488           if ( !dialog->RunLD() )
       
   489 		      {
       
   490               CLOG(( 2, _L("Select Cancel") ));
       
   491 			  }
       
   492 		  RunAppShutter();    
       
   493         }
       
   494     CLOG(( 2, _L("<- CRoapAppUi::HandleTriggerParsedL") ));
       
   495     }
       
   496     
       
   497 // ----------------------------------------------------------
       
   498 // CRoapAppUi::StartRoapL()
       
   499 // ----------------------------------------------------------
       
   500 //
       
   501 void CRoapAppUi::StartRoapL()
       
   502     {
       
   503     CLOG(( 2, _L("-> CRoapAppUi::StartRoapL") ));
       
   504     __ASSERT_DEBUG( !iWaitNote, RoapAppPanic( ERoapAppInternal ) );
       
   505     TInt resId = 0;
       
   506     switch ( RoapDocument()->Data().iType )
       
   507         {
       
   508         case Roap::ERegistrationTrigger:
       
   509             {
       
   510             resId = R_QTN_DRM_WAIT_REGISTERING_DEVICE;
       
   511             break;
       
   512             }
       
   513         case Roap::ERoAcquisitionTrigger:
       
   514             {
       
   515             resId = R_QTN_DRM_WAIT_GETTING_KEY;
       
   516             break;
       
   517             }
       
   518         case Roap::EJoinDomainTrigger:
       
   519             {
       
   520             if ( RoapDocument()->Data().iDomainOperation ==
       
   521                  Roap::EJoinDomainOperation )
       
   522                 {
       
   523                 resId = R_QTN_DRM_WAIT_JOINING_DOMAIN;
       
   524                 }
       
   525             else
       
   526                 {
       
   527                 resId = R_QTN_DRM_WAIT_UPDATING_ACCOUNT;
       
   528                 }
       
   529             break;
       
   530             }
       
   531         case Roap::ELeaveDomainTrigger:
       
   532             {
       
   533             resId = R_QTN_DRM_WAIT_REMOVE_FR_ACCOUNT;
       
   534             break;
       
   535             }
       
   536         case Roap::EMeteringReportTrigger:
       
   537             {
       
   538             resId = R_QTN_DRM_WAIT_UPDATE_METERING_INFO;
       
   539             break;
       
   540             }
       
   541         default:
       
   542             {
       
   543             User::Leave( KErrNotSupported );
       
   544             break;
       
   545             }
       
   546         }
       
   547     __ASSERT_DEBUG( resId, RoapAppPanic( ERoapAppInternal ) );
       
   548     iWaitNote = new (ELeave) CRoapAppWaitDialog
       
   549         ( REINTERPRET_CAST( CEikDialog**, &iWaitNote ), *this );
       
   550     iWaitNote->PrepareLC( R_ROAP_APP_WAIT_NOTE );
       
   551     HBufC* prompt = iCoeEnv->AllocReadResourceLC( resId );
       
   552     iWaitNote->SetTextL( *prompt );
       
   553     CleanupStack::PopAndDestroy( prompt );
       
   554     iWaitNote->RunLD();
       
   555     RoapDocument()->Engine().AcceptL( this, &iCallback->iStatus );
       
   556     iCallback->CallbackOnCompletion( TCallBack( StaticRoapDone, this ) );
       
   557     CLOG(( 2, _L("<- CRoapAppUi::StartRoapL") ));
       
   558     }
       
   559 
       
   560 // ----------------------------------------------------------
       
   561 // CRoapAppUi::CancelRoap()
       
   562 // ----------------------------------------------------------
       
   563 //
       
   564 void CRoapAppUi::CancelRoap()
       
   565     {
       
   566     CLOG(( 2, _L("-> CRoapAppUi::CancelRoap") ));
       
   567     RoapDocument()->Engine().Cancel();
       
   568     CLOG(( 2, _L("<- CRoapAppUi::CancelRoap") ));
       
   569     }
       
   570 
       
   571 // ----------------------------------------------------------
       
   572 // CRoapAppUi::RoapDone()
       
   573 // ----------------------------------------------------------
       
   574 //
       
   575 void CRoapAppUi::RoapDone()
       
   576     {
       
   577     CLOG(( 2, _L("-> CRoapAppUi::RoapDone") ));
       
   578     delete iWaitNote;
       
   579     iWaitNote = NULL;
       
   580     TInt err = iCallback->iStatus.Int();
       
   581     TBool exitApp( ETrue ); // Exit by default.
       
   582     if ( err )
       
   583         {
       
   584         TRAP_IGNORE( exitApp = RoapFailedL( err ) );
       
   585         }
       
   586     else
       
   587         {
       
   588         TRAP_IGNORE( exitApp = RoapOkL() );
       
   589         }
       
   590     if ( exitApp && !iPostResponseURLDownLoad)
       
   591         {
       
   592         RunAppShutter();
       
   593         }
       
   594     CLOG(( 2, _L("<- CRoapAppUi::RoapDone") ));
       
   595     }
       
   596 
       
   597 // ----------------------------------------------------------
       
   598 // CRoapAppUi::RoapOkL()
       
   599 // ----------------------------------------------------------
       
   600 //
       
   601 TBool CRoapAppUi::RoapOkL()
       
   602     {
       
   603     CLOG(( 2, _L("-> CRoapAppUi::RoapOkL") ));
       
   604     TBool exitApp( ETrue );
       
   605     switch( RoapDocument()->Data().iType )
       
   606         {
       
   607         case Roap::ERegistrationTrigger:
       
   608             {
       
   609             ConfNoteL( R_QTN_DRM_CONF_DEVICE_REGISTERED );
       
   610             break;
       
   611             }
       
   612         case Roap::ERoAcquisitionTrigger:
       
   613             {
       
   614             exitApp = RoAcqOkL();
       
   615             break;
       
   616             }
       
   617         case Roap::EJoinDomainTrigger:
       
   618             {
       
   619             if ( RoapDocument()->Data().iDomainOperation ==
       
   620                  Roap::EJoinDomainOperation )
       
   621                 {
       
   622                 ConfNoteL( R_QTN_DRM_CONF_JOINED_TO_DOMAIN );
       
   623                 }
       
   624             else
       
   625                 {
       
   626                 ConfNoteL( R_QTN_DRM_CONF_ACCOUNT_UPDATED );
       
   627                 }
       
   628             break;
       
   629             }
       
   630         case Roap::ELeaveDomainTrigger:
       
   631             {
       
   632             ConfNoteL( R_QTN_DRM_INFO_REMOVE_FR_ACCOUNT );
       
   633             break;
       
   634             }
       
   635         case Roap::EMeteringReportTrigger:
       
   636             {
       
   637             ConfNoteL( R_QTN_DRM_CONF_ACCOUNT_UPDATED );
       
   638             break;
       
   639             }            
       
   640         default:
       
   641             {
       
   642             // We should never get here.
       
   643             __ASSERT_DEBUG( EFalse, RoapAppPanic( ERoapAppInternal ) );
       
   644             }
       
   645         }
       
   646     CLOG(( 2, _L("<- CRoapAppUi::RoapOkL returns(%d)"), exitApp ));
       
   647     return exitApp;
       
   648     }
       
   649 
       
   650 // ----------------------------------------------------------
       
   651 // CRoapAppUi::RoAcqOkL()
       
   652 // ----------------------------------------------------------
       
   653 //
       
   654 TBool CRoapAppUi::RoAcqOkL()
       
   655     {
       
   656     CLOG(( 2, _L("-> CRoapAppUi::RoAcqOkL") ));
       
   657     __ASSERT_DEBUG \
       
   658         ( RoapDocument()->Data().iType == Roap::ERoAcquisitionTrigger, \
       
   659           RoapAppPanic( ERoapAppInternal ) );
       
   660 
       
   661     TFileName name;    // Note, filename and extension only! Not full path.
       
   662     TDataType type;
       
   663     TUid appUid( TUid::Null() );
       
   664     if ( RoapDocument()->Data().iContentIdList.Count() )
       
   665         {
       
   666         __ASSERT_DEBUG( !iFs.Handle(), RoapAppPanic( ERoapAppInternal ) );
       
   667         __ASSERT_DEBUG( !iFile.SubSessionHandle(), \
       
   668             RoapAppPanic( ERoapAppInternal ) );
       
   669         User::LeaveIfError( iFs.Connect() );
       
   670         User::LeaveIfError( iFs.ShareProtected() );
       
   671         CDcfRep* dcfRep = CDcfRep::NewL();
       
   672         CleanupStack::PushL( dcfRep );
       
   673         // It is not specified what to do if we have more content ids.
       
   674         // Best guess: open the first.
       
   675         TPtrC8 cid( *(RoapDocument()->Data().iContentIdList[0]) );
       
   676         TRAPD( err, dcfRep->GetFileHandleL ( cid, iFile, iFs ) );
       
   677         if ( !err && CanOpenL( iFile ) )
       
   678             {
       
   679             User::LeaveIfError( iFile.Name( name ) );
       
   680             RApaLsSession apaLs;
       
   681             User::LeaveIfError( apaLs.Connect() );
       
   682             CleanupClosePushL<RApaLsSession>( apaLs );
       
   683             User::LeaveIfError( apaLs.AppForDocument( iFile, appUid, type ) );
       
   684             CleanupStack::PopAndDestroy();  // apaLs
       
   685             }
       
   686 #ifdef __TEST_ROAP_APP_LOG
       
   687         else
       
   688             {
       
   689             CLOG(( 4, _L8("  err(%d) getting file by cid<%S>"), err, &cid ));
       
   690             }
       
   691 #endif /* def __TEST_ROAP_APP_LOG */
       
   692         CleanupStack::PopAndDestroy( dcfRep );
       
   693         }
       
   694 
       
   695     TBool exitApp( ETrue );
       
   696     if ( appUid.iUid )
       
   697         {
       
   698         // MO (related to the received RO) is already here and is supported
       
   699         // by the system. Ask user if he wants to open it now.
       
   700         __ASSERT_DEBUG( iFs.Handle(), RoapAppPanic( ERoapAppInternal ) );
       
   701         __ASSERT_DEBUG( iFile.SubSessionHandle(), \
       
   702             RoapAppPanic( ERoapAppInternal ) );
       
   703         __ASSERT_DEBUG( name.Length(), RoapAppPanic( ERoapAppInternal ) );
       
   704         CAknQueryDialog* dialog = CAknQueryDialog::NewL();
       
   705         dialog->PrepareLC( R_ROAP_APP_CONFIRM_QUERY );
       
   706         HBufC* prompt = StringLoader::LoadLC
       
   707             ( R_QTN_DRM_QUERY_KEY_RECEIVED_OPEN, name, iEikonEnv );
       
   708         dialog->SetPromptL( *prompt );
       
   709         CleanupStack::PopAndDestroy( prompt );
       
   710         if ( dialog->RunLD() ) 
       
   711             {
       
   712             CLOG(( 4, _L("  launching <%S>, handler(0x%x)"), \
       
   713                 &name, appUid.iUid ));
       
   714             __ASSERT_DEBUG( !iDocHandler, RoapAppPanic( ERoapAppInternal ) );
       
   715             iDocHandler = CDocumentHandler::NewL
       
   716                 ( (CEikProcess*)Application()->Process() );
       
   717             iDocHandler->SetExitObserver( this );
       
   718             User::LeaveIfError
       
   719                 ( iDocHandler->OpenFileEmbeddedL( iFile, type ) );
       
   720             exitApp = EFalse;
       
   721             }
       
   722         }
       
   723     else
       
   724         {
       
   725         ConfNoteL( R_QTN_DRM_INFO_ACT_KEY_RECEIVED );
       
   726         }
       
   727     CLOG(( 2, _L("<- CRoapAppUi::RoAcqOkL returns(%d)"), exitApp ));
       
   728     return exitApp;
       
   729     }
       
   730 
       
   731 // ----------------------------------------------------------
       
   732 // CRoapAppUi::RoapFailedL()
       
   733 // ----------------------------------------------------------
       
   734 //
       
   735 TBool CRoapAppUi::RoapFailedL( TInt aError )
       
   736     {
       
   737     CLOG(( 2, _L("-> CRoapAppUi::RoapFailedL aError(%d)"), aError ));
       
   738     TBool exitApp( ETrue );
       
   739     TInt resId = 0;
       
   740     switch ( aError )
       
   741         {
       
   742         case KErrCancel:
       
   743             {
       
   744             // For Cancel, just do nothing.
       
   745             break;
       
   746             }
       
   747         case KErrRoapDomainFull:
       
   748             {
       
   749             resId = R_QTN_DRM_INFO_ACCOUNT_IS_FULL;
       
   750             break;
       
   751             }
       
   752         case KErrRoapInvalidDomain:
       
   753             {
       
   754             resId = R_QTN_DRM_ACCOUNT_NOT_RECOGNISED;
       
   755             break;
       
   756             }
       
   757         case KErrRoapServer:
       
   758             {
       
   759             // Temporary server error. For RoAcq, offer retry; for other
       
   760             // ROAP-s, fall through to default handling (plain error note).
       
   761             if ( RoapDocument()->Data().iType == Roap::ERoAcquisitionTrigger )
       
   762                 {
       
   763                 CAknQueryDialog* dialog = CAknQueryDialog::NewL();
       
   764                 dialog->PrepareLC( R_ROAP_APP_CONFIRM_QUERY );
       
   765                 HBufC* prompt = StringLoader::LoadLC
       
   766                     ( R_QTN_DRM_GET_KEY_FAILED_RETRY, iEikonEnv );
       
   767                 dialog->SetPromptL( *prompt );
       
   768                 CleanupStack::PopAndDestroy( prompt );
       
   769                 if ( dialog->RunLD() ) 
       
   770                     {
       
   771                     StartRoapL();
       
   772                     exitApp = EFalse;
       
   773                     }
       
   774                 break;
       
   775                 }
       
   776             // Not RoAcq: fall through to default (error note).
       
   777             }
       
   778         default:
       
   779             {
       
   780             // Default error message is based on trigger type.
       
   781             switch ( RoapDocument()->Data().iType )
       
   782                 {
       
   783                 case Roap::ERegistrationTrigger:
       
   784                     {
       
   785                     resId = R_QTN_DRM_INFO_DEVICE_REGIST_FAIL;
       
   786                     break;
       
   787                     }
       
   788                 case Roap::ERoAcquisitionTrigger:
       
   789                     {
       
   790                     resId = R_QTN_DRM_INFO_GETTING_KEY_FAILED;
       
   791                     break;
       
   792                     }
       
   793                 case Roap::EJoinDomainTrigger:
       
   794                     {
       
   795                     if ( RoapDocument()->Data().iDomainOperation ==
       
   796                          Roap::EJoinDomainOperation )
       
   797                         {
       
   798                         resId = R_QTN_DRM_INFO_REGISTRATION_FAILED;
       
   799                         }
       
   800                     else
       
   801                         {
       
   802                         resId = R_QTN_DRM_INFO_UPDATE_DOMAIN_FAIL;
       
   803                         }
       
   804                     break;
       
   805                     }
       
   806                 case Roap::ELeaveDomainTrigger:
       
   807                     {
       
   808                     resId = R_QTN_DRM_REMOVE_FR_ACCOUNT_FAIL;
       
   809                     break;
       
   810                     }
       
   811                 case Roap::EMeteringReportTrigger:
       
   812                     {
       
   813                     resId = R_QTN_DRM_INFO_REGISTRATION_FAILED;
       
   814                     break;
       
   815                     }                    
       
   816                 default:
       
   817                     {
       
   818                     __ASSERT_DEBUG( EFalse, \
       
   819                         RoapAppPanic( ERoapAppInternal ) );
       
   820                     }
       
   821                 }
       
   822             break;
       
   823             }
       
   824         }
       
   825     if ( resId )
       
   826         {
       
   827         InfoNoteL( resId );
       
   828         }
       
   829     CLOG(( 2, _L("<- CRoapAppUi::RoapFailedL returns(%d)"), exitApp ));
       
   830     return exitApp;
       
   831     }
       
   832 
       
   833 // ----------------------------------------------------------
       
   834 // CRoapAppUi::StaticRoapDone()
       
   835 // ----------------------------------------------------------
       
   836 //
       
   837 TInt CRoapAppUi::StaticRoapDone( TAny* aPtr )
       
   838     {
       
   839     STATIC_CAST( CRoapAppUi*, aPtr )->RoapDone();
       
   840     return EFalse;  // TCallback should return EFalse as TInt.
       
   841     }
       
   842     
       
   843 // ----------------------------------------------------------
       
   844 // CRoapAppUi::RoapDocument()
       
   845 // ----------------------------------------------------------
       
   846 //
       
   847 CRoapAppDocument* CRoapAppUi::RoapDocument()
       
   848     {
       
   849     return STATIC_CAST( CRoapAppDocument*, Document() );
       
   850     }
       
   851 
       
   852 // ----------------------------------------------------------
       
   853 // CRoapAppUi::HandleDialogCommandL()
       
   854 // ----------------------------------------------------------
       
   855 //
       
   856 void CRoapAppUi::HandleDialogCommandL( TInt aCommand )
       
   857     {
       
   858     CLOG(( 2, _L("-> CRoapAppUi::HandleDialogCommandL aCommand(%d)"), \
       
   859         aCommand ));
       
   860     HandleCommandL( aCommand );
       
   861     CLOG(( 2, _L("<- CRoapAppUi::HandleDialogCommandL") ));
       
   862     }
       
   863 
       
   864 // ----------------------------------------------------------
       
   865 // CRoapAppUi::InfoNoteL()
       
   866 // ----------------------------------------------------------
       
   867 //
       
   868 void CRoapAppUi::InfoNoteL( TInt aPromptResourceId )
       
   869     {
       
   870     HBufC* prompt = iCoeEnv->AllocReadResourceLC( aPromptResourceId );
       
   871     CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
       
   872     note->ExecuteLD( *prompt );
       
   873     CleanupStack::PopAndDestroy( prompt );
       
   874     }
       
   875 
       
   876 // ----------------------------------------------------------
       
   877 // CRoapAppUi::InfoNoteL()
       
   878 // ----------------------------------------------------------
       
   879 //
       
   880 void CRoapAppUi::InfoNoteL( const TDesC& aPrompt )
       
   881     {
       
   882     CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
       
   883     note->ExecuteLD( aPrompt );
       
   884     }
       
   885 
       
   886 // ----------------------------------------------------------
       
   887 // CRoapAppUi::ConfNoteL()
       
   888 // ----------------------------------------------------------
       
   889 //
       
   890 void CRoapAppUi::ConfNoteL( TInt aPromptResourceId )
       
   891     {
       
   892     HBufC* prompt = iCoeEnv->AllocReadResourceLC( aPromptResourceId );
       
   893     CAknConfirmationNote* note = new (ELeave) CAknConfirmationNote( ETrue );
       
   894     note->ExecuteLD( *prompt );
       
   895     CleanupStack::PopAndDestroy( prompt );
       
   896     }
       
   897 
       
   898 // ----------------------------------------------------------
       
   899 // CRoapAppUi::ConfNoteL()
       
   900 // ----------------------------------------------------------
       
   901 //
       
   902 void CRoapAppUi::ConfNoteL( const TDesC& aPrompt )
       
   903     {
       
   904     CAknConfirmationNote* note = new (ELeave) CAknConfirmationNote( ETrue );
       
   905     note->ExecuteLD( aPrompt );
       
   906     }
       
   907 
       
   908 // ----------------------------------------------------------
       
   909 // CRoapAppUi::CanOpenL()
       
   910 // ----------------------------------------------------------
       
   911 //
       
   912 TBool CRoapAppUi::CanOpenL( RFile& aFile ) const
       
   913     {
       
   914     CLOG(( 2, _L("-> CRoapAppUi::CanOpenL") ));
       
   915     TBool canOpen( EFalse );
       
   916     using namespace ContentAccess;
       
   917     TInt err;
       
   918     CData* data = NULL;
       
   919     // 'No right' style errors leave, need to TRAP.
       
   920     TRAP( err, data = CData::NewL( aFile, KDefaultContentObject, EPeek ) );
       
   921     // Note, 'data' not pushed. No leaving calls below.
       
   922     if ( !err &&
       
   923                  (
       
   924                  !data->EvaluateIntent( EPlay ) ||
       
   925                  !data->EvaluateIntent( EView ) ||
       
   926                  !data->EvaluateIntent( EExecute )
       
   927                  )
       
   928        )
       
   929         {
       
   930         canOpen = ETrue;
       
   931         }
       
   932     delete data;
       
   933     CLOG(( 2, _L("<- CRoapAppUi::CanOpenL (%d)"), canOpen ));
       
   934     return canOpen;
       
   935     }
       
   936 
       
   937 // ----------------------------------------------------------
       
   938 // CRoapAppUi::HandleOnePassRoL()
       
   939 // ----------------------------------------------------------
       
   940 //    
       
   941 void CRoapAppUi::HandleOnePassRoL(TInt aError ) 
       
   942     {
       
   943     iCallback->iStatus = aError;
       
   944     RoapDone();
       
   945     }
       
   946 
       
   947 
       
   948 // ----------------------------------------------------------
       
   949 // CRoapAppUi::HandleDMgrEventL()
       
   950 // ----------------------------------------------------------
       
   951 //    
       
   952 void CRoapAppUi::HandleDMgrEventL( RHttpDownload& aDownload, THttpDownloadEvent aEvent )
       
   953     {
       
   954     
       
   955     CLOG(( 2, _L("-> CRoapAppUi::HandleDMgrEventL") ));
       
   956     
       
   957    	
       
   958 	if(EHttpDlCompleted == aEvent.iDownloadState)
       
   959 		{
       
   960         HBufC8* contentType = HBufC8::NewLC(KMaxContentTypeLength);
       
   961         TPtr8 contentTypePtr = contentType->Des(); 
       
   962         User::LeaveIfError( aDownload.GetStringAttribute( EDlAttrContentType, contentTypePtr ) );
       
   963         TBool isRoapTriggerType = !contentType->Compare(KRoapMimeType);  
       
   964 		CleanupStack::PopAndDestroy( contentType );
       
   965 		
       
   966         HBufC* fileName = HBufC::NewLC( KMaxPath );
       
   967         TPtr fileNamePtr = fileName->Des();
       
   968         User::LeaveIfError( aDownload.GetStringAttribute( EDlAttrDestFilename, fileNamePtr ) );
       
   969 
       
   970 		if(isRoapTriggerType)
       
   971 			{
       
   972 			OpenFileL(fileNamePtr);
       
   973 			CleanupStack::PopAndDestroy( fileName );
       
   974 			return;
       
   975 			}
       
   976 		CleanupStack::PopAndDestroy( fileName );
       
   977 		iPostResponseURLDownLoad = EFalse;	
       
   978 		RoapDone();		
       
   979 		}
       
   980 	else if( EHttpDlFailed == aEvent.iDownloadState || EHttpDlPaused == aEvent.iDownloadState )
       
   981 		{
       
   982 		iCallback->iStatus = KErrRoapGeneral;
       
   983 		iPostResponseURLDownLoad = EFalse;	
       
   984 		RoapDone();		
       
   985 		}
       
   986 		
       
   987 	CLOG(( 2, _L("<- CRoapAppUi::HandleDMgrEventL") ));
       
   988     }
       
   989