11package org .open311 .android ;
22
3- import android .app . ProgressDialog ;
3+ import android .content . DialogInterface ;
44import android .content .Intent ;
55import android .content .SharedPreferences ;
6- import android .os .AsyncTask ;
76import android .os .Bundle ;
7+ import android .support .design .widget .Snackbar ;
88import android .support .design .widget .TabLayout ;
99import android .support .v4 .app .FragmentManager ;
1010import android .support .v4 .view .ViewPager ;
11+ import android .support .v7 .app .AlertDialog ;
1112import android .support .v7 .app .AppCompatActivity ;
1213import android .support .v7 .widget .Toolbar ;
1314import android .util .Log ;
1415import android .view .Menu ;
1516import android .view .MenuItem ;
16- import android .view .View ;
1717
18- import org .codeforamerica .open311 .facade .APIWrapper ;
19- import org .codeforamerica .open311 .facade .APIWrapperFactory ;
20- import org .codeforamerica .open311 .facade .EndpointType ;
18+ import org .codeforamerica .open311 .facade .Servers ;
2119import org .codeforamerica .open311 .facade .data .City ;
20+ import org .codeforamerica .open311 .facade .data .Server ;
2221import org .codeforamerica .open311 .facade .data .Service ;
2322import org .codeforamerica .open311 .facade .data .ServiceRequest ;
24- import org .codeforamerica . open311 .facade . exceptions . APIWrapperException ;
23+ import org .open311 .android . adapters . CitiesAdapter ;
2524import org .open311 .android .adapters .ViewPagerAdapter ;
2625
27- import org .open311 .android .fragments .CityFragment ;
2826import org .open311 .android .fragments .PolicyFragment ;
2927import org .open311 .android .fragments .ProfileFragment ;
3028import org .open311 .android .fragments .ReportFragment ;
3129import org .open311 .android .fragments .RequestsFragment ;
3230import org .open311 .android .helpers .Installation ;
3331
34- import java .io .IOException ;
3532import java .util .List ;
3633
34+ import static org .open311 .android .fragments .ReportFragment .LOCATION_REQUEST ;
3735import static org .open311 .android .helpers .Utils .*;
3836
3937import io .tus .android .client .TusPreferencesURLStore ;
4038
4139public class MainActivity extends AppCompatActivity
4240 implements
4341 RequestsFragment .OnListFragmentInteractionListener ,
44- CityFragment .OnListFragmentInteractionListener ,
4542 FragmentManager .OnBackStackChangedListener {
4643 private String installationId ;
4744
4845 private List <Service > services ;
4946
5047 private City currentCity ;
51- private ReportFragment reportFragment ;
52- private CityFragment cityFragment ;
5348 private static final String LOG_TAG = "MainActivity" ;
5449
5550 protected SharedPreferences settings ;
5651
57-
58- public List <Service > getServices () {
59- return services ;
60- }
61-
6252 public City getCurrentCity () {
53+ settings = getSettings (this );
54+ String cur_city = settings .getString ("current_city" , null );
55+ if (cur_city != null ) {
56+ setCurrentCity (City .fromString (cur_city ));
57+ } else {
58+ setCurrentCity (City .fromString (getString (R .string .open311_endpoint )));
59+ }
6360 return currentCity ;
6461 }
6562
@@ -77,8 +74,6 @@ protected void onCreate(Bundle savedInstanceState) {
7774 Log .d (LOG_TAG , "onCreate" );
7875 super .onCreate (savedInstanceState );
7976
80- settings = getSettings (this );
81- setCurrentCity (City .fromString (getString (R .string .open311_endpoint )));
8277 installationId = Installation .id (this );
8378 setContentView (R .layout .activity_main );
8479
@@ -92,32 +87,71 @@ protected void onCreate(Bundle savedInstanceState) {
9287
9388 TabLayout tabLayout = (TabLayout ) findViewById (R .id .tabs );
9489 tabLayout .setupWithViewPager (viewPager );
95-
96- if (savedInstanceState != null ) {
97- Log .d (LOG_TAG , "Restoring reportFragment" );
98- // Restore the fragment's instance
99- reportFragment = (ReportFragment ) getSupportFragmentManager ().getFragment (
100- savedInstanceState , "reportFragment" );
101- }
102- new DownloadPictures ().execute ();
10390 }
10491
10592 @ Override
10693 public boolean onCreateOptionsMenu (Menu menu ) {
94+ final List <Server > servers = new Servers ().getCollection ();
10795 getMenuInflater ().inflate (R .menu .main , menu );
108-
109- MenuItem actionItem = menu .findItem (R .id .setting_general );
110- actionItem .setOnMenuItemClickListener (new MenuItem .OnMenuItemClickListener () {
96+ MenuItem mapItem = menu . findItem ( R . id . setting_map );
97+ MenuItem cityItem = menu .findItem (R .id .setting_general );
98+ cityItem .setOnMenuItemClickListener (new MenuItem .OnMenuItemClickListener () {
11199 @ Override
112100 public boolean onMenuItemClick (MenuItem item ) {
113- cityFragment = new CityFragment ();
114- getSupportFragmentManager ().beginTransaction ()
115- .add (R .id .cities_fragment , cityFragment )
116- .commit ();
117- View citiesView = findViewById (R .id .cities_fragment );
118- assert citiesView != null ;
119- citiesView .bringToFront ();
120- return true ;
101+ AlertDialog .Builder builder = new AlertDialog .Builder (MainActivity .this );
102+ if (servers == null ) {
103+ String msg = getString (R .string .citiesListUnavailable );
104+ Snackbar .make (findViewById (R .id .appbar ), msg , Snackbar .LENGTH_SHORT )
105+ .show ();
106+ return false ;
107+ }
108+ final String [] values = new String [servers .size ()];
109+ int index = 0 ;
110+ for (Server srv : servers ) {
111+ values [index ] = srv .getName ();
112+ index ++;
113+ }
114+ builder .setAdapter (new CitiesAdapter (MainActivity .this , servers ),
115+ new DialogInterface .OnClickListener () {
116+ @ Override
117+ public void onClick (DialogInterface dialog , int index ) {
118+ String result = null ;
119+ if (!currentCity .getCityName ().equals (values [index ])) {
120+ Log .d (LOG_TAG , "onCreateOptionsMenu - Selected City: " + values [index ]);
121+ result = saveSetting (MainActivity .this , "current_city" , values [index ]);
122+
123+ //remove sharedSettings for Map so map resets
124+ removeSetting (MainActivity .this , "map_address_string" );
125+ removeSetting (MainActivity .this , "map_latitude" );
126+ removeSetting (MainActivity .this , "map.longitude" );
127+ removeSetting (MainActivity .this , "map_zoom" );
128+
129+ getCurrentCity ();
130+ recreate ();
131+ }
132+ if (result != null ) {
133+ Snackbar .make (findViewById (R .id .appbar ), result , Snackbar .LENGTH_SHORT )
134+ .show ();
135+ }
136+ }
137+ });
138+ builder .setNegativeButton (R .string .cancel , new DialogInterface .OnClickListener () {
139+ public void onClick (DialogInterface dialog , int id ) {
140+ // User cancelled the dialog
141+ dialog .dismiss ();
142+ }
143+ });
144+ builder .show ();
145+ return false ;
146+ }
147+ });
148+ mapItem .setOnMenuItemClickListener (new MenuItem .OnMenuItemClickListener () {
149+ @ Override
150+ public boolean onMenuItemClick (MenuItem menuItem ) {
151+ //Show the map
152+ Intent intent = new Intent (MainActivity .this , MapActivity .class );
153+ startActivityForResult (intent , LOCATION_REQUEST );
154+ return false ;
121155 }
122156 });
123157 return true ;
@@ -156,13 +190,6 @@ public void onBackStackChanged() {
156190 public void onSaveInstanceState (Bundle savedInstanceState ) {
157191 Log .d (LOG_TAG , "onSaveInstance" );
158192 super .onSaveInstanceState (savedInstanceState );
159- if (reportFragment != null ) {
160- // Save the fragment's instance
161- Log .d (LOG_TAG , "Saving reportFragment" );
162- getSupportFragmentManager ().putFragment (
163- savedInstanceState , "reportFragment" , reportFragment );
164- }
165-
166193 }
167194
168195 @ Override
@@ -176,7 +203,6 @@ public boolean onSupportNavigateUp() {
176203 @ Override
177204 protected void onStop () {
178205 super .onStop ();
179- saveSettings (this );
180206 }
181207
182208 private void setupViewPager (ViewPager viewPager ) {
@@ -186,7 +212,7 @@ private void setupViewPager(ViewPager viewPager) {
186212 adapter .addFragment (new ProfileFragment ());
187213 adapter .addFragment (new PolicyFragment ());
188214 viewPager .setAdapter (adapter );
189- viewPager .addOnPageChangeListener (new ViewPager .OnPageChangeListener (){
215+ viewPager .addOnPageChangeListener (new ViewPager .OnPageChangeListener () {
190216 @ Override
191217 public void onPageScrolled (int position , float positionOffset , int positionOffsetPixels ) {
192218
@@ -209,73 +235,4 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
209235 Log .d (LOG_TAG , "onActivityResult" );
210236 super .onActivityResult (requestCode , resultCode , data );
211237 }
212-
213- @ Override
214- public void onListFragmentInteraction (City item ) {
215-
216- }
217-
218- private class DownloadPictures extends AsyncTask <String , Void , String > {
219-
220- ProgressDialog progressDialog ;
221-
222- @ Override
223- protected String doInBackground (String ... params ) {
224-
225- APIWrapper wrapper ;
226- try {
227- wrapper = new APIWrapperFactory (getCurrentCity (), EndpointType .PRODUCTION ).build ();
228- publishProgress ();
229- services = wrapper .getServiceList ();
230- publishProgress ();
231- Thread .sleep (2000 );
232-
233- } catch (APIWrapperException e ) {
234- e .printStackTrace ();
235- } catch (ClassNotFoundException e ) {
236- e .printStackTrace ();
237- } catch (IOException e ) {
238- e .printStackTrace ();
239- } catch (InterruptedException e ) {
240- e .printStackTrace ();
241- }
242-
243- return null ;
244-
245- }
246-
247- @ Override
248- protected void onPostExecute (String result ) {
249-
250- progressDialog .cancel ();
251-
252- //Call your method that checks if the pictures were downloaded
253-
254- }
255-
256- @ Override
257- protected void onPreExecute () {
258-
259- progressDialog = new ProgressDialog (
260- MainActivity .this );
261-
262- progressDialog .setMessage (getString (R .string .contactingServer ) + " " + getCurrentCity ().getCityName ());
263- MainActivity .this .setTitle (getString (R .string .app_name ) + " " + getCurrentCity ().getTitle ());
264- progressDialog .setCancelable (false );
265- progressDialog .show ();
266-
267- }
268-
269- @ Override
270- protected void onProgressUpdate (Void ... values ) {
271- if (services == null ) {
272- progressDialog .setMessage (getString (R .string .connectionEstablished ));
273- } else {
274- if (services .size () > 0 ) {
275- progressDialog .setMessage (services .size () + " " + getString (R .string .servicesDownloaded ));
276- }
277- }
278- }
279-
280- }
281238}
0 commit comments