44import android .content .Context ;
55import android .content .DialogInterface ;
66import android .content .Intent ;
7+ import android .content .SharedPreferences ;
78import android .content .pm .PackageManager ;
89import android .location .Address ;
910import android .location .Location ;
4849import java .util .List ;
4950import java .util .Locale ;
5051
52+ import static org .open311 .android .helpers .Utils .getSettings ;
53+ import static org .open311 .android .helpers .Utils .saveSetting ;
54+
5155public class MapActivity extends AppCompatActivity {
56+ private SharedPreferences settings ;
5257 private MapView mapView ;
5358 private MapboxMap map ;
5459
@@ -83,7 +88,7 @@ private enum source {
8388 protected void onCreate (Bundle savedInstanceState ) {
8489
8590 super .onCreate (savedInstanceState );
86-
91+ settings = getSettings ( this );
8792 // Mapbox access token only needs to be configured once in your app
8893 MapboxAccountManager .start (this , getString (R .string .mapbox_api_key ));
8994 setContentView (R .layout .activity_map );
@@ -99,12 +104,24 @@ protected void onCreate(Bundle savedInstanceState) {
99104 mapView .getMapAsync (new OnMapReadyCallback () {
100105 @ Override
101106 public void onMapReady (MapboxMap mapboxMap ) {
102- City city = City .fromString (getString (R .string .open311_endpoint ));
107+ City city = City .fromString (settings . getString ("current_city" , getString ( R .string .open311_endpoint ) ));
103108 if (city .getMap () != null ) {
104- LatLng point = new LatLng (city .getMap ().getLat (), city .getMap ().getLon ());
109+ LatLng point = new LatLng (
110+ settings .getFloat ("map_latitude" , city .getMap ().getLat ()),
111+ settings .getFloat ("map_longitude" , city .getMap ().getLon ())
112+ );
113+ mapboxMap .setCameraPosition (new CameraPosition .Builder ()
114+ .target (point )
115+ .zoom ((double ) settings .getFloat ("map_zoom" , city .getMap ().getZoom ()))
116+ .build ());
117+ } else {
118+ LatLng point = new LatLng (
119+ settings .getFloat ("map_latitude" , 0.0f ),
120+ settings .getFloat ("map_longitude" , 0.0f )
121+ );
105122 mapboxMap .setCameraPosition (new CameraPosition .Builder ()
106123 .target (point )
107- .zoom (new Double ( city . getMap (). getZoom () ))
124+ .zoom (( double ) settings . getFloat ( "map_zoom" , 0.0f ))
108125 .build ());
109126 }
110127 map = mapboxMap ;
@@ -115,6 +132,7 @@ public void onMapClick(@NonNull LatLng point) {
115132 sourceType = source .CLICK .value ;
116133 latitude = (float ) point .getLatitude ();
117134 longitude = (float ) point .getLongitude ();
135+
118136 //updateMap, but don't center it
119137 updateMap (false );
120138 }
@@ -137,10 +155,14 @@ public void onClick(View v) {
137155 @ Override
138156 public void onClick (View v ) {
139157 Intent data = new Intent ();
158+
140159 data .putExtra ("address_string" , Utils .formatAddress (address ));
141160 data .putExtra ("latitude" , latitude );
142161 data .putExtra ("longitude" , longitude );
143162 data .putExtra ("source" , sourceType );
163+ saveSetting (MapActivity .this , "map_latitude" , latitude );
164+ saveSetting (MapActivity .this , "map_longitude" , longitude );
165+ saveSetting (MapActivity .this , "map_zoom" , (float ) map .getCameraPosition ().zoom );
144166 setResult (RESULT_OK , data );
145167 finish ();
146168 }
0 commit comments