Merge "Fix crash in new time zone picker."

This commit is contained in:
Joachim Sauer
2018-01-22 21:15:08 +00:00
committed by Android (Google) Code Review

View File

@@ -31,6 +31,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner; import android.widget.Spinner;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R; import com.android.settings.R;
@@ -56,11 +57,14 @@ public class ZonePicker extends InstrumentedFragment
private List<RegionInfo> mRegions; private List<RegionInfo> mRegions;
private Map<String, List<TimeZoneInfo>> mZoneInfos; private Map<String, List<TimeZoneInfo>> mZoneInfos;
private List<TimeZoneInfo> mFixedOffsetTimeZones; private List<TimeZoneInfo> mFixedOffsetTimeZones;
private TimeZoneAdapter mTimeZoneAdapter;
private String mSelectedTimeZone; private String mSelectedTimeZone;
private boolean mSelectByRegion; private boolean mSelectByRegion;
private DataLoader mDataLoader; private DataLoader mDataLoader;
private TimeZoneAdapter mTimeZoneAdapter;
private RecyclerView mRecyclerView; private RecyclerView mRecyclerView;
private LinearLayout mRegionSpinnerLayout;
private Spinner mRegionSpinner;
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
@@ -88,15 +92,17 @@ public class ZonePicker extends InstrumentedFragment
final ArrayAdapter<RegionInfo> regionAdapter = new ArrayAdapter<>(getContext(), final ArrayAdapter<RegionInfo> regionAdapter = new ArrayAdapter<>(getContext(),
R.layout.filter_spinner_item, mRegions); R.layout.filter_spinner_item, mRegions);
regionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); regionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
final Spinner spinner = view.findViewById(R.id.tz_region_spinner);
spinner.setAdapter(regionAdapter); mRegionSpinnerLayout = view.findViewById(R.id.tz_region_spinner_layout);
spinner.setOnItemSelectedListener(this); mRegionSpinner = view.findViewById(R.id.tz_region_spinner);
setupForCurrentTimeZone(spinner); mRegionSpinner.setAdapter(regionAdapter);
mRegionSpinner.setOnItemSelectedListener(this);
setupForCurrentTimeZone();
setHasOptionsMenu(true); setHasOptionsMenu(true);
return view; return view;
} }
private void setupForCurrentTimeZone(Spinner spinner) { private void setupForCurrentTimeZone() {
final String localeRegionId = mLocale.getCountry().toUpperCase(Locale.ROOT); final String localeRegionId = mLocale.getCountry().toUpperCase(Locale.ROOT);
final String currentTimeZone = TimeZone.getDefault().getID(); final String currentTimeZone = TimeZone.getDefault().getID();
boolean fixedOffset = currentTimeZone.startsWith("Etc/GMT") || boolean fixedOffset = currentTimeZone.startsWith("Etc/GMT") ||
@@ -105,12 +111,12 @@ public class ZonePicker extends InstrumentedFragment
for (int regionIndex = 0; regionIndex < mRegions.size(); regionIndex++) { for (int regionIndex = 0; regionIndex < mRegions.size(); regionIndex++) {
final RegionInfo region = mRegions.get(regionIndex); final RegionInfo region = mRegions.get(regionIndex);
if (localeRegionId.equals(region.getId())) { if (localeRegionId.equals(region.getId())) {
spinner.setSelection(regionIndex); mRegionSpinner.setSelection(regionIndex);
} }
if (!fixedOffset) { if (!fixedOffset) {
for (String timeZoneId: region.getTimeZoneIds()) { for (String timeZoneId: region.getTimeZoneIds()) {
if (TextUtils.equals(timeZoneId, mSelectedTimeZone)) { if (TextUtils.equals(timeZoneId, mSelectedTimeZone)) {
spinner.setSelection(regionIndex); mRegionSpinner.setSelection(regionIndex);
return; return;
} }
} }
@@ -179,16 +185,15 @@ public class ZonePicker extends InstrumentedFragment
private void setSelectByRegion(boolean selectByRegion) { private void setSelectByRegion(boolean selectByRegion) {
mSelectByRegion = selectByRegion; mSelectByRegion = selectByRegion;
getView().findViewById(R.id.tz_region_spinner_layout).setVisibility( mRegionSpinnerLayout.setVisibility(
mSelectByRegion ? View.VISIBLE : View.GONE); mSelectByRegion ? View.VISIBLE : View.GONE);
List<TimeZoneInfo> tzInfos; List<TimeZoneInfo> tzInfos;
if (selectByRegion) { if (selectByRegion) {
Spinner regionSpinner = getView().findViewById(R.id.tz_region_spinner); int selectedRegion = mRegionSpinner.getSelectedItemPosition();
int selectedRegion = regionSpinner.getSelectedItemPosition();
if (selectedRegion == -1) { if (selectedRegion == -1) {
// Arbitrarily pick the first item if no region was selected above. // Arbitrarily pick the first item if no region was selected above.
selectedRegion = 0; selectedRegion = 0;
regionSpinner.setSelection(selectedRegion); mRegionSpinner.setSelection(selectedRegion);
} }
tzInfos = getTimeZoneInfos(mRegions.get(selectedRegion)); tzInfos = getTimeZoneInfos(mRegions.get(selectedRegion));
} else { } else {