Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-04-23 15:21:48 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2020-04-24 15:12:11 +0300
commitbd897e0087dc9c0cbd87df171792b4b682185bf7 (patch)
tree5183312afd315c174b88fdd874a4efd9ada148e2 /app/src
parent87e8310af269b25b8b248bcfd63d12b6e43818b2 (diff)
#396 Filter cards
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java14
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java20
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterChangeListener.java7
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java15
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackAdapter.java14
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java80
6 files changed, 81 insertions, 69 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
index 01c568bb5..d79d7d2be 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
@@ -34,6 +34,7 @@ import androidx.core.util.Pair;
import androidx.core.view.GravityCompat;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProvider;
import androidx.viewpager2.widget.ViewPager2;
import com.bumptech.glide.Glide;
@@ -81,7 +82,6 @@ import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder;
import it.niedermann.nextcloud.deck.ui.card.CardAdapter;
import it.niedermann.nextcloud.deck.ui.card.EditActivity;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
-import it.niedermann.nextcloud.deck.ui.filter.FilterChangeListener;
import it.niedermann.nextcloud.deck.ui.filter.FilterDialogFragment;
import it.niedermann.nextcloud.deck.ui.settings.SettingsActivity;
import it.niedermann.nextcloud.deck.ui.stack.DeleteStackDialogFragment;
@@ -111,11 +111,13 @@ import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ADD_BOARD
import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_SETTINGS;
import static it.niedermann.nextcloud.deck.util.ExceptionUtil.handleHttpRequestFailedException;
-public class MainActivity extends BrandedActivity implements DeleteStackListener, EditStackListener, DeleteBoardListener, EditBoardListener, OnScrollListener, OnNavigationItemSelectedListener, DrawerAccountListener, FilterChangeListener {
+public class MainActivity extends BrandedActivity implements DeleteStackListener, EditStackListener, DeleteBoardListener, EditBoardListener, OnScrollListener, OnNavigationItemSelectedListener, DrawerAccountListener {
protected ActivityMainBinding binding;
protected NavHeaderMainBinding headerBinding;
+ private MainViewModel viewModel;
+
protected static final int ACTIVITY_ABOUT = 1;
protected static final int ACTIVITY_SETTINGS = 2;
@@ -162,6 +164,7 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener
headerBinding = NavHeaderMainBinding.bind(binding.navigationView.getHeaderView(0));
setContentView(binding.getRoot());
+ viewModel = new ViewModelProvider(this).get(MainViewModel.class);
addList = getString(R.string.add_list);
addBoard = getString(R.string.add_board);
@@ -918,11 +921,4 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener
syncManager.deleteBoard(board);
binding.drawerLayout.closeDrawer(GravityCompat.START);
}
-
- @Override
- public void onFilterChanged(FilterInformation filterInformation) {
- DeckLog.info("Filter changed: " + filterInformation);
- this.filterInformation = filterInformation;
- stackAdapter.onFilterChanged(filterInformation);
- }
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java
new file mode 100644
index 000000000..e0980566d
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java
@@ -0,0 +1,20 @@
+package it.niedermann.nextcloud.deck.ui;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.ViewModel;
+
+import it.niedermann.nextcloud.deck.model.internal.FilterInformation;
+
+public class MainViewModel extends ViewModel {
+
+ private MutableLiveData<FilterInformation> filterInformation = new MutableLiveData<>();
+
+ public void postFilterInformation(FilterInformation filterInformation) {
+ this.filterInformation.postValue(filterInformation);
+ }
+
+ public LiveData<FilterInformation> getFilterInformation() {
+ return this.filterInformation;
+ }
+}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterChangeListener.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterChangeListener.java
deleted file mode 100644
index 50c26ba86..000000000
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterChangeListener.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package it.niedermann.nextcloud.deck.ui.filter;
-
-import it.niedermann.nextcloud.deck.model.internal.FilterInformation;
-
-public interface FilterChangeListener {
- void onFilterChanged(FilterInformation filterInformation);
-}
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 57fe8578f..253ce6d1c 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
@@ -10,12 +10,15 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
+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.internal.FilterInformation;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
+import it.niedermann.nextcloud.deck.ui.MainActivity;
+import it.niedermann.nextcloud.deck.ui.MainViewModel;
import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder;
import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment;
@@ -25,7 +28,8 @@ public class FilterDialogFragment extends BrandedDialogFragment {
private static final String KEY_BOARD_ID = "board_id";
private static final String KEY_FILTER_INFORMATION = "filterInformation";
- private FilterChangeListener filterChangeListener;
+ private MainViewModel viewModel;
+
private DialogFilterBinding binding;
private SyncManager syncManager;
@@ -39,8 +43,8 @@ public class FilterDialogFragment extends BrandedDialogFragment {
public void onAttach(@NonNull Context context) {
super.onAttach(context);
- if (!(requireActivity() instanceof FilterChangeListener)) {
- throw new IllegalArgumentException("Caller must implement" + FilterChangeListener.class.getSimpleName());
+ if (!(requireActivity() instanceof MainActivity)) {
+ throw new IllegalArgumentException("Dialog must be called from " + MainActivity.class.getSimpleName());
}
final Bundle args = getArguments();
@@ -49,7 +53,6 @@ public class FilterDialogFragment extends BrandedDialogFragment {
throw new IllegalArgumentException(KEY_ACCOUNT + " and " + KEY_BOARD_ID + " must be provided as arguments");
}
- this.filterChangeListener = (FilterChangeListener) requireActivity();
this.boardId = args.getLong(KEY_BOARD_ID);
this.account = (Account) args.getSerializable(KEY_ACCOUNT);
@@ -70,6 +73,8 @@ public class FilterDialogFragment extends BrandedDialogFragment {
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ viewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class);
+
final AlertDialog.Builder dialogBuilder = new BrandedAlertDialogBuilder(requireContext());
binding = DialogFilterBinding.inflate(requireActivity().getLayoutInflater());
@@ -91,7 +96,7 @@ public class FilterDialogFragment extends BrandedDialogFragment {
return dialogBuilder
.setView(binding.getRoot())
.setNegativeButton(android.R.string.cancel, null)
- .setPositiveButton(R.string.simple_filter, (a, b) -> filterChangeListener.onFilterChanged(filterInformation))
+ .setPositiveButton(R.string.simple_filter, (a, b) -> viewModel.postFilterInformation(filterInformation))
.create();
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackAdapter.java
index 88e063bce..726613dbe 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackAdapter.java
@@ -10,17 +10,13 @@ import java.util.List;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.full.FullStack;
-import it.niedermann.nextcloud.deck.model.internal.FilterInformation;
-import it.niedermann.nextcloud.deck.ui.filter.FilterChangeListener;
-public class StackAdapter extends FragmentStateAdapter implements FilterChangeListener {
+public class StackAdapter extends FragmentStateAdapter {
@NonNull
private List<FullStack> stackList = new ArrayList<>();
private Account account;
private long boardId;
private boolean canEdit;
- @NonNull
- private FilterInformation filterInformation;
public StackAdapter(@NonNull FragmentActivity fragmentActivity) {
super(fragmentActivity);
@@ -53,7 +49,7 @@ public class StackAdapter extends FragmentStateAdapter implements FilterChangeLi
@NonNull
@Override
public Fragment createFragment(int position) {
- return StackFragment.newInstance(boardId, stackList.get(position).getLocalId(), account, canEdit, filterInformation);
+ return StackFragment.newInstance(boardId, stackList.get(position).getLocalId(), account, canEdit);
}
public void setStacks(@NonNull List<FullStack> fullStacks, @NonNull Account currentAccount, long currentBoardId, boolean currentBoardHasEditPermission) {
@@ -63,10 +59,4 @@ public class StackAdapter extends FragmentStateAdapter implements FilterChangeLi
this.canEdit = currentBoardHasEditPermission;
notifyDataSetChanged();
}
-
- @Override
- public void onFilterChanged(FilterInformation filterInformation) {
- this.filterInformation = filterInformation;
- notifyDataSetChanged();
- }
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java
index 74909bf08..3732ecb61 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java
@@ -1,6 +1,5 @@
package it.niedermann.nextcloud.deck.ui.stack;
-import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -8,7 +7,10 @@ import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
@@ -17,8 +19,8 @@ import it.niedermann.android.crosstabdnd.DragAndDropTab;
import it.niedermann.nextcloud.deck.databinding.FragmentStackBinding;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.full.FullCard;
-import it.niedermann.nextcloud.deck.model.internal.FilterInformation;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
+import it.niedermann.nextcloud.deck.ui.MainViewModel;
import it.niedermann.nextcloud.deck.ui.branding.BrandedFragment;
import it.niedermann.nextcloud.deck.ui.card.CardAdapter;
import it.niedermann.nextcloud.deck.ui.card.SelectCardListener;
@@ -29,33 +31,41 @@ public class StackFragment extends BrandedFragment implements DragAndDropTab<Car
private static final String KEY_STACK_ID = "stackId";
private static final String KEY_ACCOUNT = "account";
private static final String KEY_HAS_EDIT_PERMISSION = "hasEditPermission";
- private static final String KEY_FILTER_INFORMATION = "filterInformation";
private CardAdapter adapter = null;
- @Nullable
- FilterInformation filterInformation;
+ private FragmentStackBinding binding;
+
+ MainViewModel viewModel;
private SyncManager syncManager;
- private Activity activity;
+ private FragmentActivity activity;
private OnScrollListener onScrollListener;
+ private LiveData<List<FullCard>> defaultCardsLiveData;
+ private LiveData<List<FullCard>> filteredCardsLiveData;
+ private Observer<List<FullCard>> cardObserver = (List<FullCard> cards) -> {
+ activity.runOnUiThread(() -> {
+ if (cards != null && cards.size() > 0) {
+ binding.emptyContentView.setVisibility(View.GONE);
+ adapter.setCardList(cards);
+ } else {
+ binding.emptyContentView.setVisibility(View.VISIBLE);
+ }
+ });
+ };
+
private long stackId;
private long boardId;
private Account account;
private boolean canEdit;
- private FragmentStackBinding binding;
-
- public static StackFragment newInstance(long boardId, long stackId, Account account, boolean hasEditPermission, @Nullable FilterInformation filterInformation) {
- Bundle bundle = new Bundle();
- bundle.putLong(KEY_BOARD_ID, boardId);
- bundle.putLong(KEY_STACK_ID, stackId);
- bundle.putBoolean(KEY_HAS_EDIT_PERMISSION, hasEditPermission);
- bundle.putSerializable(KEY_ACCOUNT, account);
- if (filterInformation != null) {
- bundle.putSerializable(KEY_FILTER_INFORMATION, filterInformation);
- }
+ public static StackFragment newInstance(long boardId, long stackId, Account account, boolean hasEditPermission) {
+ final Bundle args = new Bundle();
+ args.putLong(KEY_BOARD_ID, boardId);
+ args.putLong(KEY_STACK_ID, stackId);
+ args.putBoolean(KEY_HAS_EDIT_PERMISSION, hasEditPermission);
+ args.putSerializable(KEY_ACCOUNT, account);
StackFragment fragment = new StackFragment();
- fragment.setArguments(bundle);
+ fragment.setArguments(args);
return fragment;
}
@@ -73,12 +83,6 @@ public class StackFragment extends BrandedFragment implements DragAndDropTab<Car
stackId = args.getLong(KEY_STACK_ID);
account = (Account) args.getSerializable(KEY_ACCOUNT);
canEdit = args.getBoolean(KEY_HAS_EDIT_PERMISSION);
- if (args.containsKey(KEY_FILTER_INFORMATION)) {
- final Object info = args.getSerializable(KEY_FILTER_INFORMATION);
- if (info != null) {
- filterInformation = (FilterInformation) args.getSerializable(KEY_FILTER_INFORMATION);
- }
- }
if (context instanceof OnScrollListener) {
this.onScrollListener = (OnScrollListener) context;
@@ -90,6 +94,8 @@ public class StackFragment extends BrandedFragment implements DragAndDropTab<Car
binding = FragmentStackBinding.inflate(inflater, container, false);
activity = requireActivity();
+ viewModel = new ViewModelProvider(activity).get(MainViewModel.class);
+
syncManager = new SyncManager(activity);
adapter = new CardAdapter(requireContext(), account, boardId, stackId, canEdit, syncManager, this, (requireActivity() instanceof SelectCardListener) ? (SelectCardListener) requireActivity() : null);
@@ -111,17 +117,19 @@ public class StackFragment extends BrandedFragment implements DragAndDropTab<Car
binding.emptyContentView.hideDescription();
}
- // TODO use FilterInformation
- syncManager.getFullCardsForStack(account.getId(), stackId).observe(getViewLifecycleOwner(), (List<FullCard> cards) -> {
- activity.runOnUiThread(() -> {
- if (cards != null && cards.size() > 0) {
- binding.emptyContentView.setVisibility(View.GONE);
- adapter.setCardList(cards);
- } else {
- binding.emptyContentView.setVisibility(View.VISIBLE);
- }
- });
- });
+ defaultCardsLiveData = syncManager.getFullCardsForStack(account.getId(), stackId);
+ defaultCardsLiveData.observe(getViewLifecycleOwner(), cardObserver);
+
+ viewModel.getFilterInformation().observe(activity, (filterInformation -> {
+ if (filterInformation == null) {
+ filteredCardsLiveData.removeObserver(cardObserver);
+ defaultCardsLiveData.observe(getViewLifecycleOwner(), cardObserver);
+ } else {
+ defaultCardsLiveData.removeObserver(cardObserver);
+ filteredCardsLiveData = syncManager.getFullCardsForStack(account.getId(), stackId, filterInformation);
+ filteredCardsLiveData.observe(getViewLifecycleOwner(), cardObserver);
+ }
+ }));
return binding.getRoot();
}