From ad1375c0ce2aed19dd2c0058b996a42a4f778878 Mon Sep 17 00:00:00 2001 From: Stefan Niedermann Date: Fri, 24 Apr 2020 13:50:30 +0200 Subject: #396 Filter cards Fix memory leak when switching between boards --- .../deck/ui/filter/FilterDialogFragment.java | 29 ++++++++++++++-------- .../deck/ui/filter/OverdueFilterAdapter.java | 11 ++++++++ 2 files changed, 30 insertions(+), 10 deletions(-) (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/filter') diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java index a6bdfdadb..518d56dde 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java @@ -5,10 +5,9 @@ import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; -import android.widget.LinearLayout; import androidx.annotation.NonNull; -import androidx.annotation.Px; +import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.ViewModelProvider; @@ -16,6 +15,7 @@ import androidx.lifecycle.ViewModelProvider; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogFilterBinding; import it.niedermann.nextcloud.deck.model.Account; +import it.niedermann.nextcloud.deck.model.enums.EDueType; import it.niedermann.nextcloud.deck.model.internal.FilterInformation; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.ui.MainActivity; @@ -38,10 +38,6 @@ public class FilterDialogFragment extends BrandedDialogFragment { private OverdueFilterAdapter overdueAdapter; private FilterInformation filterInformation; - @Px - private int avatarSize; - private LinearLayout.LayoutParams avatarLayoutParams; - private Account account; private long boardId; @@ -79,8 +75,7 @@ public class FilterDialogFragment extends BrandedDialogFragment { } final AlertDialog.Builder dialogBuilder = new BrandedAlertDialogBuilder(requireContext()); - - SyncManager syncManager = new SyncManager(requireActivity()); + final SyncManager syncManager = new SyncManager(requireActivity()); binding = DialogFilterBinding.inflate(requireActivity().getLayoutInflater()); @@ -95,7 +90,7 @@ public class FilterDialogFragment extends BrandedDialogFragment { @Override public void onNothingSelected(AdapterView parent) { - filterInformation.setDueType(null); + filterInformation.setDueType(EDueType.NO_FILTER); } }); @@ -119,9 +114,11 @@ public class FilterDialogFragment extends BrandedDialogFragment { .setPositiveButton(R.string.simple_filter, (a, b) -> { filterInformation.clearLabels(); filterInformation.addAllLabels(labelAdapter.getSelected()); + filterInformation.clearUsers(); filterInformation.addAllUsers(userAdapter.getSelected()); - viewModel.postFilterInformation(filterInformation); + + viewModel.postFilterInformation(hasActiveFilter(filterInformation) ? filterInformation : null); }) .create(); } @@ -141,4 +138,16 @@ public class FilterDialogFragment extends BrandedDialogFragment { public void applyBrand(int mainColor, int textColor) { } + + /** + * @return whether or not the given filterInformation has any actual filters set + */ + private static boolean hasActiveFilter(@Nullable FilterInformation filterInformation) { + if (filterInformation == null) { + return false; + } + return (filterInformation.getDueType() != null && filterInformation.getDueType() != EDueType.NO_FILTER) + || filterInformation.getUsers().size() > 0 + || filterInformation.getLabels().size() > 0; + } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/OverdueFilterAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/OverdueFilterAdapter.java index 71b351e39..5de6c50c8 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/OverdueFilterAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/OverdueFilterAdapter.java @@ -37,6 +37,17 @@ public class OverdueFilterAdapter extends ArrayAdapter { return getView(position, convertView, parent); } + @NonNull + @Override + public EDueType getItem(int position) { + EDueType item = super.getItem(position); + if (item != null) { + return item; + } else { + return EDueType.NO_FILTER; + } + } + @NotNull @Override public View getView(int position, View convertView, @NotNull ViewGroup parent) { -- cgit v1.2.3