Merge "Fix crash in new time zone picker."
This commit is contained in:
committed by
Android (Google) Code Review
commit
35fc0a9a9b
@@ -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 {
|
||||||
|
Reference in New Issue
Block a user