mirror of https://github.com/iSoron/uhabits.git
parent
efcb5710c0
commit
c7aaa98935
@ -1,83 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* 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.widgets;
|
|
||||||
|
|
||||||
import android.app.*;
|
|
||||||
import android.content.*;
|
|
||||||
import android.support.annotation.*;
|
|
||||||
import android.view.*;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.core.models.*;
|
|
||||||
import org.isoron.uhabits.utils.*;
|
|
||||||
import org.isoron.uhabits.widgets.views.*;
|
|
||||||
|
|
||||||
public class CheckmarkWidget extends BaseWidget
|
|
||||||
{
|
|
||||||
@NonNull
|
|
||||||
private final Habit habit;
|
|
||||||
|
|
||||||
public CheckmarkWidget(@NonNull Context context,
|
|
||||||
int widgetId,
|
|
||||||
@NonNull Habit habit)
|
|
||||||
{
|
|
||||||
super(context, widgetId);
|
|
||||||
this.habit = habit;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PendingIntent getOnClickPendingIntent(Context context)
|
|
||||||
{
|
|
||||||
return pendingIntentFactory.toggleCheckmark(habit, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void refreshData(View v)
|
|
||||||
{
|
|
||||||
CheckmarkWidgetView view = (CheckmarkWidgetView) v;
|
|
||||||
int color = PaletteUtils.getColor(getContext(), habit.getColor());
|
|
||||||
double score = habit.getScores().getTodayValue();
|
|
||||||
float percentage = (float) score;
|
|
||||||
int checkmark = habit.getCheckmarks().getTodayValue();
|
|
||||||
|
|
||||||
view.setPercentage(percentage);
|
|
||||||
view.setActiveColor(color);
|
|
||||||
view.setName(habit.getName());
|
|
||||||
view.setCheckmarkValue(checkmark);
|
|
||||||
view.refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected View buildView()
|
|
||||||
{
|
|
||||||
return new CheckmarkWidgetView(getContext());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getDefaultHeight()
|
|
||||||
{
|
|
||||||
return 125;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getDefaultWidth()
|
|
||||||
{
|
|
||||||
return 125;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.widgets
|
||||||
|
|
||||||
|
import android.content.*
|
||||||
|
import android.view.*
|
||||||
|
import org.isoron.uhabits.core.models.*
|
||||||
|
import org.isoron.uhabits.utils.*
|
||||||
|
import org.isoron.uhabits.widgets.views.*
|
||||||
|
|
||||||
|
class CheckmarkWidget(
|
||||||
|
context: Context,
|
||||||
|
widgetId: Int,
|
||||||
|
private val habit: Habit
|
||||||
|
) : BaseWidget(context, widgetId) {
|
||||||
|
|
||||||
|
override fun getOnClickPendingIntent(context: Context) =
|
||||||
|
pendingIntentFactory.toggleCheckmark(habit, null)
|
||||||
|
|
||||||
|
override fun refreshData(v: View) {
|
||||||
|
(v as CheckmarkWidgetView).apply {
|
||||||
|
setPercentage(habit.scores.todayValue.toFloat())
|
||||||
|
setActiveColor(PaletteUtils.getColor(context, habit.color))
|
||||||
|
setName(habit.name)
|
||||||
|
setCheckmarkValue(habit.checkmarks.todayValue)
|
||||||
|
refresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun buildView() = CheckmarkWidgetView(context)
|
||||||
|
override fun getDefaultHeight() = 125
|
||||||
|
override fun getDefaultWidth() = 125
|
||||||
|
}
|
@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* 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.widgets;
|
|
||||||
|
|
||||||
import android.content.*;
|
|
||||||
import android.support.annotation.*;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.core.models.*;
|
|
||||||
|
|
||||||
public class CheckmarkWidgetProvider extends BaseWidgetProvider
|
|
||||||
{
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
protected CheckmarkWidget getWidgetFromId(@NonNull Context context, int id)
|
|
||||||
{
|
|
||||||
Habit habit = getHabitFromWidgetId(id);
|
|
||||||
return new CheckmarkWidget(context, id, habit);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,83 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* 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.widgets;
|
|
||||||
|
|
||||||
import android.app.*;
|
|
||||||
import android.content.*;
|
|
||||||
import android.support.annotation.*;
|
|
||||||
import android.view.*;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.activities.common.views.*;
|
|
||||||
import org.isoron.uhabits.core.models.*;
|
|
||||||
import org.isoron.uhabits.utils.*;
|
|
||||||
import org.isoron.uhabits.widgets.views.*;
|
|
||||||
|
|
||||||
public class FrequencyWidget extends BaseWidget
|
|
||||||
{
|
|
||||||
@NonNull
|
|
||||||
private final Habit habit;
|
|
||||||
|
|
||||||
public FrequencyWidget(@NonNull Context context,
|
|
||||||
int widgetId,
|
|
||||||
@NonNull Habit habit)
|
|
||||||
{
|
|
||||||
super(context, widgetId);
|
|
||||||
this.habit = habit;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PendingIntent getOnClickPendingIntent(Context context)
|
|
||||||
{
|
|
||||||
return pendingIntentFactory.showHabit(habit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void refreshData(View v)
|
|
||||||
{
|
|
||||||
GraphWidgetView widgetView = (GraphWidgetView) v;
|
|
||||||
FrequencyChart chart = (FrequencyChart) widgetView.getDataView();
|
|
||||||
|
|
||||||
widgetView.setTitle(habit.getName());
|
|
||||||
|
|
||||||
int color = PaletteUtils.getColor(getContext(), habit.getColor());
|
|
||||||
|
|
||||||
chart.setColor(color);
|
|
||||||
chart.setFrequency(habit.getRepetitions().getWeekdayFrequency());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected View buildView()
|
|
||||||
{
|
|
||||||
FrequencyChart chart = new FrequencyChart(getContext());
|
|
||||||
return new GraphWidgetView(getContext(), chart);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getDefaultHeight()
|
|
||||||
{
|
|
||||||
return 200;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getDefaultWidth()
|
|
||||||
{
|
|
||||||
return 200;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.widgets
|
||||||
|
|
||||||
|
import android.content.*
|
||||||
|
import android.view.*
|
||||||
|
import org.isoron.uhabits.activities.common.views.*
|
||||||
|
import org.isoron.uhabits.core.models.*
|
||||||
|
import org.isoron.uhabits.utils.*
|
||||||
|
import org.isoron.uhabits.widgets.views.*
|
||||||
|
|
||||||
|
class FrequencyWidget(
|
||||||
|
context: Context,
|
||||||
|
widgetId: Int,
|
||||||
|
private val habit: Habit
|
||||||
|
) : BaseWidget(context, widgetId) {
|
||||||
|
|
||||||
|
override fun getOnClickPendingIntent(context: Context) =
|
||||||
|
pendingIntentFactory.showHabit(habit)
|
||||||
|
|
||||||
|
override fun refreshData(v: View) {
|
||||||
|
val widgetView = v as GraphWidgetView
|
||||||
|
widgetView.setTitle(habit.name)
|
||||||
|
(widgetView.dataView as FrequencyChart).apply {
|
||||||
|
setColor(PaletteUtils.getColor(context, habit.color))
|
||||||
|
setFrequency(habit.repetitions.weekdayFrequency)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun buildView() =
|
||||||
|
GraphWidgetView(context, FrequencyChart(context))
|
||||||
|
|
||||||
|
override fun getDefaultHeight() = 200
|
||||||
|
override fun getDefaultWidth() = 200
|
||||||
|
}
|
@ -1,101 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* 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.widgets;
|
|
||||||
|
|
||||||
import android.app.*;
|
|
||||||
import android.content.*;
|
|
||||||
import android.os.*;
|
|
||||||
import android.view.*;
|
|
||||||
import android.widget.*;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.*;
|
|
||||||
import org.isoron.uhabits.core.models.*;
|
|
||||||
import org.isoron.uhabits.core.preferences.*;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import static android.appwidget.AppWidgetManager.*;
|
|
||||||
|
|
||||||
public class HabitPickerDialog extends Activity
|
|
||||||
implements AdapterView.OnItemClickListener
|
|
||||||
{
|
|
||||||
private HabitList habitList;
|
|
||||||
|
|
||||||
private WidgetPreferences preferences;
|
|
||||||
|
|
||||||
private Integer widgetId;
|
|
||||||
|
|
||||||
private ArrayList<Long> habitIds;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onItemClick(AdapterView<?> parent,
|
|
||||||
View view,
|
|
||||||
int position,
|
|
||||||
long id)
|
|
||||||
{
|
|
||||||
Long habitId = habitIds.get(position);
|
|
||||||
preferences.addWidget(widgetId, habitId);
|
|
||||||
|
|
||||||
HabitsApplication app = (HabitsApplication) getApplicationContext();
|
|
||||||
app.getComponent().getWidgetUpdater().updateWidgets();
|
|
||||||
|
|
||||||
Intent resultValue = new Intent();
|
|
||||||
resultValue.putExtra(EXTRA_APPWIDGET_ID, widgetId);
|
|
||||||
setResult(RESULT_OK, resultValue);
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
|
||||||
{
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setContentView(R.layout.widget_configure_activity);
|
|
||||||
|
|
||||||
HabitsApplication app = (HabitsApplication) getApplicationContext();
|
|
||||||
HabitsApplicationComponent component = app.getComponent();
|
|
||||||
habitList = component.getHabitList();
|
|
||||||
preferences = component.getWidgetPreferences();
|
|
||||||
|
|
||||||
Intent intent = getIntent();
|
|
||||||
Bundle extras = intent.getExtras();
|
|
||||||
|
|
||||||
if (extras != null)
|
|
||||||
widgetId = extras.getInt(EXTRA_APPWIDGET_ID, INVALID_APPWIDGET_ID);
|
|
||||||
|
|
||||||
ListView listView = (ListView) findViewById(R.id.listView);
|
|
||||||
|
|
||||||
habitIds = new ArrayList<>();
|
|
||||||
ArrayList<String> habitNames = new ArrayList<>();
|
|
||||||
|
|
||||||
for (Habit h : habitList)
|
|
||||||
{
|
|
||||||
if (h.isArchived()) continue;
|
|
||||||
habitIds.add(h.getId());
|
|
||||||
habitNames.add(h.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
ArrayAdapter<String> adapter =
|
|
||||||
new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,
|
|
||||||
habitNames);
|
|
||||||
listView.setAdapter(adapter);
|
|
||||||
listView.setOnItemClickListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.widgets
|
||||||
|
|
||||||
|
import android.app.*
|
||||||
|
import android.appwidget.AppWidgetManager.*
|
||||||
|
import android.content.*
|
||||||
|
import android.os.*
|
||||||
|
import android.view.*
|
||||||
|
import android.widget.*
|
||||||
|
import org.isoron.uhabits.*
|
||||||
|
import org.isoron.uhabits.core.models.*
|
||||||
|
import org.isoron.uhabits.core.preferences.*
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class HabitPickerDialog : Activity(), AdapterView.OnItemClickListener {
|
||||||
|
|
||||||
|
private var widgetId = 0
|
||||||
|
private lateinit var habitList: HabitList
|
||||||
|
private lateinit var preferences: WidgetPreferences
|
||||||
|
private lateinit var habitIds: ArrayList<Long>
|
||||||
|
private lateinit var widgetUpdater: WidgetUpdater
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
val component = (applicationContext as HabitsApplication).component
|
||||||
|
habitList = component.habitList
|
||||||
|
preferences = component.widgetPreferences
|
||||||
|
widgetUpdater = component.widgetUpdater
|
||||||
|
widgetId = intent.extras?.getInt(EXTRA_APPWIDGET_ID,
|
||||||
|
INVALID_APPWIDGET_ID) ?: 0
|
||||||
|
|
||||||
|
habitIds = ArrayList<Long>()
|
||||||
|
val habitNames = ArrayList<String>()
|
||||||
|
for (h in habitList) {
|
||||||
|
if (h.isArchived) continue
|
||||||
|
habitIds.add(h.getId()!!)
|
||||||
|
habitNames.add(h.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
setContentView(R.layout.widget_configure_activity)
|
||||||
|
with(findViewById(R.id.listView) as ListView) {
|
||||||
|
adapter = ArrayAdapter(context, android.R.layout.simple_list_item_1,
|
||||||
|
habitNames)
|
||||||
|
onItemClickListener = this@HabitPickerDialog
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onItemClick(parent: AdapterView<*>,
|
||||||
|
view: View,
|
||||||
|
position: Int,
|
||||||
|
id: Long) {
|
||||||
|
preferences.addWidget(widgetId, habitIds[position])
|
||||||
|
widgetUpdater.updateWidgets()
|
||||||
|
setResult(Activity.RESULT_OK, Intent().apply {
|
||||||
|
putExtra(EXTRA_APPWIDGET_ID, widgetId)
|
||||||
|
})
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
@ -1,83 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* 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.widgets;
|
|
||||||
|
|
||||||
import android.app.*;
|
|
||||||
import android.content.*;
|
|
||||||
import android.support.annotation.*;
|
|
||||||
import android.view.*;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.activities.common.views.*;
|
|
||||||
import org.isoron.uhabits.core.models.*;
|
|
||||||
import org.isoron.uhabits.utils.*;
|
|
||||||
import org.isoron.uhabits.widgets.views.*;
|
|
||||||
|
|
||||||
public class HistoryWidget extends BaseWidget
|
|
||||||
{
|
|
||||||
@NonNull
|
|
||||||
private Habit habit;
|
|
||||||
|
|
||||||
public HistoryWidget(@NonNull Context context, int id, @NonNull Habit habit)
|
|
||||||
{
|
|
||||||
super(context, id);
|
|
||||||
this.habit = habit;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PendingIntent getOnClickPendingIntent(Context context)
|
|
||||||
{
|
|
||||||
return pendingIntentFactory.showHabit(habit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void refreshData(View view)
|
|
||||||
{
|
|
||||||
GraphWidgetView widgetView = (GraphWidgetView) view;
|
|
||||||
HistoryChart chart = (HistoryChart) widgetView.getDataView();
|
|
||||||
|
|
||||||
int color = PaletteUtils.getColor(getContext(), habit.getColor());
|
|
||||||
int[] values = habit.getCheckmarks().getAllValues();
|
|
||||||
|
|
||||||
chart.setColor(color);
|
|
||||||
chart.setCheckmarks(values);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected View buildView()
|
|
||||||
{
|
|
||||||
HistoryChart dataView = new HistoryChart(getContext());
|
|
||||||
GraphWidgetView widgetView =
|
|
||||||
new GraphWidgetView(getContext(), dataView);
|
|
||||||
widgetView.setTitle(habit.getName());
|
|
||||||
return widgetView;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getDefaultHeight()
|
|
||||||
{
|
|
||||||
return 250;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getDefaultWidth()
|
|
||||||
{
|
|
||||||
return 250;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.widgets
|
||||||
|
|
||||||
|
import android.app.*
|
||||||
|
import android.content.*
|
||||||
|
import android.view.*
|
||||||
|
import org.isoron.uhabits.activities.common.views.*
|
||||||
|
import org.isoron.uhabits.core.models.*
|
||||||
|
import org.isoron.uhabits.utils.*
|
||||||
|
import org.isoron.uhabits.widgets.views.*
|
||||||
|
|
||||||
|
class HistoryWidget(
|
||||||
|
context: Context,
|
||||||
|
id: Int,
|
||||||
|
private val habit: Habit
|
||||||
|
) : BaseWidget(context, id) {
|
||||||
|
|
||||||
|
override fun getOnClickPendingIntent(context: Context): PendingIntent {
|
||||||
|
return pendingIntentFactory.showHabit(habit)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun refreshData(view: View) {
|
||||||
|
val widgetView = view as GraphWidgetView
|
||||||
|
(widgetView.dataView as HistoryChart).apply {
|
||||||
|
setColor(PaletteUtils.getColor(context, habit.color))
|
||||||
|
setCheckmarks(habit.checkmarks.allValues)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun buildView() =
|
||||||
|
GraphWidgetView(context, HistoryChart(context)).apply {
|
||||||
|
setTitle(habit.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getDefaultHeight() = 250
|
||||||
|
override fun getDefaultWidth() = 250
|
||||||
|
}
|
@ -1,103 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* 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.widgets;
|
|
||||||
|
|
||||||
import android.app.*;
|
|
||||||
import android.content.*;
|
|
||||||
import android.support.annotation.*;
|
|
||||||
import android.view.*;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.*;
|
|
||||||
import org.isoron.uhabits.activities.common.views.*;
|
|
||||||
import org.isoron.uhabits.activities.habits.show.views.*;
|
|
||||||
import org.isoron.uhabits.core.models.*;
|
|
||||||
import org.isoron.uhabits.core.preferences.*;
|
|
||||||
import org.isoron.uhabits.utils.*;
|
|
||||||
import org.isoron.uhabits.widgets.views.*;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
public class ScoreWidget extends BaseWidget
|
|
||||||
{
|
|
||||||
@NonNull
|
|
||||||
private Habit habit;
|
|
||||||
|
|
||||||
private final Preferences prefs;
|
|
||||||
|
|
||||||
public ScoreWidget(@NonNull Context context, int id, @NonNull Habit habit)
|
|
||||||
{
|
|
||||||
super(context, id);
|
|
||||||
this.habit = habit;
|
|
||||||
|
|
||||||
HabitsApplication app =
|
|
||||||
(HabitsApplication) context.getApplicationContext();
|
|
||||||
prefs = app.getComponent().getPreferences();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PendingIntent getOnClickPendingIntent(Context context)
|
|
||||||
{
|
|
||||||
return pendingIntentFactory.showHabit(habit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void refreshData(View view)
|
|
||||||
{
|
|
||||||
int defaultScoreInterval = prefs.getDefaultScoreSpinnerPosition();
|
|
||||||
int size = ScoreCard.BUCKET_SIZES[defaultScoreInterval];
|
|
||||||
|
|
||||||
GraphWidgetView widgetView = (GraphWidgetView) view;
|
|
||||||
ScoreChart chart = (ScoreChart) widgetView.getDataView();
|
|
||||||
|
|
||||||
List<Score> scores;
|
|
||||||
ScoreList scoreList = habit.getScores();
|
|
||||||
|
|
||||||
if (size == 1) scores = scoreList.toList();
|
|
||||||
else scores = scoreList.groupBy(ScoreCard.getTruncateField(size));
|
|
||||||
|
|
||||||
int color = PaletteUtils.getColor(getContext(), habit.getColor());
|
|
||||||
|
|
||||||
chart.setIsTransparencyEnabled(true);
|
|
||||||
chart.setBucketSize(size);
|
|
||||||
chart.setColor(color);
|
|
||||||
chart.setScores(scores);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected View buildView()
|
|
||||||
{
|
|
||||||
ScoreChart dataView = new ScoreChart(getContext());
|
|
||||||
GraphWidgetView view = new GraphWidgetView(getContext(), dataView);
|
|
||||||
view.setTitle(habit.getName());
|
|
||||||
return view;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getDefaultHeight()
|
|
||||||
{
|
|
||||||
return 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getDefaultWidth()
|
|
||||||
{
|
|
||||||
return 300;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.widgets
|
||||||
|
|
||||||
|
import android.content.*
|
||||||
|
import android.view.*
|
||||||
|
import org.isoron.uhabits.activities.common.views.*
|
||||||
|
import org.isoron.uhabits.activities.habits.show.views.*
|
||||||
|
import org.isoron.uhabits.core.models.*
|
||||||
|
import org.isoron.uhabits.core.preferences.*
|
||||||
|
import org.isoron.uhabits.utils.*
|
||||||
|
import org.isoron.uhabits.widgets.views.*
|
||||||
|
|
||||||
|
class ScoreWidget(
|
||||||
|
context: Context,
|
||||||
|
id: Int,
|
||||||
|
private val habit: Habit,
|
||||||
|
private val prefs: Preferences
|
||||||
|
) : BaseWidget(context, id) {
|
||||||
|
|
||||||
|
override fun getOnClickPendingIntent(context: Context) =
|
||||||
|
pendingIntentFactory.showHabit(habit)
|
||||||
|
|
||||||
|
override fun refreshData(view: View) {
|
||||||
|
val size = ScoreCard.BUCKET_SIZES[prefs.defaultScoreSpinnerPosition]
|
||||||
|
val scores = when(size) {
|
||||||
|
1 -> habit.scores.toList()
|
||||||
|
else -> habit.scores.groupBy(ScoreCard.getTruncateField(size))
|
||||||
|
}
|
||||||
|
|
||||||
|
val widgetView = view as GraphWidgetView
|
||||||
|
(widgetView.dataView as ScoreChart).apply {
|
||||||
|
setIsTransparencyEnabled(true)
|
||||||
|
setBucketSize(size)
|
||||||
|
setColor(PaletteUtils.getColor(context, habit.color))
|
||||||
|
setScores(scores)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun buildView() =
|
||||||
|
GraphWidgetView(context, ScoreChart(context)).apply {
|
||||||
|
setTitle(habit.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getDefaultHeight() = 300
|
||||||
|
override fun getDefaultWidth() = 300
|
||||||
|
}
|
@ -1,91 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* 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.widgets;
|
|
||||||
|
|
||||||
import android.app.*;
|
|
||||||
import android.content.*;
|
|
||||||
import android.support.annotation.*;
|
|
||||||
import android.view.*;
|
|
||||||
import android.view.ViewGroup.*;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.activities.common.views.*;
|
|
||||||
import org.isoron.uhabits.core.models.*;
|
|
||||||
import org.isoron.uhabits.utils.*;
|
|
||||||
import org.isoron.uhabits.widgets.views.*;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import static android.view.ViewGroup.LayoutParams.*;
|
|
||||||
|
|
||||||
public class StreakWidget extends BaseWidget
|
|
||||||
{
|
|
||||||
@NonNull
|
|
||||||
private Habit habit;
|
|
||||||
|
|
||||||
public StreakWidget(@NonNull Context context, int id, @NonNull Habit habit)
|
|
||||||
{
|
|
||||||
super(context, id);
|
|
||||||
this.habit = habit;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PendingIntent getOnClickPendingIntent(Context context)
|
|
||||||
{
|
|
||||||
return pendingIntentFactory.showHabit(habit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void refreshData(View view)
|
|
||||||
{
|
|
||||||
GraphWidgetView widgetView = (GraphWidgetView) view;
|
|
||||||
StreakChart chart = (StreakChart) widgetView.getDataView();
|
|
||||||
|
|
||||||
int color = PaletteUtils.getColor(getContext(), habit.getColor());
|
|
||||||
|
|
||||||
int count = chart.getMaxStreakCount();
|
|
||||||
List<Streak> streaks = habit.getStreaks().getBest(count);
|
|
||||||
|
|
||||||
chart.setColor(color);
|
|
||||||
chart.setStreaks(streaks);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected View buildView()
|
|
||||||
{
|
|
||||||
StreakChart dataView = new StreakChart(getContext());
|
|
||||||
GraphWidgetView view = new GraphWidgetView(getContext(), dataView);
|
|
||||||
LayoutParams params = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
|
|
||||||
view.setTitle(habit.getName());
|
|
||||||
view.setLayoutParams(params);
|
|
||||||
return view;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getDefaultHeight()
|
|
||||||
{
|
|
||||||
return 200;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getDefaultWidth()
|
|
||||||
{
|
|
||||||
return 200;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.widgets
|
||||||
|
|
||||||
|
import android.content.*
|
||||||
|
import android.view.*
|
||||||
|
import android.view.ViewGroup.*
|
||||||
|
import android.view.ViewGroup.LayoutParams.*
|
||||||
|
import org.isoron.uhabits.activities.common.views.*
|
||||||
|
import org.isoron.uhabits.core.models.*
|
||||||
|
import org.isoron.uhabits.utils.*
|
||||||
|
import org.isoron.uhabits.widgets.views.*
|
||||||
|
|
||||||
|
class StreakWidget(
|
||||||
|
context: Context,
|
||||||
|
id: Int,
|
||||||
|
private val habit: Habit
|
||||||
|
) : BaseWidget(context, id) {
|
||||||
|
|
||||||
|
override fun getOnClickPendingIntent(context: Context) =
|
||||||
|
pendingIntentFactory.showHabit(habit)
|
||||||
|
|
||||||
|
override fun refreshData(view: View) {
|
||||||
|
val widgetView = view as GraphWidgetView
|
||||||
|
(widgetView.dataView as StreakChart).apply {
|
||||||
|
setColor(PaletteUtils.getColor(context, habit.color))
|
||||||
|
setStreaks(habit.streaks.getBest(maxStreakCount))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun buildView(): View {
|
||||||
|
return GraphWidgetView(context, StreakChart(context)).apply {
|
||||||
|
setTitle(habit.name)
|
||||||
|
layoutParams = LayoutParams(MATCH_PARENT, MATCH_PARENT)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getDefaultHeight() = 200
|
||||||
|
override fun getDefaultWidth() = 200
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.widgets
|
||||||
|
|
||||||
|
import android.content.*
|
||||||
|
|
||||||
|
class StreakWidgetProvider : BaseWidgetProvider() {
|
||||||
|
override fun getWidgetFromId(context: Context, id: Int): BaseWidget {
|
||||||
|
val habit = getHabitFromWidgetId(id)
|
||||||
|
return StreakWidget(context, id, habit)
|
||||||
|
}
|
||||||
|
}
|
@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* 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.widgets;
|
|
||||||
|
|
||||||
public class WidgetDimensions
|
|
||||||
{
|
|
||||||
private final int portraitWidth;
|
|
||||||
|
|
||||||
private final int portraitHeight;
|
|
||||||
|
|
||||||
private final int landscapeWidth;
|
|
||||||
|
|
||||||
private final int landscapeHeight;
|
|
||||||
|
|
||||||
public WidgetDimensions(int portraitWidth,
|
|
||||||
int portraitHeight,
|
|
||||||
int landscapeWidth,
|
|
||||||
int landscapeHeight)
|
|
||||||
{
|
|
||||||
this.portraitWidth = portraitWidth;
|
|
||||||
this.portraitHeight = portraitHeight;
|
|
||||||
this.landscapeWidth = landscapeWidth;
|
|
||||||
this.landscapeHeight = landscapeHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getLandscapeHeight()
|
|
||||||
{
|
|
||||||
return landscapeHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getLandscapeWidth()
|
|
||||||
{
|
|
||||||
return landscapeWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPortraitHeight()
|
|
||||||
{
|
|
||||||
return portraitHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPortraitWidth()
|
|
||||||
{
|
|
||||||
return portraitWidth;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.widgets
|
||||||
|
|
||||||
|
class WidgetDimensions(val portraitWidth: Int,
|
||||||
|
val portraitHeight: Int,
|
||||||
|
val landscapeWidth: Int,
|
||||||
|
val landscapeHeight: Int)
|
@ -1,107 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* 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.widgets;
|
|
||||||
|
|
||||||
import android.appwidget.*;
|
|
||||||
import android.content.*;
|
|
||||||
import android.support.annotation.*;
|
|
||||||
|
|
||||||
import org.isoron.androidbase.*;
|
|
||||||
import org.isoron.uhabits.core.commands.*;
|
|
||||||
import org.isoron.uhabits.core.tasks.*;
|
|
||||||
|
|
||||||
import javax.inject.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A WidgetUpdater listens to the commands being executed by the application and
|
|
||||||
* updates the home-screen widgets accordingly.
|
|
||||||
* <p>
|
|
||||||
* There should be only one instance of this class, created when the application
|
|
||||||
* starts. To access it, call HabitApplication.getWidgetUpdater().
|
|
||||||
*/
|
|
||||||
public class WidgetUpdater implements CommandRunner.Listener
|
|
||||||
{
|
|
||||||
@NonNull
|
|
||||||
private final CommandRunner commandRunner;
|
|
||||||
|
|
||||||
private TaskRunner taskRunner;
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private final Context context;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public WidgetUpdater(@NonNull @AppContext Context context,
|
|
||||||
@NonNull CommandRunner commandRunner,
|
|
||||||
@NonNull TaskRunner taskRunner)
|
|
||||||
{
|
|
||||||
this.context = context;
|
|
||||||
this.commandRunner = commandRunner;
|
|
||||||
this.taskRunner = taskRunner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCommandExecuted(@NonNull Command command,
|
|
||||||
@Nullable Long refreshKey)
|
|
||||||
{
|
|
||||||
updateWidgets();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instructs the updater to start listening to commands. If any relevant
|
|
||||||
* commands are executed after this method is called, the corresponding
|
|
||||||
* widgets will get updated.
|
|
||||||
*/
|
|
||||||
public void startListening()
|
|
||||||
{
|
|
||||||
commandRunner.addListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instructs the updater to stop listening to commands. Every command
|
|
||||||
* executed after this method is called will be ignored by the updater.
|
|
||||||
*/
|
|
||||||
public void stopListening()
|
|
||||||
{
|
|
||||||
commandRunner.removeListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateWidgets()
|
|
||||||
{
|
|
||||||
taskRunner.execute(() ->
|
|
||||||
{
|
|
||||||
updateWidgets(CheckmarkWidgetProvider.class);
|
|
||||||
updateWidgets(HistoryWidgetProvider.class);
|
|
||||||
updateWidgets(ScoreWidgetProvider.class);
|
|
||||||
updateWidgets(StreakWidgetProvider.class);
|
|
||||||
updateWidgets(FrequencyWidgetProvider.class);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateWidgets(Class providerClass)
|
|
||||||
{
|
|
||||||
ComponentName provider = new ComponentName(context, providerClass);
|
|
||||||
Intent intent = new Intent(context, providerClass);
|
|
||||||
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
|
|
||||||
int ids[] =
|
|
||||||
AppWidgetManager.getInstance(context).getAppWidgetIds(provider);
|
|
||||||
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
|
|
||||||
context.sendBroadcast(intent);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.widgets
|
||||||
|
|
||||||
|
import android.appwidget.*
|
||||||
|
import android.content.*
|
||||||
|
import org.isoron.androidbase.*
|
||||||
|
import org.isoron.uhabits.core.commands.*
|
||||||
|
import org.isoron.uhabits.core.tasks.*
|
||||||
|
import javax.inject.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A WidgetUpdater listens to the commands being executed by the application and
|
||||||
|
* updates the home-screen widgets accordingly.
|
||||||
|
*/
|
||||||
|
class WidgetUpdater
|
||||||
|
@Inject constructor(
|
||||||
|
@AppContext private val context: Context,
|
||||||
|
private val commandRunner: CommandRunner,
|
||||||
|
private val taskRunner: TaskRunner
|
||||||
|
) : CommandRunner.Listener {
|
||||||
|
|
||||||
|
override fun onCommandExecuted(command: Command, refreshKey: Long?) {
|
||||||
|
updateWidgets()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instructs the updater to start listening to commands. If any relevant
|
||||||
|
* commands are executed after this method is called, the corresponding
|
||||||
|
* widgets will get updated.
|
||||||
|
*/
|
||||||
|
fun startListening() {
|
||||||
|
commandRunner.addListener(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instructs the updater to stop listening to commands. Every command
|
||||||
|
* executed after this method is called will be ignored by the updater.
|
||||||
|
*/
|
||||||
|
fun stopListening() {
|
||||||
|
commandRunner.removeListener(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateWidgets() {
|
||||||
|
taskRunner.execute {
|
||||||
|
updateWidgets(CheckmarkWidgetProvider::class.java)
|
||||||
|
updateWidgets(HistoryWidgetProvider::class.java)
|
||||||
|
updateWidgets(ScoreWidgetProvider::class.java)
|
||||||
|
updateWidgets(StreakWidgetProvider::class.java)
|
||||||
|
updateWidgets(FrequencyWidgetProvider::class.java)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateWidgets(providerClass: Class<*>) {
|
||||||
|
val ids = AppWidgetManager.getInstance(context).getAppWidgetIds(
|
||||||
|
ComponentName(context, providerClass))
|
||||||
|
context.sendBroadcast(Intent(context, providerClass).apply {
|
||||||
|
action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
|
||||||
|
putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue