Skip to content

Commit 9c9b102

Browse files
committed
Save instance state on datetime picker on rotate
1 parent 1e0b0b1 commit 9c9b102

File tree

2 files changed

+142
-108
lines changed

2 files changed

+142
-108
lines changed

mage/src/main/java/mil/nga/giat/mage/observation/DateTimePickerDialog.java

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package mil.nga.giat.mage.observation;
22

3-
import android.content.Context;
43
import android.os.Build;
54
import android.os.Bundle;
65
import android.support.annotation.Nullable;
@@ -11,20 +10,17 @@
1110
import android.support.v4.app.FragmentPagerAdapter;
1211
import android.support.v4.view.PagerAdapter;
1312
import android.support.v4.view.ViewPager;
14-
import android.support.v7.view.ContextThemeWrapper;
1513
import android.view.LayoutInflater;
1614
import android.view.View;
1715
import android.view.ViewGroup;
1816
import android.widget.DatePicker;
1917
import android.widget.TimePicker;
2018

2119
import java.text.DateFormat;
22-
import java.text.SimpleDateFormat;
23-
import java.util.ArrayList;
20+
import java.util.Arrays;
2421
import java.util.Calendar;
2522
import java.util.Date;
2623
import java.util.List;
27-
import java.util.TimeZone;
2824

2925
import mil.nga.giat.mage.R;
3026
import mil.nga.giat.mage.utils.DateFormatFactory;
@@ -39,13 +35,17 @@ public interface OnDateTimeChangedListener {
3935
void onDateTimeChanged(Date date);
4036
}
4137

38+
private static final String CALENDAR_INSTANCE = "CALENDAR";
4239
private static final String DATE_TIME_EXTRA ="DATE_TIME_EXTRA";
4340

4441
private Calendar calendar = Calendar.getInstance();
4542

4643
private DateFormat dateFormat;
4744
private DateFormat timeFormat;
4845

46+
DatePickerFragment datePickerFragment;
47+
TimePickerFragment timePickerFragment;
48+
4949
private OnDateTimeChangedListener onDateTimeChangedListener;
5050

5151
public static DateTimePickerDialog newInstance(Date date) {
@@ -73,12 +73,30 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
7373
calendar.setTime(date);
7474
}
7575

76+
@Override
77+
public void onSaveInstanceState(Bundle outState) {
78+
super.onSaveInstanceState(outState);
79+
80+
outState.putSerializable(CALENDAR_INSTANCE, calendar);
81+
82+
FragmentManager manager = getChildFragmentManager();
83+
manager.putFragment(outState, DatePickerFragment.class.getName(), datePickerFragment);
84+
manager.putFragment(outState, TimePickerFragment.class.getName(), timePickerFragment);
85+
}
86+
7687
@Override
7788
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
78-
final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.AppTheme_PrimaryAccent);
7989
LayoutInflater localInflater = inflater.cloneInContext(getContext());
8090
View view = localInflater.inflate(R.layout.date_time_dialog, container, false);
8191

92+
if (savedInstanceState != null) {
93+
calendar = (Calendar) savedInstanceState.getSerializable(CALENDAR_INSTANCE);
94+
95+
FragmentManager manager = getChildFragmentManager();
96+
datePickerFragment = (DatePickerFragment) manager.getFragment(savedInstanceState, DatePickerFragment.class.getName());
97+
timePickerFragment = (TimePickerFragment) manager.getFragment(savedInstanceState, TimePickerFragment.class.getName());
98+
}
99+
82100
final TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
83101
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
84102
tabLayout.setTabMode(TabLayout.MODE_FIXED);
@@ -91,9 +109,9 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
91109

92110
final ViewPager viewPager = (ViewPager) view.findViewById(R.id.pager);
93111

94-
List<Fragment> fragments = new ArrayList<>();
95-
DatePickerFragment datePickerFragment = DatePickerFragment.newInstance(calendar.getTime());
96-
fragments.add(datePickerFragment);
112+
if (datePickerFragment == null) {
113+
datePickerFragment = DatePickerFragment.newInstance(calendar.getTime());
114+
}
97115
datePickerFragment.setOnDateChangedListener(new DatePicker.OnDateChangedListener() {
98116
@Override
99117
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
@@ -105,8 +123,9 @@ public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfM
105123
}
106124
});
107125

108-
TimePickerFragment timePickerFragment = TimePickerFragment.newInstance(calendar.getTime());
109-
fragments.add(timePickerFragment);
126+
if (timePickerFragment == null) {
127+
timePickerFragment = TimePickerFragment.newInstance(calendar.getTime());
128+
}
110129
timePickerFragment.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
111130
@Override
112131
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
@@ -117,7 +136,8 @@ public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
117136
}
118137
});
119138

120-
PagerAdapter adapter = new DateTimePagerAdapter(getChildFragmentManager(), fragments);
139+
140+
PagerAdapter adapter = new DateTimePagerAdapter(getChildFragmentManager(), Arrays.asList(new Fragment[] {datePickerFragment, timePickerFragment}));
121141
viewPager.setAdapter(adapter);
122142
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
123143

@@ -186,7 +206,6 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
186206
}
187207

188208
calendar.setTimeZone(DateFormatFactory.getTimeZone(getContext()));
189-
190209
calendar.setTime(date);
191210
}
192211

0 commit comments

Comments
 (0)