mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Refactor EditHabitsFragment
This commit is contained in:
@@ -110,7 +110,7 @@ public class ReminderAlarmReceiver extends BroadcastReceiver
|
||||
habit.save();
|
||||
|
||||
// Check if reminder has been turned off after alarm was scheduled
|
||||
if (habit.reminder_hour == null) return;
|
||||
if (habit.reminderHour == null) return;
|
||||
|
||||
Intent contentIntent = new Intent(context, MainActivity.class);
|
||||
contentIntent.setData(data);
|
||||
|
||||
@@ -46,8 +46,8 @@ public class ReminderHelper
|
||||
{
|
||||
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.HOUR_OF_DAY, habit.reminderHour);
|
||||
calendar.set(Calendar.MINUTE, habit.reminderMin);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
|
||||
reminderTime = calendar.getTimeInMillis();
|
||||
|
||||
@@ -19,7 +19,6 @@ package org.isoron.uhabits.dialogs;
|
||||
import android.app.DialogFragment;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.ColorMatrix;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.format.DateFormat;
|
||||
@@ -46,33 +45,18 @@ import org.isoron.uhabits.models.Habit;
|
||||
|
||||
public class EditHabitFragment extends DialogFragment implements OnClickListener
|
||||
{
|
||||
private int mode;
|
||||
private Integer mode;
|
||||
static final int EDIT_MODE = 0;
|
||||
static final int CREATE_MODE = 1;
|
||||
|
||||
private OnSavedListener onSavedListener;
|
||||
|
||||
private Habit originalHabit, modified_habit;
|
||||
private Habit originalHabit, modifiedHabit;
|
||||
private TextView tvName, tvDescription, tvFreqNum, tvFreqDen, tvInputReminder;
|
||||
|
||||
private SharedPreferences prefs;
|
||||
private boolean is24HourMode;
|
||||
|
||||
static class SolidColorMatrix extends ColorMatrix
|
||||
{
|
||||
public SolidColorMatrix(int color)
|
||||
{
|
||||
float matrix[] = {0.0f, 0.0f, 0.0f, 0.0f, Color.red(color), 0.0f, 0.0f, 0.0f, 0.0f,
|
||||
Color.green(color), 0.0f, 0.0f, 0.0f, 0.0f, Color.blue(color), 0.0f, 0.0f, 0.0f,
|
||||
1.0f, 0};
|
||||
set(matrix);
|
||||
}
|
||||
}
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Factory *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
static EditHabitFragment editSingleHabitFragment(long id)
|
||||
{
|
||||
EditHabitFragment frag = new EditHabitFragment();
|
||||
@@ -92,11 +76,7 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
|
||||
return frag;
|
||||
}
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Creation *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState)
|
||||
{
|
||||
@@ -105,7 +85,7 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
|
||||
tvDescription = (TextView) view.findViewById(R.id.input_description);
|
||||
tvFreqNum = (TextView) view.findViewById(R.id.input_freq_num);
|
||||
tvFreqDen = (TextView) view.findViewById(R.id.input_freq_den);
|
||||
tvInputReminder = (TextView) view.findViewById(R.id.input_reminder_time);
|
||||
tvInputReminder = (TextView) view.findViewById(R.id.inputReminderTime);
|
||||
|
||||
Button buttonSave = (Button) view.findViewById(R.id.buttonSave);
|
||||
Button buttonDiscard = (Button) view.findViewById(R.id.buttonDiscard);
|
||||
@@ -114,70 +94,52 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
|
||||
buttonDiscard.setOnClickListener(this);
|
||||
tvInputReminder.setOnClickListener(this);
|
||||
|
||||
ImageButton buttonPickColor = (ImageButton) view.findViewById(R.id.button_pick_color);
|
||||
ImageButton buttonPickColor = (ImageButton) view.findViewById(R.id.buttonPickColor);
|
||||
|
||||
prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
|
||||
Bundle args = getArguments();
|
||||
mode = (Integer) args.get("editMode");
|
||||
|
||||
is24HourMode = DateFormat.is24HourFormat(getContext());
|
||||
is24HourMode = DateFormat.is24HourFormat(getActivity());
|
||||
|
||||
if (mode == CREATE_MODE)
|
||||
{
|
||||
getDialog().setTitle("Create habit");
|
||||
modified_habit = new Habit();
|
||||
modifiedHabit = new Habit();
|
||||
|
||||
int defaultNum = prefs.getInt("pref_default_habit_freq_num", modified_habit.freq_num);
|
||||
int defaultDen = prefs.getInt("pref_default_habit_freq_den", modified_habit.freq_den);
|
||||
int defaultColor = prefs.getInt("pref_default_habit_color", modified_habit.color);
|
||||
int defaultNum = prefs.getInt("pref_default_habit_freq_num", modifiedHabit.freqNum);
|
||||
int defaultDen = prefs.getInt("pref_default_habit_freq_den", modifiedHabit.freqDen);
|
||||
int defaultColor = prefs.getInt("pref_default_habit_color", modifiedHabit.color);
|
||||
|
||||
modified_habit.color = defaultColor;
|
||||
modified_habit.freq_num = defaultNum;
|
||||
modified_habit.freq_den = defaultDen;
|
||||
modifiedHabit.color = defaultColor;
|
||||
modifiedHabit.freqNum = defaultNum;
|
||||
modifiedHabit.freqDen = defaultDen;
|
||||
}
|
||||
else if (mode == EDIT_MODE)
|
||||
{
|
||||
originalHabit = Habit.get((Long) args.get("habitId"));
|
||||
modified_habit = new Habit(originalHabit);
|
||||
modifiedHabit = new Habit(originalHabit);
|
||||
|
||||
getDialog().setTitle("Edit habit");
|
||||
tvName.append(modified_habit.name);
|
||||
tvDescription.append(modified_habit.description);
|
||||
tvName.append(modifiedHabit.name);
|
||||
tvDescription.append(modifiedHabit.description);
|
||||
}
|
||||
|
||||
tvFreqNum.append(modified_habit.freq_num.toString());
|
||||
tvFreqDen.append(modified_habit.freq_den.toString());
|
||||
tvFreqNum.append(modifiedHabit.freqNum.toString());
|
||||
tvFreqDen.append(modifiedHabit.freqDen.toString());
|
||||
|
||||
changeColor(modified_habit.color);
|
||||
changeColor(modifiedHabit.color);
|
||||
updateReminder();
|
||||
|
||||
buttonPickColor.setOnClickListener(new OnClickListener()
|
||||
{
|
||||
public void onClick(View view)
|
||||
{
|
||||
ColorPickerDialog picker =
|
||||
ColorPickerDialog.newInstance(R.string.color_picker_default_title,
|
||||
ColorHelper.palette, modified_habit.color, 4,
|
||||
ColorPickerDialog.SIZE_SMALL);
|
||||
|
||||
picker.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener()
|
||||
{
|
||||
public void onColorSelected(int color)
|
||||
{
|
||||
changeColor(color);
|
||||
}
|
||||
});
|
||||
picker.show(getFragmentManager(), "picker");
|
||||
}
|
||||
});
|
||||
buttonPickColor.setOnClickListener(this);
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
private void changeColor(Integer color)
|
||||
{
|
||||
modified_habit.color = color;
|
||||
modifiedHabit.color = color;
|
||||
tvName.setTextColor(color);
|
||||
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
@@ -187,17 +149,16 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
|
||||
|
||||
private void updateReminder()
|
||||
{
|
||||
if (modified_habit.reminder_hour != null)
|
||||
if (modifiedHabit.reminderHour != null)
|
||||
{
|
||||
tvInputReminder.setTextColor(Color.BLACK);
|
||||
tvInputReminder.setText(
|
||||
DateHelper.formatTime(getActivity(), modified_habit.reminder_hour,
|
||||
modified_habit.reminder_min));
|
||||
tvInputReminder.setText(DateHelper.formatTime(getActivity(),
|
||||
modifiedHabit.reminderHour, modifiedHabit.reminderMin));
|
||||
}
|
||||
else
|
||||
{
|
||||
tvInputReminder.setTextColor(Color.GRAY);
|
||||
tvInputReminder.setText("Off");
|
||||
tvInputReminder.setText(R.string.reminder_off);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,105 +167,131 @@ public class EditHabitFragment extends DialogFragment implements OnClickListener
|
||||
this.onSavedListener = onSavedListener;
|
||||
}
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Callback *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
int id = v.getId();
|
||||
|
||||
/* Due date spinner */
|
||||
if (id == R.id.input_reminder_time)
|
||||
switch(v.getId())
|
||||
{
|
||||
int default_hour = 8;
|
||||
int default_min = 0;
|
||||
case R.id.inputReminderTime:
|
||||
onDateSpinnerClick();
|
||||
break;
|
||||
|
||||
if (modified_habit.reminder_hour != null)
|
||||
{
|
||||
default_hour = modified_habit.reminder_hour;
|
||||
default_min = modified_habit.reminder_min;
|
||||
}
|
||||
case R.id.buttonSave:
|
||||
onSaveButtonClick();
|
||||
break;
|
||||
|
||||
TimePickerDialog timePicker = TimePickerDialog.newInstance(new OnTimeSetListener()
|
||||
{
|
||||
case R.id.buttonDiscard:
|
||||
dismiss();
|
||||
break;
|
||||
|
||||
@Override
|
||||
public void onTimeSet(RadialPickerLayout view, int hour, int minute)
|
||||
{
|
||||
modified_habit.reminder_hour = hour;
|
||||
modified_habit.reminder_min = minute;
|
||||
updateReminder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimeCleared(RadialPickerLayout view)
|
||||
{
|
||||
modified_habit.reminder_hour = null;
|
||||
modified_habit.reminder_min = null;
|
||||
updateReminder();
|
||||
}
|
||||
}, default_hour, default_min, is24HourMode);
|
||||
timePicker.show(getFragmentManager(), "timePicker");
|
||||
}
|
||||
|
||||
/* Save button */
|
||||
if (id == R.id.buttonSave)
|
||||
{
|
||||
Command command = null;
|
||||
|
||||
modified_habit.name = tvName.getText().toString().trim();
|
||||
modified_habit.description = tvDescription.getText().toString().trim();
|
||||
modified_habit.freq_num = Integer.parseInt(tvFreqNum.getText().toString());
|
||||
modified_habit.freq_den = Integer.parseInt(tvFreqDen.getText().toString());
|
||||
|
||||
Boolean valid = true;
|
||||
|
||||
if (modified_habit.name.length() == 0)
|
||||
{
|
||||
tvName.setError("Name cannot be blank.");
|
||||
valid = false;
|
||||
}
|
||||
|
||||
if (modified_habit.freq_den <= 0)
|
||||
{
|
||||
tvFreqNum.setError("Number must be positive.");
|
||||
valid = false;
|
||||
}
|
||||
|
||||
if (modified_habit.freq_num > modified_habit.freq_den)
|
||||
{
|
||||
tvFreqNum.setError("You can have at most one repetition per day");
|
||||
valid = false;
|
||||
}
|
||||
|
||||
if (!valid) return;
|
||||
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.putInt("pref_default_habit_freq_num", modified_habit.freq_num);
|
||||
editor.putInt("pref_default_habit_freq_den", modified_habit.freq_den);
|
||||
editor.apply();
|
||||
|
||||
Habit savedHabit = null;
|
||||
|
||||
if (mode == EDIT_MODE)
|
||||
{
|
||||
command = originalHabit.new EditCommand(modified_habit);
|
||||
savedHabit = originalHabit;
|
||||
}
|
||||
|
||||
if (mode == CREATE_MODE) command = new Habit.CreateCommand(modified_habit);
|
||||
|
||||
if (onSavedListener != null) onSavedListener.onSaved(command, savedHabit);
|
||||
|
||||
dismiss();
|
||||
}
|
||||
|
||||
/* Discard button */
|
||||
if (id == R.id.buttonDiscard)
|
||||
{
|
||||
dismiss();
|
||||
case R.id.buttonPickColor:
|
||||
onColorButtonClick();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void onColorButtonClick()
|
||||
{
|
||||
ColorPickerDialog picker = ColorPickerDialog.newInstance(
|
||||
R.string.color_picker_default_title, ColorHelper.palette, modifiedHabit.color, 4,
|
||||
ColorPickerDialog.SIZE_SMALL);
|
||||
|
||||
picker.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener()
|
||||
{
|
||||
public void onColorSelected(int color)
|
||||
{
|
||||
changeColor(color);
|
||||
}
|
||||
});
|
||||
picker.show(getFragmentManager(), "picker");
|
||||
}
|
||||
|
||||
private void onSaveButtonClick()
|
||||
{
|
||||
Command command = null;
|
||||
|
||||
modifiedHabit.name = tvName.getText().toString().trim();
|
||||
modifiedHabit.description = tvDescription.getText().toString().trim();
|
||||
modifiedHabit.freqNum = Integer.parseInt(tvFreqNum.getText().toString());
|
||||
modifiedHabit.freqDen = Integer.parseInt(tvFreqDen.getText().toString());
|
||||
|
||||
if (!validate()) return;
|
||||
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.putInt("pref_default_habit_freq_num", modifiedHabit.freqNum);
|
||||
editor.putInt("pref_default_habit_freq_den", modifiedHabit.freqDen);
|
||||
editor.apply();
|
||||
|
||||
Habit savedHabit = null;
|
||||
|
||||
if (mode == EDIT_MODE)
|
||||
{
|
||||
command = originalHabit.new EditCommand(modifiedHabit);
|
||||
savedHabit = originalHabit;
|
||||
}
|
||||
|
||||
if (mode == CREATE_MODE) command = new Habit.CreateCommand(modifiedHabit);
|
||||
|
||||
if (onSavedListener != null) onSavedListener.onSaved(command, savedHabit);
|
||||
|
||||
dismiss();
|
||||
}
|
||||
|
||||
private boolean validate()
|
||||
{
|
||||
Boolean valid = true;
|
||||
|
||||
if (modifiedHabit.name.length() == 0)
|
||||
{
|
||||
tvName.setError(getString(R.string.validation_name_should_not_be_blank));
|
||||
valid = false;
|
||||
}
|
||||
|
||||
if (modifiedHabit.freqNum <= 0)
|
||||
{
|
||||
tvFreqNum.setError(getString(R.string.validation_number_should_be_positive));
|
||||
valid = false;
|
||||
}
|
||||
|
||||
if (modifiedHabit.freqNum > modifiedHabit.freqDen)
|
||||
{
|
||||
tvFreqNum.setError(getString(R.string.validation_at_most_one_rep_per_day));
|
||||
valid = false;
|
||||
}
|
||||
|
||||
return valid;
|
||||
}
|
||||
|
||||
private void onDateSpinnerClick()
|
||||
{
|
||||
int defaultHour = 8;
|
||||
int defaultMin = 0;
|
||||
|
||||
if (modifiedHabit.reminderHour != null)
|
||||
{
|
||||
defaultHour = modifiedHabit.reminderHour;
|
||||
defaultMin = modifiedHabit.reminderMin;
|
||||
}
|
||||
|
||||
TimePickerDialog timePicker = TimePickerDialog.newInstance(new OnTimeSetListener()
|
||||
{
|
||||
@Override
|
||||
public void onTimeSet(RadialPickerLayout view, int hour, int minute)
|
||||
{
|
||||
modifiedHabit.reminderHour = hour;
|
||||
modifiedHabit.reminderMin = minute;
|
||||
updateReminder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimeCleared(RadialPickerLayout view)
|
||||
{
|
||||
modifiedHabit.reminderHour = null;
|
||||
modifiedHabit.reminderMin = null;
|
||||
updateReminder();
|
||||
}
|
||||
}, defaultHour, defaultMin, is24HourMode);
|
||||
|
||||
timePicker.show(getFragmentManager(), "timePicker");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,10 +57,10 @@ public class Habit extends Model
|
||||
public String description;
|
||||
|
||||
@Column(name = "freq_num")
|
||||
public Integer freq_num;
|
||||
public Integer freqNum;
|
||||
|
||||
@Column(name = "freq_den")
|
||||
public Integer freq_den;
|
||||
public Integer freqDen;
|
||||
|
||||
@Column(name = "color")
|
||||
public Integer color;
|
||||
@@ -69,10 +69,10 @@ public class Habit extends Model
|
||||
public Integer position;
|
||||
|
||||
@Column(name = "reminder_hour")
|
||||
public Integer reminder_hour;
|
||||
public Integer reminderHour;
|
||||
|
||||
@Column(name = "reminder_min")
|
||||
public Integer reminder_min;
|
||||
public Integer reminderMin;
|
||||
|
||||
@Column(name = "highlight")
|
||||
public Integer highlight;
|
||||
@@ -91,8 +91,8 @@ public class Habit extends Model
|
||||
this.position = Habit.getCount();
|
||||
this.highlight = 0;
|
||||
this.archived = 0;
|
||||
this.freq_den = 7;
|
||||
this.freq_num = 3;
|
||||
this.freqDen = 7;
|
||||
this.freqNum = 3;
|
||||
}
|
||||
|
||||
public static Habit get(Long id)
|
||||
@@ -232,12 +232,12 @@ public class Habit extends Model
|
||||
{
|
||||
this.name = model.name;
|
||||
this.description = model.description;
|
||||
this.freq_num = model.freq_num;
|
||||
this.freq_den = model.freq_den;
|
||||
this.freqNum = model.freqNum;
|
||||
this.freqDen = model.freqDen;
|
||||
this.color = model.color;
|
||||
this.position = model.position;
|
||||
this.reminder_hour = model.reminder_hour;
|
||||
this.reminder_min = model.reminder_min;
|
||||
this.reminderHour = model.reminderHour;
|
||||
this.reminderMin = model.reminderMin;
|
||||
this.highlight = model.highlight;
|
||||
this.archived = model.archived;
|
||||
}
|
||||
@@ -343,7 +343,7 @@ public class Habit extends Model
|
||||
|
||||
if (beginning > today) return;
|
||||
|
||||
long beginningExtended = beginning - (long) (freq_den) * day;
|
||||
long beginningExtended = beginning - (long) (freqDen) * day;
|
||||
List<Repetition> reps = selectRepsFromTo(beginningExtended, today).execute();
|
||||
|
||||
int nDays = (int) ((today - beginning) / day) + 1;
|
||||
@@ -363,10 +363,10 @@ public class Habit extends Model
|
||||
{
|
||||
int counter = 0;
|
||||
|
||||
for (int j = 0; j < freq_den; j++)
|
||||
for (int j = 0; j < freqDen; j++)
|
||||
if (checks[i + j] == 2) counter++;
|
||||
|
||||
if (counter >= freq_num) checks[i] = Math.max(checks[i], 1);
|
||||
if (counter >= freqNum) checks[i] = Math.max(checks[i], 1);
|
||||
}
|
||||
|
||||
ActiveAndroid.beginTransaction();
|
||||
@@ -491,7 +491,7 @@ public class Habit extends Model
|
||||
long today = DateHelper.getStartOfDay(DateHelper.getLocalTime());
|
||||
long day = DateHelper.millisecondsInOneDay;
|
||||
|
||||
double freq = ((double) freq_num) / freq_den;
|
||||
double freq = ((double) freqNum) / freqDen;
|
||||
double multiplier = Math.pow(0.5, 1.0 / (14.0 / freq - 1));
|
||||
|
||||
Score newestScore = getNewestScore();
|
||||
@@ -696,8 +696,8 @@ public class Habit extends Model
|
||||
this.modified = new Habit(modified);
|
||||
this.original = new Habit(Habit.this);
|
||||
|
||||
hasIntervalChanged = (this.original.freq_den != this.modified.freq_den ||
|
||||
this.original.freq_num != this.modified.freq_num);
|
||||
hasIntervalChanged = (this.original.freqDen != this.modified.freqDen ||
|
||||
this.original.freqNum != this.modified.freqNum);
|
||||
}
|
||||
|
||||
public void execute()
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
</EditText>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/button_pick_color"
|
||||
android:id="@+id/buttonPickColor"
|
||||
android:src="@drawable/ic_action_pick_color"
|
||||
style="@style/dialogFormInputColor" />
|
||||
</LinearLayout>
|
||||
@@ -72,7 +72,7 @@
|
||||
android:text="@string/reminder" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/input_reminder_time"
|
||||
android:id="@+id/inputReminderTime"
|
||||
style="@style/dialogFormTimePicker" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -63,5 +63,9 @@
|
||||
<string name="streaks">Streaks</string>
|
||||
<string name="no_habits_found">You have no active habits</string>
|
||||
<string name="long_press_to_toggle">Long press to check or uncheck</string>
|
||||
<string name="reminder_off">Off</string>
|
||||
<string name="validation_name_should_not_be_blank">Name cannot be blank.</string>
|
||||
<string name="validation_number_should_be_positive">Number must be positive.</string>
|
||||
<string name="validation_at_most_one_rep_per_day">You can have at most one repetition per day</string>
|
||||
|
||||
</resources>
|
||||
Reference in New Issue
Block a user