diff --git a/app/app.iml b/app/app.iml
new file mode 100644
index 000000000..c8d4626b3
--- /dev/null
+++ b/app/app.iml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 000000000..f842fe0c3
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,24 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 22
+ buildToolsVersion "21.1.2"
+
+ defaultConfig {
+ applicationId "org.isoron.uhabits"
+ minSdkVersion 21
+ targetSdkVersion 22
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
+ }
+ }
+}
+
+dependencies {
+ compile 'com.android.support:support-v4:22.0.0'
+ compile files('libs/ActiveAndroid.jar')
+}
diff --git a/libs/ActiveAndroid.jar b/app/libs/ActiveAndroid.jar
similarity index 100%
rename from libs/ActiveAndroid.jar
rename to app/libs/ActiveAndroid.jar
diff --git a/app/lint.xml b/app/lint.xml
new file mode 100644
index 000000000..8423c0ef9
--- /dev/null
+++ b/app/lint.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
similarity index 100%
rename from AndroidManifest.xml
rename to app/src/main/AndroidManifest.xml
diff --git a/assets/fontawesome-webfont.ttf b/app/src/main/assets/fontawesome-webfont.ttf
old mode 100755
new mode 100644
similarity index 100%
rename from assets/fontawesome-webfont.ttf
rename to app/src/main/assets/fontawesome-webfont.ttf
diff --git a/assets/migrations/5.sql b/app/src/main/assets/migrations/5.sql
similarity index 100%
rename from assets/migrations/5.sql
rename to app/src/main/assets/migrations/5.sql
diff --git a/assets/migrations/6.sql b/app/src/main/assets/migrations/6.sql
similarity index 100%
rename from assets/migrations/6.sql
rename to app/src/main/assets/migrations/6.sql
diff --git a/src/com/android/colorpicker/ColorPickerDialog.java b/app/src/main/java/com/android/colorpicker/ColorPickerDialog.java
similarity index 97%
rename from src/com/android/colorpicker/ColorPickerDialog.java
rename to app/src/main/java/com/android/colorpicker/ColorPickerDialog.java
index a4dc4f557..a47e39d43 100644
--- a/src/com/android/colorpicker/ColorPickerDialog.java
+++ b/app/src/main/java/com/android/colorpicker/ColorPickerDialog.java
@@ -30,7 +30,7 @@ import android.widget.ProgressBar;
import com.android.colorpicker.ColorPickerSwatch.OnColorSelectedListener;
/**
- * A dialog which takes in as input an array of colors and creates a palette allowing the user to
+ * A dialog which takes in as input an array of palette and creates a palette allowing the user to
* select a specific color swatch, which invokes a listener.
*/
public class ColorPickerDialog extends DialogFragment implements OnColorSelectedListener {
@@ -41,7 +41,7 @@ public class ColorPickerDialog extends DialogFragment implements OnColorSelected
protected AlertDialog mAlertDialog;
protected static final String KEY_TITLE_ID = "title_id";
- protected static final String KEY_COLORS = "colors";
+ protected static final String KEY_COLORS = "palette";
protected static final String KEY_SELECTED_COLOR = "selected_color";
protected static final String KEY_COLUMNS = "columns";
protected static final String KEY_SIZE = "size";
diff --git a/src/com/android/colorpicker/ColorPickerPalette.java b/app/src/main/java/com/android/colorpicker/ColorPickerPalette.java
similarity index 97%
rename from src/com/android/colorpicker/ColorPickerPalette.java
rename to app/src/main/java/com/android/colorpicker/ColorPickerPalette.java
index 66eb76876..add5ba86e 100644
--- a/src/com/android/colorpicker/ColorPickerPalette.java
+++ b/app/src/main/java/com/android/colorpicker/ColorPickerPalette.java
@@ -93,7 +93,7 @@ public class ColorPickerPalette extends TableLayout {
int rowElements = 0;
int rowNumber = 0;
- // Fills the table with swatches based on the array of colors.
+ // Fills the table with swatches based on the array of palette.
TableRow row = createTableRow();
for (int color : colors) {
tableElements++;
@@ -135,8 +135,8 @@ public class ColorPickerPalette extends TableLayout {
}
/**
- * Add a content description to the specified swatch view. Because the colors get added in a
- * snaking form, every other row will need to compensate for the fact that the colors are added
+ * Add a content description to the specified swatch view. Because the palette get added in a
+ * snaking form, every other row will need to compensate for the fact that the palette are added
* in an opposite direction from their left->right/top->bottom order, which is how the system
* will arrange them for accessibility purposes.
*/
diff --git a/src/com/android/colorpicker/ColorPickerSwatch.java b/app/src/main/java/com/android/colorpicker/ColorPickerSwatch.java
similarity index 100%
rename from src/com/android/colorpicker/ColorPickerSwatch.java
rename to app/src/main/java/com/android/colorpicker/ColorPickerSwatch.java
diff --git a/src/com/android/colorpicker/ColorStateDrawable.java b/app/src/main/java/com/android/colorpicker/ColorStateDrawable.java
similarity index 100%
rename from src/com/android/colorpicker/ColorStateDrawable.java
rename to app/src/main/java/com/android/colorpicker/ColorStateDrawable.java
diff --git a/src/com/android/colorpicker/HsvColorComparator.java b/app/src/main/java/com/android/colorpicker/HsvColorComparator.java
similarity index 100%
rename from src/com/android/colorpicker/HsvColorComparator.java
rename to app/src/main/java/com/android/colorpicker/HsvColorComparator.java
diff --git a/src/com/android/datetimepicker/AccessibleLinearLayout.java b/app/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java
similarity index 100%
rename from src/com/android/datetimepicker/AccessibleLinearLayout.java
rename to app/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java
diff --git a/src/com/android/datetimepicker/AccessibleTextView.java b/app/src/main/java/com/android/datetimepicker/AccessibleTextView.java
similarity index 100%
rename from src/com/android/datetimepicker/AccessibleTextView.java
rename to app/src/main/java/com/android/datetimepicker/AccessibleTextView.java
diff --git a/src/com/android/datetimepicker/HapticFeedbackController.java b/app/src/main/java/com/android/datetimepicker/HapticFeedbackController.java
similarity index 100%
rename from src/com/android/datetimepicker/HapticFeedbackController.java
rename to app/src/main/java/com/android/datetimepicker/HapticFeedbackController.java
diff --git a/src/com/android/datetimepicker/Utils.java b/app/src/main/java/com/android/datetimepicker/Utils.java
similarity index 100%
rename from src/com/android/datetimepicker/Utils.java
rename to app/src/main/java/com/android/datetimepicker/Utils.java
diff --git a/src/com/android/datetimepicker/date/AccessibleDateAnimator.java b/app/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java
similarity index 100%
rename from src/com/android/datetimepicker/date/AccessibleDateAnimator.java
rename to app/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java
diff --git a/src/com/android/datetimepicker/date/DatePickerController.java b/app/src/main/java/com/android/datetimepicker/date/DatePickerController.java
similarity index 100%
rename from src/com/android/datetimepicker/date/DatePickerController.java
rename to app/src/main/java/com/android/datetimepicker/date/DatePickerController.java
diff --git a/src/com/android/datetimepicker/date/DatePickerDialog.java b/app/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java
similarity index 100%
rename from src/com/android/datetimepicker/date/DatePickerDialog.java
rename to app/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java
diff --git a/src/com/android/datetimepicker/date/DayPickerView.java b/app/src/main/java/com/android/datetimepicker/date/DayPickerView.java
similarity index 100%
rename from src/com/android/datetimepicker/date/DayPickerView.java
rename to app/src/main/java/com/android/datetimepicker/date/DayPickerView.java
diff --git a/src/com/android/datetimepicker/date/MonthAdapter.java b/app/src/main/java/com/android/datetimepicker/date/MonthAdapter.java
similarity index 100%
rename from src/com/android/datetimepicker/date/MonthAdapter.java
rename to app/src/main/java/com/android/datetimepicker/date/MonthAdapter.java
diff --git a/src/com/android/datetimepicker/date/MonthView.java b/app/src/main/java/com/android/datetimepicker/date/MonthView.java
similarity index 100%
rename from src/com/android/datetimepicker/date/MonthView.java
rename to app/src/main/java/com/android/datetimepicker/date/MonthView.java
diff --git a/src/com/android/datetimepicker/date/SimpleDayPickerView.java b/app/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java
similarity index 100%
rename from src/com/android/datetimepicker/date/SimpleDayPickerView.java
rename to app/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java
diff --git a/src/com/android/datetimepicker/date/SimpleMonthAdapter.java b/app/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java
similarity index 100%
rename from src/com/android/datetimepicker/date/SimpleMonthAdapter.java
rename to app/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java
diff --git a/src/com/android/datetimepicker/date/SimpleMonthView.java b/app/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java
similarity index 100%
rename from src/com/android/datetimepicker/date/SimpleMonthView.java
rename to app/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java
diff --git a/src/com/android/datetimepicker/date/TextViewWithCircularIndicator.java b/app/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java
similarity index 100%
rename from src/com/android/datetimepicker/date/TextViewWithCircularIndicator.java
rename to app/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java
diff --git a/src/com/android/datetimepicker/date/YearPickerView.java b/app/src/main/java/com/android/datetimepicker/date/YearPickerView.java
similarity index 100%
rename from src/com/android/datetimepicker/date/YearPickerView.java
rename to app/src/main/java/com/android/datetimepicker/date/YearPickerView.java
diff --git a/src/com/android/datetimepicker/time/AmPmCirclesView.java b/app/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java
similarity index 100%
rename from src/com/android/datetimepicker/time/AmPmCirclesView.java
rename to app/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java
diff --git a/src/com/android/datetimepicker/time/CircleView.java b/app/src/main/java/com/android/datetimepicker/time/CircleView.java
similarity index 100%
rename from src/com/android/datetimepicker/time/CircleView.java
rename to app/src/main/java/com/android/datetimepicker/time/CircleView.java
diff --git a/src/com/android/datetimepicker/time/RadialPickerLayout.java b/app/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java
similarity index 100%
rename from src/com/android/datetimepicker/time/RadialPickerLayout.java
rename to app/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java
diff --git a/src/com/android/datetimepicker/time/RadialSelectorView.java b/app/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java
similarity index 100%
rename from src/com/android/datetimepicker/time/RadialSelectorView.java
rename to app/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java
diff --git a/src/com/android/datetimepicker/time/RadialTextsView.java b/app/src/main/java/com/android/datetimepicker/time/RadialTextsView.java
similarity index 100%
rename from src/com/android/datetimepicker/time/RadialTextsView.java
rename to app/src/main/java/com/android/datetimepicker/time/RadialTextsView.java
diff --git a/src/com/android/datetimepicker/time/TimePickerDialog.java b/app/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java
similarity index 99%
rename from src/com/android/datetimepicker/time/TimePickerDialog.java
rename to app/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java
index eff74c130..db3ed7890 100644
--- a/src/com/android/datetimepicker/time/TimePickerDialog.java
+++ b/app/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java
@@ -331,7 +331,7 @@ public class TimePickerDialog extends DialogFragment implements OnValueSelectedL
// Set the theme at the end so that the initialize()s above don't counteract the theme.
mTimePicker.setTheme(getActivity().getApplicationContext(), mThemeDark);
- // Prepare some colors to use.
+ // Prepare some palette to use.
int white = res.getColor(R.color.white);
int circleBackground = res.getColor(R.color.circle_background);
int line = res.getColor(R.color.line_background);
@@ -345,7 +345,7 @@ public class TimePickerDialog extends DialogFragment implements OnValueSelectedL
ColorStateList darkDoneTextColor = res.getColorStateList(R.color.done_text_color_dark);
int darkDoneBackground = R.drawable.done_background_color_dark;
- // Set the colors for each view based on the theme.
+ // Set the palette for each view based on the theme.
view.findViewById(R.id.time_display_background).setBackgroundColor(mThemeDark? darkGray : white);
view.findViewById(R.id.time_display).setBackgroundColor(mThemeDark? darkGray : white);
((TextView) view.findViewById(R.id.separator)).setTextColor(mThemeDark? white : timeDisplay);
diff --git a/src/com/mobeta/android/dslv/DragSortController.java b/app/src/main/java/com/mobeta/android/dslv/DragSortController.java
similarity index 100%
rename from src/com/mobeta/android/dslv/DragSortController.java
rename to app/src/main/java/com/mobeta/android/dslv/DragSortController.java
diff --git a/src/com/mobeta/android/dslv/DragSortCursorAdapter.java b/app/src/main/java/com/mobeta/android/dslv/DragSortCursorAdapter.java
similarity index 100%
rename from src/com/mobeta/android/dslv/DragSortCursorAdapter.java
rename to app/src/main/java/com/mobeta/android/dslv/DragSortCursorAdapter.java
diff --git a/src/com/mobeta/android/dslv/DragSortItemView.java b/app/src/main/java/com/mobeta/android/dslv/DragSortItemView.java
similarity index 100%
rename from src/com/mobeta/android/dslv/DragSortItemView.java
rename to app/src/main/java/com/mobeta/android/dslv/DragSortItemView.java
diff --git a/src/com/mobeta/android/dslv/DragSortItemViewCheckable.java b/app/src/main/java/com/mobeta/android/dslv/DragSortItemViewCheckable.java
similarity index 100%
rename from src/com/mobeta/android/dslv/DragSortItemViewCheckable.java
rename to app/src/main/java/com/mobeta/android/dslv/DragSortItemViewCheckable.java
diff --git a/src/com/mobeta/android/dslv/DragSortListView.java b/app/src/main/java/com/mobeta/android/dslv/DragSortListView.java
similarity index 100%
rename from src/com/mobeta/android/dslv/DragSortListView.java
rename to app/src/main/java/com/mobeta/android/dslv/DragSortListView.java
diff --git a/src/com/mobeta/android/dslv/ResourceDragSortCursorAdapter.java b/app/src/main/java/com/mobeta/android/dslv/ResourceDragSortCursorAdapter.java
similarity index 100%
rename from src/com/mobeta/android/dslv/ResourceDragSortCursorAdapter.java
rename to app/src/main/java/com/mobeta/android/dslv/ResourceDragSortCursorAdapter.java
diff --git a/src/com/mobeta/android/dslv/SimpleDragSortCursorAdapter.java b/app/src/main/java/com/mobeta/android/dslv/SimpleDragSortCursorAdapter.java
similarity index 100%
rename from src/com/mobeta/android/dslv/SimpleDragSortCursorAdapter.java
rename to app/src/main/java/com/mobeta/android/dslv/SimpleDragSortCursorAdapter.java
diff --git a/src/com/mobeta/android/dslv/SimpleFloatViewManager.java b/app/src/main/java/com/mobeta/android/dslv/SimpleFloatViewManager.java
similarity index 100%
rename from src/com/mobeta/android/dslv/SimpleFloatViewManager.java
rename to app/src/main/java/com/mobeta/android/dslv/SimpleFloatViewManager.java
diff --git a/src/org/isoron/helpers/ColorHelper.java b/app/src/main/java/org/isoron/helpers/ColorHelper.java
similarity index 59%
rename from src/org/isoron/helpers/ColorHelper.java
rename to app/src/main/java/org/isoron/helpers/ColorHelper.java
index e6ddb00bc..4396fe3b6 100644
--- a/src/org/isoron/helpers/ColorHelper.java
+++ b/app/src/main/java/org/isoron/helpers/ColorHelper.java
@@ -1,8 +1,18 @@
package org.isoron.helpers;
+import android.graphics.Color;
+
public class ColorHelper
{
- public static int mixColors(int color1, int color2, float amount)
+ public static final int[] palette = { Color.parseColor("#900000"),
+ Color.parseColor("#c54100"), Color.parseColor("#c0ab00"),
+ Color.parseColor("#8db600"), Color.parseColor("#117209"),
+ Color.parseColor("#06965b"), Color.parseColor("#069a95"),
+ Color.parseColor("#114896"), Color.parseColor("#501394"),
+ Color.parseColor("#872086"), Color.parseColor("#c31764"),
+ Color.parseColor("#000000"), Color.parseColor("#aaaaaa") };
+
+ public static int mixColors(int color1, int color2, float amount)
{
final byte ALPHA_CHANNEL = 24;
final byte RED_CHANNEL = 16;
diff --git a/src/org/isoron/helpers/Command.java b/app/src/main/java/org/isoron/helpers/Command.java
similarity index 100%
rename from src/org/isoron/helpers/Command.java
rename to app/src/main/java/org/isoron/helpers/Command.java
diff --git a/src/org/isoron/helpers/DateHelper.java b/app/src/main/java/org/isoron/helpers/DateHelper.java
similarity index 100%
rename from src/org/isoron/helpers/DateHelper.java
rename to app/src/main/java/org/isoron/helpers/DateHelper.java
diff --git a/src/org/isoron/helpers/DialogHelper.java b/app/src/main/java/org/isoron/helpers/DialogHelper.java
similarity index 100%
rename from src/org/isoron/helpers/DialogHelper.java
rename to app/src/main/java/org/isoron/helpers/DialogHelper.java
diff --git a/app/src/main/java/org/isoron/uhabits/MainActivity.java b/app/src/main/java/org/isoron/uhabits/MainActivity.java
new file mode 100644
index 000000000..abe2d3745
--- /dev/null
+++ b/app/src/main/java/org/isoron/uhabits/MainActivity.java
@@ -0,0 +1,185 @@
+package org.isoron.uhabits;
+
+import android.app.Activity;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.Toast;
+
+import org.isoron.helpers.Command;
+import org.isoron.uhabits.dialogs.ListHabitsFragment;
+import org.isoron.uhabits.models.Habit;
+
+import java.text.DateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.LinkedList;
+
+public class MainActivity extends Activity
+{
+ private static int MAX_UNDO_LEVEL = 15;
+ private ListHabitsFragment listHabitsFragment;
+ private LinkedList undoList;
+ private LinkedList redoList;
+
+ private Toast toast;
+
+ public static void createReminderAlarms(Context context)
+ {
+ for (Habit habit : Habit.getHabitsWithReminder())
+ createReminderAlarm(context, habit, null);
+ }
+
+ public static void createReminderAlarm(Context context, Habit habit, Long reminderTime)
+ {
+ Uri uri = Uri.parse("content://org.isoron.uhabits/habit/" + habit.getId());
+
+ if (reminderTime == null)
+ {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTimeInMillis(System.currentTimeMillis());
+ calendar.set(Calendar.HOUR_OF_DAY, habit.reminder_hour);
+ calendar.set(Calendar.MINUTE, habit.reminder_min);
+ calendar.set(Calendar.SECOND, 0);
+
+ reminderTime = calendar.getTimeInMillis();
+
+ if (System.currentTimeMillis() > reminderTime)
+ {
+ reminderTime += AlarmManager.INTERVAL_DAY;
+ }
+ }
+
+ Intent alarmIntent = new Intent(context, ReminderAlarmReceiver.class);
+ alarmIntent.setAction(ReminderAlarmReceiver.ACTION_REMIND);
+ alarmIntent.setData(uri);
+
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
+ ((int) (habit.getId() % Integer.MAX_VALUE)) + 1,
+ alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ if (Build.VERSION.SDK_INT >= 19)
+ {
+ manager.setExact(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent);
+ } else
+ {
+ manager.set(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent);
+ }
+
+ Log.d("Alarm", String.format("Setting alarm (%s): %s", DateFormat.getDateTimeInstance()
+ .format(new Date(reminderTime)), habit.name));
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+
+ getActionBar().setElevation(5);
+
+ setContentView(R.layout.list_habits_activity);
+
+ listHabitsFragment = (ListHabitsFragment) getFragmentManager().findFragmentById(
+ R.id.fragment1);
+
+ Log.d("MainActivity", "Creating activity");
+
+ undoList = new LinkedList<>();
+ redoList = new LinkedList<>();
+
+ createReminderAlarms(MainActivity.this);
+ }
+
+ @Override
+ protected void onStart()
+ {
+ super.onStart();
+ listHabitsFragment.notifyDataSetChanged();
+ Log.d("MainActivity", "Starting activity");
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu)
+ {
+ getMenuInflater().inflate(R.menu.main_activity, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item)
+ {
+ int id = item.getItemId();
+ if (id == R.id.action_settings)
+ {
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ public void executeCommand(Command command, boolean datasetChanged)
+ {
+ executeCommand(command, datasetChanged, true);
+ }
+
+ public void executeCommand(Command command, boolean datasetChanged, boolean clearRedoStack)
+ {
+ undoList.push(command);
+ if (undoList.size() > MAX_UNDO_LEVEL)
+ undoList.removeLast();
+ if (clearRedoStack)
+ redoList.clear();
+ command.execute();
+
+ showToast(command.getExecuteStringId());
+ if (datasetChanged)
+ {
+ listHabitsFragment.notifyDataSetChanged();
+ }
+ }
+
+ public void undo()
+ {
+ if (undoList.isEmpty())
+ {
+ showToast(R.string.toast_nothing_to_undo);
+ return;
+ }
+
+ Command last = undoList.pop();
+ redoList.push(last);
+ last.undo();
+ showToast(last.getUndoStringId());
+
+ listHabitsFragment.notifyDataSetChanged();
+ }
+
+ public void redo()
+ {
+ if (redoList.isEmpty())
+ {
+ showToast(R.string.toast_nothing_to_redo);
+ return;
+ }
+ Command last = redoList.pop();
+ executeCommand(last, true, false);
+ }
+
+ private void showToast(Integer stringId)
+ {
+ if (stringId == null)
+ return;
+ if (toast == null)
+ toast = Toast.makeText(this, stringId, Toast.LENGTH_SHORT);
+ else
+ toast.setText(stringId);
+ toast.show();
+ }
+}
diff --git a/src/org/isoron/uhabits/ReminderAlarmReceiver.java b/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java
similarity index 100%
rename from src/org/isoron/uhabits/ReminderAlarmReceiver.java
rename to app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java
diff --git a/src/org/isoron/uhabits/ShowHabitActivity.java b/app/src/main/java/org/isoron/uhabits/ShowHabitActivity.java
similarity index 100%
rename from src/org/isoron/uhabits/ShowHabitActivity.java
rename to app/src/main/java/org/isoron/uhabits/ShowHabitActivity.java
diff --git a/src/org/isoron/uhabits/dialogs/EditHabitFragment.java b/app/src/main/java/org/isoron/uhabits/dialogs/EditHabitFragment.java
similarity index 95%
rename from src/org/isoron/uhabits/dialogs/EditHabitFragment.java
rename to app/src/main/java/org/isoron/uhabits/dialogs/EditHabitFragment.java
index d2b1e8a4b..e9d8290dc 100644
--- a/src/org/isoron/uhabits/dialogs/EditHabitFragment.java
+++ b/app/src/main/java/org/isoron/uhabits/dialogs/EditHabitFragment.java
@@ -1,5 +1,6 @@
package org.isoron.uhabits.dialogs;
+import org.isoron.helpers.ColorHelper;
import org.isoron.helpers.Command;
import org.isoron.helpers.DialogHelper.OnSavedListener;
import org.isoron.uhabits.R;
@@ -8,8 +9,6 @@ import org.isoron.uhabits.models.Habit;
import android.app.DialogFragment;
import android.graphics.Color;
import android.graphics.ColorMatrix;
-import android.graphics.ColorMatrixColorFilter;
-import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -85,8 +84,8 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
tvFreqDen = (TextView) view.findViewById(R.id.input_freq_den);
tvInputReminder = (TextView) view.findViewById(R.id.input_reminder_time);
- Button buttonSave = (Button) view.findViewById(R.id.button_save);
- Button buttonDiscard = (Button) view.findViewById(R.id.button_discard);
+ Button buttonSave = (Button) view.findViewById(R.id.buttonSave);
+ Button buttonDiscard = (Button) view.findViewById(R.id.buttonDiscard);
buttonSave.setOnClickListener(this);
buttonDiscard.setOnClickListener(this);
@@ -125,7 +124,7 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
{
ColorPickerDialog picker = ColorPickerDialog.newInstance(
R.string.color_picker_default_title,
- Habit.colors, modified_habit.color, 4, ColorPickerDialog.SIZE_SMALL);
+ ColorHelper.palette, modified_habit.color, 4, ColorPickerDialog.SIZE_SMALL);
picker.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener()
{
@@ -216,7 +215,7 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
}
/* Save button */
- if(id == R.id.button_save)
+ if(id == R.id.buttonSave)
{
Command command = null;
@@ -255,7 +254,7 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
}
/* Discard button */
- if(id == R.id.button_discard)
+ if(id == R.id.buttonDiscard)
{
dismiss();
}
diff --git a/src/org/isoron/uhabits/dialogs/ListHabitsFragment.java b/app/src/main/java/org/isoron/uhabits/dialogs/ListHabitsFragment.java
similarity index 99%
rename from src/org/isoron/uhabits/dialogs/ListHabitsFragment.java
rename to app/src/main/java/org/isoron/uhabits/dialogs/ListHabitsFragment.java
index 6bf546d19..e7a53dd84 100644
--- a/src/org/isoron/uhabits/dialogs/ListHabitsFragment.java
+++ b/app/src/main/java/org/isoron/uhabits/dialogs/ListHabitsFragment.java
@@ -22,7 +22,6 @@ import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Vibrator;
-import android.text.format.Time;
import android.transition.Explode;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -226,7 +225,7 @@ public class ListHabitsFragment extends Fragment implements OnSavedListener, OnI
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
- View view = inflater.inflate(R.layout.list_habits, container, false);
+ View view = inflater.inflate(R.layout.list_habits_fragment, container, false);
DisplayMetrics dm = getResources().getDisplayMetrics();
int width = (int) (dm.widthPixels / dm.density);
diff --git a/src/org/isoron/uhabits/dialogs/ShowHabitFragment.java b/app/src/main/java/org/isoron/uhabits/dialogs/ShowHabitFragment.java
similarity index 100%
rename from src/org/isoron/uhabits/dialogs/ShowHabitFragment.java
rename to app/src/main/java/org/isoron/uhabits/dialogs/ShowHabitFragment.java
diff --git a/src/org/isoron/uhabits/models/Habit.java b/app/src/main/java/org/isoron/uhabits/models/Habit.java
similarity index 95%
rename from src/org/isoron/uhabits/models/Habit.java
rename to app/src/main/java/org/isoron/uhabits/models/Habit.java
index 1a0546b88..54ec3f0e2 100644
--- a/src/org/isoron/uhabits/models/Habit.java
+++ b/app/src/main/java/org/isoron/uhabits/models/Habit.java
@@ -2,13 +2,12 @@ package org.isoron.uhabits.models;
import java.util.List;
+import org.isoron.helpers.ColorHelper;
import org.isoron.helpers.Command;
import org.isoron.helpers.DateHelper;
import org.isoron.uhabits.R;
import android.annotation.SuppressLint;
-import android.graphics.Color;
-import android.util.Log;
import com.activeandroid.Model;
import com.activeandroid.annotation.Column;
@@ -27,15 +26,7 @@ public class Habit extends Model
* Fields *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- public static final int colors[] = { Color.parseColor("#900000"),
- Color.parseColor("#c54100"), Color.parseColor("#c0ab00"),
- Color.parseColor("#8db600"), Color.parseColor("#117209"),
- Color.parseColor("#06965b"), Color.parseColor("#069a95"),
- Color.parseColor("#114896"), Color.parseColor("#501394"),
- Color.parseColor("#872086"), Color.parseColor("#c31764"),
- Color.parseColor("#000000"), Color.parseColor("#aaaaaa") };
-
- public static final int HALF_STAR_CUTOFF = 5999000;
+ public static final int HALF_STAR_CUTOFF = 5999000;
public static final int FULL_STAR_CUTOFF = 12973000;
public static final int MAX_SCORE = 19259500;
@@ -207,7 +198,7 @@ public class Habit extends Model
public Habit()
{
- this.color = colors[11];
+ this.color = ColorHelper.palette[11];
this.position = Habit.getCount();
this.highlight = 0;
}
diff --git a/src/org/isoron/uhabits/models/Repetition.java b/app/src/main/java/org/isoron/uhabits/models/Repetition.java
similarity index 100%
rename from src/org/isoron/uhabits/models/Repetition.java
rename to app/src/main/java/org/isoron/uhabits/models/Repetition.java
diff --git a/src/org/isoron/uhabits/models/Score.java b/app/src/main/java/org/isoron/uhabits/models/Score.java
similarity index 100%
rename from src/org/isoron/uhabits/models/Score.java
rename to app/src/main/java/org/isoron/uhabits/models/Score.java
diff --git a/src/org/isoron/uhabits/views/HabitHistoryView.java b/app/src/main/java/org/isoron/uhabits/views/HabitHistoryView.java
similarity index 100%
rename from src/org/isoron/uhabits/views/HabitHistoryView.java
rename to app/src/main/java/org/isoron/uhabits/views/HabitHistoryView.java
diff --git a/res/color/date_picker_selector.xml b/app/src/main/res/color/date_picker_selector.xml
similarity index 100%
rename from res/color/date_picker_selector.xml
rename to app/src/main/res/color/date_picker_selector.xml
diff --git a/res/color/date_picker_year_selector.xml b/app/src/main/res/color/date_picker_year_selector.xml
similarity index 100%
rename from res/color/date_picker_year_selector.xml
rename to app/src/main/res/color/date_picker_year_selector.xml
diff --git a/res/drawable-hdpi/apptheme_textfield_activated_holo_light.9.png b/app/src/main/res/drawable-hdpi/apptheme_textfield_activated_holo_light.9.png
similarity index 100%
rename from res/drawable-hdpi/apptheme_textfield_activated_holo_light.9.png
rename to app/src/main/res/drawable-hdpi/apptheme_textfield_activated_holo_light.9.png
diff --git a/res/drawable-hdpi/apptheme_textfield_default_holo_light.9.png b/app/src/main/res/drawable-hdpi/apptheme_textfield_default_holo_light.9.png
similarity index 100%
rename from res/drawable-hdpi/apptheme_textfield_default_holo_light.9.png
rename to app/src/main/res/drawable-hdpi/apptheme_textfield_default_holo_light.9.png
diff --git a/res/drawable-hdpi/apptheme_textfield_disabled_focused_holo_light.9.png b/app/src/main/res/drawable-hdpi/apptheme_textfield_disabled_focused_holo_light.9.png
similarity index 100%
rename from res/drawable-hdpi/apptheme_textfield_disabled_focused_holo_light.9.png
rename to app/src/main/res/drawable-hdpi/apptheme_textfield_disabled_focused_holo_light.9.png
diff --git a/res/drawable-hdpi/apptheme_textfield_disabled_holo_light.9.png b/app/src/main/res/drawable-hdpi/apptheme_textfield_disabled_holo_light.9.png
similarity index 100%
rename from res/drawable-hdpi/apptheme_textfield_disabled_holo_light.9.png
rename to app/src/main/res/drawable-hdpi/apptheme_textfield_disabled_holo_light.9.png
diff --git a/res/drawable-hdpi/apptheme_textfield_focused_holo_light.9.png b/app/src/main/res/drawable-hdpi/apptheme_textfield_focused_holo_light.9.png
similarity index 100%
rename from res/drawable-hdpi/apptheme_textfield_focused_holo_light.9.png
rename to app/src/main/res/drawable-hdpi/apptheme_textfield_focused_holo_light.9.png
diff --git a/res/drawable-hdpi/ic_action_add.png b/app/src/main/res/drawable-hdpi/ic_action_add.png
similarity index 100%
rename from res/drawable-hdpi/ic_action_add.png
rename to app/src/main/res/drawable-hdpi/ic_action_add.png
diff --git a/res/drawable-hdpi/ic_action_add_dark.png b/app/src/main/res/drawable-hdpi/ic_action_add_dark.png
similarity index 100%
rename from res/drawable-hdpi/ic_action_add_dark.png
rename to app/src/main/res/drawable-hdpi/ic_action_add_dark.png
diff --git a/res/drawable-hdpi/ic_action_check.png b/app/src/main/res/drawable-hdpi/ic_action_check.png
similarity index 100%
rename from res/drawable-hdpi/ic_action_check.png
rename to app/src/main/res/drawable-hdpi/ic_action_check.png
diff --git a/res/drawable-hdpi/ic_action_dismiss.png b/app/src/main/res/drawable-hdpi/ic_action_dismiss.png
similarity index 100%
rename from res/drawable-hdpi/ic_action_dismiss.png
rename to app/src/main/res/drawable-hdpi/ic_action_dismiss.png
diff --git a/res/drawable-hdpi/ic_action_pick_color.png b/app/src/main/res/drawable-hdpi/ic_action_pick_color.png
similarity index 100%
rename from res/drawable-hdpi/ic_action_pick_color.png
rename to app/src/main/res/drawable-hdpi/ic_action_pick_color.png
diff --git a/res/drawable-hdpi/ic_action_snooze.png b/app/src/main/res/drawable-hdpi/ic_action_snooze.png
similarity index 100%
rename from res/drawable-hdpi/ic_action_snooze.png
rename to app/src/main/res/drawable-hdpi/ic_action_snooze.png
diff --git a/res/drawable-hdpi/ic_colorpicker_swatch_selected.png b/app/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png
similarity index 100%
rename from res/drawable-hdpi/ic_colorpicker_swatch_selected.png
rename to app/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png
diff --git a/res/drawable-hdpi/ic_launcher.png b/app/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from res/drawable-hdpi/ic_launcher.png
rename to app/src/main/res/drawable-hdpi/ic_launcher.png
diff --git a/res/drawable-hdpi/ic_notification.png b/app/src/main/res/drawable-hdpi/ic_notification.png
similarity index 100%
rename from res/drawable-hdpi/ic_notification.png
rename to app/src/main/res/drawable-hdpi/ic_notification.png
diff --git a/res/drawable-mdpi/apptheme_textfield_activated_holo_light.9.png b/app/src/main/res/drawable-mdpi/apptheme_textfield_activated_holo_light.9.png
similarity index 100%
rename from res/drawable-mdpi/apptheme_textfield_activated_holo_light.9.png
rename to app/src/main/res/drawable-mdpi/apptheme_textfield_activated_holo_light.9.png
diff --git a/res/drawable-mdpi/apptheme_textfield_default_holo_light.9.png b/app/src/main/res/drawable-mdpi/apptheme_textfield_default_holo_light.9.png
similarity index 100%
rename from res/drawable-mdpi/apptheme_textfield_default_holo_light.9.png
rename to app/src/main/res/drawable-mdpi/apptheme_textfield_default_holo_light.9.png
diff --git a/res/drawable-mdpi/apptheme_textfield_disabled_focused_holo_light.9.png b/app/src/main/res/drawable-mdpi/apptheme_textfield_disabled_focused_holo_light.9.png
similarity index 100%
rename from res/drawable-mdpi/apptheme_textfield_disabled_focused_holo_light.9.png
rename to app/src/main/res/drawable-mdpi/apptheme_textfield_disabled_focused_holo_light.9.png
diff --git a/res/drawable-mdpi/apptheme_textfield_disabled_holo_light.9.png b/app/src/main/res/drawable-mdpi/apptheme_textfield_disabled_holo_light.9.png
similarity index 100%
rename from res/drawable-mdpi/apptheme_textfield_disabled_holo_light.9.png
rename to app/src/main/res/drawable-mdpi/apptheme_textfield_disabled_holo_light.9.png
diff --git a/res/drawable-mdpi/apptheme_textfield_focused_holo_light.9.png b/app/src/main/res/drawable-mdpi/apptheme_textfield_focused_holo_light.9.png
similarity index 100%
rename from res/drawable-mdpi/apptheme_textfield_focused_holo_light.9.png
rename to app/src/main/res/drawable-mdpi/apptheme_textfield_focused_holo_light.9.png
diff --git a/res/drawable-mdpi/ic_action_add.png b/app/src/main/res/drawable-mdpi/ic_action_add.png
similarity index 100%
rename from res/drawable-mdpi/ic_action_add.png
rename to app/src/main/res/drawable-mdpi/ic_action_add.png
diff --git a/res/drawable-mdpi/ic_action_add_dark.png b/app/src/main/res/drawable-mdpi/ic_action_add_dark.png
similarity index 100%
rename from res/drawable-mdpi/ic_action_add_dark.png
rename to app/src/main/res/drawable-mdpi/ic_action_add_dark.png
diff --git a/res/drawable-mdpi/ic_action_check.png b/app/src/main/res/drawable-mdpi/ic_action_check.png
similarity index 100%
rename from res/drawable-mdpi/ic_action_check.png
rename to app/src/main/res/drawable-mdpi/ic_action_check.png
diff --git a/res/drawable-mdpi/ic_action_dismiss.png b/app/src/main/res/drawable-mdpi/ic_action_dismiss.png
similarity index 100%
rename from res/drawable-mdpi/ic_action_dismiss.png
rename to app/src/main/res/drawable-mdpi/ic_action_dismiss.png
diff --git a/res/drawable-mdpi/ic_action_pick_color.png b/app/src/main/res/drawable-mdpi/ic_action_pick_color.png
similarity index 100%
rename from res/drawable-mdpi/ic_action_pick_color.png
rename to app/src/main/res/drawable-mdpi/ic_action_pick_color.png
diff --git a/res/drawable-mdpi/ic_action_snooze.png b/app/src/main/res/drawable-mdpi/ic_action_snooze.png
similarity index 100%
rename from res/drawable-mdpi/ic_action_snooze.png
rename to app/src/main/res/drawable-mdpi/ic_action_snooze.png
diff --git a/res/drawable-mdpi/ic_colorpicker_swatch_selected.png b/app/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png
similarity index 100%
rename from res/drawable-mdpi/ic_colorpicker_swatch_selected.png
rename to app/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png
diff --git a/res/drawable-mdpi/ic_launcher.png b/app/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from res/drawable-mdpi/ic_launcher.png
rename to app/src/main/res/drawable-mdpi/ic_launcher.png
diff --git a/res/drawable-mdpi/ic_notification.png b/app/src/main/res/drawable-mdpi/ic_notification.png
similarity index 100%
rename from res/drawable-mdpi/ic_notification.png
rename to app/src/main/res/drawable-mdpi/ic_notification.png
diff --git a/res/drawable-v21/habits_item_check_normal.xml b/app/src/main/res/drawable-v21/habits_item_check_normal.xml
similarity index 100%
rename from res/drawable-v21/habits_item_check_normal.xml
rename to app/src/main/res/drawable-v21/habits_item_check_normal.xml
diff --git a/res/drawable-v21/habits_item_check_pressed.xml b/app/src/main/res/drawable-v21/habits_item_check_pressed.xml
similarity index 100%
rename from res/drawable-v21/habits_item_check_pressed.xml
rename to app/src/main/res/drawable-v21/habits_item_check_pressed.xml
diff --git a/res/drawable-xhdpi/apptheme_textfield_activated_holo_light.9.png b/app/src/main/res/drawable-xhdpi/apptheme_textfield_activated_holo_light.9.png
similarity index 100%
rename from res/drawable-xhdpi/apptheme_textfield_activated_holo_light.9.png
rename to app/src/main/res/drawable-xhdpi/apptheme_textfield_activated_holo_light.9.png
diff --git a/res/drawable-xhdpi/apptheme_textfield_default_holo_light.9.png b/app/src/main/res/drawable-xhdpi/apptheme_textfield_default_holo_light.9.png
similarity index 100%
rename from res/drawable-xhdpi/apptheme_textfield_default_holo_light.9.png
rename to app/src/main/res/drawable-xhdpi/apptheme_textfield_default_holo_light.9.png
diff --git a/res/drawable-xhdpi/apptheme_textfield_disabled_focused_holo_light.9.png b/app/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_focused_holo_light.9.png
similarity index 100%
rename from res/drawable-xhdpi/apptheme_textfield_disabled_focused_holo_light.9.png
rename to app/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_focused_holo_light.9.png
diff --git a/res/drawable-xhdpi/apptheme_textfield_disabled_holo_light.9.png b/app/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_holo_light.9.png
similarity index 100%
rename from res/drawable-xhdpi/apptheme_textfield_disabled_holo_light.9.png
rename to app/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_holo_light.9.png
diff --git a/res/drawable-xhdpi/apptheme_textfield_focused_holo_light.9.png b/app/src/main/res/drawable-xhdpi/apptheme_textfield_focused_holo_light.9.png
similarity index 100%
rename from res/drawable-xhdpi/apptheme_textfield_focused_holo_light.9.png
rename to app/src/main/res/drawable-xhdpi/apptheme_textfield_focused_holo_light.9.png
diff --git a/res/drawable-xhdpi/ic_action_add.png b/app/src/main/res/drawable-xhdpi/ic_action_add.png
similarity index 100%
rename from res/drawable-xhdpi/ic_action_add.png
rename to app/src/main/res/drawable-xhdpi/ic_action_add.png
diff --git a/res/drawable-xhdpi/ic_action_add_dark.png b/app/src/main/res/drawable-xhdpi/ic_action_add_dark.png
similarity index 100%
rename from res/drawable-xhdpi/ic_action_add_dark.png
rename to app/src/main/res/drawable-xhdpi/ic_action_add_dark.png
diff --git a/res/drawable-xhdpi/ic_action_check.png b/app/src/main/res/drawable-xhdpi/ic_action_check.png
similarity index 100%
rename from res/drawable-xhdpi/ic_action_check.png
rename to app/src/main/res/drawable-xhdpi/ic_action_check.png
diff --git a/res/drawable-xhdpi/ic_action_dismiss.png b/app/src/main/res/drawable-xhdpi/ic_action_dismiss.png
similarity index 100%
rename from res/drawable-xhdpi/ic_action_dismiss.png
rename to app/src/main/res/drawable-xhdpi/ic_action_dismiss.png
diff --git a/res/drawable-xhdpi/ic_action_pick_color.png b/app/src/main/res/drawable-xhdpi/ic_action_pick_color.png
similarity index 100%
rename from res/drawable-xhdpi/ic_action_pick_color.png
rename to app/src/main/res/drawable-xhdpi/ic_action_pick_color.png
diff --git a/res/drawable-xhdpi/ic_action_snooze.png b/app/src/main/res/drawable-xhdpi/ic_action_snooze.png
similarity index 100%
rename from res/drawable-xhdpi/ic_action_snooze.png
rename to app/src/main/res/drawable-xhdpi/ic_action_snooze.png
diff --git a/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png b/app/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png
similarity index 100%
rename from res/drawable-xhdpi/ic_colorpicker_swatch_selected.png
rename to app/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png
diff --git a/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from res/drawable-xhdpi/ic_launcher.png
rename to app/src/main/res/drawable-xhdpi/ic_launcher.png
diff --git a/res/drawable-xhdpi/ic_notification.png b/app/src/main/res/drawable-xhdpi/ic_notification.png
similarity index 100%
rename from res/drawable-xhdpi/ic_notification.png
rename to app/src/main/res/drawable-xhdpi/ic_notification.png
diff --git a/res/drawable-xxhdpi/apptheme_textfield_activated_holo_light.9.png b/app/src/main/res/drawable-xxhdpi/apptheme_textfield_activated_holo_light.9.png
similarity index 100%
rename from res/drawable-xxhdpi/apptheme_textfield_activated_holo_light.9.png
rename to app/src/main/res/drawable-xxhdpi/apptheme_textfield_activated_holo_light.9.png
diff --git a/res/drawable-xxhdpi/apptheme_textfield_default_holo_light.9.png b/app/src/main/res/drawable-xxhdpi/apptheme_textfield_default_holo_light.9.png
similarity index 100%
rename from res/drawable-xxhdpi/apptheme_textfield_default_holo_light.9.png
rename to app/src/main/res/drawable-xxhdpi/apptheme_textfield_default_holo_light.9.png
diff --git a/res/drawable-xxhdpi/apptheme_textfield_disabled_focused_holo_light.9.png b/app/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_focused_holo_light.9.png
similarity index 100%
rename from res/drawable-xxhdpi/apptheme_textfield_disabled_focused_holo_light.9.png
rename to app/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_focused_holo_light.9.png
diff --git a/res/drawable-xxhdpi/apptheme_textfield_disabled_holo_light.9.png b/app/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_holo_light.9.png
similarity index 100%
rename from res/drawable-xxhdpi/apptheme_textfield_disabled_holo_light.9.png
rename to app/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_holo_light.9.png
diff --git a/res/drawable-xxhdpi/apptheme_textfield_focused_holo_light.9.png b/app/src/main/res/drawable-xxhdpi/apptheme_textfield_focused_holo_light.9.png
similarity index 100%
rename from res/drawable-xxhdpi/apptheme_textfield_focused_holo_light.9.png
rename to app/src/main/res/drawable-xxhdpi/apptheme_textfield_focused_holo_light.9.png
diff --git a/res/drawable-xxhdpi/ic_action_add.png b/app/src/main/res/drawable-xxhdpi/ic_action_add.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_action_add.png
rename to app/src/main/res/drawable-xxhdpi/ic_action_add.png
diff --git a/res/drawable-xxhdpi/ic_action_add_dark.png b/app/src/main/res/drawable-xxhdpi/ic_action_add_dark.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_action_add_dark.png
rename to app/src/main/res/drawable-xxhdpi/ic_action_add_dark.png
diff --git a/res/drawable-xxhdpi/ic_action_check.png b/app/src/main/res/drawable-xxhdpi/ic_action_check.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_action_check.png
rename to app/src/main/res/drawable-xxhdpi/ic_action_check.png
diff --git a/res/drawable-xxhdpi/ic_action_dismiss.png b/app/src/main/res/drawable-xxhdpi/ic_action_dismiss.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_action_dismiss.png
rename to app/src/main/res/drawable-xxhdpi/ic_action_dismiss.png
diff --git a/res/drawable-xxhdpi/ic_action_pick_color.png b/app/src/main/res/drawable-xxhdpi/ic_action_pick_color.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_action_pick_color.png
rename to app/src/main/res/drawable-xxhdpi/ic_action_pick_color.png
diff --git a/res/drawable-xxhdpi/ic_action_snooze.png b/app/src/main/res/drawable-xxhdpi/ic_action_snooze.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_action_snooze.png
rename to app/src/main/res/drawable-xxhdpi/ic_action_snooze.png
diff --git a/res/drawable-xxhdpi/ic_launcher.png b/app/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_launcher.png
rename to app/src/main/res/drawable-xxhdpi/ic_launcher.png
diff --git a/res/drawable-xxhdpi/ic_notification.png b/app/src/main/res/drawable-xxhdpi/ic_notification.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_notification.png
rename to app/src/main/res/drawable-xxhdpi/ic_notification.png
diff --git a/res/drawable/apptheme_edit_text_holo_light.xml b/app/src/main/res/drawable/apptheme_edit_text_holo_light.xml
similarity index 100%
rename from res/drawable/apptheme_edit_text_holo_light.xml
rename to app/src/main/res/drawable/apptheme_edit_text_holo_light.xml
diff --git a/res/drawable/color_picker_swatch.xml b/app/src/main/res/drawable/color_picker_swatch.xml
similarity index 100%
rename from res/drawable/color_picker_swatch.xml
rename to app/src/main/res/drawable/color_picker_swatch.xml
diff --git a/res/drawable/done_background_color.xml b/app/src/main/res/drawable/done_background_color.xml
similarity index 100%
rename from res/drawable/done_background_color.xml
rename to app/src/main/res/drawable/done_background_color.xml
diff --git a/res/drawable/done_background_color_dark.xml b/app/src/main/res/drawable/done_background_color_dark.xml
similarity index 100%
rename from res/drawable/done_background_color_dark.xml
rename to app/src/main/res/drawable/done_background_color_dark.xml
diff --git a/res/drawable/habits_header.xml b/app/src/main/res/drawable/habits_header.xml
similarity index 93%
rename from res/drawable/habits_header.xml
rename to app/src/main/res/drawable/habits_header.xml
index a935ad4de..e1c4cfc84 100644
--- a/res/drawable/habits_header.xml
+++ b/app/src/main/res/drawable/habits_header.xml
@@ -1,4 +1,4 @@
-
+
-
diff --git a/res/drawable/habits_header_check.xml b/app/src/main/res/drawable/habits_header_check.xml
similarity index 100%
rename from res/drawable/habits_header_check.xml
rename to app/src/main/res/drawable/habits_header_check.xml
diff --git a/res/drawable/habits_item.xml b/app/src/main/res/drawable/habits_item.xml
similarity index 87%
rename from res/drawable/habits_item.xml
rename to app/src/main/res/drawable/habits_item.xml
index a2f83e48b..4ba72d44f 100644
--- a/res/drawable/habits_item.xml
+++ b/app/src/main/res/drawable/habits_item.xml
@@ -1,4 +1,4 @@
-
+
-
diff --git a/res/drawable/habits_item_check.xml b/app/src/main/res/drawable/habits_item_check.xml
similarity index 100%
rename from res/drawable/habits_item_check.xml
rename to app/src/main/res/drawable/habits_item_check.xml
diff --git a/res/drawable/habits_item_check_normal.xml b/app/src/main/res/drawable/habits_item_check_normal.xml
similarity index 100%
rename from res/drawable/habits_item_check_normal.xml
rename to app/src/main/res/drawable/habits_item_check_normal.xml
diff --git a/res/drawable/habits_item_check_pressed.xml b/app/src/main/res/drawable/habits_item_check_pressed.xml
similarity index 100%
rename from res/drawable/habits_item_check_pressed.xml
rename to app/src/main/res/drawable/habits_item_check_pressed.xml
diff --git a/res/drawable/ripple_background.xml b/app/src/main/res/drawable/ripple_background.xml
similarity index 100%
rename from res/drawable/ripple_background.xml
rename to app/src/main/res/drawable/ripple_background.xml
diff --git a/res/layout/color_picker_dialog.xml b/app/src/main/res/layout/color_picker_dialog.xml
similarity index 100%
rename from res/layout/color_picker_dialog.xml
rename to app/src/main/res/layout/color_picker_dialog.xml
diff --git a/res/layout/color_picker_swatch.xml b/app/src/main/res/layout/color_picker_swatch.xml
similarity index 100%
rename from res/layout/color_picker_swatch.xml
rename to app/src/main/res/layout/color_picker_swatch.xml
diff --git a/res/layout/date_picker_dialog.xml b/app/src/main/res/layout/date_picker_dialog.xml
similarity index 100%
rename from res/layout/date_picker_dialog.xml
rename to app/src/main/res/layout/date_picker_dialog.xml
diff --git a/res/layout/date_picker_done_button.xml b/app/src/main/res/layout/date_picker_done_button.xml
similarity index 100%
rename from res/layout/date_picker_done_button.xml
rename to app/src/main/res/layout/date_picker_done_button.xml
diff --git a/res/layout/date_picker_header_view.xml b/app/src/main/res/layout/date_picker_header_view.xml
similarity index 100%
rename from res/layout/date_picker_header_view.xml
rename to app/src/main/res/layout/date_picker_header_view.xml
diff --git a/res/layout/date_picker_selected_date.xml b/app/src/main/res/layout/date_picker_selected_date.xml
similarity index 100%
rename from res/layout/date_picker_selected_date.xml
rename to app/src/main/res/layout/date_picker_selected_date.xml
diff --git a/res/layout/date_picker_view_animator.xml b/app/src/main/res/layout/date_picker_view_animator.xml
similarity index 100%
rename from res/layout/date_picker_view_animator.xml
rename to app/src/main/res/layout/date_picker_view_animator.xml
diff --git a/app/src/main/res/layout/edit_habit.xml b/app/src/main/res/layout/edit_habit.xml
new file mode 100644
index 000000000..2430609a2
--- /dev/null
+++ b/app/src/main/res/layout/edit_habit.xml
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/main_activity.xml b/app/src/main/res/layout/list_habits_activity.xml
similarity index 83%
rename from res/layout/main_activity.xml
rename to app/src/main/res/layout/list_habits_activity.xml
index 72079b352..d9b6a22d8 100644
--- a/res/layout/main_activity.xml
+++ b/app/src/main/res/layout/list_habits_activity.xml
@@ -10,6 +10,7 @@
android:id="@+id/fragment1"
android:name="org.isoron.uhabits.dialogs.ListHabitsFragment"
android:layout_width="match_parent"
- android:layout_height="match_parent" />
+ android:layout_height="match_parent"
+ tools:layout="@layout/list_habits_fragment" />
diff --git a/app/src/main/res/layout/list_habits_fragment.xml b/app/src/main/res/layout/list_habits_fragment.xml
new file mode 100644
index 000000000..df58cd3ed
--- /dev/null
+++ b/app/src/main/res/layout/list_habits_fragment.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_habits_header_check.xml b/app/src/main/res/layout/list_habits_header_check.xml
new file mode 100644
index 000000000..1626e2532
--- /dev/null
+++ b/app/src/main/res/layout/list_habits_header_check.xml
@@ -0,0 +1,4 @@
+
+
diff --git a/app/src/main/res/layout/list_habits_item.xml b/app/src/main/res/layout/list_habits_item.xml
new file mode 100644
index 000000000..b1f07dc7a
--- /dev/null
+++ b/app/src/main/res/layout/list_habits_item.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_habits_item_check.xml b/app/src/main/res/layout/list_habits_item_check.xml
new file mode 100644
index 000000000..b14deae80
--- /dev/null
+++ b/app/src/main/res/layout/list_habits_item_check.xml
@@ -0,0 +1,4 @@
+
+
diff --git a/app/src/main/res/layout/show_habit.xml b/app/src/main/res/layout/show_habit.xml
new file mode 100644
index 000000000..c9451f1bd
--- /dev/null
+++ b/app/src/main/res/layout/show_habit.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/show_habit_activity.xml b/app/src/main/res/layout/show_habit_activity.xml
similarity index 100%
rename from res/layout/show_habit_activity.xml
rename to app/src/main/res/layout/show_habit_activity.xml
diff --git a/res/layout/time_header_label.xml b/app/src/main/res/layout/time_header_label.xml
similarity index 100%
rename from res/layout/time_header_label.xml
rename to app/src/main/res/layout/time_header_label.xml
diff --git a/res/layout/time_picker_dialog.xml b/app/src/main/res/layout/time_picker_dialog.xml
similarity index 100%
rename from res/layout/time_picker_dialog.xml
rename to app/src/main/res/layout/time_picker_dialog.xml
diff --git a/res/layout/year_label_text_view.xml b/app/src/main/res/layout/year_label_text_view.xml
similarity index 100%
rename from res/layout/year_label_text_view.xml
rename to app/src/main/res/layout/year_label_text_view.xml
diff --git a/res/menu-v21/show_habits_options.xml b/app/src/main/res/menu-v21/show_habits_options.xml
similarity index 100%
rename from res/menu-v21/show_habits_options.xml
rename to app/src/main/res/menu-v21/show_habits_options.xml
diff --git a/res/menu/main_activity.xml b/app/src/main/res/menu/main_activity.xml
similarity index 100%
rename from res/menu/main_activity.xml
rename to app/src/main/res/menu/main_activity.xml
diff --git a/res/menu/show_habit.xml b/app/src/main/res/menu/show_habit.xml
similarity index 100%
rename from res/menu/show_habit.xml
rename to app/src/main/res/menu/show_habit.xml
diff --git a/res/menu/show_habits_context.xml b/app/src/main/res/menu/show_habits_context.xml
similarity index 100%
rename from res/menu/show_habits_context.xml
rename to app/src/main/res/menu/show_habits_context.xml
diff --git a/res/menu/show_habits_options.xml b/app/src/main/res/menu/show_habits_options.xml
similarity index 100%
rename from res/menu/show_habits_options.xml
rename to app/src/main/res/menu/show_habits_options.xml
diff --git a/res/values-hdpi/dimens.xml b/app/src/main/res/values-hdpi/dimens.xml
similarity index 100%
rename from res/values-hdpi/dimens.xml
rename to app/src/main/res/values-hdpi/dimens.xml
diff --git a/res/values-ldpi/dimens.xml b/app/src/main/res/values-ldpi/dimens.xml
similarity index 100%
rename from res/values-ldpi/dimens.xml
rename to app/src/main/res/values-ldpi/dimens.xml
diff --git a/res/values-mdpi/dimens.xml b/app/src/main/res/values-mdpi/dimens.xml
similarity index 100%
rename from res/values-mdpi/dimens.xml
rename to app/src/main/res/values-mdpi/dimens.xml
diff --git a/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
similarity index 100%
rename from res/values-v21/styles.xml
rename to app/src/main/res/values-v21/styles.xml
diff --git a/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml
similarity index 100%
rename from res/values-w820dp/dimens.xml
rename to app/src/main/res/values-w820dp/dimens.xml
diff --git a/res/values-xhdpi/dimens.xml b/app/src/main/res/values-xhdpi/dimens.xml
similarity index 100%
rename from res/values-xhdpi/dimens.xml
rename to app/src/main/res/values-xhdpi/dimens.xml
diff --git a/res/values-xxhdpi/dimens.xml b/app/src/main/res/values-xxhdpi/dimens.xml
similarity index 100%
rename from res/values-xxhdpi/dimens.xml
rename to app/src/main/res/values-xxhdpi/dimens.xml
diff --git a/res/values-xxxhdpi/dimens.xml b/app/src/main/res/values-xxxhdpi/dimens.xml
similarity index 100%
rename from res/values-xxxhdpi/dimens.xml
rename to app/src/main/res/values-xxxhdpi/dimens.xml
diff --git a/res/values/colors.xml b/app/src/main/res/values/colors.xml
similarity index 95%
rename from res/values/colors.xml
rename to app/src/main/res/values/colors.xml
index 0f20e107c..7949e0bf5 100644
--- a/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -16,8 +16,8 @@
-->
- #00517b
- #003d5d
+ #114896
+ #0b235f
#9a4000
#e6e6e6
diff --git a/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
similarity index 100%
rename from res/values/dimens.xml
rename to app/src/main/res/values/dimens.xml
diff --git a/res/values/dslv_attrs.xml b/app/src/main/res/values/dslv_attrs.xml
similarity index 96%
rename from res/values/dslv_attrs.xml
rename to app/src/main/res/values/dslv_attrs.xml
index 8c779c9bf..6c4d5d799 100644
--- a/res/values/dslv_attrs.xml
+++ b/app/src/main/res/values/dslv_attrs.xml
@@ -1,4 +1,4 @@
-
+
diff --git a/res/values/fontawesome.xml b/app/src/main/res/values/fontawesome.xml
similarity index 100%
rename from res/values/fontawesome.xml
rename to app/src/main/res/values/fontawesome.xml
diff --git a/res/values/strings.xml b/app/src/main/res/values/strings.xml
similarity index 100%
rename from res/values/strings.xml
rename to app/src/main/res/values/strings.xml
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 000000000..ccf472848
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/styles_dialog.xml b/app/src/main/res/values/styles_dialog.xml
new file mode 100644
index 000000000..fed6ac9ac
--- /dev/null
+++ b/app/src/main/res/values/styles_dialog.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles_list_habits.xml b/app/src/main/res/values/styles_list_habits.xml
new file mode 100644
index 000000000..10af63df6
--- /dev/null
+++ b/app/src/main/res/values/styles_list_habits.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles_show_habit.xml b/app/src/main/res/values/styles_show_habit.xml
new file mode 100644
index 000000000..a6b3daec9
--- /dev/null
+++ b/app/src/main/res/values/styles_show_habit.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/art/ic_launcher.png b/art/ic_launcher.png
deleted file mode 100644
index b05d26681..000000000
Binary files a/art/ic_launcher.png and /dev/null differ
diff --git a/art/ic_launcher.svg b/art/ic_launcher.svg
deleted file mode 100644
index d4d0e2b63..000000000
--- a/art/ic_launcher.svg
+++ /dev/null
@@ -1,195 +0,0 @@
-
-
-
-
diff --git a/art/ic_notification.png b/art/ic_notification.png
deleted file mode 100644
index 6caedc183..000000000
Binary files a/art/ic_notification.png and /dev/null differ
diff --git a/art/ic_notification.svg b/art/ic_notification.svg
deleted file mode 100644
index b4946956a..000000000
--- a/art/ic_notification.svg
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 000000000..833eee9a2
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,15 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+ repositories {
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:1.1.0'
+ }
+}
+
+allprojects {
+ repositories {
+ jcenter()
+ }
+}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 000000000..8c0fb64a8
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 000000000..0c71e760d
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed Apr 10 15:27:10 PDT 2013
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
diff --git a/gradlew b/gradlew
new file mode 100755
index 000000000..91a7e269e
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 000000000..aec99730b
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/ic_launcher-web.png b/ic_launcher-web.png
deleted file mode 100644
index 628546ff1..000000000
Binary files a/ic_launcher-web.png and /dev/null differ
diff --git a/import-summary.txt b/import-summary.txt
new file mode 100644
index 000000000..d55702d17
--- /dev/null
+++ b/import-summary.txt
@@ -0,0 +1,56 @@
+ECLIPSE ANDROID PROJECT IMPORT SUMMARY
+======================================
+
+Ignored Files:
+--------------
+The following files were *not* copied into the new Gradle project; you
+should evaluate whether these are still needed in your project and if
+so manually move them:
+
+* .gitignore
+* art/
+* art/ic_launcher.png
+* art/ic_launcher.svg
+* art/ic_notification.png
+* art/ic_notification.svg
+* ic_launcher-web.png
+* proguard-project.txt
+
+Replaced Jars with Dependencies:
+--------------------------------
+The importer recognized the following .jar files as third party
+libraries and replaced them with Gradle dependencies instead. This has
+the advantage that more explicit version information is known, and the
+libraries can be updated automatically. However, it is possible that
+the .jar file in your project was of an older version than the
+dependency we picked, which could render the project not compileable.
+You can disable the jar replacement in the import wizard and try again:
+
+android-support-v4.jar => com.android.support:support-v4:22.0.0
+
+Moved Files:
+------------
+Android Gradle projects use a different directory structure than ADT
+Eclipse projects. Here's how the projects were restructured:
+
+* AndroidManifest.xml => app/src/main/AndroidManifest.xml
+* assets/ => app/src/main/assets/
+* libs/ActiveAndroid.jar => app/libs/ActiveAndroid.jar
+* lint.xml => app/lint.xml
+* res/ => app/src/main/res/
+* src/ => app/src/main/java/
+
+Next Steps:
+-----------
+You can now build the project. The Gradle project needs network
+connectivity to download dependencies.
+
+Bugs:
+-----
+If for some reason your project does not build, and you determine that
+it is due to a bug or limitation of the Eclipse to Gradle importer,
+please file a bug at http://b.android.com with category
+Component-Tools.
+
+(This import summary is for your information only, and can be deleted
+after import once you are satisfied with the results.)
diff --git a/libs/android-support-v4.jar b/libs/android-support-v4.jar
deleted file mode 100644
index 1437d24e6..000000000
Binary files a/libs/android-support-v4.jar and /dev/null differ
diff --git a/proguard-project.txt b/proguard-project.txt
deleted file mode 100644
index f2fe1559a..000000000
--- a/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
diff --git a/project.properties b/project.properties
deleted file mode 100644
index 00cf62bac..000000000
--- a/project.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system edit
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-#
-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
-
-# Project target.
-target=android-22
diff --git a/res/layout/edit_habit.xml b/res/layout/edit_habit.xml
deleted file mode 100644
index aca80a6f3..000000000
--- a/res/layout/edit_habit.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/layout/list_habits.xml b/res/layout/list_habits.xml
deleted file mode 100644
index ff14f5260..000000000
--- a/res/layout/list_habits.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/layout/list_habits_header_check.xml b/res/layout/list_habits_header_check.xml
deleted file mode 100644
index 34940a5b2..000000000
--- a/res/layout/list_habits_header_check.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
diff --git a/res/layout/list_habits_item.xml b/res/layout/list_habits_item.xml
deleted file mode 100644
index 817236652..000000000
--- a/res/layout/list_habits_item.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/layout/list_habits_item_check.xml b/res/layout/list_habits_item_check.xml
deleted file mode 100644
index 555432cec..000000000
--- a/res/layout/list_habits_item_check.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
diff --git a/res/layout/show_habit.xml b/res/layout/show_habit.xml
deleted file mode 100644
index c02cf6be6..000000000
--- a/res/layout/show_habit.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/values/styles.xml b/res/values/styles.xml
deleted file mode 100644
index d7da8cd0c..000000000
--- a/res/values/styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 000000000..e7b4def49
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+include ':app'
diff --git a/src/org/isoron/uhabits/MainActivity.java b/src/org/isoron/uhabits/MainActivity.java
deleted file mode 100644
index 687476c07..000000000
--- a/src/org/isoron/uhabits/MainActivity.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package org.isoron.uhabits;
-
-import java.text.DateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.LinkedList;
-
-import org.isoron.helpers.Command;
-import org.isoron.uhabits.dialogs.ListHabitsFragment;
-import org.isoron.uhabits.models.Habit;
-
-import android.app.Activity;
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Build;
-import android.os.Bundle;
-import android.util.DisplayMetrics;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.widget.Toast;
-
-public class MainActivity extends Activity
-{
-
- private ListHabitsFragment listHabitsFragment;
-
- private LinkedList undoList;
- private LinkedList redoList;
-
- private static int MAX_UNDO_LEVEL = 15;
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Creation *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
-
- getActionBar().setElevation(5);
-
- setContentView(R.layout.main_activity);
-
- listHabitsFragment = (ListHabitsFragment) getFragmentManager().findFragmentById(
- R.id.fragment1);
-
- Log.d("MainActivity", "Creating activity");
-
- undoList = new LinkedList();
- redoList = new LinkedList();
-
- createReminderAlarms(MainActivity.this);
- }
-
- @Override
- protected void onStart()
- {
- super.onStart();
- listHabitsFragment.notifyDataSetChanged();
- Log.d("MainActivity", "Starting activity");
- }
-
- public static void createReminderAlarms(Context context)
- {
- for(Habit habit : Habit.getHabitsWithReminder())
- createReminderAlarm(context, habit, null);
- }
-
- public static void createReminderAlarm(Context context, Habit habit, Long reminderTime)
- {
- Uri uri = Uri.parse("content://org.isoron.uhabits/habit/" + habit.getId());
-
- if(reminderTime == null)
- {
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(System.currentTimeMillis());
- calendar.set(Calendar.HOUR_OF_DAY, habit.reminder_hour);
- calendar.set(Calendar.MINUTE, habit.reminder_min);
- calendar.set(Calendar.SECOND, 0);
-
- reminderTime = calendar.getTimeInMillis();
-
- if(System.currentTimeMillis() > reminderTime) {
- reminderTime += AlarmManager.INTERVAL_DAY;
- }
- }
-
- Intent alarmIntent = new Intent(context, ReminderAlarmReceiver.class);
- alarmIntent.setAction(ReminderAlarmReceiver.ACTION_REMIND);
- alarmIntent.setData(uri);
-
- PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
- ((int)(habit.getId() % Integer.MAX_VALUE)) + 1,
- alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-
- AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
- if (Build.VERSION.SDK_INT >= 19) {
- manager.setExact(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent);
- } else {
- manager.set(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent);
- }
-
- Log.d("Alarm", String.format("Setting alarm (%s): %s", DateFormat.getDateTimeInstance()
- .format(new Date(reminderTime)), habit.name));
- }
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Action Bar Menu *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu)
- {
- getMenuInflater().inflate(R.menu.main_activity, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item)
- {
- int id = item.getItemId();
- if(id == R.id.action_settings)
- {
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Commands, Undo, Redo *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- public void executeCommand(Command command, boolean datasetChanged)
- {
- executeCommand(command, datasetChanged, true);
- }
-
- public void executeCommand(Command command, boolean datasetChanged, boolean clearRedoStack)
- {
- undoList.push(command);
- if(undoList.size() > MAX_UNDO_LEVEL)
- undoList.removeLast();
- if(clearRedoStack)
- redoList.clear();
- command.execute();
-
- showToast(command.getExecuteStringId());
- if(datasetChanged)
- {
- listHabitsFragment.notifyDataSetChanged();
- }
- }
-
- public void undo()
- {
- if(undoList.isEmpty())
- {
- showToast(R.string.toast_nothing_to_undo);
- return;
- }
-
- Command last = undoList.pop();
- redoList.push(last);
- last.undo();
- showToast(last.getUndoStringId());
-
- listHabitsFragment.notifyDataSetChanged();
- }
-
- public void redo()
- {
- if(redoList.isEmpty())
- {
- showToast(R.string.toast_nothing_to_redo);
- return;
- }
- Command last = redoList.pop();
- executeCommand(last, true, false);
- }
-
- private Toast toast;
-
- private void showToast(Integer stringId)
- {
- if(stringId == null)
- return;
- if(toast == null)
- toast = Toast.makeText(this, stringId, Toast.LENGTH_SHORT);
- else
- toast.setText(stringId);
- toast.show();
- }
-}
diff --git a/uHabits.iml b/uHabits.iml
new file mode 100644
index 000000000..00bc43cf8
--- /dev/null
+++ b/uHabits.iml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+