Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.raywenderlich.where2go;
- import android.annotation.SuppressLint;
- import android.location.Location;
- import android.os.Bundle;
- import android.support.annotation.Nullable;
- import android.support.constraint.ConstraintLayout;
- import android.support.constraint.ConstraintSet;
- import android.support.design.widget.FloatingActionButton;
- import android.support.v7.app.AppCompatActivity;
- import android.util.TypedValue;
- import android.view.View;
- import android.widget.ProgressBar;
- import android.widget.RelativeLayout;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.mapbox.api.directions.v5.DirectionsCriteria;
- import com.mapbox.api.directions.v5.models.BannerInstructions;
- import com.mapbox.api.directions.v5.models.DirectionsResponse;
- import com.mapbox.api.directions.v5.models.DirectionsRoute;
- import com.mapbox.geojson.Point;
- import com.mapbox.mapboxsdk.annotations.Icon;
- import com.mapbox.mapboxsdk.annotations.IconFactory;
- import com.mapbox.mapboxsdk.annotations.Marker;
- import com.mapbox.mapboxsdk.annotations.MarkerOptions;
- import com.mapbox.mapboxsdk.camera.CameraPosition;
- import com.mapbox.mapboxsdk.geometry.LatLng;
- import com.mapbox.services.android.navigation.ui.v5.NavigationView;
- import com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions;
- import com.mapbox.services.android.navigation.ui.v5.OnNavigationReadyCallback;
- import com.mapbox.services.android.navigation.ui.v5.listeners.BannerInstructionsListener;
- import com.mapbox.services.android.navigation.ui.v5.listeners.NavigationListener;
- import com.mapbox.services.android.navigation.ui.v5.listeners.SpeechAnnouncementListener;
- import com.mapbox.services.android.navigation.ui.v5.voice.SpeechAnnouncement;
- import com.mapbox.services.android.navigation.v5.milestone.Milestone;
- import com.mapbox.services.android.navigation.v5.milestone.MilestoneEventListener;
- import com.mapbox.services.android.navigation.v5.milestone.RouteMilestone;
- import com.mapbox.services.android.navigation.v5.milestone.Trigger;
- import com.mapbox.services.android.navigation.v5.milestone.TriggerProperty;
- import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute;
- import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener;
- import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
- import java.util.ArrayList;
- import java.util.List;
- import retrofit2.Call;
- import retrofit2.Callback;
- import retrofit2.Response;
- import static com.mapbox.services.android.navigation.v5.navigation.NavigationConstants.STEP_MANEUVER_TYPE_ARRIVE;
- public class EndNavigationActivity extends AppCompatActivity implements OnNavigationReadyCallback, NavigationListener,
- Callback<DirectionsResponse>, ProgressChangeListener, MilestoneEventListener, BannerInstructionsListener, SpeechAnnouncementListener {
- private NavigationView navigationView;
- private ProgressBar loading;
- private TextView message;
- private FloatingActionButton launchNavigationFab;
- private Point origin = Point.fromLngLat(21.4390307, 41.983695);
- private Point pickup = Point.fromLngLat(21.4385734, 41.9842733);
- // private Point middlePickup = Point.fromLngLat(-122.428604, 37.763559);
- private Point destination = Point.fromLngLat(21.4379148, 41.9853789);
- private DirectionsRoute route;
- private boolean paellaPickedUp = false;
- private Marker paella;
- private boolean isNavigationRunning;
- private int ace = 0;
- private RelativeLayout endNavigationLayout;
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- setTheme(R.style.Theme_AppCompat_NoActionBar);
- super.onCreate(savedInstanceState);
- CameraPosition initialPosition = new CameraPosition.Builder()
- .target(new LatLng(41.983695, 21.4390307))
- .zoom(15)
- .build();
- initializeViews(savedInstanceState);
- // navigationView.initialize(this,initialPosition);
- navigationView.initialize(this);
- launchNavigationFab.setOnClickListener(v -> launchNavigation());
- updateLoadingTo(true);
- }
- @Override
- public void onNavigationReady(boolean isRunning) {
- isNavigationRunning = isRunning;
- // navigationView.addMarker(MarkerOptions().setTitle("I'm a marker :]").setSnippet("This is a snippet about this marker that will show up here").position(point))
- // paella = navigationView.retrieveNavigationMapboxMap().retrieveMap().addMarker(new MarkerOptions()
- // .position(new LatLng(41.983695, 21.4390307)));
- fetchRoute();
- updateLoadingTo(false);
- }
- @SuppressLint("RestrictedApi")
- @Override
- public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
- if (validRouteResponse(response)) {
- updateLoadingTo(false);
- message.setText("Launch Navigation");
- launchNavigationFab.setVisibility(View.VISIBLE);
- launchNavigationFab.show();
- // route = response.body().routes().get(0);
- if (isNavigationRunning) {
- launchNavigation();
- }
- // route = Engine.INSTANCE.getRoute();
- // for (int i=0 ;i< route.legs().size();i++){
- // if(route.legs().get(i).duration()==0.0){
- // route.legs().remove(i);
- // }
- // }
- launchNavigation();
- }
- }
- @Override
- public void onFailure(Call<DirectionsResponse> call, Throwable throwable) {
- }
- @Override
- public void onProgressChange(Location location, RouteProgress routeProgress) {
- boolean isCurrentStepArrival = routeProgress.currentLegProgress().currentStep().maneuver().type()
- .contains(STEP_MANEUVER_TYPE_ARRIVE);
- if (isCurrentStepArrival && !paellaPickedUp) {
- updateUiDelivering();
- } else if (isCurrentStepArrival && paellaPickedUp) {
- updateUiDelivered();
- }
- }
- @Override
- public void onCancelNavigation() {
- navigationView.stopNavigation();
- updateUiNavigationFinished();
- }
- @Override
- public void onNavigationFinished() {
- Toast.makeText(this, "FINISHED", Toast.LENGTH_LONG).show();
- }
- @Override
- public void onNavigationRunning() {
- }
- private void fetchRoute() {
- // NavigationRoute builder = NavigationRoute.builder(this)
- // .accessToken("pk.eyJ1IjoibWFuZXYxNSIsImEiOiJjaWgwazg1a2Mwd2txdnFtM3p1dnNvbjJkIn0.fvNagTH12eCx2IwmoDdgRw")
- // .origin(origin)
- // // .addWaypoint(pickup)
- //// .addWaypoint(middlePickup)
- // .destination(destination)
- // // .addWaypointIndices(0, 2, 3)
- // .alternatives(true)
- // .voiceUnits(DirectionsCriteria.METRIC)
- // .build();
- // builder.getRoute(this);
- route = Engine.INSTANCE.getRoute();
- for (int i = 0; i < route.legs().size(); i++) {
- if (route.legs().get(i).duration() == 0.0) {
- route.legs().remove(i);
- }
- // if (i < 10) {
- //// route.legs().get(i).steps().get(0).maneuver().instruction().contentEquals("");
- //// route.legs().get(i).steps().get(1).maneuver().instruction().contentEquals("");
- // }
- // if(i>2 && i< 20)
- // {
- // route.legs().remove(i);
- // }
- }
- for (int i = 0; i < route.legs().size(); i++) {
- if (i > 0 && i!=route.legs().size()-1) {
- route.legs().get(0).steps().addAll(route.legs().get(i).steps());
- // route.legs().remove(i);
- }
- }
- for (int i = route.legs().size()-1; i > 0; i--) {
- if (i > 0 && i!=route.legs().size()-1) {
- // route.legs().get(0).steps().addAll(route.legs().get(i).steps());
- route.legs().remove(i);
- }
- }
- //route.legs().get(1).steps().remove(1);
- // for (int i = 0; i < route.routeOptions().coordinates().size(); i++) {
- // if (route.routeOptions().coordinates().get(i).latitude() == route.routeOptions().coordinates().get(i + 1).latitude()) {
- // route.routeOptions().coordinates().remove(i);
- // }
- // }
- launchNavigation();
- updateLoadingTo(false);
- }
- private void launchNavigation() {
- launchNavigationFab.hide();
- // drawPaella();
- navigationView.setVisibility(View.VISIBLE);
- // int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics());
- // message.getLayoutParams().height = height;
- // ConstraintSet constraintSet = new ConstraintSet();
- // constraintSet.clone(endNavigationLayout);
- // constraintSet.connect(R.id.message, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, 0);
- // constraintSet.connect(R.id.message, ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END, 0);
- // constraintSet.connect(R.id.message, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START, 0);
- // constraintSet.applyTo(endNavigationLayout);
- List<Milestone> list = new ArrayList();
- list.add(new RouteMilestone.Builder()
- .setIdentifier(1001)
- .setTrigger(
- Trigger.all(
- Trigger.lt(TriggerProperty.LAST_LEG, 3), Trigger.gt(TriggerProperty.STEP_DISTANCE_TOTAL_METERS, 200))).build()
- );
- NavigationViewOptions.Builder options = NavigationViewOptions.builder()
- .navigationListener(this)
- .progressChangeListener(this)
- // .milestoneEventListener(this)
- .directionsRoute(route)
- .speechAnnouncementListener(this)
- .bannerInstructionsListener(this)
- .milestones(list)
- .directionsProfile(DirectionsCriteria.PROFILE_CYCLING)
- .shouldSimulateRoute(true);
- navigationView.startNavigation(options.build());
- updateUiPickingUp();
- }
- private void drawPaella() {
- Icon paellaIcon = IconFactory.getInstance(this).fromResource(R.drawable.paella_icon);
- paella = navigationView.retrieveNavigationMapboxMap().retrieveMap().addMarker(new MarkerOptions()
- .position(new LatLng(41.9842733, 21.4385734))
- .icon(paellaIcon)
- );
- }
- private void initializeViews(@Nullable Bundle savedInstanceState) {
- setContentView(R.layout.activity_end_navigation);
- endNavigationLayout = findViewById(R.id.endNavigationLayout);
- navigationView = findViewById(R.id.navigationView);
- loading = findViewById(R.id.loading);
- message = findViewById(R.id.message);
- launchNavigationFab = findViewById(R.id.launchNavigation);
- navigationView.onCreate(savedInstanceState);
- }
- private void updateLoadingTo(boolean isVisible) {
- if (isVisible) {
- loading.setVisibility(View.VISIBLE);
- } else {
- loading.setVisibility(View.INVISIBLE);
- }
- }
- private boolean validRouteResponse(Response<DirectionsResponse> response) {
- return response.body() != null && !response.body().routes().isEmpty();
- }
- private void updateUiPickingUp() {
- message.setText("Picking the paella up...");
- }
- private void updateUiDelivering() {
- paellaPickedUp = true;
- message.setText("Delivering...");
- }
- private void updateUiDelivered() {
- message.setText("Delicious paella delivered!");
- }
- private void updateUiNavigationFinished() {
- // navigationView.retrieveNavigationMapboxMap().retrieveMap().removeMarker(paella);
- navigationView.setVisibility(View.GONE);
- message.setText("Launch Navigation");
- // message.setLayoutParams(new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT,
- // ConstraintLayout.LayoutParams.MATCH_PARENT));
- launchNavigationFab.show();
- }
- @Override
- public void onStart() {
- super.onStart();
- navigationView.onStart();
- }
- @Override
- public void onResume() {
- super.onResume();
- navigationView.onResume();
- }
- @Override
- public void onLowMemory() {
- super.onLowMemory();
- navigationView.onLowMemory();
- }
- @Override
- public void onBackPressed() {
- if (!navigationView.onBackPressed()) {
- super.onBackPressed();
- }
- }
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- navigationView.onSaveInstanceState(outState);
- super.onSaveInstanceState(outState);
- }
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- navigationView.onRestoreInstanceState(savedInstanceState);
- }
- @Override
- public void onPause() {
- super.onPause();
- navigationView.onPause();
- }
- @Override
- public void onStop() {
- super.onStop();
- navigationView.onStop();
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- navigationView.onDestroy();
- }
- @Override
- public void onMilestoneEvent(RouteProgress routeProgress, String instruction, Milestone milestone) {
- }
- @Override
- public BannerInstructions willDisplay(BannerInstructions instructions) {
- ace++;
- // instructions.primary().text().contentEquals(" ");
- return instructions;
- }
- @Override
- public String willVoice(SpeechAnnouncement announcement) {
- // if (ace == 10)
- return announcement.announcement();
- // else return "";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement