Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8cb8779 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix crash if timezone is changed and "Don't keep activities" mode is on"

parents 910eca86 8db2d30f
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ public class TimeZoneSettings extends DashboardFragment {
    private Locale mLocale;
    private boolean mSelectByRegion;
    private TimeZoneData mTimeZoneData;
    private Intent mPendingZonePickerRequestResult;

    private String mSelectedTimeZoneId;
    private TimeZoneInfo.Formatter mTimeZoneInfoFormatter;
@@ -136,12 +137,10 @@ public class TimeZoneSettings extends DashboardFragment {
        switch (requestCode) {
            case REQUEST_CODE_REGION_PICKER:
            case REQUEST_CODE_ZONE_PICKER: {
                String regionId = data.getStringExtra(RegionSearchPicker.EXTRA_RESULT_REGION_ID);
                String tzId = data.getStringExtra(RegionZonePicker.EXTRA_RESULT_TIME_ZONE_ID);
                // Ignore the result if user didn't change the region or time zone.
                if (!Objects.equals(regionId, use(RegionPreferenceController.class).getRegionId())
                        || !Objects.equals(tzId, mSelectedTimeZoneId)) {
                    onRegionZoneChanged(regionId, tzId);
                if (mTimeZoneData == null) {
                    mPendingZonePickerRequestResult = data;
                } else {
                    onZonePickerRequestResult(mTimeZoneData, data);
                }
                break;
            }
@@ -166,8 +165,11 @@ public class TimeZoneSettings extends DashboardFragment {
            mTimeZoneData = timeZoneData;
            setupForCurrentTimeZone();
            getActivity().invalidateOptionsMenu();
            if (mPendingZonePickerRequestResult != null) {
                onZonePickerRequestResult(timeZoneData, mPendingZonePickerRequestResult);
                mPendingZonePickerRequestResult = null;
            }
        }

    }

    private void startRegionPicker() {
@@ -226,9 +228,17 @@ public class TimeZoneSettings extends DashboardFragment {
        updatePreferenceStates();
    }

    private void onRegionZoneChanged(String regionId, String tzId) {
    private void onZonePickerRequestResult(TimeZoneData timeZoneData, Intent data) {
        String regionId = data.getStringExtra(RegionSearchPicker.EXTRA_RESULT_REGION_ID);
        String tzId = data.getStringExtra(RegionZonePicker.EXTRA_RESULT_TIME_ZONE_ID);
        // Ignore the result if user didn't change the region or time zone.
        if (Objects.equals(regionId, use(RegionPreferenceController.class).getRegionId())
            && Objects.equals(tzId, mSelectedTimeZoneId)) {
            return;
        }

        FilteredCountryTimeZones countryTimeZones =
                mTimeZoneData.lookupCountryTimeZones(regionId);
                timeZoneData.lookupCountryTimeZones(regionId);
        if (countryTimeZones == null || !countryTimeZones.getTimeZoneIds().contains(tzId)) {
            Log.e(TAG, "Unknown time zone id is selected: " + tzId);
            return;