package org.vaadin.touchkit.itest; import java.util.Random; import org.apache.commons.lang.RandomStringUtils; import org.vaadin.touchkit.AbstractTouchKitIntegrationTest; import org.vaadin.touchkit.ui.NavigationButton; import org.vaadin.touchkit.ui.NavigationManager; import org.vaadin.touchkit.ui.NavigationView; import org.vaadin.touchkit.ui.VerticalComponentGroup; import org.vaadin.touchkit.ui.NavigationButton.NavigationButtonClickEvent; import org.vaadin.touchkit.ui.NavigationButton.NavigationButtonClickListener; import org.vaadin.touchkit.ui.NavigationManager.NavigationEvent; import org.vaadin.touchkit.ui.NavigationManager.NavigationListener; import com.vaadin.server.Page; import com.vaadin.server.Page.UriFragmentChangedEvent; import com.vaadin.server.Page.UriFragmentChangedListener; public class UriFragmentsWithNavigationManager extends AbstractTouchKitIntegrationTest { public String getDescription() { return "Example and test how to use low level " + "uri fragements witn NavigationManager. Note, " + "that this doesn't work in latest Safari on Maverics " + "has 'fixed' back button with fragmens."; }; Random r = new Random(0); public UriFragmentsWithNavigationManager() { setDescription("NavigationView and -Bar test"); addComponent(makeNavigationManager()); } NavigationManager makeNavigationManager() { final NavigationManager navman = new NavigationManager(); ViewWithFragment root = new ViewWithFragment("ROOT", 0); navman.navigateTo(root); Page.getCurrent().setUriFragment(root.getFragment()); Page.getCurrent().addUriFragmentChangedListener( new UriFragmentChangedListener() { @Override public void uriFragmentChanged(UriFragmentChangedEvent event) { String fragment = event.getUriFragment(); ViewWithFragment component = (ViewWithFragment) navman .getPreviousComponent(); if (component != null && component.getFragment().equals(fragment)) { navman.navigateBack(); } } }); navman.addNavigationListener(new NavigationListener() { @Override public void navigate(NavigationEvent event) { String uriFragment = Page.getCurrent().getUriFragment(); ViewWithFragment component = (ViewWithFragment) navman .getCurrentComponent(); if (!component.getFragment().equals(uriFragment)) { // widget back button clicked Page.getCurrent().setUriFragment(component.getFragment(), false); } } }); return navman; } class ViewWithFragment extends NavigationView { private final String fragment = RandomStringUtils.randomAlphanumeric(4); private int level; public ViewWithFragment(String t, int level) { this.level = level; setCaption(t + "(" + level + ")"); VerticalComponentGroup group = new VerticalComponentGroup(); for (int i = 0; i < 3; i++) { final String title = "View " + i; NavigationButton button = new NavigationButton(title); button.addClickListener(new NavigationButtonClickListener() { @Override public void buttonClick(NavigationButtonClickEvent event) { ViewWithFragment viewWithFragment = new ViewWithFragment( title, getLevel() + 1); getNavigationManager().navigateTo(viewWithFragment); Page.getCurrent().setUriFragment( viewWithFragment.getFragment(), false); } }); group.addComponent(button); } setContent(group); } public int getLevel() { return level; } public String getFragment() { return fragment; } } }