Adapting to Tablets & Desktops - Part I
© Codename One 2017 all rights reserved
Before
© Codename One 2017 all rights reserved
After
After
Architecture
✦In the current app every UI element derives from
form and stands alone, in the tablet app we want
to have one form for the entire app
✦Instead of deriving from Form we derive from a
common base class
✦Every feature we need in Form is abstracted so
we can keep common code together
© Codename One 2017 all rights reserved
public class BaseNavigationForm extends UIAbstraction {
private static DishListForm dishForm;
private static BillingForm billingForm;
private static DetailsForm detailsForm;
private static AppForm appForm;
private static AboutForm aboutForm;
private final AppSettings app;
public BaseNavigationForm(AppSettings app, Layout l) {
super();
this.app = app;
initUI(Restaurant.getInstance().name.get(), l);
}
public static void showAppForm(AppSettings app) {
if(appForm == null) {
appForm = new AppForm(app);
}
appForm.show();
}
BaseNavigationForm
public class UIAbstraction {
private Button okButton;
class FormDelegate extends Form {
public FormDelegate(String title, Layout l) {
super(title, l);
initToolbar(getToolbar());
if(hasOKBack()) {
Form previousForm = Display.getInstance().getCurrent();
getToolbar().addMaterialCommandToLeftBar(“",
FontImage.MATERIAL_ARROW_BACK, e -> {
onBack();
previousForm.showBack();
});
Command cmd = getToolbar().addMaterialCommandToRightBar("",
FontImage.MATERIAL_CHECK, e -> {
onOK();
previousForm.showBack();
});
okButton = getToolbar().findCommandComponent(cmd);
}
}
UIAbstraction
public class UIAbstraction {
private Button okButton;
class FormDelegate extends Form {
public FormDelegate(String title, Layout l) {
super(title, l);
initToolbar(getToolbar());
if(hasOKBack()) {
Form previousForm = Display.getInstance().getCurrent();
getToolbar().addMaterialCommandToLeftBar(“",
FontImage.MATERIAL_ARROW_BACK, e -> {
onBack();
previousForm.showBack();
});
Command cmd = getToolbar().addMaterialCommandToRightBar("",
FontImage.MATERIAL_CHECK, e -> {
onOK();
previousForm.showBack();
});
okButton = getToolbar().findCommandComponent(cmd);
}
}
UIAbstraction
public class UIAbstraction {
private Button okButton;
class FormDelegate extends Form {
public FormDelegate(String title, Layout l) {
super(title, l);
initToolbar(getToolbar());
if(hasOKBack()) {
Form previousForm = Display.getInstance().getCurrent();
getToolbar().addMaterialCommandToLeftBar(“",
FontImage.MATERIAL_ARROW_BACK, e -> {
onBack();
previousForm.showBack();
});
Command cmd = getToolbar().addMaterialCommandToRightBar("",
FontImage.MATERIAL_CHECK, e -> {
onOK();
previousForm.showBack();
});
okButton = getToolbar().findCommandComponent(cmd);
}
}
UIAbstraction
public class UIAbstraction {
private Button okButton;
class FormDelegate extends Form {
public FormDelegate(String title, Layout l) {
super(title, l);
initToolbar(getToolbar());
if(hasOKBack()) {
Form previousForm = Display.getInstance().getCurrent();
getToolbar().addMaterialCommandToLeftBar(“",
FontImage.MATERIAL_ARROW_BACK, e -> {
onBack();
previousForm.showBack();
});
Command cmd = getToolbar().addMaterialCommandToRightBar("",
FontImage.MATERIAL_CHECK, e -> {
onOK();
previousForm.showBack();
});
okButton = getToolbar().findCommandComponent(cmd);
}
}
UIAbstraction
public class UIAbstraction {
private Button okButton;
class FormDelegate extends Form {
public FormDelegate(String title, Layout l) {
super(title, l);
initToolbar(getToolbar());
if(hasOKBack()) {
Form previousForm = Display.getInstance().getCurrent();
getToolbar().addMaterialCommandToLeftBar(“",
FontImage.MATERIAL_ARROW_BACK, e -> {
onBack();
previousForm.showBack();
});
Command cmd = getToolbar().addMaterialCommandToRightBar("",
FontImage.MATERIAL_CHECK, e -> {
onOK();
previousForm.showBack();
});
okButton = getToolbar().findCommandComponent(cmd);
}
}
UIAbstraction
protected Component createStatusBar() {
Component c = super.createStatusBar();
c.setUIID("Container");
return c;
}
@Override
protected void initGlobalToolbar() {
if(Toolbar.isGlobalToolbar()) {
setToolbar(new Toolbar(isLayeredToolbar()) {
@Override
protected void initTitleBarStatus() {
}
});
}
}
@Override
protected boolean shouldPaintStatusBar() {
return UIAbstraction.this.shouldPaintStatusBar();
}
}
UIAbstraction

Adapting to Tablets and Desktops - Part 1.pdf

