diff --git a/app/build.gradle b/app/build.gradle index 981b0ea..7ba8221 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 22 - buildToolsVersion "22.0.1" + buildToolsVersion '25.0.0' defaultConfig { applicationId "com.github.plastiv.rxautocompletesample" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index faecc39..712f0e9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,16 +1,18 @@ + package="com.github.plastiv.rxautocompletesample"> + + + android:theme="@style/AppTheme"> + android:label="@string/app_name"> diff --git a/app/src/main/java/com/github/plastiv/rxautocompletesample/domain/AddressAutocomplete.java b/app/src/main/java/com/github/plastiv/rxautocompletesample/domain/AddressAutocomplete.java index 458bf2f..68e704a 100644 --- a/app/src/main/java/com/github/plastiv/rxautocompletesample/domain/AddressAutocomplete.java +++ b/app/src/main/java/com/github/plastiv/rxautocompletesample/domain/AddressAutocomplete.java @@ -1,13 +1,11 @@ package com.github.plastiv.rxautocompletesample.domain; -import java.util.List; -import java.util.concurrent.TimeUnit; - import android.text.TextUtils; import com.github.plastiv.rxautocompletesample.googleplaces.GooglePlacesApiError; import com.github.plastiv.rxautocompletesample.googleplaces.GooglePlacesConnector; import com.github.plastiv.rxautocompletesample.googleplaces.model.AddressComponent; +import com.github.plastiv.rxautocompletesample.googleplaces.model.Geometry; import com.github.plastiv.rxautocompletesample.googleplaces.model.PlaceDetails; import com.github.plastiv.rxautocompletesample.googleplaces.model.PlaceDetailsResult; import com.github.plastiv.rxautocompletesample.googleplaces.model.Prediction; @@ -19,10 +17,12 @@ import com.github.plastiv.rxautocompletesample.storage.ContactStorage; import com.github.plastiv.rxautocompletesample.storage.ProfileStorage; +import java.util.List; +import java.util.concurrent.TimeUnit; + import rx.Observable; import rx.functions.Func1; import rx.subjects.PublishSubject; -import rx.subjects.Subject; public class AddressAutocomplete { @@ -42,15 +42,16 @@ public AddressAutocomplete(ProfileStorage profileStorage, public Observable> asObservable() { return searchQuery.asObservable() - .debounce(500, TimeUnit.MILLISECONDS) - .switchMap(new Func1>>() { - @Override public Observable> call(String s) { - return Observable.merge(contactAddress(s), - profileAddress(s), - googleAddress(s)) - .toList(); - } - }); + .debounce(500, TimeUnit.MILLISECONDS) + .switchMap(new Func1>>() { + @Override + public Observable> call(String s) { + return Observable.merge(contactAddress(s), + profileAddress(s), + googleAddress(s)) + .toList(); + } + }); } public void onQueryChange(String query) { @@ -60,36 +61,40 @@ public void onQueryChange(String query) { public Observable
contactAddress(final String search) { Observable contacts = contactStorage.getAll(); return contacts.map(new Func1() { - @Override public Address call(Contact contact) { + @Override + public Address call(Contact contact) { return contact.getAddress(); } }) - .filter(new Func1() { - @Override public Boolean call(Address address) { - if (address == null) { - return false; - } - return address.contains(search); - } - }); + .filter(new Func1() { + @Override + public Boolean call(Address address) { + if (address == null) { + return false; + } + return address.contains(search); + } + }); } public Observable
profileAddress(final String search) { Observable profile = profileStorage.get(); return profile.flatMap(new Func1>() { - @Override public Observable
call(Profile profile) { + @Override + public Observable
call(Profile profile) { return Observable.just(profile.getHomeAddress(), - profile.getWorkAddress()); + profile.getWorkAddress()); } }) - .filter(new Func1() { - @Override public Boolean call(Address address) { - if (address == null) { - return false; - } - return address.contains(search); - } - }); + .filter(new Func1() { + @Override + public Boolean call(Address address) { + if (address == null) { + return false; + } + return address.contains(search); + } + }); } public Observable
googleAddress(final String search) { @@ -100,7 +105,8 @@ public Observable
googleAddress(final String search) { return googlePlacesConnector .autocomplete(search, "country:de") .onErrorResumeNext(new Func1>() { - @Override public Observable call(Throwable throwable) { + @Override + public Observable call(Throwable throwable) { if (throwable instanceof GooglePlacesApiError) { GooglePlacesApiError error = (GooglePlacesApiError) throwable; if (error.getStatusCode() == StatusCode.InvalidRequest) { @@ -113,18 +119,21 @@ public Observable
googleAddress(final String search) { } }) .flatMap(new Func1>() { - @Override public Observable call(PredictionResult predictionResult) { + @Override + public Observable call(PredictionResult predictionResult) { return Observable.from(predictionResult.getPredictions()); } }) .flatMap(new Func1>() { - @Override public Observable call(Prediction prediction) { + @Override + public Observable call(Prediction prediction) { return googlePlacesConnector.details(prediction.getPlaceId()); } }) .onErrorResumeNext(Observable.empty()) .map(new Func1() { - @Override public Address call(PlaceDetailsResult placeDetailsResult) { + @Override + public Address call(PlaceDetailsResult placeDetailsResult) { PlaceDetails details = placeDetailsResult.getResult(); return convert(details); } @@ -134,6 +143,7 @@ public Observable
googleAddress(final String search) { public static Address convert(PlaceDetails placeDetails) { Address.Builder builder = new Address.Builder(); List addressComponents = placeDetails.getAddressComponents(); + Geometry geometry = placeDetails.getGeometry(); for (AddressComponent component : addressComponents) { if (component.isCountry()) { builder.country(component.getLongName()); @@ -147,6 +157,8 @@ public static Address convert(PlaceDetails placeDetails) { builder.houseNumber(component.getLongName()); } } + builder.latitude(geometry.getLocation().getLat()); + builder.longitude(geometry.getLocation().getLng()); return builder.build(); } } diff --git a/build.gradle b/build.gradle index 25fad9a..072e693 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.1.3' + classpath 'com.android.tools.build:gradle:2.3.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0c71e76..8749f4c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Apr 10 15:27:10 PDT 2013 +#Sat Apr 15 23:17:30 IST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip