Fix some bugs on fragments and model listeners

pull/151/head
Alinson S. Xavier 9 years ago
parent 33ae8d1edf
commit 3a3be664f7

@ -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

Loading…
Cancel
Save