Skip to content

Commit 57032f5

Browse files
committed
Save instance state on grade detail activity in edit mode
1 parent 4cdf261 commit 57032f5

2 files changed

Lines changed: 64 additions & 0 deletions

File tree

app/src/main/java/de/mygrades/view/activity/GradeDetailedActivity.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public class GradeDetailedActivity extends AppCompatActivity {
6060
private static final String GRADE_HASH_STATE = "grade_hash";
6161
private static final String EDIT_MODE_ENABLED_STATE = "edit_mode_enabled";
6262
private static final String ADD_NEW_GRADE_ENTRY = "add_new_grade_entry";
63+
private static final String EDIT_HELPER_STATE = "edit_helper_state";
6364

6465
// views
6566
private LinearLayout llRootView; // used to show snackbar
@@ -88,6 +89,7 @@ public class GradeDetailedActivity extends AppCompatActivity {
8889
private boolean receivedGradeEntryEvent;
8990
private boolean editModeEnabled;
9091
private boolean addNewGradeEntry;
92+
private Bundle editHelperState;
9193

9294
// snackbar listener
9395
private View.OnClickListener tryAgainListener;
@@ -280,6 +282,9 @@ public void onEventMainThread(GradeEntryEvent gradeEntryEvent) {
280282
editHelper.setSemesterToNumberMap(gradeEntryEvent.getSemesterToSemesterNumberMap());
281283
editHelper.init();
282284
editHelper.updateValues();
285+
if (editModeEnabled) {
286+
editHelper.restoreInstanceState(editHelperState);
287+
}
283288

284289
if (addNewGradeEntry) {
285290
editHelper.enableEditMode(true);
@@ -417,6 +422,7 @@ protected void onSaveInstanceState(Bundle outState) {
417422
outState.putString(GRADE_HASH_STATE, gradeHash);
418423
outState.putBoolean(EDIT_MODE_ENABLED_STATE, editModeEnabled);
419424
outState.putBoolean(ADD_NEW_GRADE_ENTRY, addNewGradeEntry);
425+
outState.putBundle(EDIT_HELPER_STATE, editHelper.getInstanceState());
420426
}
421427

422428
@Override
@@ -428,6 +434,7 @@ protected void onRestoreInstanceState(Bundle savedInstanceState) {
428434
ptrHeader.restoreInstanceState(savedInstanceState, ptrFrame);
429435
editModeEnabled = savedInstanceState.getBoolean(EDIT_MODE_ENABLED_STATE);
430436
addNewGradeEntry = savedInstanceState.getBoolean(ADD_NEW_GRADE_ENTRY);
437+
editHelperState = savedInstanceState.getBundle(EDIT_HELPER_STATE);
431438
}
432439

433440
private class MyValueFormatter implements ValueFormatter {

app/src/main/java/de/mygrades/view/activity/GradeDetailedActivityEditHelper.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package de.mygrades.view.activity;
22

33
import android.app.Activity;
4+
import android.os.Bundle;
45
import android.util.Log;
56
import android.view.View;
67
import android.view.ViewGroup;
@@ -25,6 +26,19 @@
2526
public class GradeDetailedActivityEditHelper {
2627
private static final String TAG = GradeDetailedActivityEditHelper.class.getSimpleName();
2728

29+
// instance state
30+
public static final String ET_EXAM_ID_TEXT = "et_exam_id_text";
31+
public static final String ET_STATE_TEXT = "et_state_text";
32+
public static final String ET_CREDIT_POINTS_TEXT = "et_credit_points_text";
33+
public static final String ET_GRADE_TEXT = "et_grade_text";
34+
public static final String ET_ANNOTATION_TEXT = "et_annotation_text";
35+
public static final String ET_EXAM_DATE_TEXT = "et_exam_date_text";
36+
public static final String ET_TESTER_TEXT = "et_tester_text";
37+
public static final String ET_WEIGHT_TEXT = "et_weight_text";
38+
public static final String ET_NAME_TEXT = "et_name_text";
39+
public static final String SP_ATTEMPT_POSITION = "sp_attempt_position";
40+
public static final String SP_SEMESTER_POSITION = "sp_semester_position";
41+
2842
private Activity activity;
2943
private MainServiceHelper mainServiceHelper;
3044
private boolean editModeEnabled;
@@ -718,6 +732,49 @@ private Double stringToDouble(String s) {
718732
return null;
719733
}
720734

735+
/**
736+
* Get the instance state for all edit texts and spinner.
737+
*
738+
* @return instance state as Bundle
739+
*/
740+
public Bundle getInstanceState() {
741+
Bundle state = new Bundle();
742+
state.putString(ET_EXAM_ID_TEXT, etExamId.getText().toString());
743+
state.putString(ET_STATE_TEXT, etState.getText().toString());
744+
state.putString(ET_CREDIT_POINTS_TEXT, etCreditPoints.getText().toString());
745+
state.putString(ET_GRADE_TEXT, etGrade.getText().toString());
746+
state.putString(ET_ANNOTATION_TEXT, etAnnotation.getText().toString());
747+
state.putString(ET_EXAM_DATE_TEXT, etExamDate.getText().toString());
748+
state.putString(ET_TESTER_TEXT, etTester.getText().toString());
749+
state.putString(ET_WEIGHT_TEXT, etWeight.getText().toString());
750+
state.putString(ET_NAME_TEXT, etName.getText().toString());
751+
state.putInt(SP_ATTEMPT_POSITION, spAttempt.getSelectedItemPosition());
752+
state.putInt(SP_SEMESTER_POSITION, spSemester.getSelectedItemPosition());
753+
754+
return state;
755+
}
756+
757+
/**
758+
* Restore the instance state for all edit texts and spinner.
759+
*
760+
* @param savedState Bundle
761+
*/
762+
public void restoreInstanceState(Bundle savedState) {
763+
if (savedState == null) return;
764+
765+
etExamId.setText(savedState.getString(ET_EXAM_ID_TEXT));
766+
etState.setText(savedState.getString(ET_STATE_TEXT));
767+
etCreditPoints.setText(savedState.getString(ET_CREDIT_POINTS_TEXT));
768+
etGrade.setText(savedState.getString(ET_GRADE_TEXT));
769+
etAnnotation.setText(savedState.getString(ET_ANNOTATION_TEXT));
770+
etExamDate.setText(savedState.getString(ET_EXAM_DATE_TEXT));
771+
etTester.setText(savedState.getString(ET_TESTER_TEXT));
772+
etWeight.setText(savedState.getString(ET_WEIGHT_TEXT));
773+
etName.setText(savedState.getString(ET_NAME_TEXT));
774+
spAttempt.setSelection(savedState.getInt(SP_ATTEMPT_POSITION));
775+
spSemester.setSelection(savedState.getInt(SP_SEMESTER_POSITION));
776+
}
777+
721778
public void setGradeEntry(GradeEntry gradeEntry) {
722779
this.gradeEntry = gradeEntry;
723780
}

0 commit comments

Comments
 (0)