/** * Closes the splash screen associated with the given place request, if any. Internally, this method should be * invoked every time a part or perspective is removed from the workbench (cleaning up after the corresponding * earlier call to {@link #addSplashScreenFor(PlaceRequest)}. * @param place the place whose opening may have triggered a splash screen to launch. Must not be null. */ private void closeSplashScreen(final PlaceRequest place) { SplashScreenActivity splashScreenActivity = availableSplashScreens.remove(place.getIdentifier()); if (splashScreenActivity != null) { try { splashScreenActivity.closeIfOpen(); } catch (Exception ex) { lifecycleErrorHandler.handle(splashScreenActivity, LifecyclePhase.CLOSE, ex); } activityManager.destroyActivity(splashScreenActivity); newSplashScreenActiveEvent.fire(new NewSplashScreenActiveEvent()); } }
/** * Finds and opens the splash screen for the given place, if such a splash screen exists. The splash screen might * not actually display; each splash screen keeps track of its own preference setting for whether or not the user * wants to see it. * <p/> * Whether or not it chooses to display itself, the splash screen will be recorded in * {@link #availableSplashScreens} for lookup (for example, see {@link SplashScreenMenuPresenter}) and later disposal. * Internally, this method should be called every time any part or perspective is added to the workbench, and called * again when that part or perspective is removed. * @param place the place that has just been added to the workbench. Must not be null. */ private void addSplashScreenFor(final PlaceRequest place) { final SplashScreenActivity splashScreen = activityManager.getSplashScreenInterceptor(place); if (splashScreen != null) { availableSplashScreens.put(place.getIdentifier(), splashScreen); try { splashScreen.onOpen(); } catch (Exception ex) { availableSplashScreens.remove(place.getIdentifier()); lifecycleErrorHandler.handle(splashScreen, LifecyclePhase.OPEN, ex); activityManager.destroyActivity(splashScreen); return; } } newSplashScreenActiveEvent.fire(new NewSplashScreenActiveEvent()); }
private void switchToPerspective(final PlaceRequest place, final PerspectiveActivity newPerspectiveActivity, final ParameterizedCommand<PerspectiveDefinition> closeOldPerspectiveOpenPartsAndExecuteChainedCallback) { if (closeAllCurrentPanels()) { closeAllSplashScreens(); addSplashScreenFor(place); perspectiveManager.switchToPerspective(place, newPerspectiveActivity, closeOldPerspectiveOpenPartsAndExecuteChainedCallback); } else { // some panels didn't want to close, so not going to launch new perspective. clean up its activity. try { newPerspectiveActivity.onClose(); } catch (Exception ex) { lifecycleErrorHandler.handle(newPerspectiveActivity, LifecyclePhase.OPEN, ex); } existingWorkbenchActivities.remove(newPerspectiveActivity.getPlace()); activityManager.destroyActivity(newPerspectiveActivity); } }
@Test public void testProperSplashScreenShutdownOnPartClose() throws Exception { PlaceRequest oz = new DefaultPlaceRequest("oz"); WorkbenchScreenActivity ozActivity = mock(WorkbenchScreenActivity.class); when(activityManager.getActivities(oz)).thenReturn(singleton((Activity) ozActivity)); final SplashScreenActivity lollipopGuildActivity = mock(SplashScreenActivity.class); when(lollipopGuildActivity.isType(ActivityResourceType.SPLASH.name())).thenReturn(true); when(activityManager.getSplashScreenInterceptor(oz)).thenReturn(lollipopGuildActivity); when(ozActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.goTo(oz, (PanelDefinition) null); placeManager.closePlace(oz); assertTrue(placeManager.getActiveSplashScreens().isEmpty()); verify(lollipopGuildActivity).closeIfOpen(); // splash screens are Application Scoped, but we still "destroy" them (activity manager will call their onShutdown) verify(activityManager).destroyActivity(lollipopGuildActivity); }
private void verifyPlaceNotClosed(final PlaceRequest place, final WorkbenchScreenActivity screenActivity) { verify(workbenchPartBeforeCloseEvent, never()).fire(refEq(new BeforeClosePlaceEvent(place, true, true))); verify(workbenchPartCloseEvent, never()).fire(refEq(new ClosePlaceEvent(place))); verify(screenActivity, never()).onClose(); verify(screenActivity, never()).onShutdown(); verify(activityManager, never()).destroyActivity(screenActivity); verify(panelManager, never()).removePartForPlace(place); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(place)); assertNotNull(placeManager.getActivity(place)); assertTrue(placeManager.getActivePlaceRequests().contains(place)); }
@Test public void testProperSplashScreenShutdownOnPartClose() throws Exception { PlaceRequest oz = new DefaultPlaceRequest("oz"); WorkbenchScreenActivity ozActivity = mock(WorkbenchScreenActivity.class); when(activityManager.getActivities(oz)).thenReturn(singleton((Activity) ozActivity)); final SplashScreenActivity lollipopGuildActivity = mock(SplashScreenActivity.class); when(lollipopGuildActivity.isType(ActivityResourceType.SPLASH.name())).thenReturn(true); when(activityManager.getSplashScreenInterceptor(oz)).thenReturn(lollipopGuildActivity); when(ozActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.goTo(oz, (PanelDefinition) null); placeManager.closePlace(oz); assertTrue(placeManager.getActiveSplashScreens().isEmpty()); verify(lollipopGuildActivity).closeIfOpen(); // splash screens are Application Scoped, but we still "destroy" them (activity manager will call their onShutdown) verify(activityManager).destroyActivity(lollipopGuildActivity); }
private void verifyPlaceNotClosed(final PlaceRequest place, final WorkbenchScreenActivity screenActivity) { verify(workbenchPartBeforeCloseEvent, never()).fire(refEq(new BeforeClosePlaceEvent(place, true, true))); verify(workbenchPartCloseEvent, never()).fire(refEq(new ClosePlaceEvent(place))); verify(screenActivity, never()).onClose(); verify(screenActivity, never()).onShutdown(); verify(activityManager, never()).destroyActivity(screenActivity); verify(panelManager, never()).removePartForPlace(place); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(place)); assertNotNull(placeManager.getActivity(place)); assertTrue(placeManager.getActivePlaceRequests().contains(place)); }
@Test public void testSwitchingPerspectives() throws Exception { PerspectiveActivity ozPerspectiveActivity = mock(PerspectiveActivity.class); PlaceRequest ozPerspectivePlace = new DefaultPlaceRequest("oz_perspective"); PerspectiveDefinition ozPerspectiveDef = new PerspectiveDefinitionImpl(); when(activityManager.getActivities(ozPerspectivePlace)) .thenReturn(singleton((Activity) ozPerspectiveActivity)); when(ozPerspectiveActivity.getDefaultPerspectiveLayout()).thenReturn(ozPerspectiveDef); when(ozPerspectiveActivity.getPlace()).thenReturn(ozPerspectivePlace); when(ozPerspectiveActivity.isType(ActivityResourceType.PERSPECTIVE.name())).thenReturn(true); when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); // we'll pretend we started in kansas PerspectiveActivity kansasPerspectiveActivity = mock(PerspectiveActivity.class); when(perspectiveManager.getCurrentPerspective()).thenReturn(kansasPerspectiveActivity); placeManager.goTo(ozPerspectivePlace); // verify proper shutdown of kansasPerspective and its contents InOrder inOrder = inOrder(activityManager, kansasPerspectiveActivity, kansasActivity, workbenchLayout); // shut down the screens first inOrder.verify(kansasActivity).onClose(); inOrder.verify(activityManager).destroyActivity(kansasActivity); // then the perspective inOrder.verify(kansasPerspectiveActivity).onClose(); inOrder.verify(activityManager).destroyActivity(kansasPerspectiveActivity); inOrder.verify(workbenchLayout).onResize(); }
@Test public void testSwitchingPerspectives() throws Exception { PerspectiveActivity ozPerspectiveActivity = mock(PerspectiveActivity.class); PlaceRequest ozPerspectivePlace = new DefaultPlaceRequest("oz_perspective"); PerspectiveDefinition ozPerspectiveDef = new PerspectiveDefinitionImpl(); when(activityManager.getActivities(ozPerspectivePlace)) .thenReturn(singleton((Activity) ozPerspectiveActivity)); when(ozPerspectiveActivity.getDefaultPerspectiveLayout()).thenReturn(ozPerspectiveDef); when(ozPerspectiveActivity.getPlace()).thenReturn(ozPerspectivePlace); when(ozPerspectiveActivity.isType(ActivityResourceType.PERSPECTIVE.name())).thenReturn(true); when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); // we'll pretend we started in kansas PerspectiveActivity kansasPerspectiveActivity = mock(PerspectiveActivity.class); when(perspectiveManager.getCurrentPerspective()).thenReturn(kansasPerspectiveActivity); placeManager.goTo(ozPerspectivePlace); // verify proper shutdown of kansasPerspective and its contents InOrder inOrder = inOrder(activityManager, kansasPerspectiveActivity, kansasActivity, workbenchLayout); // shut down the screens first inOrder.verify(kansasActivity).onClose(); inOrder.verify(activityManager).destroyActivity(kansasActivity); // then the perspective inOrder.verify(kansasPerspectiveActivity).onClose(); inOrder.verify(activityManager).destroyActivity(kansasPerspectiveActivity); inOrder.verify(workbenchLayout).onResize(); }
private void verifyPlaceClosed(final PlaceRequest place, final WorkbenchScreenActivity screenActivity) { verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(place, true, true))); verify(workbenchPartCloseEvent).fire(refEq(new ClosePlaceEvent(place))); verify(screenActivity).onMayClose(); verify(screenActivity).onClose(); verify(screenActivity, never()).onShutdown(); verify(activityManager).destroyActivity(screenActivity); verify(panelManager).removePartForPlace(place); assertEquals(PlaceStatus.CLOSE, placeManager.getStatus(place)); assertNull(placeManager.getActivity(place)); assertFalse(placeManager.getActivePlaceRequests().contains(place)); }
inOrder.verify(activityManager, never()).destroyActivity(kansasActivity); inOrder.verify(activityManager, never()).destroyActivity(kansasPerspectiveActivity); inOrder.verify(workbenchLayout, never()).onResize();
inOrder.verify(activityManager).destroyActivity(kansasActivity); inOrder.verify(activityManager).destroyActivity(kansasPerspectiveActivity); inOrder.verify(workbenchLayout).onResize();
private void verifyPlaceClosed(final PlaceRequest place, final WorkbenchScreenActivity screenActivity) { verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(place, true, true))); verify(workbenchPartCloseEvent).fire(refEq(new ClosePlaceEvent(place))); verify(screenActivity).onMayClose(); verify(screenActivity).onClose(); verify(screenActivity, never()).onShutdown(); verify(activityManager).destroyActivity(screenActivity); verify(panelManager).removePartForPlace(place); assertEquals(PlaceStatus.CLOSE, placeManager.getStatus(place)); assertNull(placeManager.getActivity(place)); assertFalse(placeManager.getActivePlaceRequests().contains(place)); }
@Test public void testCanceledCloseExistingScreenActivity() throws Exception { when(kansasActivity.onMayClose()).thenReturn(false); when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.closePlace(kansas); verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(kansas, false, true))); verify(workbenchPartCloseEvent, never()).fire(refEq(new ClosePlaceEvent(kansas))); verify(kansasActivity).onMayClose(); verify(kansasActivity, never()).onClose(); verify(kansasActivity, never()).onShutdown(); verify(activityManager, never()).destroyActivity(kansasActivity); verify(panelManager, never()).removePartForPlace(kansas); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(kansas)); assertSame(kansasActivity, placeManager.getActivity(kansas)); assertTrue(placeManager.getActivePlaceRequests().contains(kansas)); }
@Test public void testNormalCloseExistingScreenActivity() throws Exception { when(kansasActivity.onMayClose()).thenReturn(true); when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.closePlace(kansas); verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(kansas, false, true))); verify(workbenchPartCloseEvent).fire(refEq(new ClosePlaceEvent(kansas))); verify(kansasActivity).onMayClose(); verify(kansasActivity).onClose(); verify(kansasActivity, never()).onShutdown(); verify(activityManager).destroyActivity(kansasActivity); verify(panelManager).removePartForPlace(kansas); assertEquals(PlaceStatus.CLOSE, placeManager.getStatus(kansas)); assertNull(placeManager.getActivity(kansas)); assertFalse(placeManager.getActivePlaceRequests().contains(kansas)); }
@Test public void testForceCloseExistingScreenActivity() throws Exception { when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.forceClosePlace(kansas); verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(kansas, true, true))); verify(workbenchPartCloseEvent).fire(refEq(new ClosePlaceEvent(kansas))); verify(kansasActivity, never()).onMayClose(); verify(kansasActivity).onClose(); verify(kansasActivity, never()).onShutdown(); verify(activityManager).destroyActivity(kansasActivity); verify(panelManager).removePartForPlace(kansas); assertEquals(PlaceStatus.CLOSE, placeManager.getStatus(kansas)); assertNull(placeManager.getActivity(kansas)); assertFalse(placeManager.getActivePlaceRequests().contains(kansas)); }
@Test public void testCanceledCloseExistingScreenActivity() throws Exception { when(kansasActivity.onMayClose()).thenReturn(false); when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.closePlace(kansas); verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(kansas, false, true))); verify(workbenchPartCloseEvent, never()).fire(refEq(new ClosePlaceEvent(kansas))); verify(kansasActivity).onMayClose(); verify(kansasActivity, never()).onClose(); verify(kansasActivity, never()).onShutdown(); verify(activityManager, never()).destroyActivity(kansasActivity); verify(panelManager, never()).removePartForPlace(kansas); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(kansas)); assertSame(kansasActivity, placeManager.getActivity(kansas)); assertTrue(placeManager.getActivePlaceRequests().contains(kansas)); }
@Test public void testNormalCloseExistingScreenActivity() throws Exception { when(kansasActivity.onMayClose()).thenReturn(true); when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.closePlace(kansas); verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(kansas, false, true))); verify(workbenchPartCloseEvent).fire(refEq(new ClosePlaceEvent(kansas))); verify(kansasActivity).onMayClose(); verify(kansasActivity).onClose(); verify(kansasActivity, never()).onShutdown(); verify(activityManager).destroyActivity(kansasActivity); verify(panelManager).removePartForPlace(kansas); assertEquals(PlaceStatus.CLOSE, placeManager.getStatus(kansas)); assertNull(placeManager.getActivity(kansas)); assertFalse(placeManager.getActivePlaceRequests().contains(kansas)); }
@Test public void testForceCloseExistingScreenActivity() throws Exception { when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.forceClosePlace(kansas); verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(kansas, true, true))); verify(workbenchPartCloseEvent).fire(refEq(new ClosePlaceEvent(kansas))); verify(kansasActivity, never()).onMayClose(); verify(kansasActivity).onClose(); verify(kansasActivity, never()).onShutdown(); verify(activityManager).destroyActivity(kansasActivity); verify(panelManager).removePartForPlace(kansas); assertEquals(PlaceStatus.CLOSE, placeManager.getStatus(kansas)); assertNull(placeManager.getActivity(kansas)); assertFalse(placeManager.getActivePlaceRequests().contains(kansas)); }
verify(activityManager).destroyActivity(splashScreenActivity1); verify(activityManager).destroyActivity(splashScreenActivity2);