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()
{
this.controller = new Controller() {};
HabitsApplication app =
(HabitsApplication) getContext().getApplicationContext();
habitList = app.getComponent().getHabitList();
taskRunner = app.getComponent().getTaskRunner();
}
@Override
@ -70,6 +65,12 @@ public class HistoryEditorDialog extends AppCompatDialogFragment
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState)
{
Context context = getActivity();
HabitsApplication app =
(HabitsApplication) getActivity().getApplicationContext();
habitList = app.getComponent().getHabitList();
taskRunner = app.getComponent().getTaskRunner();
historyChart = new HistoryChart(context);
historyChart.setController(controller);

@ -121,8 +121,11 @@ public class HistoryChart extends ScrollableChart
if (timestamp == null) return false;
int offset = timestampToOffset(timestamp);
if (offset < checkmarks.length)
{
boolean isChecked = checkmarks[offset] == CHECKED_EXPLICITLY;
checkmarks[offset] = (isChecked ? UNCHECKED : CHECKED_EXPLICITLY);
}
controller.onToggleCheckmark(timestamp);
postInvalidate();

@ -19,7 +19,6 @@
package org.isoron.uhabits.activities.habits.edit;
import android.app.*;
import android.os.*;
import android.support.annotation.*;
import android.support.v7.app.*;
@ -27,13 +26,12 @@ import android.text.format.*;
import android.view.*;
import com.android.datetimepicker.time.*;
import com.android.datetimepicker.time.TimePickerDialog;
import org.isoron.uhabits.*;
import org.isoron.uhabits.commands.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.activities.common.dialogs.*;
import org.isoron.uhabits.commands.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.utils.*;
import java.util.*;
@ -88,11 +86,11 @@ public abstract class BaseDialog extends AppCompatDialogFragment
}
@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();
dialogFactory = component.getDialogFactory();
}
@ -133,7 +131,6 @@ public abstract class BaseDialog extends AppCompatDialogFragment
modifiedHabit.setColor(
bundle.getInt("color", modifiedHabit.getColor()));
modifiedHabit.setReminder(null);
int hour = (bundle.getInt("reminderHour", -1));

@ -21,15 +21,16 @@ package org.isoron.uhabits.activities.habits.list.views;
import android.annotation.*;
import android.content.*;
import android.graphics.*;
import android.graphics.drawable.*;
import android.os.*;
import android.support.annotation.*;
import android.util.*;
import android.view.*;
import android.widget.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.activities.common.views.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.utils.*;
import java.util.*;
@ -40,6 +41,7 @@ import static android.os.Build.VERSION.*;
import static android.os.Build.VERSION_CODES.*;
public class HabitCardView extends FrameLayout
implements ModelObservable.Listener
{
@BindView(R.id.checkmarkPanel)
@ -58,6 +60,9 @@ public class HabitCardView extends FrameLayout
private StyledResources res;
@Nullable
private Habit habit;
public HabitCardView(Context context)
{
super(context);
@ -70,6 +75,12 @@ public class HabitCardView extends FrameLayout
init();
}
@Override
public void onModelChange()
{
postInvalidate();
}
public void setCheckmarkValues(int checkmarks[])
{
checkmarkPanel.setCheckmarkValues(checkmarks);
@ -83,16 +94,14 @@ public class HabitCardView extends FrameLayout
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());
label.setTextColor(color);
scoreRing.setColor(color);
checkmarkPanel.setColor(color);
this.habit = habit;
checkmarkPanel.setHabit(habit);
attachToHabit();
postInvalidate();
}
@ -123,6 +132,38 @@ public class HabitCardView extends FrameLayout
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)
{
int mediumContrastColor = res.getColor(R.attr.mediumContrastTextColor);
@ -134,14 +175,16 @@ public class HabitCardView extends FrameLayout
private void init()
{
setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT));
res = new StyledResources(getContext());
inflate(context, R.layout.list_habits_card, this);
ButterKnife.bind(this);
setWillNotDraw(false);
innerFrame.setOnTouchListener((v, event) -> {
if (SDK_INT >= LOLLIPOP)
v.getBackground().setHotspot(event.getX(), event.getY());

@ -57,7 +57,10 @@ public class ShowHabitActivity extends BaseActivity
setScreen(screen);
screen.setMenu(component.getMenu());
screen.setController(component.getController());
rootView.setController(component.getController());
screen.reattachDialogs();
}
@NonNull

@ -21,12 +21,14 @@ package org.isoron.uhabits.activities.habits.show;
import android.support.annotation.*;
import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.activities.common.dialogs.*;
import org.isoron.uhabits.commands.*;
import org.isoron.uhabits.models.*;
import javax.inject.*;
@ActivityScope
public class ShowHabitController
implements ShowHabitRootView.Controller, HistoryEditorDialog.Controller
{
@ -52,7 +54,7 @@ public class ShowHabitController
@Override
public void onEditHistoryButtonClick()
{
screen.showEditHistoryDialog(this);
screen.showEditHistoryDialog();
}
@Override

@ -33,6 +33,7 @@ import javax.inject.*;
import butterknife.*;
@ActivityScope
public class ShowHabitRootView extends BaseRootView
implements ModelObservable.Listener
{

@ -21,13 +21,14 @@ package org.isoron.uhabits.activities.habits.show;
import android.support.annotation.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.activities.common.dialogs.*;
import org.isoron.uhabits.activities.habits.edit.*;
import org.isoron.uhabits.models.*;
import javax.inject.*;
@ActivityScope
public class ShowHabitScreen extends BaseScreen
{
@NonNull
@ -35,6 +36,9 @@ public class ShowHabitScreen extends BaseScreen
private DialogFactory dialogFactory;
@Nullable
private ShowHabitController controller;
@Inject
public ShowHabitScreen(@NonNull BaseActivity activity,
@NonNull Habit habit,
@ -47,15 +51,33 @@ public class ShowHabitScreen extends BaseScreen
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()
{
EditHabitDialog dialog = dialogFactory.buildEditHabitDialog(habit);
activity.showDialog(dialog, "editHabit");
}
public void showEditHistoryDialog(
@NonNull HistoryEditorDialog.Controller controller)
public void showEditHistoryDialog()
{
if(controller == null) throw new IllegalStateException();
HistoryEditorDialog dialog = new HistoryEditorDialog();
dialog.setHabit(habit);
dialog.setController(controller);

@ -27,6 +27,7 @@ import org.isoron.uhabits.activities.*;
import javax.inject.*;
@ActivityScope
public class ShowHabitsMenu extends BaseMenu
{
@NonNull

Loading…
Cancel
Save