From 27231a9f64ebbe44eb028494603315a00bb3e258 Mon Sep 17 00:00:00 2001 From: Adeel Zafar Date: Wed, 27 Feb 2019 17:54:34 +0500 Subject: [PATCH] Fixes On screen rotation selected forms get unselected bug Using onSaveInstanceState() and restoring in the onCreateView() Removing ViewModel Fixes On screen rotation selected forms get unselected bug Using onSaveInstanceState() and restoring in the onCreateView() --- .../share/fragments/BlankFormsFragment.java | 18 +++++++++++++++++ .../share/fragments/FilledFormsFragment.java | 20 +++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/skunkworks_crow/src/main/java/org/odk/share/fragments/BlankFormsFragment.java b/skunkworks_crow/src/main/java/org/odk/share/fragments/BlankFormsFragment.java index 5e28df42..e773eae1 100644 --- a/skunkworks_crow/src/main/java/org/odk/share/fragments/BlankFormsFragment.java +++ b/skunkworks_crow/src/main/java/org/odk/share/fragments/BlankFormsFragment.java @@ -48,6 +48,7 @@ public class BlankFormsFragment extends FormListFragment implements LoaderManage public static final String FORM_IDS = "form_ids"; private static final String FORM_CHOOSER_LIST_SORTING_ORDER = "formChooserListSortingOrder"; + private static final String SELECTED_INSTANCES_KEY = "ROTATION_SELECTED_INSTANCES"; private static final int FORM_LOADER = 2; @BindView(R.id.recyclerview) @@ -88,6 +89,15 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, LinearLayoutManager llm = new LinearLayoutManager(getActivity()); llm.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(llm); + + if (savedInstanceState != null) { + long[] previousSelectedInstances = savedInstanceState.getLongArray(SELECTED_INSTANCES_KEY); + for (long previousSelectedInstance : previousSelectedInstances) { + selectedForms.add(previousSelectedInstance); + } + sendButton.setEnabled(selectedForms.size() > 0); + } + return view; } @@ -103,6 +113,14 @@ public Loader onCreateLoader(int id, Bundle args) { return formsDao.getFormsCursorLoader(getFilterText(), getSortingOrder()); } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + outState.putLongArray(SELECTED_INSTANCES_KEY, ArrayUtils.toPrimitive( + selectedForms.toArray(new Long[selectedForms.size()]))); + + } + @Override public void onLoadFinished(@NonNull Loader loader, Cursor cursor) { if (cursor != null) { diff --git a/skunkworks_crow/src/main/java/org/odk/share/fragments/FilledFormsFragment.java b/skunkworks_crow/src/main/java/org/odk/share/fragments/FilledFormsFragment.java index 22cc46ba..a611f07c 100644 --- a/skunkworks_crow/src/main/java/org/odk/share/fragments/FilledFormsFragment.java +++ b/skunkworks_crow/src/main/java/org/odk/share/fragments/FilledFormsFragment.java @@ -61,6 +61,7 @@ public class FilledFormsFragment extends InstanceListFragment implements LoaderM private InstanceAdapter instanceAdapter; private LinkedHashSet selectedInstances; + private static final String SELECTED_INSTANCES_KEY = "ROTATION_SELECTED_INSTANCES"; public FilledFormsFragment() { } @@ -71,12 +72,19 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, setHasOptionsMenu(true); View view = inflater.inflate(R.layout.fragment_forms, container, false); ButterKnife.bind(this, view); - selectedInstances = new LinkedHashSet<>(); - LinearLayoutManager llm = new LinearLayoutManager(getActivity()); llm.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(llm); + + if (savedInstanceState != null) { + long[] previousSelectedInstances = savedInstanceState.getLongArray(SELECTED_INSTANCES_KEY); + for (long previousSelectedInstance : previousSelectedInstances) { + selectedInstances.add(previousSelectedInstance); + } + sendButton.setEnabled(selectedInstances.size() > 0); + } + return view; } @@ -92,6 +100,14 @@ public Loader onCreateLoader(int id, Bundle args) { return instancesDao.getSavedInstancesCursorLoader(getFilterText(), getSortingOrder()); } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + outState.putLongArray(SELECTED_INSTANCES_KEY, ArrayUtils.toPrimitive( + selectedInstances.toArray(new Long[selectedInstances.size()]))); + + } + @Override public void onLoadFinished(@NonNull Loader loader, Cursor cursor) { if (cursor != null) {