|
|
@ -20,16 +20,9 @@
|
|
|
|
package org.isoron.uhabits.ui.list;
|
|
|
|
package org.isoron.uhabits.ui.list;
|
|
|
|
|
|
|
|
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.content.Intent;
|
|
|
|
|
|
|
|
import android.content.SharedPreferences;
|
|
|
|
|
|
|
|
import android.net.Uri;
|
|
|
|
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.preference.PreferenceManager;
|
|
|
|
|
|
|
|
import android.support.annotation.Nullable;
|
|
|
|
|
|
|
|
import android.support.v4.app.Fragment;
|
|
|
|
import android.support.v4.app.Fragment;
|
|
|
|
import android.support.v7.view.ActionMode;
|
|
|
|
import android.support.v7.view.ActionMode;
|
|
|
|
import android.view.ContextMenu;
|
|
|
|
|
|
|
|
import android.view.ContextMenu.ContextMenuInfo;
|
|
|
|
|
|
|
|
import android.view.HapticFeedbackConstants;
|
|
|
|
import android.view.HapticFeedbackConstants;
|
|
|
|
import android.view.LayoutInflater;
|
|
|
|
import android.view.LayoutInflater;
|
|
|
|
import android.view.Menu;
|
|
|
|
import android.view.Menu;
|
|
|
@ -40,7 +33,6 @@ import android.view.View.OnClickListener;
|
|
|
|
import android.view.View.OnLongClickListener;
|
|
|
|
import android.view.View.OnLongClickListener;
|
|
|
|
import android.view.ViewGroup;
|
|
|
|
import android.view.ViewGroup;
|
|
|
|
import android.widget.AdapterView;
|
|
|
|
import android.widget.AdapterView;
|
|
|
|
import android.widget.AdapterView.AdapterContextMenuInfo;
|
|
|
|
|
|
|
|
import android.widget.AdapterView.OnItemClickListener;
|
|
|
|
import android.widget.AdapterView.OnItemClickListener;
|
|
|
|
import android.widget.LinearLayout;
|
|
|
|
import android.widget.LinearLayout;
|
|
|
|
import android.widget.ProgressBar;
|
|
|
|
import android.widget.ProgressBar;
|
|
|
@ -48,80 +40,96 @@ import android.widget.TextView;
|
|
|
|
|
|
|
|
|
|
|
|
import com.mobeta.android.dslv.DragSortController;
|
|
|
|
import com.mobeta.android.dslv.DragSortController;
|
|
|
|
import com.mobeta.android.dslv.DragSortListView;
|
|
|
|
import com.mobeta.android.dslv.DragSortListView;
|
|
|
|
import com.mobeta.android.dslv.DragSortListView.DropListener;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import org.isoron.uhabits.ui.BaseActivity;
|
|
|
|
import org.isoron.uhabits.Preferences;
|
|
|
|
import org.isoron.uhabits.R;
|
|
|
|
import org.isoron.uhabits.R;
|
|
|
|
import org.isoron.uhabits.commands.Command;
|
|
|
|
import org.isoron.uhabits.commands.Command;
|
|
|
|
import org.isoron.uhabits.commands.ToggleRepetitionCommand;
|
|
|
|
import org.isoron.uhabits.commands.ToggleRepetitionCommand;
|
|
|
|
|
|
|
|
import org.isoron.uhabits.models.Habit;
|
|
|
|
|
|
|
|
import org.isoron.uhabits.ui.BaseActivity;
|
|
|
|
|
|
|
|
import org.isoron.uhabits.ui.HintManager;
|
|
|
|
import org.isoron.uhabits.ui.edit.EditHabitDialogFragment;
|
|
|
|
import org.isoron.uhabits.ui.edit.EditHabitDialogFragment;
|
|
|
|
import org.isoron.uhabits.ui.settings.FilePickerDialog;
|
|
|
|
|
|
|
|
import org.isoron.uhabits.utils.FileUtils;
|
|
|
|
|
|
|
|
import org.isoron.uhabits.utils.DateUtils;
|
|
|
|
import org.isoron.uhabits.utils.DateUtils;
|
|
|
|
import org.isoron.uhabits.ui.HintManager;
|
|
|
|
|
|
|
|
import org.isoron.uhabits.utils.ReminderUtils;
|
|
|
|
|
|
|
|
import org.isoron.uhabits.utils.InterfaceUtils;
|
|
|
|
import org.isoron.uhabits.utils.InterfaceUtils;
|
|
|
|
import org.isoron.uhabits.utils.InterfaceUtils.OnSavedListener;
|
|
|
|
import org.isoron.uhabits.utils.InterfaceUtils.OnSavedListener;
|
|
|
|
import org.isoron.uhabits.models.Habit;
|
|
|
|
import org.isoron.uhabits.utils.ReminderUtils;
|
|
|
|
import org.isoron.uhabits.tasks.ExportCSVTask;
|
|
|
|
|
|
|
|
import org.isoron.uhabits.tasks.ExportDBTask;
|
|
|
|
|
|
|
|
import org.isoron.uhabits.tasks.ImportDataTask;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
import java.util.Date;
|
|
|
|
import java.util.LinkedList;
|
|
|
|
import java.util.LinkedList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
|
|
public class ListHabitsFragment extends Fragment
|
|
|
|
public class ListHabitsFragment extends Fragment
|
|
|
|
implements OnSavedListener, OnItemClickListener, OnLongClickListener, DropListener,
|
|
|
|
implements OnSavedListener, OnItemClickListener, OnLongClickListener,
|
|
|
|
OnClickListener, ListHabitsLoader.Listener, AdapterView.OnItemLongClickListener,
|
|
|
|
OnClickListener, ListHabitsLoader.Listener, AdapterView.OnItemLongClickListener,
|
|
|
|
HabitSelectionCallback.Listener, ImportDataTask.Listener, ExportCSVTask.Listener,
|
|
|
|
HabitSelectionCallback.Listener, ListHabitsController.Screen
|
|
|
|
ExportDBTask.Listener
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
long lastLongClick = 0;
|
|
|
|
long lastLongClick = 0;
|
|
|
|
private boolean isShortToggleEnabled;
|
|
|
|
|
|
|
|
private boolean showArchived;
|
|
|
|
private boolean showArchived;
|
|
|
|
|
|
|
|
|
|
|
|
private ActionMode actionMode;
|
|
|
|
private ActionMode actionMode;
|
|
|
|
private ListHabitsAdapter adapter;
|
|
|
|
private ListHabitsAdapter adapter;
|
|
|
|
private ListHabitsLoader loader;
|
|
|
|
public ListHabitsLoader loader;
|
|
|
|
private HintManager hintManager;
|
|
|
|
private HintManager hintManager;
|
|
|
|
private ListHabitsHelper helper;
|
|
|
|
private ListHabitsHelper helper;
|
|
|
|
private List<Integer> selectedPositions;
|
|
|
|
private List<Integer> selectedPositions;
|
|
|
|
private OnHabitClickListener habitClickListener;
|
|
|
|
private OnHabitClickListener habitClickListener;
|
|
|
|
private BaseActivity activity;
|
|
|
|
private BaseActivity activity;
|
|
|
|
private SharedPreferences prefs;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private DragSortListView listView;
|
|
|
|
private DragSortListView listView;
|
|
|
|
private LinearLayout llButtonsHeader;
|
|
|
|
private LinearLayout llButtonsHeader;
|
|
|
|
private ProgressBar progressBar;
|
|
|
|
public ProgressBar progressBar;
|
|
|
|
private View llEmpty;
|
|
|
|
private View llEmpty;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private ListHabitsController controller;
|
|
|
|
|
|
|
|
private Preferences prefs;
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
|
|
Bundle savedInstanceState)
|
|
|
|
Bundle savedInstanceState)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
View view = inflater.inflate(R.layout.list_habits_fragment, container, false);
|
|
|
|
View view = inflater.inflate(R.layout.list_habits_fragment, container, false);
|
|
|
|
|
|
|
|
|
|
|
|
View llHint = view.findViewById(R.id.llHint);
|
|
|
|
View llHint = view.findViewById(R.id.llHint);
|
|
|
|
TextView tvStarEmpty = (TextView) view.findViewById(R.id.tvStarEmpty);
|
|
|
|
|
|
|
|
listView = (DragSortListView) view.findViewById(R.id.listView);
|
|
|
|
|
|
|
|
llButtonsHeader = (LinearLayout) view.findViewById(R.id.llButtonsHeader);
|
|
|
|
llButtonsHeader = (LinearLayout) view.findViewById(R.id.llButtonsHeader);
|
|
|
|
llEmpty = view.findViewById(R.id.llEmpty);
|
|
|
|
llEmpty = view.findViewById(R.id.llEmpty);
|
|
|
|
|
|
|
|
|
|
|
|
progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
|
|
|
|
progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
|
|
|
|
progressBar.setVisibility(View.GONE);
|
|
|
|
progressBar.setVisibility(View.GONE);
|
|
|
|
|
|
|
|
|
|
|
|
selectedPositions = new LinkedList<>();
|
|
|
|
selectedPositions = new LinkedList<>();
|
|
|
|
loader = new ListHabitsLoader();
|
|
|
|
loader = new ListHabitsLoader();
|
|
|
|
helper = new ListHabitsHelper(activity, loader);
|
|
|
|
helper = new ListHabitsHelper(activity, loader);
|
|
|
|
|
|
|
|
|
|
|
|
hintManager = new HintManager(activity, llHint);
|
|
|
|
hintManager = new HintManager(activity, llHint);
|
|
|
|
|
|
|
|
|
|
|
|
loader.setListener(this);
|
|
|
|
loader.setListener(this);
|
|
|
|
loader.setCheckmarkCount(helper.getButtonCount());
|
|
|
|
loader.setCheckmarkCount(helper.getButtonCount());
|
|
|
|
|
|
|
|
|
|
|
|
llHint.setOnClickListener(this);
|
|
|
|
llHint.setOnClickListener(this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TextView tvStarEmpty = (TextView) view.findViewById(R.id.tvStarEmpty);
|
|
|
|
tvStarEmpty.setTypeface(InterfaceUtils.getFontAwesome(activity));
|
|
|
|
tvStarEmpty.setTypeface(InterfaceUtils.getFontAwesome(activity));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
createListView(view);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(savedInstanceState != null)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
EditHabitDialogFragment frag = (EditHabitDialogFragment) getFragmentManager()
|
|
|
|
|
|
|
|
.findFragmentByTag("editHabit");
|
|
|
|
|
|
|
|
if(frag != null) frag.setOnSavedListener(this);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
loader.updateAllHabits(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
controller = new ListHabitsController();
|
|
|
|
|
|
|
|
controller.setScreen(this);
|
|
|
|
|
|
|
|
prefs = Preferences.getInstance();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setHasOptionsMenu(true);
|
|
|
|
|
|
|
|
return view;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void createListView(View view)
|
|
|
|
|
|
|
|
{
|
|
|
|
adapter = new ListHabitsAdapter(getActivity(), loader);
|
|
|
|
adapter = new ListHabitsAdapter(getActivity(), loader);
|
|
|
|
adapter.setSelectedPositions(selectedPositions);
|
|
|
|
adapter.setSelectedPositions(selectedPositions);
|
|
|
|
adapter.setOnCheckmarkClickListener(this);
|
|
|
|
adapter.setOnCheckmarkClickListener(this);
|
|
|
@ -130,26 +138,15 @@ public class ListHabitsFragment extends Fragment
|
|
|
|
DragSortListView.DragListener dragListener = new HabitsDragListener();
|
|
|
|
DragSortListView.DragListener dragListener = new HabitsDragListener();
|
|
|
|
DragSortController dragSortController = new HabitsDragSortController();
|
|
|
|
DragSortController dragSortController = new HabitsDragSortController();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
listView = (DragSortListView) view.findViewById(R.id.listView);
|
|
|
|
listView.setAdapter(adapter);
|
|
|
|
listView.setAdapter(adapter);
|
|
|
|
listView.setOnItemClickListener(this);
|
|
|
|
listView.setOnItemClickListener(this);
|
|
|
|
listView.setOnItemLongClickListener(this);
|
|
|
|
listView.setOnItemLongClickListener(this);
|
|
|
|
listView.setDropListener(this);
|
|
|
|
listView.setDropListener(new HabitsDropListener());
|
|
|
|
listView.setDragListener(dragListener);
|
|
|
|
listView.setDragListener(dragListener);
|
|
|
|
listView.setFloatViewManager(dragSortController);
|
|
|
|
listView.setFloatViewManager(dragSortController);
|
|
|
|
listView.setDragEnabled(true);
|
|
|
|
listView.setDragEnabled(true);
|
|
|
|
listView.setLongClickable(true);
|
|
|
|
listView.setLongClickable(true);
|
|
|
|
|
|
|
|
|
|
|
|
if(savedInstanceState != null)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
EditHabitDialogFragment frag = (EditHabitDialogFragment) getFragmentManager()
|
|
|
|
|
|
|
|
.findFragmentByTag("editHabit");
|
|
|
|
|
|
|
|
if(frag != null) frag.setOnSavedListener(this);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
loader.updateAllHabits(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setHasOptionsMenu(true);
|
|
|
|
|
|
|
|
return view;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -158,9 +155,7 @@ public class ListHabitsFragment extends Fragment
|
|
|
|
{
|
|
|
|
{
|
|
|
|
super.onAttach(activity);
|
|
|
|
super.onAttach(activity);
|
|
|
|
this.activity = (BaseActivity) activity;
|
|
|
|
this.activity = (BaseActivity) activity;
|
|
|
|
|
|
|
|
|
|
|
|
habitClickListener = (OnHabitClickListener) activity;
|
|
|
|
habitClickListener = (OnHabitClickListener) activity;
|
|
|
|
prefs = PreferenceManager.getDefaultSharedPreferences(activity);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -175,9 +170,7 @@ public class ListHabitsFragment extends Fragment
|
|
|
|
helper.updateEmptyMessage(llEmpty);
|
|
|
|
helper.updateEmptyMessage(llEmpty);
|
|
|
|
helper.updateHeader(llButtonsHeader);
|
|
|
|
helper.updateHeader(llButtonsHeader);
|
|
|
|
hintManager.showHintIfAppropriate();
|
|
|
|
hintManager.showHintIfAppropriate();
|
|
|
|
|
|
|
|
|
|
|
|
adapter.notifyDataSetChanged();
|
|
|
|
adapter.notifyDataSetChanged();
|
|
|
|
isShortToggleEnabled = prefs.getBoolean("pref_short_toggle", false);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -192,49 +185,41 @@ public class ListHabitsFragment extends Fragment
|
|
|
|
{
|
|
|
|
{
|
|
|
|
super.onCreateOptionsMenu(menu, inflater);
|
|
|
|
super.onCreateOptionsMenu(menu, inflater);
|
|
|
|
inflater.inflate(R.menu.list_habits_options, menu);
|
|
|
|
inflater.inflate(R.menu.list_habits_options, menu);
|
|
|
|
|
|
|
|
|
|
|
|
MenuItem showArchivedItem = menu.findItem(R.id.action_show_archived);
|
|
|
|
MenuItem showArchivedItem = menu.findItem(R.id.action_show_archived);
|
|
|
|
showArchivedItem.setChecked(showArchived);
|
|
|
|
showArchivedItem.setChecked(showArchived);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
super.onCreateContextMenu(menu, view, menuInfo);
|
|
|
|
|
|
|
|
getActivity().getMenuInflater().inflate(R.menu.list_habits_context, menu);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
|
|
|
|
|
|
|
|
final Habit habit = loader.habits.get(info.id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (habit.isArchived()) menu.findItem(R.id.action_archive_habit).setVisible(false);
|
|
|
|
|
|
|
|
else menu.findItem(R.id.action_unarchive_habit).setVisible(false);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public boolean onOptionsItemSelected(MenuItem item)
|
|
|
|
public boolean onOptionsItemSelected(MenuItem item)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
switch (item.getItemId())
|
|
|
|
switch (item.getItemId())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
case R.id.action_add:
|
|
|
|
case R.id.action_add:
|
|
|
|
{
|
|
|
|
showCreateHabitScreen();
|
|
|
|
EditHabitDialogFragment frag = EditHabitDialogFragment.createHabitFragment();
|
|
|
|
|
|
|
|
frag.setOnSavedListener(this);
|
|
|
|
|
|
|
|
frag.show(getFragmentManager(), "editHabit");
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case R.id.action_show_archived:
|
|
|
|
case R.id.action_show_archived:
|
|
|
|
|
|
|
|
toggleShowArchived();
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
return super.onOptionsItemSelected(item);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void toggleShowArchived()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
showArchived = !showArchived;
|
|
|
|
showArchived = !showArchived;
|
|
|
|
loader.setIncludeArchived(showArchived);
|
|
|
|
loader.setIncludeArchived(showArchived);
|
|
|
|
loader.updateAllHabits(true);
|
|
|
|
loader.updateAllHabits(true);
|
|
|
|
activity.invalidateOptionsMenu();
|
|
|
|
activity.invalidateOptionsMenu();
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
private void showCreateHabitScreen()
|
|
|
|
return super.onOptionsItemSelected(item);
|
|
|
|
{
|
|
|
|
}
|
|
|
|
EditHabitDialogFragment frag = EditHabitDialogFragment.createHabitFragment();
|
|
|
|
|
|
|
|
frag.setOnSavedListener(this);
|
|
|
|
|
|
|
|
frag.show(getFragmentManager(), "editHabit");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -248,47 +233,46 @@ public class ListHabitsFragment extends Fragment
|
|
|
|
habitClickListener.onHabitClicked(habit);
|
|
|
|
habitClickListener.onHabitClicked(habit);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
toggleItemSelected(position);
|
|
|
|
|
|
|
|
adapter.notifyDataSetChanged();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void toggleItemSelected(int position)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int k = selectedPositions.indexOf(position);
|
|
|
|
int k = selectedPositions.indexOf(position);
|
|
|
|
if(k < 0)
|
|
|
|
if(k < 0) selectedPositions.add(position);
|
|
|
|
selectedPositions.add(position);
|
|
|
|
else selectedPositions.remove(k);
|
|
|
|
else
|
|
|
|
|
|
|
|
selectedPositions.remove(k);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(selectedPositions.isEmpty()) actionMode.finish();
|
|
|
|
if(selectedPositions.isEmpty()) actionMode.finish();
|
|
|
|
else actionMode.invalidate();
|
|
|
|
else actionMode.invalidate();
|
|
|
|
|
|
|
|
|
|
|
|
adapter.notifyDataSetChanged();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
|
|
|
|
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
selectItem(position);
|
|
|
|
selectHabit(position);
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void selectItem(int position)
|
|
|
|
private void selectHabit(int position)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if(!selectedPositions.contains(position))
|
|
|
|
if(!selectedPositions.contains(position)) selectedPositions.add(position);
|
|
|
|
selectedPositions.add(position);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adapter.notifyDataSetChanged();
|
|
|
|
adapter.notifyDataSetChanged();
|
|
|
|
|
|
|
|
if(actionMode == null) startSupportActionMode();
|
|
|
|
|
|
|
|
actionMode.invalidate();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(actionMode == null)
|
|
|
|
private void startSupportActionMode()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
HabitSelectionCallback callback = new HabitSelectionCallback(activity, loader);
|
|
|
|
HabitSelectionCallback callback = new HabitSelectionCallback(activity, loader);
|
|
|
|
callback.setSelectedPositions(selectedPositions);
|
|
|
|
callback.setSelectedPositions(selectedPositions);
|
|
|
|
callback.setOnSavedListener(this);
|
|
|
|
callback.setOnSavedListener(this);
|
|
|
|
callback.setListener(this);
|
|
|
|
callback.setListener(this);
|
|
|
|
|
|
|
|
|
|
|
|
actionMode = activity.startSupportActionMode(callback);
|
|
|
|
actionMode = activity.startSupportActionMode(callback);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(actionMode != null) actionMode.invalidate();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void onSaved(Command command, Object savedObject)
|
|
|
|
public void onSaved(Command command, Object savedObject)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -320,12 +304,11 @@ public class ListHabitsFragment extends Fragment
|
|
|
|
|
|
|
|
|
|
|
|
private void onCheckmarkLongClick(View v)
|
|
|
|
private void onCheckmarkLongClick(View v)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (isShortToggleEnabled) return;
|
|
|
|
if (prefs.isShortToggleEnabled()) return;
|
|
|
|
|
|
|
|
toggleCheckmark(v);
|
|
|
|
toggleCheck(v);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void toggleCheck(View v)
|
|
|
|
private void toggleCheckmark(View v)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Long id = helper.getHabitIdFromCheckmarkView(v);
|
|
|
|
Long id = helper.getHabitIdFromCheckmarkView(v);
|
|
|
|
Habit habit = loader.habits.get(id);
|
|
|
|
Habit habit = loader.habits.get(id);
|
|
|
@ -347,25 +330,14 @@ public class ListHabitsFragment extends Fragment
|
|
|
|
activity.executeCommand(c, refreshKey);
|
|
|
|
activity.executeCommand(c, refreshKey);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void drop(int from, int to)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if(from == to) return;
|
|
|
|
|
|
|
|
if(actionMode != null) actionMode.finish();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
loader.reorder(from, to);
|
|
|
|
|
|
|
|
adapter.notifyDataSetChanged();
|
|
|
|
|
|
|
|
loader.updateAllHabits(false);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void onClick(View v)
|
|
|
|
public void onClick(View v)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
switch (v.getId())
|
|
|
|
switch (v.getId())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
case R.id.tvCheck:
|
|
|
|
case R.id.tvCheck:
|
|
|
|
if (isShortToggleEnabled) toggleCheck(v);
|
|
|
|
if (prefs.isShortToggleEnabled()) toggleCheckmark(v);
|
|
|
|
else activity.showToast(R.string.long_press_to_toggle);
|
|
|
|
else activity.showMessage(R.string.long_press_to_toggle);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case R.id.llHint:
|
|
|
|
case R.id.llHint:
|
|
|
@ -414,109 +386,31 @@ public class ListHabitsFragment extends Fragment
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private class HabitsDragListener implements DragSortListView.DragListener
|
|
|
|
private class HabitsDropListener implements DragSortListView.DropListener
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void drag(int from, int to)
|
|
|
|
public void drop(int from, int to)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void startDrag(int position)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
selectItem(position);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void showImportDialog()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
File dir = FileUtils.getFilesDir(null);
|
|
|
|
|
|
|
|
if(dir == null)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
activity.showToast(R.string.could_not_import);
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FilePickerDialog picker = new FilePickerDialog(activity, dir);
|
|
|
|
|
|
|
|
picker.setListener(new FilePickerDialog.OnFileSelectedListener()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onFileSelected(File file)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
ImportDataTask task = new ImportDataTask(file, progressBar);
|
|
|
|
|
|
|
|
task.setListener(ListHabitsFragment.this);
|
|
|
|
|
|
|
|
task.execute();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
picker.show();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onImportFinished(int result)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
switch (result)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
case ImportDataTask.SUCCESS:
|
|
|
|
if(from == to) return;
|
|
|
|
loader.updateAllHabits(true);
|
|
|
|
if(actionMode != null) actionMode.finish();
|
|
|
|
activity.showToast(R.string.habits_imported);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case ImportDataTask.NOT_RECOGNIZED:
|
|
|
|
|
|
|
|
activity.showToast(R.string.file_not_recognized);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
loader.reorder(from, to);
|
|
|
|
activity.showToast(R.string.could_not_import);
|
|
|
|
adapter.notifyDataSetChanged();
|
|
|
|
break;
|
|
|
|
loader.updateAllHabits(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void exportAllHabits()
|
|
|
|
private class HabitsDragListener implements DragSortListView.DragListener
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ExportCSVTask task = new ExportCSVTask(Habit.getAll(true), progressBar);
|
|
|
|
|
|
|
|
task.setListener(this);
|
|
|
|
|
|
|
|
task.execute();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void onExportCSVFinished(@Nullable String archiveFilename)
|
|
|
|
public void drag(int from, int to)
|
|
|
|
{
|
|
|
|
|
|
|
|
if(archiveFilename != null)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Intent intent = new Intent();
|
|
|
|
|
|
|
|
intent.setAction(Intent.ACTION_SEND);
|
|
|
|
|
|
|
|
intent.setType("application/zip");
|
|
|
|
|
|
|
|
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(archiveFilename)));
|
|
|
|
|
|
|
|
activity.startActivity(intent);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
activity.showToast(R.string.could_not_export);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void exportDB()
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ExportDBTask task = new ExportDBTask(progressBar);
|
|
|
|
|
|
|
|
task.setListener(this);
|
|
|
|
|
|
|
|
task.execute();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void onExportDBFinished(@Nullable String filename)
|
|
|
|
public void startDrag(int position)
|
|
|
|
{
|
|
|
|
|
|
|
|
if(filename != null)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Intent intent = new Intent();
|
|
|
|
|
|
|
|
intent.setAction(Intent.ACTION_SEND);
|
|
|
|
|
|
|
|
intent.setType("application/octet-stream");
|
|
|
|
|
|
|
|
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(filename)));
|
|
|
|
|
|
|
|
activity.startActivity(intent);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
activity.showToast(R.string.could_not_export);
|
|
|
|
selectHabit(position);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|