mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Fix some bugs on fragments and model listeners
This commit is contained in:
@@ -52,11 +52,6 @@ public class HistoryEditorDialog extends AppCompatDialogFragment
|
|||||||
public HistoryEditorDialog()
|
public HistoryEditorDialog()
|
||||||
{
|
{
|
||||||
this.controller = new Controller() {};
|
this.controller = new Controller() {};
|
||||||
|
|
||||||
HabitsApplication app =
|
|
||||||
(HabitsApplication) getContext().getApplicationContext();
|
|
||||||
habitList = app.getComponent().getHabitList();
|
|
||||||
taskRunner = app.getComponent().getTaskRunner();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -70,6 +65,12 @@ public class HistoryEditorDialog extends AppCompatDialogFragment
|
|||||||
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState)
|
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
Context context = getActivity();
|
Context context = getActivity();
|
||||||
|
|
||||||
|
HabitsApplication app =
|
||||||
|
(HabitsApplication) getActivity().getApplicationContext();
|
||||||
|
habitList = app.getComponent().getHabitList();
|
||||||
|
taskRunner = app.getComponent().getTaskRunner();
|
||||||
|
|
||||||
historyChart = new HistoryChart(context);
|
historyChart = new HistoryChart(context);
|
||||||
historyChart.setController(controller);
|
historyChart.setController(controller);
|
||||||
|
|
||||||
|
|||||||
@@ -121,8 +121,11 @@ public class HistoryChart extends ScrollableChart
|
|||||||
if (timestamp == null) return false;
|
if (timestamp == null) return false;
|
||||||
|
|
||||||
int offset = timestampToOffset(timestamp);
|
int offset = timestampToOffset(timestamp);
|
||||||
boolean isChecked = checkmarks[offset] == CHECKED_EXPLICITLY;
|
if (offset < checkmarks.length)
|
||||||
checkmarks[offset] = (isChecked ? UNCHECKED : CHECKED_EXPLICITLY);
|
{
|
||||||
|
boolean isChecked = checkmarks[offset] == CHECKED_EXPLICITLY;
|
||||||
|
checkmarks[offset] = (isChecked ? UNCHECKED : CHECKED_EXPLICITLY);
|
||||||
|
}
|
||||||
|
|
||||||
controller.onToggleCheckmark(timestamp);
|
controller.onToggleCheckmark(timestamp);
|
||||||
postInvalidate();
|
postInvalidate();
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
package org.isoron.uhabits.activities.habits.edit;
|
package org.isoron.uhabits.activities.habits.edit;
|
||||||
|
|
||||||
import android.app.*;
|
|
||||||
import android.os.*;
|
import android.os.*;
|
||||||
import android.support.annotation.*;
|
import android.support.annotation.*;
|
||||||
import android.support.v7.app.*;
|
import android.support.v7.app.*;
|
||||||
@@ -27,13 +26,12 @@ import android.text.format.*;
|
|||||||
import android.view.*;
|
import android.view.*;
|
||||||
|
|
||||||
import com.android.datetimepicker.time.*;
|
import com.android.datetimepicker.time.*;
|
||||||
import com.android.datetimepicker.time.TimePickerDialog;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.*;
|
import org.isoron.uhabits.*;
|
||||||
import org.isoron.uhabits.commands.*;
|
|
||||||
import org.isoron.uhabits.models.*;
|
|
||||||
import org.isoron.uhabits.activities.*;
|
import org.isoron.uhabits.activities.*;
|
||||||
import org.isoron.uhabits.activities.common.dialogs.*;
|
import org.isoron.uhabits.activities.common.dialogs.*;
|
||||||
|
import org.isoron.uhabits.commands.*;
|
||||||
|
import org.isoron.uhabits.models.*;
|
||||||
import org.isoron.uhabits.utils.*;
|
import org.isoron.uhabits.utils.*;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -88,11 +86,11 @@ public abstract class BaseDialog extends AppCompatDialogFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Activity activity)
|
public void onActivityCreated(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
super.onAttach(activity);
|
super.onActivityCreated(savedInstanceState);
|
||||||
|
|
||||||
BaseActivity baseActivity = (BaseActivity) activity;
|
BaseActivity baseActivity = (BaseActivity) getActivity();
|
||||||
ActivityComponent component = baseActivity.getComponent();
|
ActivityComponent component = baseActivity.getComponent();
|
||||||
dialogFactory = component.getDialogFactory();
|
dialogFactory = component.getDialogFactory();
|
||||||
}
|
}
|
||||||
@@ -133,7 +131,6 @@ public abstract class BaseDialog extends AppCompatDialogFragment
|
|||||||
modifiedHabit.setColor(
|
modifiedHabit.setColor(
|
||||||
bundle.getInt("color", modifiedHabit.getColor()));
|
bundle.getInt("color", modifiedHabit.getColor()));
|
||||||
|
|
||||||
|
|
||||||
modifiedHabit.setReminder(null);
|
modifiedHabit.setReminder(null);
|
||||||
|
|
||||||
int hour = (bundle.getInt("reminderHour", -1));
|
int hour = (bundle.getInt("reminderHour", -1));
|
||||||
|
|||||||
@@ -21,15 +21,16 @@ package org.isoron.uhabits.activities.habits.list.views;
|
|||||||
|
|
||||||
import android.annotation.*;
|
import android.annotation.*;
|
||||||
import android.content.*;
|
import android.content.*;
|
||||||
|
import android.graphics.*;
|
||||||
import android.graphics.drawable.*;
|
import android.graphics.drawable.*;
|
||||||
import android.os.*;
|
import android.os.*;
|
||||||
|
import android.support.annotation.*;
|
||||||
import android.util.*;
|
import android.util.*;
|
||||||
import android.view.*;
|
|
||||||
import android.widget.*;
|
import android.widget.*;
|
||||||
|
|
||||||
import org.isoron.uhabits.*;
|
import org.isoron.uhabits.*;
|
||||||
import org.isoron.uhabits.models.*;
|
|
||||||
import org.isoron.uhabits.activities.common.views.*;
|
import org.isoron.uhabits.activities.common.views.*;
|
||||||
|
import org.isoron.uhabits.models.*;
|
||||||
import org.isoron.uhabits.utils.*;
|
import org.isoron.uhabits.utils.*;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -40,6 +41,7 @@ import static android.os.Build.VERSION.*;
|
|||||||
import static android.os.Build.VERSION_CODES.*;
|
import static android.os.Build.VERSION_CODES.*;
|
||||||
|
|
||||||
public class HabitCardView extends FrameLayout
|
public class HabitCardView extends FrameLayout
|
||||||
|
implements ModelObservable.Listener
|
||||||
{
|
{
|
||||||
|
|
||||||
@BindView(R.id.checkmarkPanel)
|
@BindView(R.id.checkmarkPanel)
|
||||||
@@ -58,6 +60,9 @@ public class HabitCardView extends FrameLayout
|
|||||||
|
|
||||||
private StyledResources res;
|
private StyledResources res;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private Habit habit;
|
||||||
|
|
||||||
public HabitCardView(Context context)
|
public HabitCardView(Context context)
|
||||||
{
|
{
|
||||||
super(context);
|
super(context);
|
||||||
@@ -70,6 +75,12 @@ public class HabitCardView extends FrameLayout
|
|||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onModelChange()
|
||||||
|
{
|
||||||
|
postInvalidate();
|
||||||
|
}
|
||||||
|
|
||||||
public void setCheckmarkValues(int checkmarks[])
|
public void setCheckmarkValues(int checkmarks[])
|
||||||
{
|
{
|
||||||
checkmarkPanel.setCheckmarkValues(checkmarks);
|
checkmarkPanel.setCheckmarkValues(checkmarks);
|
||||||
@@ -83,16 +94,14 @@ public class HabitCardView extends FrameLayout
|
|||||||
checkmarkPanel.setController(controller);
|
checkmarkPanel.setController(controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHabit(Habit habit)
|
public void setHabit(@NonNull Habit habit)
|
||||||
{
|
{
|
||||||
int color = getActiveColor(habit);
|
if (this.habit != null) detachFromHabit();
|
||||||
|
|
||||||
label.setText(habit.getName());
|
this.habit = habit;
|
||||||
label.setTextColor(color);
|
|
||||||
scoreRing.setColor(color);
|
|
||||||
checkmarkPanel.setColor(color);
|
|
||||||
checkmarkPanel.setHabit(habit);
|
checkmarkPanel.setHabit(habit);
|
||||||
|
|
||||||
|
attachToHabit();
|
||||||
postInvalidate();
|
postInvalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,6 +132,38 @@ public class HabitCardView extends FrameLayout
|
|||||||
triggerRipple(x, y);
|
triggerRipple(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void detachFromHabit()
|
||||||
|
{
|
||||||
|
if (habit != null) habit.getObservable().removeListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDetachedFromWindow()
|
||||||
|
{
|
||||||
|
if (habit != null) detachFromHabit();
|
||||||
|
super.onDetachedFromWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDraw(Canvas canvas)
|
||||||
|
{
|
||||||
|
if (habit != null)
|
||||||
|
{
|
||||||
|
int color = getActiveColor(habit);
|
||||||
|
label.setText(habit.getName());
|
||||||
|
label.setTextColor(color);
|
||||||
|
scoreRing.setColor(color);
|
||||||
|
checkmarkPanel.setColor(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.onDraw(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void attachToHabit()
|
||||||
|
{
|
||||||
|
if (habit != null) habit.getObservable().addListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
private int getActiveColor(Habit habit)
|
private int getActiveColor(Habit habit)
|
||||||
{
|
{
|
||||||
int mediumContrastColor = res.getColor(R.attr.mediumContrastTextColor);
|
int mediumContrastColor = res.getColor(R.attr.mediumContrastTextColor);
|
||||||
@@ -134,14 +175,16 @@ public class HabitCardView extends FrameLayout
|
|||||||
|
|
||||||
private void init()
|
private void init()
|
||||||
{
|
{
|
||||||
setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
|
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT));
|
LayoutParams.WRAP_CONTENT));
|
||||||
|
|
||||||
res = new StyledResources(getContext());
|
res = new StyledResources(getContext());
|
||||||
|
|
||||||
inflate(context, R.layout.list_habits_card, this);
|
inflate(context, R.layout.list_habits_card, this);
|
||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
|
setWillNotDraw(false);
|
||||||
|
|
||||||
innerFrame.setOnTouchListener((v, event) -> {
|
innerFrame.setOnTouchListener((v, event) -> {
|
||||||
if (SDK_INT >= LOLLIPOP)
|
if (SDK_INT >= LOLLIPOP)
|
||||||
v.getBackground().setHotspot(event.getX(), event.getY());
|
v.getBackground().setHotspot(event.getX(), event.getY());
|
||||||
|
|||||||
@@ -57,7 +57,10 @@ public class ShowHabitActivity extends BaseActivity
|
|||||||
|
|
||||||
setScreen(screen);
|
setScreen(screen);
|
||||||
screen.setMenu(component.getMenu());
|
screen.setMenu(component.getMenu());
|
||||||
|
screen.setController(component.getController());
|
||||||
rootView.setController(component.getController());
|
rootView.setController(component.getController());
|
||||||
|
|
||||||
|
screen.reattachDialogs();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
@@ -21,12 +21,14 @@ package org.isoron.uhabits.activities.habits.show;
|
|||||||
|
|
||||||
import android.support.annotation.*;
|
import android.support.annotation.*;
|
||||||
|
|
||||||
|
import org.isoron.uhabits.activities.*;
|
||||||
import org.isoron.uhabits.activities.common.dialogs.*;
|
import org.isoron.uhabits.activities.common.dialogs.*;
|
||||||
import org.isoron.uhabits.commands.*;
|
import org.isoron.uhabits.commands.*;
|
||||||
import org.isoron.uhabits.models.*;
|
import org.isoron.uhabits.models.*;
|
||||||
|
|
||||||
import javax.inject.*;
|
import javax.inject.*;
|
||||||
|
|
||||||
|
@ActivityScope
|
||||||
public class ShowHabitController
|
public class ShowHabitController
|
||||||
implements ShowHabitRootView.Controller, HistoryEditorDialog.Controller
|
implements ShowHabitRootView.Controller, HistoryEditorDialog.Controller
|
||||||
{
|
{
|
||||||
@@ -52,7 +54,7 @@ public class ShowHabitController
|
|||||||
@Override
|
@Override
|
||||||
public void onEditHistoryButtonClick()
|
public void onEditHistoryButtonClick()
|
||||||
{
|
{
|
||||||
screen.showEditHistoryDialog(this);
|
screen.showEditHistoryDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import javax.inject.*;
|
|||||||
|
|
||||||
import butterknife.*;
|
import butterknife.*;
|
||||||
|
|
||||||
|
@ActivityScope
|
||||||
public class ShowHabitRootView extends BaseRootView
|
public class ShowHabitRootView extends BaseRootView
|
||||||
implements ModelObservable.Listener
|
implements ModelObservable.Listener
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,13 +21,14 @@ package org.isoron.uhabits.activities.habits.show;
|
|||||||
|
|
||||||
import android.support.annotation.*;
|
import android.support.annotation.*;
|
||||||
|
|
||||||
import org.isoron.uhabits.models.*;
|
|
||||||
import org.isoron.uhabits.activities.*;
|
import org.isoron.uhabits.activities.*;
|
||||||
import org.isoron.uhabits.activities.common.dialogs.*;
|
import org.isoron.uhabits.activities.common.dialogs.*;
|
||||||
import org.isoron.uhabits.activities.habits.edit.*;
|
import org.isoron.uhabits.activities.habits.edit.*;
|
||||||
|
import org.isoron.uhabits.models.*;
|
||||||
|
|
||||||
import javax.inject.*;
|
import javax.inject.*;
|
||||||
|
|
||||||
|
@ActivityScope
|
||||||
public class ShowHabitScreen extends BaseScreen
|
public class ShowHabitScreen extends BaseScreen
|
||||||
{
|
{
|
||||||
@NonNull
|
@NonNull
|
||||||
@@ -35,6 +36,9 @@ public class ShowHabitScreen extends BaseScreen
|
|||||||
|
|
||||||
private DialogFactory dialogFactory;
|
private DialogFactory dialogFactory;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private ShowHabitController controller;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ShowHabitScreen(@NonNull BaseActivity activity,
|
public ShowHabitScreen(@NonNull BaseActivity activity,
|
||||||
@NonNull Habit habit,
|
@NonNull Habit habit,
|
||||||
@@ -47,15 +51,33 @@ public class ShowHabitScreen extends BaseScreen
|
|||||||
this.dialogFactory = dialogFactory;
|
this.dialogFactory = dialogFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setController(@NonNull ShowHabitController controller)
|
||||||
|
{
|
||||||
|
this.controller = controller;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reattachDialogs()
|
||||||
|
{
|
||||||
|
if(controller == null) throw new IllegalStateException();
|
||||||
|
|
||||||
|
HistoryEditorDialog historyEditor = (HistoryEditorDialog) activity
|
||||||
|
.getSupportFragmentManager()
|
||||||
|
.findFragmentByTag("historyEditor");
|
||||||
|
|
||||||
|
if (historyEditor != null)
|
||||||
|
historyEditor.setController(controller);
|
||||||
|
}
|
||||||
|
|
||||||
public void showEditHabitDialog()
|
public void showEditHabitDialog()
|
||||||
{
|
{
|
||||||
EditHabitDialog dialog = dialogFactory.buildEditHabitDialog(habit);
|
EditHabitDialog dialog = dialogFactory.buildEditHabitDialog(habit);
|
||||||
activity.showDialog(dialog, "editHabit");
|
activity.showDialog(dialog, "editHabit");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showEditHistoryDialog(
|
public void showEditHistoryDialog()
|
||||||
@NonNull HistoryEditorDialog.Controller controller)
|
|
||||||
{
|
{
|
||||||
|
if(controller == null) throw new IllegalStateException();
|
||||||
|
|
||||||
HistoryEditorDialog dialog = new HistoryEditorDialog();
|
HistoryEditorDialog dialog = new HistoryEditorDialog();
|
||||||
dialog.setHabit(habit);
|
dialog.setHabit(habit);
|
||||||
dialog.setController(controller);
|
dialog.setController(controller);
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.isoron.uhabits.activities.*;
|
|||||||
|
|
||||||
import javax.inject.*;
|
import javax.inject.*;
|
||||||
|
|
||||||
|
@ActivityScope
|
||||||
public class ShowHabitsMenu extends BaseMenu
|
public class ShowHabitsMenu extends BaseMenu
|
||||||
{
|
{
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
Reference in New Issue
Block a user