Skip to content

Commit

Permalink
Fix HistoryEditorDialog
Browse files Browse the repository at this point in the history
  • Loading branch information
iSoron committed Jun 26, 2016
1 parent f0c62a5 commit a90e266
Show file tree
Hide file tree
Showing 12 changed files with 315 additions and 130 deletions.
38 changes: 14 additions & 24 deletions app/src/main/java/org/isoron/uhabits/BaseComponent.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,30 +19,18 @@

package org.isoron.uhabits;

import org.isoron.uhabits.commands.ArchiveHabitsCommand;
import org.isoron.uhabits.commands.ChangeHabitColorCommand;
import org.isoron.uhabits.commands.CreateHabitCommand;
import org.isoron.uhabits.commands.DeleteHabitsCommand;
import org.isoron.uhabits.commands.EditHabitCommand;
import org.isoron.uhabits.commands.UnarchiveHabitsCommand;
import org.isoron.uhabits.io.AbstractImporter;
import org.isoron.uhabits.io.HabitsCSVExporter;
import org.isoron.uhabits.models.Habit;
import org.isoron.uhabits.tasks.ToggleRepetitionTask;
import org.isoron.uhabits.ui.BaseSystem;
import org.isoron.uhabits.ui.habits.edit.BaseDialogFragment;
import org.isoron.uhabits.ui.habits.edit.HistoryEditorDialog;
import org.isoron.uhabits.ui.habits.list.ListHabitsActivity;
import org.isoron.uhabits.ui.habits.list.ListHabitsController;
import org.isoron.uhabits.ui.habits.list.ListHabitsSelectionMenu;
import org.isoron.uhabits.ui.habits.list.controllers.CheckmarkButtonController;
import org.isoron.uhabits.ui.habits.list.model.HabitCardListAdapter;
import org.isoron.uhabits.ui.habits.list.model.HabitCardListCache;
import org.isoron.uhabits.ui.habits.list.model.HintList;
import org.isoron.uhabits.ui.habits.list.views.CheckmarkPanelView;
import org.isoron.uhabits.ui.habits.show.ShowHabitActivity;
import org.isoron.uhabits.widgets.BaseWidgetProvider;
import org.isoron.uhabits.widgets.HabitPickerDialog;
import org.isoron.uhabits.commands.*;
import org.isoron.uhabits.io.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.tasks.*;
import org.isoron.uhabits.ui.*;
import org.isoron.uhabits.ui.habits.edit.*;
import org.isoron.uhabits.ui.habits.list.*;
import org.isoron.uhabits.ui.habits.list.controllers.*;
import org.isoron.uhabits.ui.habits.list.model.*;
import org.isoron.uhabits.ui.habits.list.views.*;
import org.isoron.uhabits.ui.habits.show.*;
import org.isoron.uhabits.widgets.*;