  • 1.
    Adapting to Tablets& Desktops - Part I
  • 2.
    © Codename One2017 all rights reserved Before
  • 3.
    © Codename One2017 all rights reserved After
  • 4.
  • 5.
    Architecture ✦In the currentapp every UI element derives from form and stands alone, in the tablet app we want to have one form for the entire app ✦Instead of deriving from Form we derive from a common base class ✦Every feature we need in Form is abstracted so we can keep common code together © Codename One 2017 all rights reserved
  • 6.
    public class BaseNavigationFormextends UIAbstraction { private static DishListForm dishForm; private static BillingForm billingForm; private static DetailsForm detailsForm; private static AppForm appForm; private static AboutForm aboutForm; private final AppSettings app; public BaseNavigationForm(AppSettings app, Layout l) { super(); this.app = app; initUI(Restaurant.getInstance().name.get(), l); } public static void showAppForm(AppSettings app) { if(appForm == null) { appForm = new AppForm(app); } appForm.show(); } BaseNavigationForm
  • 7.
    public class UIAbstraction{ private Button okButton; class FormDelegate extends Form { public FormDelegate(String title, Layout l) { super(title, l); initToolbar(getToolbar()); if(hasOKBack()) { Form previousForm = Display.getInstance().getCurrent(); getToolbar().addMaterialCommandToLeftBar(“", FontImage.MATERIAL_ARROW_BACK, e -> { onBack(); previousForm.showBack(); }); Command cmd = getToolbar().addMaterialCommandToRightBar("", FontImage.MATERIAL_CHECK, e -> { onOK(); previousForm.showBack(); }); okButton = getToolbar().findCommandComponent(cmd); } } UIAbstraction
  • 8.
    public class UIAbstraction{ private Button okButton; class FormDelegate extends Form { public FormDelegate(String title, Layout l) { super(title, l); initToolbar(getToolbar()); if(hasOKBack()) { Form previousForm = Display.getInstance().getCurrent(); getToolbar().addMaterialCommandToLeftBar(“", FontImage.MATERIAL_ARROW_BACK, e -> { onBack(); previousForm.showBack(); }); Command cmd = getToolbar().addMaterialCommandToRightBar("", FontImage.MATERIAL_CHECK, e -> { onOK(); previousForm.showBack(); }); okButton = getToolbar().findCommandComponent(cmd); } } UIAbstraction
  • 9.
    public class UIAbstraction{ private Button okButton; class FormDelegate extends Form { public FormDelegate(String title, Layout l) { super(title, l); initToolbar(getToolbar()); if(hasOKBack()) { Form previousForm = Display.getInstance().getCurrent(); getToolbar().addMaterialCommandToLeftBar(“", FontImage.MATERIAL_ARROW_BACK, e -> { onBack(); previousForm.showBack(); }); Command cmd = getToolbar().addMaterialCommandToRightBar("", FontImage.MATERIAL_CHECK, e -> { onOK(); previousForm.showBack(); }); okButton = getToolbar().findCommandComponent(cmd); } } UIAbstraction
  • 10.
    public class UIAbstraction{ private Button okButton; class FormDelegate extends Form { public FormDelegate(String title, Layout l) { super(title, l); initToolbar(getToolbar()); if(hasOKBack()) { Form previousForm = Display.getInstance().getCurrent(); getToolbar().addMaterialCommandToLeftBar(“", FontImage.MATERIAL_ARROW_BACK, e -> { onBack(); previousForm.showBack(); }); Command cmd = getToolbar().addMaterialCommandToRightBar("", FontImage.MATERIAL_CHECK, e -> { onOK(); previousForm.showBack(); }); okButton = getToolbar().findCommandComponent(cmd); } } UIAbstraction
  • 11.
    public class UIAbstraction{ private Button okButton; class FormDelegate extends Form { public FormDelegate(String title, Layout l) { super(title, l); initToolbar(getToolbar()); if(hasOKBack()) { Form previousForm = Display.getInstance().getCurrent(); getToolbar().addMaterialCommandToLeftBar(“", FontImage.MATERIAL_ARROW_BACK, e -> { onBack(); previousForm.showBack(); }); Command cmd = getToolbar().addMaterialCommandToRightBar("", FontImage.MATERIAL_CHECK, e -> { onOK(); previousForm.showBack(); }); okButton = getToolbar().findCommandComponent(cmd); } } UIAbstraction
  • 12.
    protected Component createStatusBar(){ Component c = super.createStatusBar(); c.setUIID("Container"); return c; } @Override protected void initGlobalToolbar() { if(Toolbar.isGlobalToolbar()) { setToolbar(new Toolbar(isLayeredToolbar()) { @Override protected void initTitleBarStatus() { } }); } } @Override protected boolean shouldPaintStatusBar() { return UIAbstraction.this.shouldPaintStatusBar(); } } UIAbstraction