diff --git a/android/java/app/src/main/AndroidManifest.xml b/android/java/app/src/main/AndroidManifest.xml index 7776d7098..bd9d2da06 100644 --- a/android/java/app/src/main/AndroidManifest.xml +++ b/android/java/app/src/main/AndroidManifest.xml @@ -1,19 +1,21 @@ + package="com.mapbox.mapboxgl.app"> + + + + android:theme="@style/AppTheme"> + android:configChanges="keyboard|keyboardHidden|orientation|screenSize|smallestScreenSize"> - diff --git a/android/java/app/src/main/java/com/mapbox/mapboxgl/app/MainActivity.java b/android/java/app/src/main/java/com/mapbox/mapboxgl/app/MainActivity.java index 12707ff49..28b04a9cf 100644 --- a/android/java/app/src/main/java/com/mapbox/mapboxgl/app/MainActivity.java +++ b/android/java/app/src/main/java/com/mapbox/mapboxgl/app/MainActivity.java @@ -1,16 +1,22 @@ package com.mapbox.mapboxgl.app; +import android.location.Criteria; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; import android.os.Bundle; -import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.Toolbar; import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; -import com.mapbox.mapboxgl.lib.MapView; +import com.mapbox.mapboxgl.lib.LonLatZoom; public class MainActivity extends ActionBarActivity { @@ -42,18 +48,70 @@ public class MainActivity extends ActionBarActivity { setContentView(R.layout.activity_main); mMapFragment = (MapFragment)getSupportFragmentManager().findFragmentById(R.id.fragment_map); - // TODO move to layout file and save state - // Add the spinner to select map styles - Spinner styleSpinner = (Spinner)findViewById(R.id.spinner_style); - ArrayAdapter styleAdapter = ArrayAdapter.createFromResource(this, - R.array.style_list, android.R.layout.simple_spinner_dropdown_item); - styleSpinner.setAdapter(styleAdapter); - styleSpinner.setOnItemSelectedListener(new StyleSpinnerListener()); - // Add a toolbar as the action bar Toolbar mainToolbar = (Toolbar)findViewById(R.id.toolbar_main); setSupportActionBar(mainToolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); + + // TODO move to layout file and save state + // Add the spinner to select map styles + Spinner styleSpinner = (Spinner)findViewById(R.id.spinner_style); + ArrayAdapter styleAdapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(), + R.array.style_list, android.R.layout.simple_spinner_dropdown_item); + styleSpinner.setAdapter(styleAdapter); + styleSpinner.setOnItemSelectedListener(new StyleSpinnerListener()); + } + + // Adds items to the action bar menu + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_gps: + // Get a GPS position + LocationManager locationManager = (LocationManager)getSystemService(getApplicationContext().LOCATION_SERVICE); + String provider = locationManager.getBestProvider(new Criteria(), true); + Location location = locationManager.getLastKnownLocation(provider); + LonLatZoom coordinate = new LonLatZoom(location.getLongitude(), location.getLatitude(), 15); + mMapFragment.getMap().setCenterCoordinate(coordinate, true); + locationManager.requestSingleUpdate(provider, new MyLocationListener(), null); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + // This class handles location events + private class MyLocationListener implements LocationListener { + + @Override + public void onLocationChanged(Location location) { + LonLatZoom coordinate = new LonLatZoom(location.getLongitude(), location.getLatitude(), 15); + mMapFragment.getMap().setCenterCoordinate(coordinate, true); + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + // Do nothing + } + + @Override + public void onProviderEnabled(String provider) { + // Do nothing + } + + @Override + public void onProviderDisabled(String provider) { + // Do nothing + } } // This class handles navigation events diff --git a/android/java/app/src/main/res/drawable-hdpi/ic_action_location_found.png b/android/java/app/src/main/res/drawable-hdpi/ic_action_location_found.png new file mode 100644 index 000000000..e1bf5807b Binary files /dev/null and b/android/java/app/src/main/res/drawable-hdpi/ic_action_location_found.png differ diff --git a/android/java/app/src/main/res/drawable-mdpi/ic_action_location_found.png b/android/java/app/src/main/res/drawable-mdpi/ic_action_location_found.png new file mode 100644 index 000000000..33f660f2d Binary files /dev/null and b/android/java/app/src/main/res/drawable-mdpi/ic_action_location_found.png differ diff --git a/android/java/app/src/main/res/drawable-xhdpi/ic_action_location_found.png b/android/java/app/src/main/res/drawable-xhdpi/ic_action_location_found.png new file mode 100644 index 000000000..4c06441f9 Binary files /dev/null and b/android/java/app/src/main/res/drawable-xhdpi/ic_action_location_found.png differ diff --git a/android/java/app/src/main/res/drawable-xxhdpi/ic_action_location_found.png b/android/java/app/src/main/res/drawable-xxhdpi/ic_action_location_found.png new file mode 100644 index 000000000..43f18ea01 Binary files /dev/null and b/android/java/app/src/main/res/drawable-xxhdpi/ic_action_location_found.png differ diff --git a/android/java/app/src/main/res/layout/activity_main.xml b/android/java/app/src/main/res/layout/activity_main.xml index 478903d50..fb6e894d2 100644 --- a/android/java/app/src/main/res/layout/activity_main.xml +++ b/android/java/app/src/main/res/layout/activity_main.xml @@ -1,22 +1,22 @@ - - - + + + \ No newline at end of file diff --git a/android/java/app/src/main/res/values/strings.xml b/android/java/app/src/main/res/values/strings.xml index 4fc9298f4..d7698f0db 100644 --- a/android/java/app/src/main/res/values/strings.xml +++ b/android/java/app/src/main/res/values/strings.xml @@ -3,6 +3,8 @@ Mapbox GL + Go to GPS location + Bright Basic diff --git a/android/java/lib/src/main/AndroidManifest.xml b/android/java/lib/src/main/AndroidManifest.xml index 22b0afbc3..7c7dac9a0 100644 --- a/android/java/lib/src/main/AndroidManifest.xml +++ b/android/java/lib/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.mapbox.mapboxgl.lib"> diff --git a/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLat.java b/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLat.java index 69e9a6835..a36548fe3 100644 --- a/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLat.java +++ b/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLat.java @@ -23,7 +23,7 @@ public class LonLat implements Parcelable { this.lat = lat; } - private LonLat(Parcel in) { + protected LonLat(Parcel in) { lon = in.readDouble(); lat = in.readDouble(); } diff --git a/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLatZoom.java b/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLatZoom.java index 885052028..fd78e9356 100644 --- a/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLatZoom.java +++ b/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLatZoom.java @@ -3,7 +3,7 @@ package com.mapbox.mapboxgl.lib; import android.os.Parcel; import android.os.Parcelable; -public class LonLatZoom implements Parcelable { +public class LonLatZoom extends LonLat implements Parcelable { public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public LonLatZoom createFromParcel(Parcel in) { @@ -15,44 +15,23 @@ public class LonLatZoom implements Parcelable { } }; - private double lon; - private double lat; private double zoom; public LonLatZoom(double lon, double lat, double zoom) { - this.lon = lon; - this.lat = lat; + super(lon, lat); this.zoom = zoom; } public LonLatZoom(LonLat lonLat, double zoom) { - this.lon = lonLat.getLon(); - this.lat = lonLat.getLat(); + super(lonLat.getLon(), lonLat.getLat()); this.zoom = zoom; } private LonLatZoom(Parcel in) { - lon = in.readDouble(); - lat = in.readDouble(); + super(in); zoom = in.readDouble(); } - public double getLon() { - return lon; - } - - public void setLon(double lon) { - this.lon = lon; - } - - public double getLat() { - return lat; - } - - public void setLat(double lat) { - this.lat = lat; - } - public double getZoom() { return zoom; } @@ -61,25 +40,12 @@ public class LonLatZoom implements Parcelable { this.zoom = zoom; } - public LonLat getLonLat() { - return new LonLat(lon, lat); - } - - public void setLonLat(LonLat lonLat) { - this.lon = lonLat.getLon(); - this.lat = lonLat.getLat(); - } - @Override public int hashCode() { final int prime = 31; int result = 1; long temp; - temp = Double.doubleToLongBits(lat); - result = prime * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(lon); - result = prime * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(zoom); + temp = super.hashCode(); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } @@ -93,12 +59,12 @@ public class LonLatZoom implements Parcelable { if (getClass() != obj.getClass()) return false; LonLatZoom other = (LonLatZoom) obj; - return Double.doubleToLongBits(lat) == Double.doubleToLongBits(other.lat) && Double.doubleToLongBits(lon) == Double.doubleToLongBits(other.lon) && Double.doubleToLongBits(zoom) == Double.doubleToLongBits(other.zoom); + return super.equals(obj) && Double.doubleToLongBits(zoom) == Double.doubleToLongBits(other.zoom); } @Override public String toString() { - return "LonLatZoom [lon=" + lon + ", lat=" + lat + ", zoom=" + zoom + return "LonLatZoom [lon=" + super.getLon() + ", lat=" + super.getLat() + ", zoom=" + zoom + "]"; } @@ -109,8 +75,7 @@ public class LonLatZoom implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { - out.writeDouble(lon); - out.writeDouble(lat); + super.writeToParcel(out, flags); out.writeDouble(zoom); }