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
3734import static org .open311 .android .helpers .Utils .*;
4138public class MainActivity extends AppCompatActivity
4239 implements
4340 RequestsFragment .OnListFragmentInteractionListener ,
44- CityFragment .OnListFragmentInteractionListener ,
4541 FragmentManager .OnBackStackChangedListener {
4642 private String installationId ;
4743
4844 private List <Service > services ;
4945
5046 private City currentCity ;
51- private ReportFragment reportFragment ;
52- private CityFragment cityFragment ;
5347 private static final String LOG_TAG = "MainActivity" ;
5448
5549 protected SharedPreferences settings ;
5650
57-
58- public List <Service > getServices () {
59- return services ;
60- }
61-
6251 public City getCurrentCity () {
52+ settings = getSettings (this );
53+ String cur_city = settings .getString ("current_city" , null );
54+ if (cur_city != null ) {
55+ setCurrentCity (City .fromString (cur_city ));
56+ } else {
57+ setCurrentCity (City .fromString (getString (R .string .open311_endpoint )));
58+ }
6359 return currentCity ;
6460 }
6561
@@ -77,8 +73,6 @@ protected void onCreate(Bundle savedInstanceState) {
7773 Log .d (LOG_TAG , "onCreate" );
7874 super .onCreate (savedInstanceState );
7975
80- settings = getSettings (this );
81- setCurrentCity (City .fromString (getString (R .string .open311_endpoint )));
8276 installationId = Installation .id (this );
8377 setContentView (R .layout .activity_main );
8478
@@ -92,32 +86,55 @@ protected void onCreate(Bundle savedInstanceState) {
9286
9387 TabLayout tabLayout = (TabLayout ) findViewById (R .id .tabs );
9488 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 ();
10389 }
10490
10591 @ Override
10692 public boolean onCreateOptionsMenu (Menu menu ) {
93+ final List <Server > servers = new Servers ().getCollection ();
10794 getMenuInflater ().inflate (R .menu .main , menu );
10895
10996 MenuItem actionItem = menu .findItem (R .id .setting_general );
11097 actionItem .setOnMenuItemClickListener (new MenuItem .OnMenuItemClickListener () {
11198 @ Override
11299 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 ;
100+ AlertDialog .Builder builder = new AlertDialog .Builder (MainActivity .this );
101+ if (servers == null ) {
102+ String msg = getString (R .string .citiesListUnavailable );
103+ Snackbar .make (findViewById (R .id .appbar ), msg , Snackbar .LENGTH_SHORT )
104+ .show ();
105+ return false ;
106+ }
107+ final String [] values = new String [servers .size ()];
108+ int index = 0 ;
109+ for (Server srv : servers ) {
110+ values [index ] = srv .getName ();
111+ index ++;
112+ }
113+ builder .setAdapter (new CitiesAdapter (MainActivity .this , servers ),
114+ new DialogInterface .OnClickListener () {
115+ @ Override
116+ public void onClick (DialogInterface dialog , int index ) {
117+ String result = null ;
118+ if (!currentCity .getCityName ().equals (values [index ])) {
119+ Log .d (LOG_TAG , "onCreateOptionsMenu - Selected City: " + values [index ]);
120+ result = saveSetting (MainActivity .this , "current_city" , values [index ]);
121+ getCurrentCity ();
122+ recreate ();
123+ }
124+ if (result != null ) {
125+ Snackbar .make (findViewById (R .id .appbar ), result , Snackbar .LENGTH_SHORT )
126+ .show ();
127+ }
128+ }
129+ });
130+ builder .setNegativeButton (R .string .cancel , new DialogInterface .OnClickListener () {
131+ public void onClick (DialogInterface dialog , int id ) {
132+ // User cancelled the dialog
133+ dialog .dismiss ();
134+ }
135+ });
136+ builder .show ();
137+ return false ;
121138 }
122139 });
123140 return true ;
@@ -156,13 +173,6 @@ public void onBackStackChanged() {
156173 public void onSaveInstanceState (Bundle savedInstanceState ) {
157174 Log .d (LOG_TAG , "onSaveInstance" );
158175 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-
166176 }
167177
168178 @ Override
@@ -176,7 +186,6 @@ public boolean onSupportNavigateUp() {
176186 @ Override
177187 protected void onStop () {
178188 super .onStop ();
179- saveSettings (this );
180189 }
181190
182191 private void setupViewPager (ViewPager viewPager ) {
@@ -186,7 +195,7 @@ private void setupViewPager(ViewPager viewPager) {
186195 adapter .addFragment (new ProfileFragment ());
187196 adapter .addFragment (new PolicyFragment ());
188197 viewPager .setAdapter (adapter );
189- viewPager .addOnPageChangeListener (new ViewPager .OnPageChangeListener (){
198+ viewPager .addOnPageChangeListener (new ViewPager .OnPageChangeListener () {
190199 @ Override
191200 public void onPageScrolled (int position , float positionOffset , int positionOffsetPixels ) {
192201
@@ -209,73 +218,4 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
209218 Log .d (LOG_TAG , "onActivityResult" );
210219 super .onActivityResult (requestCode , resultCode , data );
211220 }
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- }
281221}
0 commit comments