Skip to content

Commit eabec11

Browse files
Select other city from settings
1 parent f9653a2 commit eabec11

28 files changed

Lines changed: 618 additions & 550 deletions

app/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ apply plugin: 'com.android.application'
33
android {
44

55
compileSdkVersion 24
6-
buildToolsVersion "24"
6+
buildToolsVersion "24.0.2"
77
defaultConfig {
88
applicationId "org.open311.android"
99
minSdkVersion 16
1010
targetSdkVersion 24
11-
versionCode 4
12-
versionName "1.3-alpha"
11+
versionCode 5
12+
versionName "1.4-alpha"
1313
multiDexEnabled true
1414
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1515
}
Lines changed: 53 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,34 @@
11
package org.open311.android;
22

3-
import android.app.ProgressDialog;
3+
import android.content.DialogInterface;
44
import android.content.Intent;
55
import android.content.SharedPreferences;
6-
import android.os.AsyncTask;
76
import android.os.Bundle;
7+
import android.support.design.widget.Snackbar;
88
import android.support.design.widget.TabLayout;
99
import android.support.v4.app.FragmentManager;
1010
import android.support.v4.view.ViewPager;
11+
import android.support.v7.app.AlertDialog;
1112
import android.support.v7.app.AppCompatActivity;
1213
import android.support.v7.widget.Toolbar;
1314
import android.util.Log;
1415
import android.view.Menu;
1516
import 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;
2119
import org.codeforamerica.open311.facade.data.City;
20+
import org.codeforamerica.open311.facade.data.Server;
2221
import org.codeforamerica.open311.facade.data.Service;
2322
import org.codeforamerica.open311.facade.data.ServiceRequest;
24-
import org.codeforamerica.open311.facade.exceptions.APIWrapperException;
23+
import org.open311.android.adapters.CitiesAdapter;
2524
import org.open311.android.adapters.ViewPagerAdapter;
2625

27-
import org.open311.android.fragments.CityFragment;
2826
import org.open311.android.fragments.PolicyFragment;
2927
import org.open311.android.fragments.ProfileFragment;
3028
import org.open311.android.fragments.ReportFragment;
3129
import org.open311.android.fragments.RequestsFragment;
3230
import org.open311.android.helpers.Installation;
3331

34-
import java.io.IOException;
3532
import java.util.List;
3633

3734
import static org.open311.android.helpers.Utils.*;
@@ -41,25 +38,24 @@
4138
public 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

Comments
 (0)