SlideShare a Scribd company logo
Creating an Uber Clone - Part XIX
Search UI
✦Swipe
✦Completion
✦Map location picking
© Codename One 2017 all rights reserved
Search Completion
© Codename One 2017 all rights reserved
public class AutoCompleteAddressInput extends TextField {
private final Container layers;
private int firstX = -1, firstY = -1;
private boolean dragStarted;
private CompletionContainer completion;
private ActionListener<ActionEvent> dragListener, releaseListener;
private Location currentLocation;
private boolean blockChangeEvent;
public AutoCompleteAddressInput(String value, String hint,
Container layers, CompletionContainer completion) {
super(value, hint, 40, TextField.ANY);
this.completion = completion;
this.layers = layers;
getHintLabel().setUIID("FromToTextFieldHint");
setUIID("FromToTextField");
addDataChangedListener((i, ii) -> {
if(blockChangeEvent) {
return;
}
if(!getText().equals(value)) {
completion.updateCompletion(getText(), this);
}
AutoCompleteAddressInput
public class AutoCompleteAddressInput extends TextField {
private final Container layers;
private int firstX = -1, firstY = -1;
private boolean dragStarted;
private CompletionContainer completion;
private ActionListener<ActionEvent> dragListener, releaseListener;
private Location currentLocation;
private boolean blockChangeEvent;
public AutoCompleteAddressInput(String value, String hint,
Container layers, CompletionContainer completion) {
super(value, hint, 40, TextField.ANY);
this.completion = completion;
this.layers = layers;
getHintLabel().setUIID("FromToTextFieldHint");
setUIID("FromToTextField");
addDataChangedListener((i, ii) -> {
if(blockChangeEvent) {
return;
}
if(!getText().equals(value)) {
completion.updateCompletion(getText(), this);
}
AutoCompleteAddressInput
public class AutoCompleteAddressInput extends TextField {
private final Container layers;
private int firstX = -1, firstY = -1;
private boolean dragStarted;
private CompletionContainer completion;
private ActionListener<ActionEvent> dragListener, releaseListener;
private Location currentLocation;
private boolean blockChangeEvent;
public AutoCompleteAddressInput(String value, String hint,
Container layers, CompletionContainer completion) {
super(value, hint, 40, TextField.ANY);
this.completion = completion;
this.layers = layers;
getHintLabel().setUIID("FromToTextFieldHint");
setUIID("FromToTextField");
addDataChangedListener((i, ii) -> {
if(blockChangeEvent) {
return;
}
if(!getText().equals(value)) {
completion.updateCompletion(getText(), this);
}
AutoCompleteAddressInput
addDataChangedListener((i, ii) -> {
if(blockChangeEvent) {
return;
}
if(!getText().equals(value)) {
completion.updateCompletion(getText(), this);
}
});
}
public void setTextNoEvent(String text) {
blockChangeEvent = true;
setText(text);
blockChangeEvent = false;
}
@Override
protected void focusGained() {
completion.initCompletionBar();
}
@Override
protected void deinitialize() {
AutoCompleteAddressInput
protected void deinitialize() {
if(dragListener != null) {
Form f = getComponentForm();
f.removePointerDraggedListener(dragListener);
f.removePointerReleasedListener(dragListener);
}
super.deinitialize();
}
@Override
protected void initComponent() {
super.initComponent();
if(dragListener == null) {
dragListener = e -> {
Component cmp = layers.getComponentAt(1);
boolean dragUp = layers.getLayout().
getComponentConstraint(cmp).equals(SOUTH);
if(dragStarted) {
e.consume();
cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS);
if(dragUp) {
cmp.setPreferredSize(new Dimension(getDisplayWidth(),
firstY - e.getY() + getDisplayHeight() / 8));
AutoCompleteAddressInput
protected void deinitialize() {
if(dragListener != null) {
Form f = getComponentForm();
f.removePointerDraggedListener(dragListener);
f.removePointerReleasedListener(dragListener);
}
super.deinitialize();
}
@Override
protected void initComponent() {
super.initComponent();
if(dragListener == null) {
dragListener = e -> {
Component cmp = layers.getComponentAt(1);
boolean dragUp = layers.getLayout().
getComponentConstraint(cmp).equals(SOUTH);
if(dragStarted) {
e.consume();
cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS);
if(dragUp) {
cmp.setPreferredSize(new Dimension(getDisplayWidth(),
firstY - e.getY() + getDisplayHeight() / 8));
AutoCompleteAddressInput
protected void deinitialize() {
if(dragListener != null) {
Form f = getComponentForm();
f.removePointerDraggedListener(dragListener);
f.removePointerReleasedListener(dragListener);
}
super.deinitialize();
}
@Override
protected void initComponent() {
super.initComponent();
if(dragListener == null) {
dragListener = e -> {
Component cmp = layers.getComponentAt(1);
boolean dragUp = layers.getLayout().
getComponentConstraint(cmp).equals(SOUTH);
if(dragStarted) {
e.consume();
cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS);
if(dragUp) {
cmp.setPreferredSize(new Dimension(getDisplayWidth(),
firstY - e.getY() + getDisplayHeight() / 8));
AutoCompleteAddressInput
protected void deinitialize() {
if(dragListener != null) {
Form f = getComponentForm();
f.removePointerDraggedListener(dragListener);
f.removePointerReleasedListener(dragListener);
}
super.deinitialize();
}
@Override
protected void initComponent() {
super.initComponent();
if(dragListener == null) {
dragListener = e -> {
Component cmp = layers.getComponentAt(1);
boolean dragUp = layers.getLayout().
getComponentConstraint(cmp).equals(SOUTH);
if(dragStarted) {
e.consume();
cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS);
if(dragUp) {
cmp.setPreferredSize(new Dimension(getDisplayWidth(),
firstY - e.getY() + getDisplayHeight() / 8));
AutoCompleteAddressInput
protected void deinitialize() {
if(dragListener != null) {
Form f = getComponentForm();
f.removePointerDraggedListener(dragListener);
f.removePointerReleasedListener(dragListener);
}
super.deinitialize();
}
@Override
protected void initComponent() {
super.initComponent();
if(dragListener == null) {
dragListener = e -> {
Component cmp = layers.getComponentAt(1);
boolean dragUp = layers.getLayout().
getComponentConstraint(cmp).equals(SOUTH);
if(dragStarted) {
e.consume();
cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS);
if(dragUp) {
cmp.setPreferredSize(new Dimension(getDisplayWidth(),
firstY - e.getY() + getDisplayHeight() / 8));
AutoCompleteAddressInput
protected void deinitialize() {
if(dragListener != null) {
Form f = getComponentForm();
f.removePointerDraggedListener(dragListener);
f.removePointerReleasedListener(dragListener);
}
super.deinitialize();
}
@Override
protected void initComponent() {
super.initComponent();
if(dragListener == null) {
dragListener = e -> {
Component cmp = layers.getComponentAt(1);
boolean dragUp = layers.getLayout().
getComponentConstraint(cmp).equals(SOUTH);
if(dragStarted) {
e.consume();
cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS);
if(dragUp) {
cmp.setPreferredSize(new Dimension(getDisplayWidth(),
firstY - e.getY() + getDisplayHeight() / 8));
AutoCompleteAddressInput
cmp.setPreferredSize(new Dimension(getDisplayWidth(),
firstY - e.getY() + getDisplayHeight() / 8));
} else {
cmp.getUnselectedStyle().setMarginTop(
Math.max(0, e.getY() - firstY));
}
layers.revalidate();
} else {
Component draggedCmp =
getComponentForm().getComponentAt(e.getX(), e.getY());
if(!draggedCmp.isChildOf((Container)cmp)) {
return;
}
if(firstX == -1) {
firstX = e.getX();
firstY = e.getY();
}
if((!dragUp && e.getY() - firstY > convertToPixels(2)) ||
(dragUp && firstY - e.getY() > convertToPixels(2))) {
e.consume();
dragStarted = true;
}
AutoCompleteAddressInput
cmp.setPreferredSize(new Dimension(getDisplayWidth(),
firstY - e.getY() + getDisplayHeight() / 8));
} else {
cmp.getUnselectedStyle().setMarginTop(
Math.max(0, e.getY() - firstY));
}
layers.revalidate();
} else {
Component draggedCmp =
getComponentForm().getComponentAt(e.getX(), e.getY());
if(!draggedCmp.isChildOf((Container)cmp)) {
return;
}
if(firstX == -1) {
firstX = e.getX();
firstY = e.getY();
}
if((!dragUp && e.getY() - firstY > convertToPixels(2)) ||
(dragUp && firstY - e.getY() > convertToPixels(2))) {
e.consume();
dragStarted = true;
}
AutoCompleteAddressInput
(dragUp && firstY - e.getY() > convertToPixels(2))) {
e.consume();
dragStarted = true;
}
}
};
getComponentForm().addPointerDraggedListener(dragListener);
releaseListener = e -> {
if(dragStarted) {
e.consume();
Component cmp = layers.getComponentAt(1);
boolean dragUp = layers.getLayout().
getComponentConstraint(cmp).equals(SOUTH);
cmp.remove();
cmp.setUIID(cmp.getUIID());
boolean animateDown;
if(dragUp) {
animateDown = !(firstY - e.getY() > convertToPixels(8));
} else {
animateDown = e.getY() - firstY > convertToPixels(8);
}
if(animateDown) {
layers.add(SOUTH, cmp);
AutoCompleteAddressInput
if(dragUp) {
animateDown = !(firstY - e.getY() > convertToPixels(8));
} else {
animateDown = e.getY() - firstY > convertToPixels(8);
}
if(animateDown) {
layers.add(SOUTH, cmp);
cmp.setPreferredSize(
new Dimension(getDisplayWidth(), getDisplayHeight() / 8));
Style s = cmp.getUnselectedStyle();
s.setMarginUnit(Style.UNIT_TYPE_DIPS);
s.setMarginLeft(3);
s.setMarginRight(3);
} else {
layers.add(CENTER, cmp);
cmp.setPreferredSize(null);
}
layers.animateLayout(200);
firstX = -1;
firstY = -1;
dragStarted = false;
}
};
AutoCompleteAddressInput
s.setMarginRight(3);
} else {
layers.add(CENTER, cmp);
cmp.setPreferredSize(null);
}
layers.animateLayout(200);
firstX = -1;
firstY = -1;
dragStarted = false;
}
};
getComponentForm().addPointerReleasedListener(releaseListener);
}
}
public Location getCurrentLocation() {
return currentLocation;
}
public void setCurrentLocation(Location currentLocation) {
this.currentLocation = currentLocation;
}
}
AutoCompleteAddressInput

More Related Content

PDF
Creating an Uber Clone - Part XIX - Transcript.pdf
PDF
Import java.awt.; Import acm.program.; Import acm.graphics.;.pdf
PDF
Creating an Uber Clone - Part VIII.pdf
PDF
I wanted to change the cloudsrectangles into an actuall image it do.pdf
PPT
Mobile Game and Application with J2ME
PPT
Mobile Game and Application with J2ME - Collision Detection
PPT
PDF
Please implement in Java. comments would be appreciated 5.pdf
Creating an Uber Clone - Part XIX - Transcript.pdf
Import java.awt.; Import acm.program.; Import acm.graphics.;.pdf
Creating an Uber Clone - Part VIII.pdf
I wanted to change the cloudsrectangles into an actuall image it do.pdf
Mobile Game and Application with J2ME
Mobile Game and Application with J2ME - Collision Detection
Please implement in Java. comments would be appreciated 5.pdf

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

DOCX
Player x 0 y ga.docx
PDF
DOCX
Applications
PDF
Creating an Uber Clone - Part VIII - Transcript.pdf
PDF
How to Clone Flappy Bird in Swift
DOCX
Write a program that reads a graph from a file and determines whether.docx
PDF
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
PDF
Reactive programming with RxJS - ByteConf 2018
PDF
Migrating from Flux to Redux. Why and how.
PDF
C++ Searching & Sorting5. Sort the following list using the select.pdf
PPTX
google play service 7.8 & new tech in M
PDF
Creating an Uber Clone - Part XXIV.pdf
PDF
[C++ gui programming with qt4] chap9
KEY
Blocks+gcd入門
PDF
TypeScript Introduction
PDF
Bindings: the zen of montage
PDF
Creating custom views
PPT
csc 208
PDF
Go: It's Not Just For Google
PDF
Creating an Uber Clone - Part IX.pdf
Player x 0 y ga.docx
Applications
Creating an Uber Clone - Part VIII - Transcript.pdf
How to Clone Flappy Bird in Swift
Write a program that reads a graph from a file and determines whether.docx
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
Reactive programming with RxJS - ByteConf 2018
Migrating from Flux to Redux. Why and how.
C++ Searching & Sorting5. Sort the following list using the select.pdf
google play service 7.8 & new tech in M
Creating an Uber Clone - Part XXIV.pdf
[C++ gui programming with qt4] chap9
Blocks+gcd入門
TypeScript Introduction
Bindings: the zen of montage
Creating custom views
csc 208
Go: It's Not Just For Google
Creating an Uber Clone - Part IX.pdf
Ad

More from ShaiAlmog1 (20)

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

Recently uploaded (20)

PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Machine learning based COVID-19 study performance prediction
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
sap open course for s4hana steps from ECC to s4
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPT
Teaching material agriculture food technology
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
Cloud computing and distributed systems.
PDF
Empathic Computing: Creating Shared Understanding
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Electronic commerce courselecture one. Pdf
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Review of recent advances in non-invasive hemoglobin estimation
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Machine learning based COVID-19 study performance prediction
Agricultural_Statistics_at_a_Glance_2022_0.pdf
sap open course for s4hana steps from ECC to s4
The AUB Centre for AI in Media Proposal.docx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Spectral efficient network and resource selection model in 5G networks
20250228 LYD VKU AI Blended-Learning.pptx
Teaching material agriculture food technology
Unlocking AI with Model Context Protocol (MCP)
A comparative analysis of optical character recognition models for extracting...
Network Security Unit 5.pdf for BCA BBA.
Cloud computing and distributed systems.
Empathic Computing: Creating Shared Understanding
Building Integrated photovoltaic BIPV_UPV.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Electronic commerce courselecture one. Pdf
MYSQL Presentation for SQL database connectivity
Review of recent advances in non-invasive hemoglobin estimation

Creating an Uber Clone - Part XIX.pdf

  • 1. Creating an Uber Clone - Part XIX
  • 2. Search UI ✦Swipe ✦Completion ✦Map location picking © Codename One 2017 all rights reserved
  • 3. Search Completion © Codename One 2017 all rights reserved
  • 4. public class AutoCompleteAddressInput extends TextField { private final Container layers; private int firstX = -1, firstY = -1; private boolean dragStarted; private CompletionContainer completion; private ActionListener<ActionEvent> dragListener, releaseListener; private Location currentLocation; private boolean blockChangeEvent; public AutoCompleteAddressInput(String value, String hint, Container layers, CompletionContainer completion) { super(value, hint, 40, TextField.ANY); this.completion = completion; this.layers = layers; getHintLabel().setUIID("FromToTextFieldHint"); setUIID("FromToTextField"); addDataChangedListener((i, ii) -> { if(blockChangeEvent) { return; } if(!getText().equals(value)) { completion.updateCompletion(getText(), this); } AutoCompleteAddressInput
  • 5. public class AutoCompleteAddressInput extends TextField { private final Container layers; private int firstX = -1, firstY = -1; private boolean dragStarted; private CompletionContainer completion; private ActionListener<ActionEvent> dragListener, releaseListener; private Location currentLocation; private boolean blockChangeEvent; public AutoCompleteAddressInput(String value, String hint, Container layers, CompletionContainer completion) { super(value, hint, 40, TextField.ANY); this.completion = completion; this.layers = layers; getHintLabel().setUIID("FromToTextFieldHint"); setUIID("FromToTextField"); addDataChangedListener((i, ii) -> { if(blockChangeEvent) { return; } if(!getText().equals(value)) { completion.updateCompletion(getText(), this); } AutoCompleteAddressInput
  • 6. public class AutoCompleteAddressInput extends TextField { private final Container layers; private int firstX = -1, firstY = -1; private boolean dragStarted; private CompletionContainer completion; private ActionListener<ActionEvent> dragListener, releaseListener; private Location currentLocation; private boolean blockChangeEvent; public AutoCompleteAddressInput(String value, String hint, Container layers, CompletionContainer completion) { super(value, hint, 40, TextField.ANY); this.completion = completion; this.layers = layers; getHintLabel().setUIID("FromToTextFieldHint"); setUIID("FromToTextField"); addDataChangedListener((i, ii) -> { if(blockChangeEvent) { return; } if(!getText().equals(value)) { completion.updateCompletion(getText(), this); } AutoCompleteAddressInput
  • 7. addDataChangedListener((i, ii) -> { if(blockChangeEvent) { return; } if(!getText().equals(value)) { completion.updateCompletion(getText(), this); } }); } public void setTextNoEvent(String text) { blockChangeEvent = true; setText(text); blockChangeEvent = false; } @Override protected void focusGained() { completion.initCompletionBar(); } @Override protected void deinitialize() { AutoCompleteAddressInput
  • 8. protected void deinitialize() { if(dragListener != null) { Form f = getComponentForm(); f.removePointerDraggedListener(dragListener); f.removePointerReleasedListener(dragListener); } super.deinitialize(); } @Override protected void initComponent() { super.initComponent(); if(dragListener == null) { dragListener = e -> { Component cmp = layers.getComponentAt(1); boolean dragUp = layers.getLayout(). getComponentConstraint(cmp).equals(SOUTH); if(dragStarted) { e.consume(); cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS); if(dragUp) { cmp.setPreferredSize(new Dimension(getDisplayWidth(), firstY - e.getY() + getDisplayHeight() / 8)); AutoCompleteAddressInput
  • 9. protected void deinitialize() { if(dragListener != null) { Form f = getComponentForm(); f.removePointerDraggedListener(dragListener); f.removePointerReleasedListener(dragListener); } super.deinitialize(); } @Override protected void initComponent() { super.initComponent(); if(dragListener == null) { dragListener = e -> { Component cmp = layers.getComponentAt(1); boolean dragUp = layers.getLayout(). getComponentConstraint(cmp).equals(SOUTH); if(dragStarted) { e.consume(); cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS); if(dragUp) { cmp.setPreferredSize(new Dimension(getDisplayWidth(), firstY - e.getY() + getDisplayHeight() / 8)); AutoCompleteAddressInput
  • 10. protected void deinitialize() { if(dragListener != null) { Form f = getComponentForm(); f.removePointerDraggedListener(dragListener); f.removePointerReleasedListener(dragListener); } super.deinitialize(); } @Override protected void initComponent() { super.initComponent(); if(dragListener == null) { dragListener = e -> { Component cmp = layers.getComponentAt(1); boolean dragUp = layers.getLayout(). getComponentConstraint(cmp).equals(SOUTH); if(dragStarted) { e.consume(); cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS); if(dragUp) { cmp.setPreferredSize(new Dimension(getDisplayWidth(), firstY - e.getY() + getDisplayHeight() / 8)); AutoCompleteAddressInput
  • 11. protected void deinitialize() { if(dragListener != null) { Form f = getComponentForm(); f.removePointerDraggedListener(dragListener); f.removePointerReleasedListener(dragListener); } super.deinitialize(); } @Override protected void initComponent() { super.initComponent(); if(dragListener == null) { dragListener = e -> { Component cmp = layers.getComponentAt(1); boolean dragUp = layers.getLayout(). getComponentConstraint(cmp).equals(SOUTH); if(dragStarted) { e.consume(); cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS); if(dragUp) { cmp.setPreferredSize(new Dimension(getDisplayWidth(), firstY - e.getY() + getDisplayHeight() / 8)); AutoCompleteAddressInput
  • 12. protected void deinitialize() { if(dragListener != null) { Form f = getComponentForm(); f.removePointerDraggedListener(dragListener); f.removePointerReleasedListener(dragListener); } super.deinitialize(); } @Override protected void initComponent() { super.initComponent(); if(dragListener == null) { dragListener = e -> { Component cmp = layers.getComponentAt(1); boolean dragUp = layers.getLayout(). getComponentConstraint(cmp).equals(SOUTH); if(dragStarted) { e.consume(); cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS); if(dragUp) { cmp.setPreferredSize(new Dimension(getDisplayWidth(), firstY - e.getY() + getDisplayHeight() / 8)); AutoCompleteAddressInput
  • 13. protected void deinitialize() { if(dragListener != null) { Form f = getComponentForm(); f.removePointerDraggedListener(dragListener); f.removePointerReleasedListener(dragListener); } super.deinitialize(); } @Override protected void initComponent() { super.initComponent(); if(dragListener == null) { dragListener = e -> { Component cmp = layers.getComponentAt(1); boolean dragUp = layers.getLayout(). getComponentConstraint(cmp).equals(SOUTH); if(dragStarted) { e.consume(); cmp.getUnselectedStyle().setMarginUnit(Style.UNIT_TYPE_PIXELS); if(dragUp) { cmp.setPreferredSize(new Dimension(getDisplayWidth(), firstY - e.getY() + getDisplayHeight() / 8)); AutoCompleteAddressInput
  • 14. cmp.setPreferredSize(new Dimension(getDisplayWidth(), firstY - e.getY() + getDisplayHeight() / 8)); } else { cmp.getUnselectedStyle().setMarginTop( Math.max(0, e.getY() - firstY)); } layers.revalidate(); } else { Component draggedCmp = getComponentForm().getComponentAt(e.getX(), e.getY()); if(!draggedCmp.isChildOf((Container)cmp)) { return; } if(firstX == -1) { firstX = e.getX(); firstY = e.getY(); } if((!dragUp && e.getY() - firstY > convertToPixels(2)) || (dragUp && firstY - e.getY() > convertToPixels(2))) { e.consume(); dragStarted = true; } AutoCompleteAddressInput
  • 15. cmp.setPreferredSize(new Dimension(getDisplayWidth(), firstY - e.getY() + getDisplayHeight() / 8)); } else { cmp.getUnselectedStyle().setMarginTop( Math.max(0, e.getY() - firstY)); } layers.revalidate(); } else { Component draggedCmp = getComponentForm().getComponentAt(e.getX(), e.getY()); if(!draggedCmp.isChildOf((Container)cmp)) { return; } if(firstX == -1) { firstX = e.getX(); firstY = e.getY(); } if((!dragUp && e.getY() - firstY > convertToPixels(2)) || (dragUp && firstY - e.getY() > convertToPixels(2))) { e.consume(); dragStarted = true; } AutoCompleteAddressInput
  • 16. (dragUp && firstY - e.getY() > convertToPixels(2))) { e.consume(); dragStarted = true; } } }; getComponentForm().addPointerDraggedListener(dragListener); releaseListener = e -> { if(dragStarted) { e.consume(); Component cmp = layers.getComponentAt(1); boolean dragUp = layers.getLayout(). getComponentConstraint(cmp).equals(SOUTH); cmp.remove(); cmp.setUIID(cmp.getUIID()); boolean animateDown; if(dragUp) { animateDown = !(firstY - e.getY() > convertToPixels(8)); } else { animateDown = e.getY() - firstY > convertToPixels(8); } if(animateDown) { layers.add(SOUTH, cmp); AutoCompleteAddressInput
  • 17. if(dragUp) { animateDown = !(firstY - e.getY() > convertToPixels(8)); } else { animateDown = e.getY() - firstY > convertToPixels(8); } if(animateDown) { layers.add(SOUTH, cmp); cmp.setPreferredSize( new Dimension(getDisplayWidth(), getDisplayHeight() / 8)); Style s = cmp.getUnselectedStyle(); s.setMarginUnit(Style.UNIT_TYPE_DIPS); s.setMarginLeft(3); s.setMarginRight(3); } else { layers.add(CENTER, cmp); cmp.setPreferredSize(null); } layers.animateLayout(200); firstX = -1; firstY = -1; dragStarted = false; } }; AutoCompleteAddressInput
  • 18. s.setMarginRight(3); } else { layers.add(CENTER, cmp); cmp.setPreferredSize(null); } layers.animateLayout(200); firstX = -1; firstY = -1; dragStarted = false; } }; getComponentForm().addPointerReleasedListener(releaseListener); } } public Location getCurrentLocation() { return currentLocation; } public void setCurrentLocation(Location currentLocation) { this.currentLocation = currentLocation; } } AutoCompleteAddressInput