From a9e78782871538d829029d2a29063cf9f083f272 Mon Sep 17 00:00:00 2001 From: Elias Volanakis Date: Thu, 30 Apr 2015 16:40:32 +0200 Subject: [PATCH] Fix #403 Provide API to name the 'Back' button --- .../internal/ui/PageDescriptorTest.java | 18 +++++++++++- .../tabris/internal/ui/RemotePageTest.java | 11 +++++++ .../tabris/ui/PageConfigurationTest.java | 29 +++++++++++++++++++ .../tabris/internal/Constants.java | 1 + .../tabris/internal/ui/PageDescriptor.java | 10 +++++++ .../tabris/internal/ui/RemotePage.java | 8 +++++ .../tabris/ui/PageConfiguration.java | 29 ++++++++++++++++++- 7 files changed, 104 insertions(+), 2 deletions(-) diff --git a/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/internal/ui/PageDescriptorTest.java b/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/internal/ui/PageDescriptorTest.java index 56f20d4..df7d38c 100644 --- a/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/internal/ui/PageDescriptorTest.java +++ b/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/internal/ui/PageDescriptorTest.java @@ -61,7 +61,7 @@ public void testGetTitle() { } @Test - public void testSetTitleReturnsDescritor() { + public void testSetTitleReturnsDescriptor() { PageDescriptor descriptor = new PageDescriptor( "foo", TestPage.class ); PageDescriptor actualDescriptor = descriptor.setTitle( "bar" ); @@ -69,6 +69,22 @@ public void testSetTitleReturnsDescritor() { assertSame( descriptor, actualDescriptor ); } + @Test + public void testGetBackCaption() { + PageDescriptor descriptor = new PageDescriptor( "foo", TestPage.class ); + descriptor.setBackCaption( "Leave" ); + + assertEquals( "Leave", descriptor.getBackCaption() ); + } + + @Test + public void testSetBackCaptionReturnsDescriptor() { + PageDescriptor descriptor = new PageDescriptor( "foo", TestPage.class ); + PageDescriptor actualDescriptor = descriptor.setBackCaption( "Leave" ); + + assertSame( descriptor, actualDescriptor ); + } + @Test public void testGetImage() { InputStream image = PageDescriptorTest.class.getResourceAsStream( "testImage.png" ); diff --git a/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/internal/ui/RemotePageTest.java b/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/internal/ui/RemotePageTest.java index 96561a0..7f272ef 100644 --- a/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/internal/ui/RemotePageTest.java +++ b/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/internal/ui/RemotePageTest.java @@ -35,6 +35,7 @@ import org.junit.Rule; import org.junit.Test; import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; import com.eclipsesource.tabris.internal.ui.rendering.ActionRenderer; import com.eclipsesource.tabris.internal.ui.rendering.UIRenderer; @@ -100,6 +101,7 @@ public void testSetsDefaultAttributes() { verify( remoteObject ).set( "parent", "foo1" ); verify( remoteObject ).set( "title", "bar" ); + verify( remoteObject, never() ).set( eq( "backCaption" ), Mockito.anyString() ); verify( remoteObject ).set( "control", WidgetUtil.getId( remotePage.getControl() ) ); verify( remoteObject ).set( "style", new JsonArray().add( "DEFAULT" ) ); verify( remoteObject ).set( "topLevel", true ); @@ -196,6 +198,15 @@ public void testSetTitle() { verify( remoteObject ).set( "title", "bar" ); } + @Test + public void testSetBackCaption() { + when( descriptor.getBackCaption() ).thenReturn( "Eject" ); + + new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) ); + + verify( remoteObject ).set( "backCaption", "Eject" ); + } + @Test public void testGetData() { PageData data = mock( PageData.class ); diff --git a/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/ui/PageConfigurationTest.java b/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/ui/PageConfigurationTest.java index c2fca70..4e34eda 100644 --- a/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/ui/PageConfigurationTest.java +++ b/com.eclipsesource.tabris.test/src/com/eclipsesource/tabris/ui/PageConfigurationTest.java @@ -91,6 +91,7 @@ public void testSetsDefaultValues() { assertSame( TestPage.class, descriptor.getPageType() ); assertFalse( descriptor.isTopLevel() ); assertEquals( "", descriptor.getTitle() ); + assertNull( descriptor.getBackCaption() ); assertNull( descriptor.getImage() ); assertEquals( 0, descriptor.getPageStyle().length ); } @@ -131,6 +132,34 @@ public void testHasTitle() { assertEquals( "bar", title ); } + @Test + public void testSetsBackCaption() { + PageConfiguration config = new PageConfiguration( "foo", TestPage.class ).setBackCaption( "Leave" ); + + PageDescriptor descriptor = config.getAdapter( PageDescriptor.class ); + + assertEquals( "Leave", config.getBackCaption() ); + assertEquals( "Leave", descriptor.getBackCaption() ); + } + + @Test + public void testSetsBackCaptionReturnsPageConfig() { + PageConfiguration config = new PageConfiguration( "foo", TestPage.class ).setTitle( "bar" ); + + PageConfiguration actualConfig = config.setBackCaption( "backCaption" ); + + assertSame( config, actualConfig ); + } + + @Test + public void testBackCaptionIsNullByDefault() { + PageConfiguration config = new PageConfiguration( "foo", TestPage.class ).setTitle( "bar" ); + + String backCaption = config.getBackCaption(); + + assertNull( backCaption ); + } + @Test( expected = IllegalArgumentException.class ) public void testSetTitleFailsWithNull() { new PageConfiguration( "foo", TestPage.class ).setTitle( null ); diff --git a/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/Constants.java b/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/Constants.java index 2d877d8..f047e72 100644 --- a/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/Constants.java +++ b/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/Constants.java @@ -63,6 +63,7 @@ public class Constants { public static final String PROPERTY_ACTIVE_PAGE = "activePage"; public static final String PROPERTY_PAGE_ID = "pageId"; public static final String PROPERTY_TITLE = "title"; + public static final String PROPERTY_BACK_CAPTION = "backCaption"; public static final String PROPERTY_STYLE = "style"; public static final String PROPERTY_TOP_LEVEL = "topLevel"; public static final String PROPERTY_VISIBILITY = "visibility"; diff --git a/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/ui/PageDescriptor.java b/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/ui/PageDescriptor.java index cdd1cb7..c5325e0 100644 --- a/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/ui/PageDescriptor.java +++ b/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/ui/PageDescriptor.java @@ -30,6 +30,7 @@ public class PageDescriptor implements Serializable { private boolean topLevel; private PageStyle[] style; private String title; + private String backCaption; private byte[] image; public PageDescriptor( String id, Class pageType ) { @@ -75,6 +76,15 @@ public String getTitle() { return title; } + public PageDescriptor setBackCaption( String backCaption ) { + this.backCaption = backCaption; + return this; + } + + public String getBackCaption() { + return backCaption; + } + public PageDescriptor setPageStyle( PageStyle... style ) { this.style = style; return this; diff --git a/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/ui/RemotePage.java b/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/ui/RemotePage.java index 5dbbf3d..ab1f95a 100644 --- a/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/ui/RemotePage.java +++ b/com.eclipsesource.tabris/src/com/eclipsesource/tabris/internal/ui/RemotePage.java @@ -10,6 +10,7 @@ ******************************************************************************/ package com.eclipsesource.tabris.internal.ui; +import static com.eclipsesource.tabris.internal.Constants.PROPERTY_BACK_CAPTION; import static com.eclipsesource.tabris.internal.Constants.PROPERTY_CONTROL; import static com.eclipsesource.tabris.internal.Constants.PROPERTY_IMAGE; import static com.eclipsesource.tabris.internal.Constants.PROPERTY_PARENT; @@ -65,6 +66,7 @@ public RemotePage( UI ui, RemoteUI uiRenderer, PageDescriptor descriptor, PageDa this.page = InstanceCreator.createInstance( descriptor.getPageType() ); this.remoteActions = new ArrayList(); setTitle( descriptor.getTitle() ); + setBackCaption( descriptor.getBackCaption() ); setAttributes(); } @@ -91,6 +93,12 @@ private JsonArray createPageStyleParameter( PageStyle[] pageStyle ) { return createJsonArray( result ); } + private void setBackCaption( String backCaption ) { + if ( backCaption != null && backCaption.trim().length() > 0 ) { + remoteObject.set( PROPERTY_BACK_CAPTION, backCaption ); + } + } + private void setImage() { Image image = createImage( descriptor.getImage() ); if( image != null ) { diff --git a/com.eclipsesource.tabris/src/com/eclipsesource/tabris/ui/PageConfiguration.java b/com.eclipsesource.tabris/src/com/eclipsesource/tabris/ui/PageConfiguration.java index 0872220..e2bc0b9 100644 --- a/com.eclipsesource.tabris/src/com/eclipsesource/tabris/ui/PageConfiguration.java +++ b/com.eclipsesource.tabris/src/com/eclipsesource/tabris/ui/PageConfiguration.java @@ -51,6 +51,7 @@ public class PageConfiguration implements Adaptable, Serializable { private final Class pageType; private final List actions; private String title; + private String backCaption; private PageStyle[] style; private boolean topLevel; private byte[] image; @@ -74,6 +75,7 @@ public PageConfiguration( String pageId, Class pageType ) { this.id = pageId; this.pageType = pageType; this.title = ""; + this.backCaption = null; this.topLevel = false; this.style = new PageStyle[] {}; this.actions = new ArrayList(); @@ -126,7 +128,7 @@ public PageConfiguration setTitle( String title ) { /** *

- * Returns the page title." + * Returns the page title. *

* * @since 1.4 @@ -135,6 +137,30 @@ public String getTitle() { return title; } + /** + *

+ * Defines the text for the back button. + *

+ * + * @param backCaption the text for the back button. If {@code null} or empty, the default text is used. + * @since 1.4.5 + */ + public PageConfiguration setBackCaption( String backCaption ) { + this.backCaption = backCaption; + return this; + } + +/** + *

+ * Returns the text for the back button. Default value: {@code null}. + *

+ * + * @since 1.4.5 + */ + public String getBackCaption() { + return backCaption; + } + /** *

* Defines the style of a page. A page can have multiple styles. @@ -253,6 +279,7 @@ public T getAdapter( Class adapter ) { private PageDescriptor createDescriptor() { PageDescriptor pageDescriptor = new PageDescriptor( id, pageType ) .setTitle( title ) + .setBackCaption( backCaption ) .setImage( image ) .setTopLevel( topLevel ) .setPageStyle( style );