/**
* Base component for dependency injection.
Expand Down Expand Up @@ -100,4 +88,6 @@ public interface BaseComponent
void inject(HabitsCSVExporter habitsCSVExporter);

void inject(BaseDialogFragment baseDialogFragment);

void inject(ShowHabitController showHabitController);
}
3 changes: 3 additions & 0 deletions app/src/main/java/org/isoron/uhabits/tasks/BaseTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,23 @@

import android.os.AsyncTask;
import android.os.Build;
import android.support.annotation.*;

import java.util.concurrent.TimeoutException;

public abstract class BaseTask extends AsyncTask<Void, Integer, Void>
{
private static int activeTaskCount;

@CallSuper
@Override
protected void onPreExecute()
{
super.onPreExecute();
activeTaskCount++;
}

@CallSuper
@Override
protected void onPostExecute(Void aVoid)
{
Expand Down
42 changes: 42 additions & 0 deletions app/src/main/java/org/isoron/uhabits/tasks/SimpleTask.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Copyright (C) 2016 Álinson Santos Xavier <[email protected]>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package org.isoron.uhabits.tasks;

public class SimpleTask
{
private final BaseTask baseTask;

public SimpleTask(Runnable runnable)
{
this.baseTask = new BaseTask()
{
@Override
protected void doInBackground()
{
runnable.run();
}
};
}

public void execute()
{
baseTask.execute();
}
}
24 changes: 13 additions & 11 deletions app/src/main/java/org/isoron/uhabits/ui/BaseScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -234,17 +234,19 @@ public void invalidateToolbar()
{
if (rootView == null) return;

Toolbar toolbar = rootView.getToolbar();
activity.setSupportActionBar(toolbar);
ActionBar actionBar = activity.getSupportActionBar();
if (actionBar == null) return;

actionBar.setDisplayHomeAsUpEnabled(rootView.getDisplayHomeAsUp());

int color = rootView.getToolbarColor();
setActionBarColor(actionBar, color);
setStatusBarColor(color);
setupToolbarElevation(toolbar);
activity.runOnUiThread(() -> {
Toolbar toolbar = rootView.getToolbar();
activity.setSupportActionBar(toolbar);
ActionBar actionBar = activity.getSupportActionBar();
if (actionBar == null) return;

actionBar.setDisplayHomeAsUpEnabled(rootView.getDisplayHomeAsUp());

int color = rootView.getToolbarColor();
setActionBarColor(actionBar, color);
setStatusBarColor(color);
setupToolbarElevation(toolbar);
});
}

private void setActionBarColor(@NonNull ActionBar actionBar, int color)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import android.content.*;
import android.graphics.*;
import android.graphics.Paint.*;
import android.support.annotation.*;
import android.util.*;
import android.view.*;

Expand Down Expand Up @@ -82,6 +83,9 @@ public class HistoryChart extends ScrollableChart

private float headerOverflow = 0;

@NonNull
private Controller controller;

public HistoryChart(Context context)
{
super(context);
Expand Down Expand Up @@ -114,13 +118,12 @@ public boolean onSingleTapUp(MotionEvent e)
final Long timestamp = positionToTimestamp(x, y);
if (timestamp == null) return false;

// ToggleRepetitionTask task = new ToggleRepetitionTask(habit, timestamp);
// task.setListener(this);
// task.execute();
controller.onToggleCheckmark(timestamp);

return true;
}


public void populateWithRandomData()
{
Random random = new Random();
Expand Down Expand Up @@ -152,6 +155,11 @@ public void setColor(int color)
postInvalidate();
}

public void setController(@NonNull Controller controller)
{
this.controller = controller;
}

public void setIsBackgroundTransparent(boolean isBackgroundTransparent)
{
this.isBackgroundTransparent = isBackgroundTransparent;
Expand Down Expand Up @@ -330,6 +338,7 @@ private void init()
{
isEditable = false;
checkmarks = new int[0];
controller = new Controller() {};

initColors();
initPaints();
Expand Down Expand Up @@ -412,4 +421,9 @@ private void updateDate()
baseDate.add(Calendar.DAY_OF_YEAR, -nDays);
baseDate.add(Calendar.DAY_OF_YEAR, -todayPositionInColumn);
}

public interface Controller
{
default void onToggleCheckmark(long timestamp) {}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,42 +19,56 @@

package org.isoron.uhabits.ui.habits.edit;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.app.*;
import android.content.*;
import android.os.*;
import android.support.annotation.*;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatDialogFragment;
import android.util.DisplayMetrics;
import android.support.v7.app.*;
import android.util.*;

import org.apache.commons.lang3.*;
import org.isoron.uhabits.HabitsApplication;
import org.isoron.uhabits.R;
import org.isoron.uhabits.models.Habit;
import org.isoron.uhabits.models.HabitList;
import org.isoron.uhabits.tasks.BaseTask;
import org.isoron.uhabits.ui.common.views.HistoryChart;
import org.isoron.uhabits.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.tasks.*;
import org.isoron.uhabits.ui.common.views.*;
import org.isoron.uhabits.utils.*;

import javax.inject.Inject;
import javax.inject.*;

public class HistoryEditorDialog extends AppCompatDialogFragment
implements DialogInterface.OnClickListener
implements DialogInterface.OnClickListener, ModelObservable.Listener
{
@Nullable
private Habit habit;

private Listener listener;

@Nullable
HistoryChart historyChart;

@Inject
HabitList habitList;

@NonNull
private Controller controller;

public HistoryEditorDialog()
{
this.controller = new Controller() {};
}

@Override
public void onClick(DialogInterface dialog, int which)
{
dismiss();
}

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState)
{
Context context = getActivity();
HabitsApplication.getComponent().inject(this);
historyChart = new HistoryChart(context, null);
historyChart = new HistoryChart(context);
historyChart.setController(controller);

if (savedInstanceState != null)
{
Expand All @@ -65,9 +79,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState)
int padding =
(int) getResources().getDimension(R.dimen.history_editor_padding);

if(true) throw new NotImplementedException("");
historyChart.setPadding(padding, 0, padding, 0);
// historyChart.setHabit(habit);
historyChart.setIsEditable(true);

AlertDialog.Builder builder = new AlertDialog.Builder(context);
Expand All @@ -76,21 +88,13 @@ public Dialog onCreateDialog(Bundle savedInstanceState)
.setView(historyChart)
.setPositiveButton(android.R.string.ok, this);

refreshData();

return builder.create();
}

private void refreshData()
@Override
public void onModelChange()
{
new BaseTask()
{
@Override
protected void doInBackground()
{
// historyChart.refreshData();
}
}.execute();
refreshData();
}

@Override
Expand All @@ -105,25 +109,16 @@ public void onResume()
int height = Math.min(metrics.heightPixels, maxHeight);

getDialog().getWindow().setLayout(width, height);
}

@Override
public void onClick(DialogInterface dialog, int which)
{
dismiss();
}

public void setHabit(Habit habit)
{
// this.habit = habit;
// if (historyChart != null) historyChart.setHabit(habit);
refreshData();
habit.getCheckmarks().observable.addListener(this);
}

@Override
public void onPause()
{
habit.getCheckmarks().observable.removeListener(this);
super.onPause();
if (listener != null) listener.onHistoryEditorClosed();
}

@Override
Expand All @@ -132,13 +127,42 @@ public void onSaveInstanceState(Bundle outState)
outState.putLong("habit", habit.getId());
}

public void setListener(Listener listener)
public void setController(@NonNull Controller controller)
{
this.controller = controller;
if (historyChart != null) historyChart.setController(controller);
}

public void setHabit(@Nullable Habit habit)
{
this.habit = habit;
}

private void refreshData()
{
this.listener = listener;
if (habit == null) return;
new RefreshTask().execute();
}

public interface Listener
public interface Controller extends HistoryChart.Controller {}

private class RefreshTask extends BaseTask
{
void onHistoryEditorClosed();
public int[] checkmarks;

@Override
protected void doInBackground()
{
checkmarks = habit.getCheckmarks().getAllValues();
}

@Override
protected void onPostExecute(Void aVoid)
{
int color = ColorUtils.getColor(getContext(), habit.getColor());
historyChart.setColor(color);
historyChart.setCheckmarks(checkmarks);
super.onPostExecute(aVoid);
}
}
}
Loading

0 comments on commit a90e266

Please sign in to comment.