javauis/lcdui_akn/javalcdui/src/CMIDToolkit.cpp
branchRCL_3
changeset 60 6c158198356e
parent 59 e5618cc85d74
equal deleted inserted replaced
59:e5618cc85d74 60:6c158198356e
   121  */
   121  */
   122 class TRevertCurrent
   122 class TRevertCurrent
   123 {
   123 {
   124 public:
   124 public:
   125     TRevertCurrent(MMIDDisplayable*& aCurrentPointer)
   125     TRevertCurrent(MMIDDisplayable*& aCurrentPointer)
   126             : iCurrentPointer(aCurrentPointer)
   126         : iCurrentPointer(aCurrentPointer)
   127             , iPrevious(aCurrentPointer)
   127         , iPrevious(aCurrentPointer)
   128     {
   128     {
   129     }
   129     }
   130     static void Revert(TAny*);
   130     static void Revert(TAny*);
   131 
   131 
   132 private:
   132 private:
   164 
   164 
   165 /**
   165 /**
   166  * CONSTRUCTION PHASE 1 . Java side.
   166  * CONSTRUCTION PHASE 1 . Java side.
   167  */
   167  */
   168 CMIDToolkit::CMIDToolkit()
   168 CMIDToolkit::CMIDToolkit()
   169         : iPhase(EPhase1)
   169     : iPhase(EPhase1)
   170         , iOldFullScreenDisplayable(NULL), iObjects(EGranularity), iSentToBgTime(0), mFirst(ETrue)
   170     , iOldFullScreenDisplayable(NULL), iObjects(EGranularity), iSentToBgTime(0), mFirst(ETrue)
   171 {
   171 {
   172     LCDUI_DEBUG_INT("CMIDToolkit::CMIDToolkit(%d) CONSTRUCTION PHASE 1", (TInt)this);
   172     LCDUI_DEBUG_INT("CMIDToolkit::CMIDToolkit(%d) CONSTRUCTION PHASE 1", (TInt)this);
   173     iFinalizeMutex.CreateLocal();
   173     iFinalizeMutex.CreateLocal();
   174 }
   174 }
   175 
   175 
   246 
   246 
   247 void CMIDToolkit::HandleSwitchOnEventL()
   247 void CMIDToolkit::HandleSwitchOnEventL()
   248 {
   248 {
   249     iEnv->HandleSwitchOnL(ETrue);
   249     iEnv->HandleSwitchOnL(ETrue);
   250 }
   250 }
       
   251 
       
   252 #ifdef RD_JAVA_NGA_ENABLED
       
   253 void CMIDToolkit::HandleFullOrPartialForegroundL(TBool aFullOrPartialFg)
       
   254 {
       
   255     iEnv->HandleFullOrPartialForegroundL(aFullOrPartialFg);
       
   256 }
       
   257 
       
   258 void CMIDToolkit::HandleFreeGraphicsMemory()
       
   259 {
       
   260     iEnv->HandleFreeGraphicsMemory();
       
   261 }
       
   262 #endif
   251 
   263 
   252 /**
   264 /**
   253  * CONSTRUCTION PHASE 2.
   265  * CONSTRUCTION PHASE 2.
   254  * Java Side.
   266  * Java Side.
   255  */
   267  */
   274     iHandleItemEvent = aJni.GetMethodID(clz, "handleItemEvent", "(Ljavax/microedition/lcdui/Item;IIII)V");
   286     iHandleItemEvent = aJni.GetMethodID(clz, "handleItemEvent", "(Ljavax/microedition/lcdui/Item;IIII)V");
   275     iHandleDisplayableEvent = aJni.GetMethodID(clz, "handleDisplayableEvent", "(Ljavax/microedition/lcdui/Displayable;IIII)V");
   287     iHandleDisplayableEvent = aJni.GetMethodID(clz, "handleDisplayableEvent", "(Ljavax/microedition/lcdui/Displayable;IIII)V");
   276     iHandleDisplayEvent = aJni.GetMethodID(clz, "handleDisplayEvent", "(Ljavax/microedition/lcdui/Toolkit;IIII)V");
   288     iHandleDisplayEvent = aJni.GetMethodID(clz, "handleDisplayEvent", "(Ljavax/microedition/lcdui/Toolkit;IIII)V");
   277     iHandleNotifyMethod = aJni.GetMethodID(clz, "handleAsyncEvent", "(Ljava/lang/Object;I)V");
   289     iHandleNotifyMethod = aJni.GetMethodID(clz, "handleAsyncEvent", "(Ljava/lang/Object;I)V");
   278     iHandleCanavsGraphicsItemPainterEvent = aJni.GetMethodID(
   290     iHandleCanavsGraphicsItemPainterEvent = aJni.GetMethodID(
   279                                                 clz,
   291             clz,
   280                                                 "handleCanvasGraphicsItemPainterEvent",
   292             "handleCanvasGraphicsItemPainterEvent",
   281                                                 "(Ljavax/microedition/lcdui/CanvasGraphicsItemPainter;IIII)V");
   293             "(Ljavax/microedition/lcdui/CanvasGraphicsItemPainter;IIII)V");
   282 
   294 
   283     aJni.DeleteLocalRef(clz);
   295     aJni.DeleteLocalRef(clz);
   284 
   296 
   285     if (0 == iHandleNotifyMethod       ||
   297     if (0 == iHandleNotifyMethod       ||
   286             0 == iHandleDisplayEvent       ||
   298             0 == iHandleDisplayEvent       ||
   388 
   400 
   389     iUtils = iUiFactory->CreateUtilsL();
   401     iUtils = iUiFactory->CreateUtilsL();
   390     iEnv->SetUtils(iUtils);
   402     iEnv->SetUtils(iUtils);
   391 }
   403 }
   392 
   404 
       
   405 MMIDCanvas* CMIDToolkit::GetCurrentCanvas() const
       
   406 {
       
   407     MMIDCanvas* ret = NULL;
       
   408     MMIDComponent* content = iCurrentDisplayable ? iCurrentDisplayable->Component() : NULL;
       
   409     if (content && content->Type() == MMIDComponent::ECanvas)
       
   410     {
       
   411         ret = static_cast<MMIDCanvas*>(content);
       
   412     }
       
   413     return ret;
       
   414 }
       
   415 
   393 //
   416 //
   394 // Enables events
   417 // Enables events
   395 //
   418 //
   396 void CMIDToolkit::ActivateL()
   419 void CMIDToolkit::ActivateL()
   397 {
   420 {
   398     iOpen=ETrue;
   421     iOpen=ETrue;
   399     SetTaskListEntry(ETrue);
   422     SetTaskListEntry(ETrue);
   400     RLcdui::Get()->Plugin()->SetObserver(this);
   423     RLcdui::Get()->Plugin()->SetObserverL(this);
   401     iCoeEnv->RootWin().EnableReceiptOfFocus(ETrue);
   424     iCoeEnv->RootWin().EnableReceiptOfFocus(ETrue);
   402 }
   425 }
   403 
   426 
   404 void CMIDToolkit::SetTaskListEntry(TBool aVisible)
   427 void CMIDToolkit::SetTaskListEntry(TBool aVisible)
   405 {
   428 {
   576     {
   599     {
   577         MMIDComponent* content = iCurrentDisplayable ? iCurrentDisplayable->Component() : NULL;
   600         MMIDComponent* content = iCurrentDisplayable ? iCurrentDisplayable->Component() : NULL;
   578 
   601 
   579         TBool isCanvas = EFalse;
   602         TBool isCanvas = EFalse;
   580         TBool isCanvasReadyToBlit = EFalse;
   603         TBool isCanvasReadyToBlit = EFalse;
       
   604         TBool isFullscreenUI = ETrue;
   581         if (content)
   605         if (content)
   582         {
   606         {
   583             if (content->Type() == MMIDComponent::ECanvas)
   607             MMIDComponent::TType contentType = content->Type();
       
   608 
       
   609             if (contentType == MMIDComponent::ECanvas)
   584             {
   610             {
   585                 isCanvas = ETrue;
   611                 isCanvas = ETrue;
   586                 MMIDCanvas* canvas = static_cast<MMIDCanvas*>(content);
   612                 MMIDCanvas* canvas = static_cast<MMIDCanvas*>(content);
   587                 isCanvasReadyToBlit = canvas->ReadyToBlit();
   613                 isCanvasReadyToBlit = canvas->ReadyToBlit();
   588             }
   614             }
       
   615             else
       
   616             {
       
   617                 if (contentType == MMIDComponent::EAlert ||
       
   618                         (contentType == MMIDComponent::ETextBox &&
       
   619                          iCurrentDisplayable->IsPopupTextBox()))
       
   620                 {
       
   621                     isFullscreenUI = EFalse;
       
   622                 }
       
   623             }
   589         }
   624         }
   590 
   625 
   591         if (!content || !isCanvas || isCanvasReadyToBlit)
   626         if (!content || !isCanvas || isCanvasReadyToBlit)
   592         {
   627         {
   593             if (iCurrentDisplayable)
   628             if (iCurrentDisplayable)
   594             {
   629             {
   595                 iCurrentDisplayable->DrawNow();
   630                 iCurrentDisplayable->DrawNow();
   596             }
   631             }
   597             appUi->stopStartScreen();
   632 
       
   633             appUi->stopStartScreen(isFullscreenUI);
   598         }
   634         }
   599     }
   635     }
   600 }
   636 }
   601 
   637 
   602 void CMIDToolkit::SendToBackground()
   638 void CMIDToolkit::SendToBackground()
   682         iUiFactory->Dispose();
   718         iUiFactory->Dispose();
   683         iUiFactory = NULL;
   719         iUiFactory = NULL;
   684     }
   720     }
   685 
   721 
   686     iGrLibrary.Close();
   722     iGrLibrary.Close();
       
   723 
       
   724     // Null MMIDEnv pointer from CMIDAppUi before
       
   725     // destroying iEnv
       
   726     if (RLcdui::Get()->Plugin())
       
   727     {
       
   728         RLcdui::Get()->Plugin()->SetEnv(NULL);
       
   729     }
   687 
   730 
   688     delete iEnv;
   731     delete iEnv;
   689     iEnv = NULL;
   732     iEnv = NULL;
   690 }
   733 }
   691 
   734 
   732     case EPhase3:
   775     case EPhase3:
   733         iPhase = EPhase2;
   776         iPhase = EPhase2;
   734         break;
   777         break;
   735     }
   778     }
   736 
   779 
       
   780 #ifdef RD_JAVA_NGA_ENABLED
       
   781     // Notify canvas about exit, so that canvas MIDlets
       
   782     // get system effect in exit
       
   783     MMIDCanvas* canvas = GetCurrentCanvas();
       
   784     if (canvas)
       
   785     {
       
   786         canvas->MidletExiting();
       
   787     }
       
   788 #endif // RD_JAVA_NGA_ENABLED    
       
   789 
       
   790 
   737     // Always use exit effect when exiting midlet
   791     // Always use exit effect when exiting midlet
   738     GfxTransEffect::BeginFullScreen(AknTransEffect::EApplicationExit, TRect(),
   792     GfxTransEffect::BeginFullScreen(AknTransEffect::EApplicationExit, TRect(),
   739                                     AknTransEffect::EParameterType, AknTransEffect::GfxTransParam(iAppUid));
   793                                     AknTransEffect::EParameterType, AknTransEffect::GfxTransParam(iAppUid));
   740 
   794 
   741 
   795 
   763         iCoeEnv = NULL;
   817         iCoeEnv = NULL;
   764     }
   818     }
   765 
   819 
   766     if (RLcdui::Get()->Plugin())
   820     if (RLcdui::Get()->Plugin())
   767     {
   821     {
   768         RLcdui::Get()->Plugin()->SetObserver(NULL);
   822         // The leave can occur only when starting MIDlet
       
   823         TRAP_IGNORE(RLcdui::Get()->Plugin()->SetObserverL(NULL));
   769     }
   824     }
   770 
   825 
   771     DestroyUi();
   826     DestroyUi();
   772 
   827 
   773     iWgName = NULL;
   828     iWgName = NULL;
   897 {
   952 {
   898     Object().FinalizeReferences(aJni);
   953     Object().FinalizeReferences(aJni);
   899 }
   954 }
   900 
   955 
   901 CMIDToolkit::TObjectEntry::TObjectEntry(MMIDComponent* aComponent)
   956 CMIDToolkit::TObjectEntry::TObjectEntry(MMIDComponent* aComponent)
   902         : iComponent(aComponent)
   957     : iComponent(aComponent)
   903         , iDisposed(NULL)
   958     , iDisposed(NULL)
   904 {
   959 {
   905 }
   960 }
   906 
   961 
   907 TInt CMIDToolkit::New
   962 TInt CMIDToolkit::New
   908 (
   963 (
   967 
  1022 
   968     ASSERT(0 == count);
  1023     ASSERT(0 == count);
   969 }
  1024 }
   970 
  1025 
   971 CMIDletSuite::CMIDletSuite()
  1026 CMIDletSuite::CMIDletSuite()
   972         :iAttributes()
  1027     :iAttributes()
   973 {
  1028 {
   974 }
  1029 }
   975 
  1030 
   976 /**
  1031 /**
   977  * Takes ownership of pointed objects.
  1032  * Takes ownership of pointed objects.