diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsRootView.java b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsRootView.java index 0928a42dd..a950b363c 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsRootView.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsRootView.java @@ -119,13 +119,15 @@ public class ListHabitsRootView extends BaseRootView @Nullable ListHabitsSelectionMenu menu) { listView.setController(null); - if (controller == null || listAdapter == null) return; + if (controller == null || menu == null || listAdapter == null) return; HabitCardListController listController = new HabitCardListController(listAdapter, listView); + listController.setHabitListener(controller); listController.setSelectionListener(menu); listView.setController(listController); + menu.setListController(listController); } public void setListAdapter(@NonNull HabitCardListAdapter listAdapter) diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreen.java b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreen.java index 072d1ac40..1a189464b 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreen.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsScreen.java @@ -75,7 +75,7 @@ public class ListHabitsScreen extends BaseScreen HabitCardListAdapter adapter = new HabitCardListAdapter( ListHabitsRootView.MAX_CHECKMARK_COUNT); rootView.setListAdapter(adapter); - selectionMenu.setAdapter(adapter); + selectionMenu.setListAdapter(adapter); } @Override diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsSelectionMenu.java b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsSelectionMenu.java index 27ae3c4ef..540f71e90 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsSelectionMenu.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsSelectionMenu.java @@ -19,26 +19,19 @@ package org.isoron.uhabits.ui.habits.list; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.view.Menu; -import android.view.MenuItem; - -import org.isoron.uhabits.HabitsApplication; -import org.isoron.uhabits.R; -import org.isoron.uhabits.commands.ArchiveHabitsCommand; -import org.isoron.uhabits.commands.ChangeHabitColorCommand; -import org.isoron.uhabits.commands.CommandRunner; -import org.isoron.uhabits.commands.DeleteHabitsCommand; -import org.isoron.uhabits.commands.UnarchiveHabitsCommand; -import org.isoron.uhabits.models.Habit; -import org.isoron.uhabits.ui.BaseSelectionMenu; -import org.isoron.uhabits.ui.habits.list.controllers.HabitCardListController; -import org.isoron.uhabits.ui.habits.list.model.HabitCardListAdapter; - -import java.util.List; - -import javax.inject.Inject; +import android.support.annotation.*; +import android.view.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.ui.habits.list.controllers.*; +import org.isoron.uhabits.ui.habits.list.model.*; + +import java.util.*; + +import javax.inject.*; public class ListHabitsSelectionMenu extends BaseSelectionMenu implements HabitCardListController.SelectionListener @@ -50,7 +43,10 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu CommandRunner commandRunner; @Nullable - private HabitCardListAdapter adapter; + private HabitCardListAdapter listAdapter; + + @Nullable + private HabitCardListController listController; public ListHabitsSelectionMenu(@NonNull ListHabitsScreen screen) { @@ -61,16 +57,16 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu @Override public void onFinish() { - if (adapter != null) adapter.clearSelection(); + if (listController != null) listController.onSelectionFinished(); super.onFinish(); } @Override public boolean onItemClicked(@NonNull MenuItem item) { - if (adapter == null) return false; + if (listAdapter == null) return false; - List selected = adapter.getSelected(); + List selected = listAdapter.getSelected(); if (selected.isEmpty()) return false; Habit firstHabit = selected.get(0); @@ -108,8 +104,8 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu @Override public boolean onPrepare(@NonNull Menu menu) { - if (adapter == null) return false; - List selected = adapter.getSelected(); + if (listAdapter == null) return false; + List selected = listAdapter.getSelected(); boolean showEdit = (selected.size() == 1); boolean showArchive = true; @@ -153,10 +149,21 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu screen.startSelection(); } - public void setAdapter(@Nullable HabitCardListAdapter adapter) + public void setListAdapter(@Nullable HabitCardListAdapter listAdapter) + { + if (listAdapter == null) return; + this.listAdapter = listAdapter; + } + + public void setListController(HabitCardListController listController) + { + this.listController = listController; + } + + @Override + protected int getResourceId() { - if (adapter == null) return; - this.adapter = adapter; + return R.menu.list_habits_selection; } private void archive(@NonNull List selected) @@ -177,12 +184,6 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu screen.showEditHabitScreen(firstHabit); } - @Override - protected int getResourceId() - { - return R.menu.list_habits_selection; - } - private void showColorPicker(@NonNull List selected, @NonNull Habit firstHabit) { diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/list/controllers/HabitCardListController.java b/app/src/main/java/org/isoron/uhabits/ui/habits/list/controllers/HabitCardListController.java index ebb69d60c..192d92f21 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/list/controllers/HabitCardListController.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/list/controllers/HabitCardListController.java @@ -19,14 +19,13 @@ package org.isoron.uhabits.ui.habits.list.controllers; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import android.support.annotation.*; -import com.mobeta.android.dslv.DragSortListView; +import com.mobeta.android.dslv.*; -import org.isoron.uhabits.models.Habit; -import org.isoron.uhabits.ui.habits.list.model.HabitCardListAdapter; -import org.isoron.uhabits.ui.habits.list.views.HabitCardListView; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.habits.list.model.*; +import org.isoron.uhabits.ui.habits.list.views.*; /** * Controller responsible for receiving and processing the events generated by a @@ -131,6 +130,16 @@ public class HabitCardListController implements DragSortListView.DropListener, activeMode.onItemLongClick(position); } + /** + * Called when the selection operation is cancelled externally, by something + * other than this controller. This happens, for example, when the user + * presses the back button. + */ + public void onSelectionFinished() + { + cancelSelection(); + } + /** * Called when the user wants to toggle a checkmark. * @@ -153,7 +162,6 @@ public class HabitCardListController implements DragSortListView.DropListener, this.selectionListener = listener; } - /** * Called when the user starts dragging an item. * @@ -165,6 +173,17 @@ public class HabitCardListController implements DragSortListView.DropListener, activeMode.startDrag(position); } + /** + * Selects or deselects the item at a given position + * + * @param position the position of the item to be selected/deselected + */ + protected void toggleSelection(int position) + { + adapter.toggleSelection(position); + activeMode = adapter.isSelectionEmpty() ? NORMAL_MODE : SELECTION_MODE; + } + /** * Marks all items as not selected and finishes the selection operation. */ @@ -177,17 +196,6 @@ public class HabitCardListController implements DragSortListView.DropListener, if (selectionListener != null) selectionListener.onSelectionFinish(); } - /** - * Selects or deselects the item at a given position - * - * @param position the position of the item to be selected/deselected - */ - protected void toggleSelection(int position) - { - adapter.toggleSelection(position); - activeMode = adapter.isSelectionEmpty() ? NORMAL_MODE : SELECTION_MODE; - } - public interface HabitListener extends CheckmarkButtonController.Listener { /** @@ -306,12 +314,11 @@ public class HabitCardListController implements DragSortListView.DropListener, protected void notifyListener() { - if(selectionListener == null) return; + if (selectionListener == null) return; if (activeMode == SELECTION_MODE) selectionListener.onSelectionChange(); - else - selectionListener.onSelectionFinish(); + else selectionListener.onSelectionFinish(); } } }