From d6d7798ae75f2e3fd3009853f13ceb09555b2dd9 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 14 Feb 2016 18:36:16 -0500 Subject: [PATCH] Finish implementation of habit archival --- app/app.iml | 8 +- .../java/org/isoron/uhabits/MainActivity.java | 13 +-- .../org/isoron/uhabits/ShowHabitActivity.java | 4 +- .../uhabits/dialogs/ListHabitsFragment.java | 89 +++++++++++++------ .../java/org/isoron/uhabits/models/Habit.java | 50 ++++++++++- ...ts_options.xml => list_habits_options.xml} | 0 ...ts_context.xml => list_habits_context.xml} | 6 ++ ...main_activity.xml => list_habits_menu.xml} | 5 ++ ...ts_options.xml => list_habits_options.xml} | 0 .../{show_habit.xml => show_habit_menu.xml} | 1 + app/src/main/res/values-v21/styles.xml | 4 + app/src/main/res/values/strings.xml | 1 + 12 files changed, 142 insertions(+), 39 deletions(-) rename app/src/main/res/menu-v21/{show_habits_options.xml => list_habits_options.xml} (100%) rename app/src/main/res/menu/{show_habits_context.xml => list_habits_context.xml} (72%) rename app/src/main/res/menu/{main_activity.xml => list_habits_menu.xml} (68%) rename app/src/main/res/menu/{show_habits_options.xml => list_habits_options.xml} (100%) rename app/src/main/res/menu/{show_habit.xml => show_habit_menu.xml} (99%) diff --git a/app/app.iml b/app/app.iml index bfb89fc91..f5cd95f0a 100644 --- a/app/app.iml +++ b/app/app.iml @@ -69,7 +69,7 @@ - + @@ -83,10 +83,10 @@ - + - - + + \ No newline at end of file diff --git a/app/src/main/java/org/isoron/uhabits/MainActivity.java b/app/src/main/java/org/isoron/uhabits/MainActivity.java index 37a8e51fb..f974c0f44 100644 --- a/app/src/main/java/org/isoron/uhabits/MainActivity.java +++ b/app/src/main/java/org/isoron/uhabits/MainActivity.java @@ -38,18 +38,21 @@ public class MainActivity extends ReplayableActivity @Override public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.main_activity, menu); + getMenuInflater().inflate(R.menu.list_habits_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == R.id.action_settings) - return true; + switch(item.getItemId()) + { + case R.id.action_settings: + return true; - return super.onOptionsItemSelected(item); + default: + return super.onOptionsItemSelected(item); + } } @Override diff --git a/app/src/main/java/org/isoron/uhabits/ShowHabitActivity.java b/app/src/main/java/org/isoron/uhabits/ShowHabitActivity.java index cf50929b0..ff5286044 100644 --- a/app/src/main/java/org/isoron/uhabits/ShowHabitActivity.java +++ b/app/src/main/java/org/isoron/uhabits/ShowHabitActivity.java @@ -1,7 +1,5 @@ package org.isoron.uhabits; -import org.isoron.uhabits.dialogs.ListHabitsFragment; -import org.isoron.uhabits.dialogs.ShowHabitFragment; import org.isoron.uhabits.models.Habit; import android.app.Activity; @@ -35,7 +33,7 @@ public class ShowHabitActivity extends Activity @Override public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.show_habit, menu); + getMenuInflater().inflate(R.menu.show_habit_menu, menu); return true; } diff --git a/app/src/main/java/org/isoron/uhabits/dialogs/ListHabitsFragment.java b/app/src/main/java/org/isoron/uhabits/dialogs/ListHabitsFragment.java index a8c197e7c..02775a5d3 100644 --- a/app/src/main/java/org/isoron/uhabits/dialogs/ListHabitsFragment.java +++ b/app/src/main/java/org/isoron/uhabits/dialogs/ListHabitsFragment.java @@ -9,6 +9,7 @@ import android.graphics.Typeface; import android.os.Bundle; import android.os.Vibrator; import android.util.DisplayMetrics; +import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Display; @@ -34,6 +35,7 @@ import com.mobeta.android.dslv.DragSortController; import com.mobeta.android.dslv.DragSortListView; import com.mobeta.android.dslv.DragSortListView.DropListener; +import org.isoron.helpers.ColorHelper; import org.isoron.helpers.Command; import org.isoron.helpers.DateHelper; import org.isoron.helpers.DialogHelper.OnSavedListener; @@ -153,30 +155,51 @@ public class ListHabitsFragment extends Fragment public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.show_habits_options, menu); + inflater.inflate(R.menu.list_habits_options, menu); + + MenuItem showArchivedItem = menu.findItem(R.id.action_show_archived); + showArchivedItem.setChecked(Habit.isIncludeArchived()); } @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); - getActivity().getMenuInflater().inflate(R.menu.show_habits_context, menu); + getActivity().getMenuInflater().inflate(R.menu.list_habits_context, menu); + + AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; + final Habit habit = Habit.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 public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - - if (id == R.id.action_add) + switch(item.getItemId()) { - EditHabitFragment frag = EditHabitFragment.createHabitFragment(); - frag.setOnSavedListener(this); - frag.show(getFragmentManager(), "dialog"); - return true; - } + case R.id.action_add: + { + EditHabitFragment frag = EditHabitFragment.createHabitFragment(); + frag.setOnSavedListener(this); + frag.show(getFragmentManager(), "dialog"); + return true; + } + + case R.id.action_show_archived: + { + Habit.setIncludeArchived(!Habit.isIncludeArchived()); + notifyDataSetChanged(); + activity.invalidateOptionsMenu(); + return true; + } - return super.onOptionsItemSelected(item); + default: + return super.onOptionsItemSelected(item); + } } @Override @@ -193,12 +216,16 @@ public class ListHabitsFragment extends Fragment frag.show(getFragmentManager(), "dialog"); return true; } - - if (id == R.id.action_archive_habit) + else if (id == R.id.action_archive_habit) { Command c = habit.new ArchiveCommand(); executeCommand(c); } + else if (id == R.id.action_unarchive_habit) + { + Command c = habit.new UnarchiveCommand(); + executeCommand(c); + } return super.onContextItemSelected(menuItem); } @@ -353,24 +380,36 @@ public class ListHabitsFragment extends Fragment tvName.setText(habit.name); tvName.setTextColor(activeColor); - int score = habit.getScore(); - - if (score < Habit.HALF_STAR_CUTOFF) - { - tvStar.setText(context.getString(R.string.fa_star_o)); - tvStar.setTextColor(inactiveColor); - } - else if (score < Habit.FULL_STAR_CUTOFF) + if(habit.isArchived()) { - tvStar.setText(context.getString(R.string.fa_star_half_o)); - tvStar.setTextColor(inactiveColor); + activeColor = ColorHelper.palette[12]; + tvName.setTextColor(activeColor); + + tvStar.setText(context.getString(R.string.fa_archive)); + tvStar.setTextColor(activeColor); } else { - tvStar.setText(context.getString(R.string.fa_star)); - tvStar.setTextColor(activeColor); + int score = habit.getScore(); + + if (score < Habit.HALF_STAR_CUTOFF) + { + tvStar.setText(context.getString(R.string.fa_star_o)); + tvStar.setTextColor(inactiveColor); + } + else if (score < Habit.FULL_STAR_CUTOFF) + { + tvStar.setText(context.getString(R.string.fa_star_half_o)); + tvStar.setTextColor(inactiveColor); + } + else + { + tvStar.setText(context.getString(R.string.fa_star)); + tvStar.setTextColor(activeColor); + } } + LinearLayout llButtons = (LinearLayout) view.findViewById(R.id.llButtons); int m = llButtons.getChildCount(); diff --git a/app/src/main/java/org/isoron/uhabits/models/Habit.java b/app/src/main/java/org/isoron/uhabits/models/Habit.java index 28aad7806..e10797ee7 100644 --- a/app/src/main/java/org/isoron/uhabits/models/Habit.java +++ b/app/src/main/java/org/isoron/uhabits/models/Habit.java @@ -21,7 +21,6 @@ import org.isoron.helpers.Command; import org.isoron.helpers.DateHelper; import org.isoron.uhabits.R; -import java.util.Date; import java.util.List; @Table(name = "Habits") @@ -32,6 +31,8 @@ public class Habit extends Model public static final int FULL_STAR_CUTOFF = 12973000; public static final int MAX_SCORE = 19259500; + private static boolean includeArchived = false; + @Column(name = "name") public String name; @@ -88,7 +89,20 @@ public class Habit extends Model protected static From select() { - return new Select().from(Habit.class).where("archived = 0").orderBy("position"); + if(includeArchived) + return new Select().from(Habit.class).orderBy("position"); + else + return new Select().from(Habit.class).where("archived = 0").orderBy("position"); + } + + public static void setIncludeArchived(boolean includeArchived) + { + Habit.includeArchived = includeArchived; + } + + public static boolean isIncludeArchived() + { + return Habit.includeArchived; } public static int getCount() @@ -298,6 +312,11 @@ public class Habit extends Model save(); } + public boolean isArchived() + { + return archived != 0; + } + public void toggleRepetitionToday() { toggleRepetition(DateHelper.getStartOfToday()); @@ -595,4 +614,31 @@ public class Habit extends Model return R.string.toast_habit_unarchived; } } + + public class UnarchiveCommand extends Command + { + @Override + public void execute() + { + unarchive(); + Habit.rebuildOrder(); + } + + @Override + public void undo() + { + archive(); + Habit.rebuildOrder(); + } + + public Integer getExecuteStringId() + { + return R.string.toast_habit_unarchived; + } + + public Integer getUndoStringId() + { + return R.string.toast_habit_archived; + } + } } diff --git a/app/src/main/res/menu-v21/show_habits_options.xml b/app/src/main/res/menu-v21/list_habits_options.xml similarity index 100% rename from app/src/main/res/menu-v21/show_habits_options.xml rename to app/src/main/res/menu-v21/list_habits_options.xml diff --git a/app/src/main/res/menu/show_habits_context.xml b/app/src/main/res/menu/list_habits_context.xml similarity index 72% rename from app/src/main/res/menu/show_habits_context.xml rename to app/src/main/res/menu/list_habits_context.xml index 0ef469894..a20bbf2d2 100644 --- a/app/src/main/res/menu/show_habits_context.xml +++ b/app/src/main/res/menu/list_habits_context.xml @@ -5,9 +5,15 @@ android:id="@+id/action_edit_habit" android:title="@string/edit"> + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main_activity.xml b/app/src/main/res/menu/list_habits_menu.xml similarity index 68% rename from app/src/main/res/menu/main_activity.xml rename to app/src/main/res/menu/list_habits_menu.xml index 392b8786d..31da9fa25 100644 --- a/app/src/main/res/menu/main_activity.xml +++ b/app/src/main/res/menu/list_habits_menu.xml @@ -2,6 +2,11 @@ xmlns:tools="http://schemas.android.com/tools" tools:context="org.isoron.uhabits.MainActivity" > + + + true true true + @style/actionBarStyle + + +