Advertisement
Guest User

Untitled

a guest
May 20th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.58 KB | None | 0 0
  1. package com.example.finalproject;
  2.  
  3. import android.Manifest;
  4. import android.annotation.SuppressLint;
  5. import android.app.AlertDialog;
  6. import android.arch.persistence.room.Room;
  7. import android.content.DialogInterface;
  8. import android.content.pm.PackageManager;
  9. import android.location.Address;
  10. import android.location.Geocoder;
  11. import android.location.Location;
  12. import android.location.LocationListener;
  13. import android.location.LocationManager;
  14. import android.os.AsyncTask;
  15. import android.support.annotation.NonNull;
  16. import android.support.v4.app.ActivityCompat;
  17. import android.support.v4.app.FragmentActivity;
  18. import android.os.Bundle;
  19. import android.util.Log;
  20. import android.util.Pair;
  21. import android.view.LayoutInflater;
  22. import android.view.View;
  23. import android.widget.Button;
  24. import android.widget.EditText;
  25. import android.widget.TextView;
  26. import android.widget.Toast;
  27.  
  28. import com.google.android.gms.maps.CameraUpdate;
  29. import com.google.android.gms.maps.CameraUpdateFactory;
  30. import com.google.android.gms.maps.GoogleMap;
  31. import com.google.android.gms.maps.OnMapReadyCallback;
  32. import com.google.android.gms.maps.SupportMapFragment;
  33. import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  34. import com.google.android.gms.maps.model.LatLng;
  35. import com.google.android.gms.maps.model.LatLngBounds;
  36. import com.google.android.gms.maps.model.MarkerOptions;
  37.  
  38. import java.io.IOException;
  39. import java.util.ArrayList;
  40. import java.util.List;
  41.  
  42. public class InitialMapActivity extends FragmentActivity implements OnMapReadyCallback {
  43.  
  44.     private LatLng myLocation = null; //currentLocation
  45.     private GPSTracker gpsTracker;
  46.     private GoogleMap mMap;
  47.     private AppDatabase db;
  48.     private Button btnOptimise;
  49.     private LatLng startLocation;
  50.  
  51.     private List<String> addresses = new ArrayList<>();
  52.     private List<LatLng> latLngs = new ArrayList<>();
  53.     List<MarkerOptions> markers = new ArrayList<>();
  54.  
  55.     //create a paired list first is adresss second is latlongs
  56.     private Pair<List<String>, List<LatLng> > pair = Pair.create(addresses, latLngs);
  57.  
  58.     @Override
  59.     protected void onCreate(Bundle savedInstanceState) {
  60.         super.onCreate(savedInstanceState);
  61.         setContentView(R.layout.activity_initial_map);
  62.  
  63.         ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
  64.  
  65.         LocationListener mLocationListener = new LocationListener() {
  66.             @Override
  67.             public void onLocationChanged(Location location) {
  68.                 myLocation = new LatLng(location.getLatitude(), location.getLongitude());
  69.                 SupportMapFragment supportMapFragment= (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
  70.                 supportMapFragment.getMapAsync(InitialMapActivity.this);
  71.             }
  72.  
  73.             @Override
  74.             public void onStatusChanged(String provider, int status, Bundle extras) {
  75.  
  76.             }
  77.  
  78.             @Override
  79.             public void onProviderEnabled(String provider) {
  80.  
  81.             }
  82.  
  83.             @Override
  84.             public void onProviderDisabled(String provider) {
  85.  
  86.             }
  87.         };
  88.  
  89.         LocationManager mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
  90.         if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
  91.             mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000,
  92.                     10, mLocationListener);
  93.         }
  94.  
  95.         btnOptimise = findViewById(R.id.btn_Optimise);
  96.         btnOptimise.setOnClickListener(new View.OnClickListener() {
  97.             public void onClick(View v) {
  98.                 Log.d("TESTING!!", "onPostExecute: " + pair.first.toString());
  99.                 Log.d("TESTING!!", "onPostExecute: " + pair.second.toString());
  100.  
  101.                 //TO DO:
  102.                 //now we need to get optimal order and route using the tom tom api
  103.                 //we have a list of addressses and corisponding latlngs
  104.             }
  105.         });
  106.  
  107.     }
  108.  
  109.     @Override
  110.     protected void onResume() {
  111.         super.onResume();
  112.  
  113.         if (checkLocationPermission()) {
  114.             gpsTracker = new GPSTracker(this);
  115.             if (gpsTracker.canGetLocation) {
  116.                 myLocation = new LatLng(gpsTracker.getLatitude(), gpsTracker.getLongitude());
  117.             } else {
  118.                 Toast.makeText(this, "please accept permission !!!!", Toast.LENGTH_SHORT).show();
  119.                 finish();
  120.             }
  121.         }
  122.     }
  123.  
  124.     public boolean checkLocationPermission() {
  125.         String permission = "android.permission.ACCESS_FINE_LOCATION";
  126.         int res = this.checkCallingOrSelfPermission(permission);
  127.         return (res == PackageManager.PERMISSION_GRANTED);
  128.     }
  129.  
  130.     @SuppressLint("MissingPermission")
  131.     @Override
  132.     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  133.         switch (requestCode) {
  134.             case 1: {
  135.                 // If request is cancelled, the result arrays are empty.
  136.                 if (grantResults.length > 0
  137.                         && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  138.  
  139.                     //Permission Granted
  140.                     gpsTracker = new GPSTracker(this);
  141.                     if (gpsTracker.canGetLocation) {
  142.                         mMap.setMyLocationEnabled(true);
  143.                         myLocation = new LatLng(gpsTracker.getLatitude(), gpsTracker.getLongitude());
  144.                     } else {
  145.                         // permission denied, boo! Disable the
  146.                         // functionality that depends on this permission.
  147.                     }
  148.                     return;
  149.                 }
  150.                 // other 'case' lines to check for other
  151.                 // permissions this app might request
  152.             }
  153.         }
  154.     }
  155.  
  156.     @Override
  157.     public void onMapReady(GoogleMap googleMap) {
  158.         mMap = googleMap;
  159.         //get locations on seperate thread
  160.         new AsyncShowLocations().execute(pair);
  161.  
  162.         //get prompt for start location and add to map
  163.         getStartLocation();
  164.     }
  165.  
  166.     private void getStartLocation()
  167.     {
  168.         // get prompts.xml view
  169.         LayoutInflater li = LayoutInflater.from(InitialMapActivity.this);
  170.         View promptsView = li.inflate(R.layout.prompt_getstart, null);
  171.  
  172.         AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
  173.                 InitialMapActivity.this);
  174.  
  175.         // set prompts.xml to alertdialog builder
  176.         alertDialogBuilder.setView(promptsView);
  177.  
  178.         final EditText userInput = (EditText) promptsView
  179.                 .findViewById(R.id.editTextDialogUserInput);
  180.  
  181.         // set dialog message
  182.         alertDialogBuilder
  183.                 .setCancelable(false)
  184.                 .setPositiveButton("Yes",
  185.                         new DialogInterface.OnClickListener() {
  186.                             public void onClick(DialogInterface dialog,int id) {
  187.                                 // get user input and set it to result
  188.                                 // edit text
  189.                                 LatLng newlatlng = getLatLngFromAddress(userInput.getText().toString());
  190.                                 if (newlatlng != null) {
  191.                                     startLocation = newlatlng;
  192.                                     MarkerOptions marker = new MarkerOptions()
  193.                                             .position(startLocation)
  194.                                             .title("Start")
  195.                                             .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
  196.                                     markers.add(marker);
  197.                                     mMap.addMarker(marker);
  198.                                     zoomMap();
  199.                                 } else
  200.                                 {
  201.                                     TextView alertTxtView = findViewById(R.id.alertTxtView);
  202.                                     alertTxtView.setText("Could not find address");
  203.                                 }
  204.                             }
  205.                         })
  206.                 .setNegativeButton("Use My Location",
  207.                         new DialogInterface.OnClickListener() {
  208.                             public void onClick(DialogInterface dialog,int id) {
  209.                                 dialog.cancel();
  210.                                 startLocation = myLocation;
  211.                                 MarkerOptions marker = new MarkerOptions()
  212.                                         .position(startLocation)
  213.                                         .title("Start")
  214.                                         .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
  215.  
  216.                                 markers.add(marker);
  217.                                 mMap.addMarker(marker);
  218.                                 zoomMap();
  219.                             }
  220.                         });
  221.  
  222.         // create alert dialog
  223.         AlertDialog alertDialog = alertDialogBuilder.create();
  224.  
  225.         // show it
  226.         alertDialog.show();
  227.     }
  228.  
  229.     private class AsyncShowLocations extends AsyncTask<Pair<List<String>, List<LatLng> >, Void, Pair<List<String>, List<LatLng> >>
  230.     {
  231.         List<String> addresses;
  232.         List<LatLng> latLngs;
  233.  
  234.         @Override
  235.         protected Pair doInBackground(Pair<List<String>, List<LatLng> >... pair) {
  236.  
  237.             addresses = getAddresses();
  238.             latLngs = getLocationFromAddress(addresses);
  239.  
  240.             return Pair.create(addresses, latLngs);
  241.         }
  242.  
  243.         @Override
  244.         protected void onPostExecute(Pair<List<String>, List<LatLng> > result) {
  245.             super.onPostExecute(result);
  246.             showLocations(addresses, latLngs);
  247.             pair.first.addAll(result.first);
  248.             pair.second.addAll(result.second);
  249.             btnOptimise.setVisibility(View.VISIBLE);
  250.         }
  251.     }
  252.  
  253.     private void showLocations(List<String> addresses, List<LatLng> latLngs)
  254.     {
  255.         for(int i = 0; i < latLngs.size(); i++)
  256.         {
  257.             String address = addresses.get(i);
  258.             LatLng latLng = latLngs.get(i);
  259.  
  260.             MarkerOptions marker = new MarkerOptions().position(latLng).title(address);
  261.             markers.add(marker);
  262.             //Put marker on map on that LatLng
  263.             mMap.addMarker(marker);
  264.         }
  265.  
  266.         zoomMap();
  267.     }
  268.  
  269.     private void zoomMap()
  270.     {
  271.         LatLngBounds.Builder builder = new LatLngBounds.Builder();
  272.         for (MarkerOptions marker : markers) {
  273.             builder.include(marker.getPosition());
  274.         }
  275.  
  276.         //Animate and Zoom on that map location
  277.         LatLngBounds bounds = builder.build();
  278.         int padding = 100; // offset from edges of the map in pixels
  279.         CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
  280.         mMap.animateCamera(cu);
  281.     }
  282.  
  283.     private List<String> getAddresses(){
  284.  
  285.         List<String> Addresses = new ArrayList<>();
  286.  
  287.         db = Room.databaseBuilder(this,
  288.                 AppDatabase.class, "sessionDatabase").allowMainThreadQueries().build();
  289.  
  290.         Job[] jobs = db.myDao().getAllJobs();
  291.         for (Job job : jobs) {
  292.             Addresses.add(job.getAddress() + " " + job.getPostcode());
  293.         }
  294.         return Addresses;
  295.     }
  296.  
  297.     private List<LatLng> getLocationFromAddress(List<String> addresses)
  298.     {
  299.         List<LatLng> latLngs = new ArrayList<>();
  300.         for (String address : addresses)
  301.         {
  302.             LatLng latLng;
  303.             latLng = getLatLngFromAddress(address);
  304.             latLngs.add(latLng);
  305.         }
  306.         return latLngs;
  307.     }
  308.  
  309.     private LatLng getLatLngFromAddress(String address)
  310.     {
  311.         Geocoder coder = new Geocoder(this);
  312.         List<Address> possibleaddresses;
  313.         LatLng latLng = null;
  314.         try {
  315.             //Get latLng from String
  316.             possibleaddresses = coder.getFromLocationName(address,5);
  317.  
  318.             //check for null
  319.             if (possibleaddresses == null) {
  320.                 return null;
  321.             }
  322.  
  323.             //Lets take first possibility from the all possibilities.
  324.             Address location = possibleaddresses.get(0);
  325.             latLng = new LatLng(location.getLatitude(), location.getLongitude());
  326.  
  327.         } catch (IOException e)
  328.         {
  329.             e.printStackTrace();
  330.         }
  331.         return latLng;
  332.     }
  333. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement