SlideShare a Scribd company logo
1 of 26
Download to read offline
Creating an Uber Clone - Part XXIII
private void enterNavigationMode(final Container pinLayer, Container navigationToolbar,
final Container layer, List<Coord> path, String from, String to, int duration) {
pinLayer.removeAll();
navigationToolbar.setY(-navigationToolbar.getHeight());
layer.getComponentAt(1).setY(getDisplayHeight());
navigationToolbar.getParent().animateUnlayout(200, 120, () -> {
if(inNavigationMode) {
return;
}
inNavigationMode = true;
callSerially(() -> {
layer.removeAll();
Coord[] pathCoords = new Coord[path.size()];
path.toArray(pathCoords);
MapContainer.MapObject pathObject = mc.addPath(pathCoords);
BoundingBox bb = BoundingBox.create(pathCoords).
extend(new BoundingBox(pathCoords[0], 0.01, 0.01)).
extend(new BoundingBox(pathCoords[pathCoords.length - 1],0.01,0.01));
mc.fitBounds(bb);
Component fromComponent = createNavigationTag(
trimmedString(from), duration / 60);
Component toComponent = createNavigationTag(trimmedString(to), -1);
MapLayout.setHorizontalAlignment(fromComponent,
enterNavigationMode
private void enterNavigationMode(final Container pinLayer, Container navigationToolbar,
final Container layer, List<Coord> path, String from, String to, int duration) {
pinLayer.removeAll();
navigationToolbar.setY(-navigationToolbar.getHeight());
layer.getComponentAt(1).setY(getDisplayHeight());
navigationToolbar.getParent().animateUnlayout(200, 120, () -> {
if(inNavigationMode) {
return;
}
inNavigationMode = true;
callSerially(() -> {
layer.removeAll();
Coord[] pathCoords = new Coord[path.size()];
path.toArray(pathCoords);
MapContainer.MapObject pathObject = mc.addPath(pathCoords);
BoundingBox bb = BoundingBox.create(pathCoords).
extend(new BoundingBox(pathCoords[0], 0.01, 0.01)).
extend(new BoundingBox(pathCoords[pathCoords.length - 1],0.01,0.01));
mc.fitBounds(bb);
Component fromComponent = createNavigationTag(
trimmedString(from), duration / 60);
Component toComponent = createNavigationTag(trimmedString(to), -1);
MapLayout.setHorizontalAlignment(fromComponent,
enterNavigationMode
private void enterNavigationMode(final Container pinLayer, Container navigationToolbar,
final Container layer, List<Coord> path, String from, String to, int duration) {
pinLayer.removeAll();
navigationToolbar.setY(-navigationToolbar.getHeight());
layer.getComponentAt(1).setY(getDisplayHeight());
navigationToolbar.getParent().animateUnlayout(200, 120, () -> {
if(inNavigationMode) {
return;
}
inNavigationMode = true;
callSerially(() -> {
layer.removeAll();
Coord[] pathCoords = new Coord[path.size()];
path.toArray(pathCoords);
MapContainer.MapObject pathObject = mc.addPath(pathCoords);
BoundingBox bb = BoundingBox.create(pathCoords).
extend(new BoundingBox(pathCoords[0], 0.01, 0.01)).
extend(new BoundingBox(pathCoords[pathCoords.length - 1],0.01,0.01));
mc.fitBounds(bb);
Component fromComponent = createNavigationTag(
trimmedString(from), duration / 60);
Component toComponent = createNavigationTag(trimmedString(to), -1);
MapLayout.setHorizontalAlignment(fromComponent,
enterNavigationMode
private void enterNavigationMode(final Container pinLayer, Container navigationToolbar,
final Container layer, List<Coord> path, String from, String to, int duration) {
pinLayer.removeAll();
navigationToolbar.setY(-navigationToolbar.getHeight());
layer.getComponentAt(1).setY(getDisplayHeight());
navigationToolbar.getParent().animateUnlayout(200, 120, () -> {
if(inNavigationMode) {
return;
}
inNavigationMode = true;
callSerially(() -> {
layer.removeAll();
Coord[] pathCoords = new Coord[path.size()];
path.toArray(pathCoords);
MapContainer.MapObject pathObject = mc.addPath(pathCoords);
BoundingBox bb = BoundingBox.create(pathCoords).
extend(new BoundingBox(pathCoords[0], 0.01, 0.01)).
extend(new BoundingBox(pathCoords[pathCoords.length - 1],0.01,0.01));
mc.fitBounds(bb);
Component fromComponent = createNavigationTag(
trimmedString(from), duration / 60);
Component toComponent = createNavigationTag(trimmedString(to), -1);
MapLayout.setHorizontalAlignment(fromComponent,
enterNavigationMode
private void enterNavigationMode(final Container pinLayer, Container navigationToolbar,
final Container layer, List<Coord> path, String from, String to, int duration) {
pinLayer.removeAll();
navigationToolbar.setY(-navigationToolbar.getHeight());
layer.getComponentAt(1).setY(getDisplayHeight());
navigationToolbar.getParent().animateUnlayout(200, 120, () -> {
if(inNavigationMode) {
return;
}
inNavigationMode = true;
callSerially(() -> {
layer.removeAll();
Coord[] pathCoords = new Coord[path.size()];
path.toArray(pathCoords);
MapContainer.MapObject pathObject = mc.addPath(pathCoords);
BoundingBox bb = BoundingBox.create(pathCoords).
extend(new BoundingBox(pathCoords[0], 0.01, 0.01)).
extend(new BoundingBox(pathCoords[pathCoords.length - 1],0.01,0.01));
mc.fitBounds(bb);
Component fromComponent = createNavigationTag(
trimmedString(from), duration / 60);
Component toComponent = createNavigationTag(trimmedString(to), -1);
MapLayout.setHorizontalAlignment(fromComponent,
enterNavigationMode
Component fromComponent = createNavigationTag(
trimmedString(from), duration / 60);
Component toComponent = createNavigationTag(trimmedString(to), -1);
MapLayout.setHorizontalAlignment(fromComponent, MapLayout.HALIGN.RIGHT);
mapLayer.add(pathCoords[0], fromComponent);
mapLayer.add(pathCoords[pathCoords.length - 1], toComponent);
whereTo.setVisible(false);
getToolbar().setVisible(false);
Button back = new Button("", "TitleCommand");
FontImage.setMaterialIcon(back, FontImage.MATERIAL_ARROW_BACK);
layer.add(NORTH, back);
back.addActionListener(e ->
exitNavigationMode(layer, fromComponent, toComponent, pathObject));
Label ride = new Label("Ride", "RideTitle");
Label taxi = new Label("Taxi", Resources.getGlobalResources().
getImage("ride.png"), "RideTitle");
taxi.setTextPosition(BOTTOM);
Label separator = new Label("", "MarginSeparator");
separator.setShowEvenIfBlank(true);
Button blackButton = new Button("Confirm", "BlackButton");
Container cnt = BoxLayout.encloseY(ride, taxi, separator, blackButton);
cnt.setUIID("Form");
layer.add(SOUTH, cnt);
enterNavigationMode
Component fromComponent = createNavigationTag(
trimmedString(from), duration / 60);
Component toComponent = createNavigationTag(trimmedString(to), -1);
MapLayout.setHorizontalAlignment(fromComponent, MapLayout.HALIGN.RIGHT);
mapLayer.add(pathCoords[0], fromComponent);
mapLayer.add(pathCoords[pathCoords.length - 1], toComponent);
whereTo.setVisible(false);
getToolbar().setVisible(false);
Button back = new Button("", "TitleCommand");
FontImage.setMaterialIcon(back, FontImage.MATERIAL_ARROW_BACK);
layer.add(NORTH, back);
back.addActionListener(e ->
exitNavigationMode(layer, fromComponent, toComponent, pathObject));
Label ride = new Label("Ride", "RideTitle");
Label taxi = new Label("Taxi", Resources.getGlobalResources().
getImage("ride.png"), "RideTitle");
taxi.setTextPosition(BOTTOM);
Label separator = new Label("", "MarginSeparator");
separator.setShowEvenIfBlank(true);
Button blackButton = new Button("Confirm", "BlackButton");
Container cnt = BoxLayout.encloseY(ride, taxi, separator, blackButton);
cnt.setUIID("Form");
layer.add(SOUTH, cnt);
enterNavigationMode
Component fromComponent = createNavigationTag(
trimmedString(from), duration / 60);
Component toComponent = createNavigationTag(trimmedString(to), -1);
MapLayout.setHorizontalAlignment(fromComponent, MapLayout.HALIGN.RIGHT);
mapLayer.add(pathCoords[0], fromComponent);
mapLayer.add(pathCoords[pathCoords.length - 1], toComponent);
whereTo.setVisible(false);
getToolbar().setVisible(false);
Button back = new Button("", "TitleCommand");
FontImage.setMaterialIcon(back, FontImage.MATERIAL_ARROW_BACK);
layer.add(NORTH, back);
back.addActionListener(e ->
exitNavigationMode(layer, fromComponent, toComponent, pathObject));
Label ride = new Label("Ride", "RideTitle");
Label taxi = new Label("Taxi", Resources.getGlobalResources().
getImage("ride.png"), "RideTitle");
taxi.setTextPosition(BOTTOM);
Label separator = new Label("", "MarginSeparator");
separator.setShowEvenIfBlank(true);
Button blackButton = new Button("Confirm", "BlackButton");
Container cnt = BoxLayout.encloseY(ride, taxi, separator, blackButton);
cnt.setUIID("Form");
layer.add(SOUTH, cnt);
enterNavigationMode
private String trimmedString(String str) {
int p = str.indexOf(',');
if(p > -1) {
str = str.substring(0, p);
}
if(str.length() > 15) {
str = str.substring(0, 15);
}
return str;
}
trimmedString
private void exitNavigationMode(final Container layer,
Component fromComponent, Component toComponent,
MapContainer.MapObject pathObject) {
layer.removeAll();
fromComponent.remove();
toComponent.remove();
mc.removeMapObject(pathObject);
getToolbar().setVisible(true);
whereTo.setVisible(true);
revalidate();
inNavigationMode = false;
}
exitNavigationMode
RideTitle
© Codename One 2017 all rights reserved
RideTitle
© Codename One 2017 all rights reserved
RideTitle
© Codename One 2017 all rights reserved
RideTitle
© Codename One 2017 all rights reserved
RideTitle
© Codename One 2017 all rights reserved
MarginSeparator
© Codename One 2017 all rights reserved
MarginSeparator
© Codename One 2017 all rights reserved
MarginSeparator
© Codename One 2017 all rights reserved
MarginSeparator
© Codename One 2017 all rights reserved
BlackButton
© Codename One 2017 all rights reserved
BlackButton
© Codename One 2017 all rights reserved
BlackButton
© Codename One 2017 all rights reserved
BlackButton
© Codename One 2017 all rights reserved
BlackButton
© Codename One 2017 all rights reserved
BlackButton
© Codename One 2017 all rights reserved

More Related Content

Similar to Creating an Uber Clone - Part XXIII.pdf

Exploring Canvas
Exploring CanvasExploring Canvas
Exploring CanvasKevin Hoyt
 
Creating an Uber Clone - Part VIII.pdf
Creating an Uber Clone - Part VIII.pdfCreating an Uber Clone - Part VIII.pdf
Creating an Uber Clone - Part VIII.pdfShaiAlmog1
 
Creating an Uber Clone - Part XXI.pdf
Creating an Uber Clone - Part XXI.pdfCreating an Uber Clone - Part XXI.pdf
Creating an Uber Clone - Part XXI.pdfShaiAlmog1
 
Mashup caravan android-talks
Mashup caravan android-talksMashup caravan android-talks
Mashup caravan android-talkshonjo2
 
Creating an Uber Clone - Part IX.pdf
Creating an Uber Clone - Part IX.pdfCreating an Uber Clone - Part IX.pdf
Creating an Uber Clone - Part IX.pdfShaiAlmog1
 
UI Design From Scratch - Part 5.pdf
UI Design From Scratch - Part 5.pdfUI Design From Scratch - Part 5.pdf
UI Design From Scratch - Part 5.pdfShaiAlmog1
 
Creating an Uber Clone - Part VIII - Transcript.pdf
Creating an Uber Clone - Part VIII - Transcript.pdfCreating an Uber Clone - Part VIII - Transcript.pdf
Creating an Uber Clone - Part VIII - Transcript.pdfShaiAlmog1
 
Creating an Uber Clone - Part XXII.pdf
Creating an Uber Clone - Part XXII.pdfCreating an Uber Clone - Part XXII.pdf
Creating an Uber Clone - Part XXII.pdfShaiAlmog1
 
The Ring programming language version 1.9 book - Part 96 of 210
The Ring programming language version 1.9 book - Part 96 of 210The Ring programming language version 1.9 book - Part 96 of 210
The Ring programming language version 1.9 book - Part 96 of 210Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 79 of 180
The Ring programming language version 1.5.1 book - Part 79 of 180The Ring programming language version 1.5.1 book - Part 79 of 180
The Ring programming language version 1.5.1 book - Part 79 of 180Mahmoud Samir Fayed
 
Initial UI Mockup - Part 3.pdf
Initial UI Mockup - Part 3.pdfInitial UI Mockup - Part 3.pdf
Initial UI Mockup - Part 3.pdfShaiAlmog1
 
Create a java project that - Draw a circle with three random init.pdf
Create a java project that - Draw a circle with three random init.pdfCreate a java project that - Draw a circle with three random init.pdf
Create a java project that - Draw a circle with three random init.pdfarihantmobileselepun
 
package chapter15;import javafx.application.Application;import j.pdf
package chapter15;import javafx.application.Application;import j.pdfpackage chapter15;import javafx.application.Application;import j.pdf
package chapter15;import javafx.application.Application;import j.pdfKARTIKINDIA
 
The Ring programming language version 1.2 book - Part 60 of 84
The Ring programming language version 1.2 book - Part 60 of 84The Ring programming language version 1.2 book - Part 60 of 84
The Ring programming language version 1.2 book - Part 60 of 84Mahmoud Samir Fayed
 
Creating an Uber Clone - Part V.pdf
Creating an Uber Clone - Part V.pdfCreating an Uber Clone - Part V.pdf
Creating an Uber Clone - Part V.pdfShaiAlmog1
 
The Ring programming language version 1.5.2 book - Part 80 of 181
The Ring programming language version 1.5.2 book - Part 80 of 181The Ring programming language version 1.5.2 book - Part 80 of 181
The Ring programming language version 1.5.2 book - Part 80 of 181Mahmoud Samir Fayed
 
Maps - Part 3 - Transcript.pdf
Maps - Part 3 - Transcript.pdfMaps - Part 3 - Transcript.pdf
Maps - Part 3 - Transcript.pdfShaiAlmog1
 
Exploring Canvas
Exploring CanvasExploring Canvas
Exploring CanvasKevin Hoyt
 

Similar to Creating an Uber Clone - Part XXIII.pdf (20)

Exploring Canvas
Exploring CanvasExploring Canvas
Exploring Canvas
 
Creating an Uber Clone - Part VIII.pdf
Creating an Uber Clone - Part VIII.pdfCreating an Uber Clone - Part VIII.pdf
Creating an Uber Clone - Part VIII.pdf
 
Creating an Uber Clone - Part XXI.pdf
Creating an Uber Clone - Part XXI.pdfCreating an Uber Clone - Part XXI.pdf
Creating an Uber Clone - Part XXI.pdf
 
Mashup caravan android-talks
Mashup caravan android-talksMashup caravan android-talks
Mashup caravan android-talks
 
Creating an Uber Clone - Part IX.pdf
Creating an Uber Clone - Part IX.pdfCreating an Uber Clone - Part IX.pdf
Creating an Uber Clone - Part IX.pdf
 
UI Design From Scratch - Part 5.pdf
UI Design From Scratch - Part 5.pdfUI Design From Scratch - Part 5.pdf
UI Design From Scratch - Part 5.pdf
 
Creating an Uber Clone - Part VIII - Transcript.pdf
Creating an Uber Clone - Part VIII - Transcript.pdfCreating an Uber Clone - Part VIII - Transcript.pdf
Creating an Uber Clone - Part VIII - Transcript.pdf
 
Creating an Uber Clone - Part XXII.pdf
Creating an Uber Clone - Part XXII.pdfCreating an Uber Clone - Part XXII.pdf
Creating an Uber Clone - Part XXII.pdf
 
The Ring programming language version 1.9 book - Part 96 of 210
The Ring programming language version 1.9 book - Part 96 of 210The Ring programming language version 1.9 book - Part 96 of 210
The Ring programming language version 1.9 book - Part 96 of 210
 
Maps
MapsMaps
Maps
 
Canvas al ajillo
Canvas al ajilloCanvas al ajillo
Canvas al ajillo
 
The Ring programming language version 1.5.1 book - Part 79 of 180
The Ring programming language version 1.5.1 book - Part 79 of 180The Ring programming language version 1.5.1 book - Part 79 of 180
The Ring programming language version 1.5.1 book - Part 79 of 180
 
Initial UI Mockup - Part 3.pdf
Initial UI Mockup - Part 3.pdfInitial UI Mockup - Part 3.pdf
Initial UI Mockup - Part 3.pdf
 
Create a java project that - Draw a circle with three random init.pdf
Create a java project that - Draw a circle with three random init.pdfCreate a java project that - Draw a circle with three random init.pdf
Create a java project that - Draw a circle with three random init.pdf
 
package chapter15;import javafx.application.Application;import j.pdf
package chapter15;import javafx.application.Application;import j.pdfpackage chapter15;import javafx.application.Application;import j.pdf
package chapter15;import javafx.application.Application;import j.pdf
 
The Ring programming language version 1.2 book - Part 60 of 84
The Ring programming language version 1.2 book - Part 60 of 84The Ring programming language version 1.2 book - Part 60 of 84
The Ring programming language version 1.2 book - Part 60 of 84
 
Creating an Uber Clone - Part V.pdf
Creating an Uber Clone - Part V.pdfCreating an Uber Clone - Part V.pdf
Creating an Uber Clone - Part V.pdf
 
The Ring programming language version 1.5.2 book - Part 80 of 181
The Ring programming language version 1.5.2 book - Part 80 of 181The Ring programming language version 1.5.2 book - Part 80 of 181
The Ring programming language version 1.5.2 book - Part 80 of 181
 
Maps - Part 3 - Transcript.pdf
Maps - Part 3 - Transcript.pdfMaps - Part 3 - Transcript.pdf
Maps - Part 3 - Transcript.pdf
 
Exploring Canvas
Exploring CanvasExploring Canvas
Exploring Canvas
 

More from ShaiAlmog1

The Duck Teaches Learn to debug from the masters. Local to production- kill ...
The Duck Teaches  Learn to debug from the masters. Local to production- kill ...The Duck Teaches  Learn to debug from the masters. Local to production- kill ...
The Duck Teaches Learn to debug from the masters. Local to production- kill ...ShaiAlmog1
 
create-netflix-clone-06-client-ui.pdf
create-netflix-clone-06-client-ui.pdfcreate-netflix-clone-06-client-ui.pdf
create-netflix-clone-06-client-ui.pdfShaiAlmog1
 
create-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdfcreate-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdfShaiAlmog1
 
create-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdfcreate-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdfShaiAlmog1
 
create-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdfcreate-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdfShaiAlmog1
 
create-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdfcreate-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdfShaiAlmog1
 
create-netflix-clone-06-client-ui_transcript.pdf
create-netflix-clone-06-client-ui_transcript.pdfcreate-netflix-clone-06-client-ui_transcript.pdf
create-netflix-clone-06-client-ui_transcript.pdfShaiAlmog1
 
create-netflix-clone-03-server.pdf
create-netflix-clone-03-server.pdfcreate-netflix-clone-03-server.pdf
create-netflix-clone-03-server.pdfShaiAlmog1
 
create-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdfcreate-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdfShaiAlmog1
 
create-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdfcreate-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdfShaiAlmog1
 
create-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdfcreate-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdfShaiAlmog1
 
create-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdfcreate-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdfShaiAlmog1
 
create-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdfcreate-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdfCreating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdfCreating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdfCreating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdfCreating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdfCreating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdfCreating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdfCreating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdfShaiAlmog1
 

More from ShaiAlmog1 (20)

The Duck Teaches Learn to debug from the masters. Local to production- kill ...
The Duck Teaches  Learn to debug from the masters. Local to production- kill ...The Duck Teaches  Learn to debug from the masters. Local to production- kill ...
The Duck Teaches Learn to debug from the masters. Local to production- kill ...
 
create-netflix-clone-06-client-ui.pdf
create-netflix-clone-06-client-ui.pdfcreate-netflix-clone-06-client-ui.pdf
create-netflix-clone-06-client-ui.pdf
 
create-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdfcreate-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdf
 
create-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdfcreate-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdf
 
create-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdfcreate-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdf
 
create-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdfcreate-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdf
 
create-netflix-clone-06-client-ui_transcript.pdf
create-netflix-clone-06-client-ui_transcript.pdfcreate-netflix-clone-06-client-ui_transcript.pdf
create-netflix-clone-06-client-ui_transcript.pdf
 
create-netflix-clone-03-server.pdf
create-netflix-clone-03-server.pdfcreate-netflix-clone-03-server.pdf
create-netflix-clone-03-server.pdf
 
create-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdfcreate-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdf
 
create-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdfcreate-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdf
 
create-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdfcreate-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdf
 
create-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdfcreate-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdf
 
create-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdfcreate-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdf
 
Creating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdfCreating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdf
 
Creating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdfCreating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdf
 
Creating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdfCreating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdf
 
Creating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdfCreating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdf
 
Creating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdfCreating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdf
 
Creating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdfCreating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdf
 
Creating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdfCreating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdf
 

Recently uploaded

Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 

Recently uploaded (20)

Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 

Creating an Uber Clone - Part XXIII.pdf

  • 1. Creating an Uber Clone - Part XXIII
  • 2. private void enterNavigationMode(final Container pinLayer, Container navigationToolbar, final Container layer, List<Coord> path, String from, String to, int duration) { pinLayer.removeAll(); navigationToolbar.setY(-navigationToolbar.getHeight()); layer.getComponentAt(1).setY(getDisplayHeight()); navigationToolbar.getParent().animateUnlayout(200, 120, () -> { if(inNavigationMode) { return; } inNavigationMode = true; callSerially(() -> { layer.removeAll(); Coord[] pathCoords = new Coord[path.size()]; path.toArray(pathCoords); MapContainer.MapObject pathObject = mc.addPath(pathCoords); BoundingBox bb = BoundingBox.create(pathCoords). extend(new BoundingBox(pathCoords[0], 0.01, 0.01)). extend(new BoundingBox(pathCoords[pathCoords.length - 1],0.01,0.01)); mc.fitBounds(bb); Component fromComponent = createNavigationTag( trimmedString(from), duration / 60); Component toComponent = createNavigationTag(trimmedString(to), -1); MapLayout.setHorizontalAlignment(fromComponent, enterNavigationMode
  • 3. private void enterNavigationMode(final Container pinLayer, Container navigationToolbar, final Container layer, List<Coord> path, String from, String to, int duration) { pinLayer.removeAll(); navigationToolbar.setY(-navigationToolbar.getHeight()); layer.getComponentAt(1).setY(getDisplayHeight()); navigationToolbar.getParent().animateUnlayout(200, 120, () -> { if(inNavigationMode) { return; } inNavigationMode = true; callSerially(() -> { layer.removeAll(); Coord[] pathCoords = new Coord[path.size()]; path.toArray(pathCoords); MapContainer.MapObject pathObject = mc.addPath(pathCoords); BoundingBox bb = BoundingBox.create(pathCoords). extend(new BoundingBox(pathCoords[0], 0.01, 0.01)). extend(new BoundingBox(pathCoords[pathCoords.length - 1],0.01,0.01)); mc.fitBounds(bb); Component fromComponent = createNavigationTag( trimmedString(from), duration / 60); Component toComponent = createNavigationTag(trimmedString(to), -1); MapLayout.setHorizontalAlignment(fromComponent, enterNavigationMode
  • 4. private void enterNavigationMode(final Container pinLayer, Container navigationToolbar, final Container layer, List<Coord> path, String from, String to, int duration) { pinLayer.removeAll(); navigationToolbar.setY(-navigationToolbar.getHeight()); layer.getComponentAt(1).setY(getDisplayHeight()); navigationToolbar.getParent().animateUnlayout(200, 120, () -> { if(inNavigationMode) { return; } inNavigationMode = true; callSerially(() -> { layer.removeAll(); Coord[] pathCoords = new Coord[path.size()]; path.toArray(pathCoords); MapContainer.MapObject pathObject = mc.addPath(pathCoords); BoundingBox bb = BoundingBox.create(pathCoords). extend(new BoundingBox(pathCoords[0], 0.01, 0.01)). extend(new BoundingBox(pathCoords[pathCoords.length - 1],0.01,0.01)); mc.fitBounds(bb); Component fromComponent = createNavigationTag( trimmedString(from), duration / 60); Component toComponent = createNavigationTag(trimmedString(to), -1); MapLayout.setHorizontalAlignment(fromComponent, enterNavigationMode
  • 5. private void enterNavigationMode(final Container pinLayer, Container navigationToolbar, final Container layer, List<Coord> path, String from, String to, int duration) { pinLayer.removeAll(); navigationToolbar.setY(-navigationToolbar.getHeight()); layer.getComponentAt(1).setY(getDisplayHeight()); navigationToolbar.getParent().animateUnlayout(200, 120, () -> { if(inNavigationMode) { return; } inNavigationMode = true; callSerially(() -> { layer.removeAll(); Coord[] pathCoords = new Coord[path.size()]; path.toArray(pathCoords); MapContainer.MapObject pathObject = mc.addPath(pathCoords); BoundingBox bb = BoundingBox.create(pathCoords). extend(new BoundingBox(pathCoords[0], 0.01, 0.01)). extend(new BoundingBox(pathCoords[pathCoords.length - 1],0.01,0.01)); mc.fitBounds(bb); Component fromComponent = createNavigationTag( trimmedString(from), duration / 60); Component toComponent = createNavigationTag(trimmedString(to), -1); MapLayout.setHorizontalAlignment(fromComponent, enterNavigationMode
  • 6. private void enterNavigationMode(final Container pinLayer, Container navigationToolbar, final Container layer, List<Coord> path, String from, String to, int duration) { pinLayer.removeAll(); navigationToolbar.setY(-navigationToolbar.getHeight()); layer.getComponentAt(1).setY(getDisplayHeight()); navigationToolbar.getParent().animateUnlayout(200, 120, () -> { if(inNavigationMode) { return; } inNavigationMode = true; callSerially(() -> { layer.removeAll(); Coord[] pathCoords = new Coord[path.size()]; path.toArray(pathCoords); MapContainer.MapObject pathObject = mc.addPath(pathCoords); BoundingBox bb = BoundingBox.create(pathCoords). extend(new BoundingBox(pathCoords[0], 0.01, 0.01)). extend(new BoundingBox(pathCoords[pathCoords.length - 1],0.01,0.01)); mc.fitBounds(bb); Component fromComponent = createNavigationTag( trimmedString(from), duration / 60); Component toComponent = createNavigationTag(trimmedString(to), -1); MapLayout.setHorizontalAlignment(fromComponent, enterNavigationMode
  • 7. Component fromComponent = createNavigationTag( trimmedString(from), duration / 60); Component toComponent = createNavigationTag(trimmedString(to), -1); MapLayout.setHorizontalAlignment(fromComponent, MapLayout.HALIGN.RIGHT); mapLayer.add(pathCoords[0], fromComponent); mapLayer.add(pathCoords[pathCoords.length - 1], toComponent); whereTo.setVisible(false); getToolbar().setVisible(false); Button back = new Button("", "TitleCommand"); FontImage.setMaterialIcon(back, FontImage.MATERIAL_ARROW_BACK); layer.add(NORTH, back); back.addActionListener(e -> exitNavigationMode(layer, fromComponent, toComponent, pathObject)); Label ride = new Label("Ride", "RideTitle"); Label taxi = new Label("Taxi", Resources.getGlobalResources(). getImage("ride.png"), "RideTitle"); taxi.setTextPosition(BOTTOM); Label separator = new Label("", "MarginSeparator"); separator.setShowEvenIfBlank(true); Button blackButton = new Button("Confirm", "BlackButton"); Container cnt = BoxLayout.encloseY(ride, taxi, separator, blackButton); cnt.setUIID("Form"); layer.add(SOUTH, cnt); enterNavigationMode
  • 8. Component fromComponent = createNavigationTag( trimmedString(from), duration / 60); Component toComponent = createNavigationTag(trimmedString(to), -1); MapLayout.setHorizontalAlignment(fromComponent, MapLayout.HALIGN.RIGHT); mapLayer.add(pathCoords[0], fromComponent); mapLayer.add(pathCoords[pathCoords.length - 1], toComponent); whereTo.setVisible(false); getToolbar().setVisible(false); Button back = new Button("", "TitleCommand"); FontImage.setMaterialIcon(back, FontImage.MATERIAL_ARROW_BACK); layer.add(NORTH, back); back.addActionListener(e -> exitNavigationMode(layer, fromComponent, toComponent, pathObject)); Label ride = new Label("Ride", "RideTitle"); Label taxi = new Label("Taxi", Resources.getGlobalResources(). getImage("ride.png"), "RideTitle"); taxi.setTextPosition(BOTTOM); Label separator = new Label("", "MarginSeparator"); separator.setShowEvenIfBlank(true); Button blackButton = new Button("Confirm", "BlackButton"); Container cnt = BoxLayout.encloseY(ride, taxi, separator, blackButton); cnt.setUIID("Form"); layer.add(SOUTH, cnt); enterNavigationMode
  • 9. Component fromComponent = createNavigationTag( trimmedString(from), duration / 60); Component toComponent = createNavigationTag(trimmedString(to), -1); MapLayout.setHorizontalAlignment(fromComponent, MapLayout.HALIGN.RIGHT); mapLayer.add(pathCoords[0], fromComponent); mapLayer.add(pathCoords[pathCoords.length - 1], toComponent); whereTo.setVisible(false); getToolbar().setVisible(false); Button back = new Button("", "TitleCommand"); FontImage.setMaterialIcon(back, FontImage.MATERIAL_ARROW_BACK); layer.add(NORTH, back); back.addActionListener(e -> exitNavigationMode(layer, fromComponent, toComponent, pathObject)); Label ride = new Label("Ride", "RideTitle"); Label taxi = new Label("Taxi", Resources.getGlobalResources(). getImage("ride.png"), "RideTitle"); taxi.setTextPosition(BOTTOM); Label separator = new Label("", "MarginSeparator"); separator.setShowEvenIfBlank(true); Button blackButton = new Button("Confirm", "BlackButton"); Container cnt = BoxLayout.encloseY(ride, taxi, separator, blackButton); cnt.setUIID("Form"); layer.add(SOUTH, cnt); enterNavigationMode
  • 10. private String trimmedString(String str) { int p = str.indexOf(','); if(p > -1) { str = str.substring(0, p); } if(str.length() > 15) { str = str.substring(0, 15); } return str; } trimmedString
  • 11. private void exitNavigationMode(final Container layer, Component fromComponent, Component toComponent, MapContainer.MapObject pathObject) { layer.removeAll(); fromComponent.remove(); toComponent.remove(); mc.removeMapObject(pathObject); getToolbar().setVisible(true); whereTo.setVisible(true); revalidate(); inNavigationMode = false; } exitNavigationMode
  • 12. RideTitle © Codename One 2017 all rights reserved
  • 13. RideTitle © Codename One 2017 all rights reserved
  • 14. RideTitle © Codename One 2017 all rights reserved
  • 15. RideTitle © Codename One 2017 all rights reserved
  • 16. RideTitle © Codename One 2017 all rights reserved
  • 17. MarginSeparator © Codename One 2017 all rights reserved
  • 18. MarginSeparator © Codename One 2017 all rights reserved
  • 19. MarginSeparator © Codename One 2017 all rights reserved
  • 20. MarginSeparator © Codename One 2017 all rights reserved
  • 21. BlackButton © Codename One 2017 all rights reserved
  • 22. BlackButton © Codename One 2017 all rights reserved
  • 23. BlackButton © Codename One 2017 all rights reserved
  • 24. BlackButton © Codename One 2017 all rights reserved
  • 25. BlackButton © Codename One 2017 all rights reserved
  • 26. BlackButton © Codename One 2017 all rights reserved