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()
|
||||
{
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user