mirror of https://github.com/iSoron/uhabits.git
parent
180c18f6bf
commit
a02376497a
@ -1,50 +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.automation;
|
|
||||||
|
|
||||||
import android.os.*;
|
|
||||||
|
|
||||||
import org.isoron.androidbase.activities.*;
|
|
||||||
import org.isoron.uhabits.*;
|
|
||||||
import org.isoron.uhabits.core.models.*;
|
|
||||||
|
|
||||||
public class EditSettingActivity extends BaseActivity
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
|
||||||
{
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
HabitsApplication app = (HabitsApplication) getApplicationContext();
|
|
||||||
|
|
||||||
HabitList habits = app.getComponent().getHabitList();
|
|
||||||
habits = habits.getFiltered(new HabitMatcherBuilder()
|
|
||||||
.setArchivedAllowed(false)
|
|
||||||
.setCompletedAllowed(true)
|
|
||||||
.build());
|
|
||||||
|
|
||||||
EditSettingController controller = new EditSettingController(this);
|
|
||||||
EditSettingRootView rootView =
|
|
||||||
new EditSettingRootView(this, habits, controller);
|
|
||||||
|
|
||||||
BaseScreen screen = new BaseScreen(this);
|
|
||||||
screen.setRootView(rootView);
|
|
||||||
setScreen(screen);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015-2017 Á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.automation
|
||||||
|
|
||||||
|
import android.os.*
|
||||||
|
|
||||||
|
import org.isoron.androidbase.activities.*
|
||||||
|
import org.isoron.uhabits.*
|
||||||
|
import org.isoron.uhabits.core.models.*
|
||||||
|
|
||||||
|
class EditSettingActivity : BaseActivity() {
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
val app = applicationContext as HabitsApplication
|
||||||
|
val habits = app.component.habitList.getFiltered(
|
||||||
|
HabitMatcherBuilder()
|
||||||
|
.setArchivedAllowed(false)
|
||||||
|
.setCompletedAllowed(true)
|
||||||
|
.build())
|
||||||
|
|
||||||
|
val controller = EditSettingController(this)
|
||||||
|
val rootView = EditSettingRootView(this, habits, controller)
|
||||||
|
val screen = BaseScreen(this)
|
||||||
|
screen.setRootView(rootView)
|
||||||
|
setScreen(screen)
|
||||||
|
}
|
||||||
|
}
|
@ -1,78 +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.automation;
|
|
||||||
|
|
||||||
import android.app.*;
|
|
||||||
import android.content.*;
|
|
||||||
import android.os.*;
|
|
||||||
import android.support.annotation.*;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.*;
|
|
||||||
import org.isoron.uhabits.core.models.*;
|
|
||||||
|
|
||||||
import static org.isoron.uhabits.automation.FireSettingReceiver.*;
|
|
||||||
|
|
||||||
public class EditSettingController
|
|
||||||
{
|
|
||||||
@NonNull
|
|
||||||
private final Activity activity;
|
|
||||||
|
|
||||||
public EditSettingController(@NonNull Activity activity)
|
|
||||||
{
|
|
||||||
this.activity = activity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onSave(Habit habit, int action)
|
|
||||||
{
|
|
||||||
if (habit.getId() == null) return;
|
|
||||||
|
|
||||||
String actionName = getActionName(action);
|
|
||||||
String blurb = String.format("%s: %s", actionName, habit.getName());
|
|
||||||
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putInt("action", action);
|
|
||||||
bundle.putLong("habit", habit.getId());
|
|
||||||
|
|
||||||
Intent intent = new Intent();
|
|
||||||
intent.putExtra(EXTRA_STRING_BLURB, blurb);
|
|
||||||
intent.putExtra(EXTRA_BUNDLE, bundle);
|
|
||||||
|
|
||||||
activity.setResult(Activity.RESULT_OK, intent);
|
|
||||||
activity.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getActionName(int action)
|
|
||||||
{
|
|
||||||
switch (action)
|
|
||||||
{
|
|
||||||
case ACTION_CHECK:
|
|
||||||
return activity.getString(R.string.check);
|
|
||||||
|
|
||||||
case ACTION_UNCHECK:
|
|
||||||
return activity.getString(R.string.uncheck);
|
|
||||||
|
|
||||||
case ACTION_TOGGLE:
|
|
||||||
return activity.getString(R.string.toggle);
|
|
||||||
|
|
||||||
default:
|
|
||||||
return "???";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015-2017 Á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.automation
|
||||||
|
|
||||||
|
import android.app.*
|
||||||
|
import android.content.*
|
||||||
|
import android.os.*
|
||||||
|
import org.isoron.uhabits.*
|
||||||
|
import org.isoron.uhabits.automation.FireSettingReceiver.*
|
||||||
|
import org.isoron.uhabits.core.models.*
|
||||||
|
|
||||||
|
class EditSettingController(private val activity: Activity) {
|
||||||
|
|
||||||
|
fun onSave(habit: Habit, action: Int) {
|
||||||
|
if (habit.getId() == null) return
|
||||||
|
val actionName = getActionName(action)
|
||||||
|
val blurb = String.format("%s: %s", actionName, habit.name)
|
||||||
|
|
||||||
|
val bundle = Bundle()
|
||||||
|
bundle.putInt("action", action)
|
||||||
|
bundle.putLong("habit", habit.getId()!!)
|
||||||
|
|
||||||
|
activity.setResult(Activity.RESULT_OK, Intent().apply {
|
||||||
|
putExtra(EXTRA_STRING_BLURB, blurb)
|
||||||
|
putExtra(EXTRA_BUNDLE, bundle)
|
||||||
|
})
|
||||||
|
activity.finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getActionName(action: Int): String {
|
||||||
|
when (action) {
|
||||||
|
ACTION_CHECK -> return activity.getString(R.string.check)
|
||||||
|
ACTION_UNCHECK -> return activity.getString(R.string.uncheck)
|
||||||
|
ACTION_TOGGLE -> return activity.getString(R.string.toggle)
|
||||||
|
else -> return "???"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,105 +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.automation;
|
|
||||||
|
|
||||||
import android.content.*;
|
|
||||||
import android.support.annotation.*;
|
|
||||||
import android.support.v7.widget.*;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
|
||||||
import android.widget.*;
|
|
||||||
|
|
||||||
import org.isoron.androidbase.activities.*;
|
|
||||||
import org.isoron.androidbase.utils.*;
|
|
||||||
import org.isoron.uhabits.R;
|
|
||||||
import org.isoron.uhabits.core.models.*;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import butterknife.*;
|
|
||||||
|
|
||||||
import static android.R.layout.*;
|
|
||||||
|
|
||||||
public class EditSettingRootView extends BaseRootView
|
|
||||||
{
|
|
||||||
@BindView(R.id.toolbar)
|
|
||||||
Toolbar toolbar;
|
|
||||||
|
|
||||||
@BindView(R.id.habitSpinner)
|
|
||||||
AppCompatSpinner habitSpinner;
|
|
||||||
|
|
||||||
@BindView(R.id.actionSpinner)
|
|
||||||
AppCompatSpinner actionSpinner;
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private final HabitList habitList;
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private final EditSettingController controller;
|
|
||||||
|
|
||||||
public EditSettingRootView(@NonNull Context context,
|
|
||||||
@NonNull HabitList habitList,
|
|
||||||
@NonNull EditSettingController controller)
|
|
||||||
{
|
|
||||||
super(context);
|
|
||||||
this.habitList = habitList;
|
|
||||||
this.controller = controller;
|
|
||||||
|
|
||||||
addView(inflate(getContext(), R.layout.automation, null));
|
|
||||||
ButterKnife.bind(this);
|
|
||||||
populateHabitSpinner();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public Toolbar getToolbar()
|
|
||||||
{
|
|
||||||
return toolbar;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getToolbarColor()
|
|
||||||
{
|
|
||||||
StyledResources res = new StyledResources(getContext());
|
|
||||||
if (!res.getBoolean(R.attr.useHabitColorAsPrimary))
|
|
||||||
return super.getToolbarColor();
|
|
||||||
|
|
||||||
return res.getColor(R.attr.aboutScreenColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@OnClick(R.id.buttonSave)
|
|
||||||
public void onClickSave()
|
|
||||||
{
|
|
||||||
int action = actionSpinner.getSelectedItemPosition();
|
|
||||||
int habitPosition = habitSpinner.getSelectedItemPosition();
|
|
||||||
Habit habit = habitList.getByPosition(habitPosition);
|
|
||||||
controller.onSave(habit, action);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void populateHabitSpinner()
|
|
||||||
{
|
|
||||||
List<String> names = new LinkedList<>();
|
|
||||||
for (Habit h : habitList) names.add(h.getName());
|
|
||||||
|
|
||||||
ArrayAdapter<String> adapter =
|
|
||||||
new ArrayAdapter<>(getContext(), simple_spinner_item, names);
|
|
||||||
adapter.setDropDownViewResource(simple_spinner_dropdown_item);
|
|
||||||
habitSpinner.setAdapter(adapter);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* 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.automation
|
||||||
|
|
||||||
|
import android.R.layout.*
|
||||||
|
import android.content.*
|
||||||
|
import android.support.v7.widget.*
|
||||||
|
import android.support.v7.widget.Toolbar
|
||||||
|
import android.widget.*
|
||||||
|
import butterknife.*
|
||||||
|
import org.isoron.androidbase.activities.*
|
||||||
|
import org.isoron.androidbase.utils.*
|
||||||
|
import org.isoron.uhabits.R
|
||||||
|
import org.isoron.uhabits.core.models.*
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class EditSettingRootView(
|
||||||
|
context: Context,
|
||||||
|
private val habitList: HabitList,
|
||||||
|
private val controller: EditSettingController
|
||||||
|
) : BaseRootView(context) {
|
||||||
|
|
||||||
|
@BindView(R.id.toolbar)
|
||||||
|
lateinit var tbar: Toolbar
|
||||||
|
|
||||||
|
@BindView(R.id.habitSpinner)
|
||||||
|
lateinit var habitSpinner: AppCompatSpinner
|
||||||
|
|
||||||
|
@BindView(R.id.actionSpinner)
|
||||||
|
lateinit var actionSpinner: AppCompatSpinner
|
||||||
|
|
||||||
|
init {
|
||||||
|
addView(inflate(getContext(), R.layout.automation, null))
|
||||||
|
ButterKnife.bind(this)
|
||||||
|
populateHabitSpinner()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getToolbar(): Toolbar {
|
||||||
|
return tbar
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getToolbarColor(): Int {
|
||||||
|
val res = StyledResources(context)
|
||||||
|
if (!res.getBoolean(R.attr.useHabitColorAsPrimary))
|
||||||
|
return super.getToolbarColor()
|
||||||
|
|
||||||
|
return res.getColor(R.attr.aboutScreenColor)
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnClick(R.id.buttonSave)
|
||||||
|
fun onClickSave() {
|
||||||
|
val action = actionSpinner.selectedItemPosition
|
||||||
|
val habitPosition = habitSpinner.selectedItemPosition
|
||||||
|
val habit = habitList.getByPosition(habitPosition)
|
||||||
|
controller.onSave(habit, action)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun populateHabitSpinner() {
|
||||||
|
val names = habitList.mapTo(LinkedList<String>()) { it.name }
|
||||||
|
val adapter = ArrayAdapter(context, simple_spinner_item, names)
|
||||||
|
adapter.setDropDownViewResource(simple_spinner_dropdown_item)
|
||||||
|
habitSpinner.adapter = adapter
|
||||||
|
}
|
||||||
|
}
|
@ -1,115 +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.automation;
|
|
||||||
|
|
||||||
import android.content.*;
|
|
||||||
import android.os.*;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.*;
|
|
||||||
import org.isoron.uhabits.core.models.*;
|
|
||||||
import org.isoron.uhabits.receivers.*;
|
|
||||||
import org.isoron.uhabits.core.ui.widgets.*;
|
|
||||||
import org.isoron.uhabits.core.utils.*;
|
|
||||||
|
|
||||||
import dagger.*;
|
|
||||||
|
|
||||||
public class FireSettingReceiver extends BroadcastReceiver
|
|
||||||
{
|
|
||||||
public static final int ACTION_CHECK = 0;
|
|
||||||
|
|
||||||
public static final int ACTION_UNCHECK = 1;
|
|
||||||
|
|
||||||
public static final int ACTION_TOGGLE = 2;
|
|
||||||
|
|
||||||
public static final String EXTRA_BUNDLE =
|
|
||||||
"com.twofortyfouram.locale.intent.extra.BUNDLE";
|
|
||||||
|
|
||||||
public static final String EXTRA_STRING_BLURB =
|
|
||||||
"com.twofortyfouram.locale.intent.extra.BLURB";
|
|
||||||
|
|
||||||
private HabitList allHabits;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent)
|
|
||||||
{
|
|
||||||
HabitsApplication app =
|
|
||||||
(HabitsApplication) context.getApplicationContext();
|
|
||||||
|
|
||||||
ReceiverComponent component =
|
|
||||||
DaggerFireSettingReceiver_ReceiverComponent
|
|
||||||
.builder()
|
|
||||||
.habitsApplicationComponent(app.getComponent())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
allHabits = app.getComponent().getHabitList();
|
|
||||||
|
|
||||||
Arguments args = parseIntent(intent);
|
|
||||||
if (args == null) return;
|
|
||||||
|
|
||||||
long timestamp = DateUtils.getStartOfToday();
|
|
||||||
WidgetBehavior controller = component.getWidgetController();
|
|
||||||
|
|
||||||
switch (args.action)
|
|
||||||
{
|
|
||||||
case ACTION_CHECK:
|
|
||||||
controller.onAddRepetition(args.habit, timestamp);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTION_UNCHECK:
|
|
||||||
controller.onRemoveRepetition(args.habit, timestamp);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTION_TOGGLE:
|
|
||||||
controller.onToggleRepetition(args.habit, timestamp);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Arguments parseIntent(Intent intent)
|
|
||||||
{
|
|
||||||
Arguments args = new Arguments();
|
|
||||||
|
|
||||||
Bundle bundle = intent.getBundleExtra(EXTRA_BUNDLE);
|
|
||||||
if (bundle == null) return null;
|
|
||||||
|
|
||||||
args.action = bundle.getInt("action");
|
|
||||||
if (args.action < 0 || args.action > 2) return null;
|
|
||||||
|
|
||||||
Habit habit = allHabits.getById(bundle.getLong("habit"));
|
|
||||||
if (habit == null) return null;
|
|
||||||
args.habit = habit;
|
|
||||||
|
|
||||||
return args;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ReceiverScope
|
|
||||||
@Component(dependencies = HabitsApplicationComponent.class)
|
|
||||||
interface ReceiverComponent
|
|
||||||
{
|
|
||||||
WidgetBehavior getWidgetController();
|
|
||||||
}
|
|
||||||
|
|
||||||
private class Arguments
|
|
||||||
{
|
|
||||||
int action;
|
|
||||||
|
|
||||||
Habit habit;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015-2017 Á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.automation
|
||||||
|
|
||||||
|
import android.content.*
|
||||||
|
import dagger.*
|
||||||
|
import org.isoron.uhabits.*
|
||||||
|
import org.isoron.uhabits.core.models.*
|
||||||
|
import org.isoron.uhabits.core.ui.widgets.*
|
||||||
|
import org.isoron.uhabits.core.utils.*
|
||||||
|
import org.isoron.uhabits.receivers.*
|
||||||
|
|
||||||
|
const val ACTION_CHECK = 0
|
||||||
|
const val ACTION_UNCHECK = 1
|
||||||
|
const val ACTION_TOGGLE = 2
|
||||||
|
const val EXTRA_BUNDLE = "com.twofortyfouram.locale.intent.extra.BUNDLE"
|
||||||
|
const val EXTRA_STRING_BLURB = "com.twofortyfouram.locale.intent.extra.BLURB"
|
||||||
|
|
||||||
|
class FireSettingReceiver : BroadcastReceiver() {
|
||||||
|
|
||||||
|
private lateinit var allHabits: HabitList
|
||||||
|
|
||||||
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
|
val app = context.applicationContext as HabitsApplication
|
||||||
|
val component = DaggerFireSettingReceiver_ReceiverComponent
|
||||||
|
.builder()
|
||||||
|
.habitsApplicationComponent(app.component)
|
||||||
|
.build()
|
||||||
|
allHabits = app.component.habitList
|
||||||
|
val args = parseIntent(intent) ?: return
|
||||||
|
val timestamp = DateUtils.getStartOfToday()
|
||||||
|
val controller = component.widgetController
|
||||||
|
|
||||||
|
when (args.action) {
|
||||||
|
ACTION_CHECK -> controller.onAddRepetition(args.habit, timestamp)
|
||||||
|
ACTION_UNCHECK -> controller.onRemoveRepetition(args.habit, timestamp)
|
||||||
|
ACTION_TOGGLE -> controller.onToggleRepetition(args.habit, timestamp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun parseIntent(intent: Intent): Arguments? {
|
||||||
|
val bundle = intent.getBundleExtra(EXTRA_BUNDLE) ?: return null
|
||||||
|
val action = bundle.getInt("action")
|
||||||
|
if (action < 0 || action > 2) return null
|
||||||
|
val habit = allHabits.getById(bundle.getLong("habit")) ?: return null
|
||||||
|
return Arguments(action, habit)
|
||||||
|
}
|
||||||
|
|
||||||
|
@ReceiverScope
|
||||||
|
@Component(dependencies = arrayOf(HabitsApplicationComponent::class))
|
||||||
|
internal interface ReceiverComponent {
|
||||||
|
val widgetController: WidgetBehavior
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Arguments(var action: Int, var habit: Habit)
|
||||||
|
}
|
@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 Á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.database;
|
|
||||||
|
|
||||||
import android.support.annotation.*;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.core.database.*;
|
|
||||||
|
|
||||||
public class AndroidCursor implements Cursor
|
|
||||||
{
|
|
||||||
private android.database.Cursor cursor;
|
|
||||||
|
|
||||||
public AndroidCursor(android.database.Cursor cursor)
|
|
||||||
{
|
|
||||||
this.cursor = cursor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close()
|
|
||||||
{
|
|
||||||
cursor.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean moveToNext()
|
|
||||||
{
|
|
||||||
return cursor.moveToNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public Integer getInt(int index)
|
|
||||||
{
|
|
||||||
if(cursor.isNull(index)) return null;
|
|
||||||
else return cursor.getInt(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public Long getLong(int index)
|
|
||||||
{
|
|
||||||
if(cursor.isNull(index)) return null;
|
|
||||||
else return cursor.getLong(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public Double getDouble(int index)
|
|
||||||
{
|
|
||||||
if(cursor.isNull(index)) return null;
|
|
||||||
else return cursor.getDouble(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public String getString(int index)
|
|
||||||
{
|
|
||||||
if(cursor.isNull(index)) return null;
|
|
||||||
else return cursor.getString(index);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015-2017 Á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.database
|
||||||
|
|
||||||
|
import org.isoron.uhabits.core.database.*
|
||||||
|
|
||||||
|
class AndroidCursor(private val cursor: android.database.Cursor) : Cursor {
|
||||||
|
|
||||||
|
override fun close() = cursor.close()
|
||||||
|
override fun moveToNext() = cursor.moveToNext()
|
||||||
|
|
||||||
|
override fun getInt(index: Int): Int? {
|
||||||
|
if (cursor.isNull(index)) return null
|
||||||
|
else return cursor.getInt(index)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getLong(index: Int): Long? {
|
||||||
|
if (cursor.isNull(index)) return null
|
||||||
|
else return cursor.getLong(index)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getDouble(index: Int): Double? {
|
||||||
|
if (cursor.isNull(index)) return null
|
||||||
|
else return cursor.getDouble(index)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getString(index: Int): String? {
|
||||||
|
if (cursor.isNull(index)) return null
|
||||||
|
else return cursor.getString(index)
|
||||||
|
}
|
||||||
|
}
|
@ -1,126 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 Á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.database;
|
|
||||||
|
|
||||||
import android.content.*;
|
|
||||||
import android.database.sqlite.*;
|
|
||||||
|
|
||||||
import org.isoron.uhabits.core.database.*;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
public class AndroidDatabase implements Database
|
|
||||||
{
|
|
||||||
private final SQLiteDatabase db;
|
|
||||||
|
|
||||||
public AndroidDatabase(SQLiteDatabase db)
|
|
||||||
{
|
|
||||||
this.db = db;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Cursor query(String query, String... params)
|
|
||||||
{
|
|
||||||
return new AndroidCursor(db.rawQuery(query, params));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(String query, Object... params)
|
|
||||||
{
|
|
||||||
db.execSQL(query, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void beginTransaction()
|
|
||||||
{
|
|
||||||
db.beginTransaction();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setTransactionSuccessful()
|
|
||||||
{
|
|
||||||
db.setTransactionSuccessful();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void endTransaction()
|
|
||||||
{
|
|
||||||
db.endTransaction();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close()
|
|
||||||
{
|
|
||||||
db.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getVersion()
|
|
||||||
{
|
|
||||||
return db.getVersion();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int update(String tableName,
|
|
||||||
Map<String, Object> map,
|
|
||||||
String where,
|
|
||||||
String... params)
|
|
||||||
{
|
|
||||||
ContentValues values = mapToContentValues(map);
|
|
||||||
return db.update(tableName, values, where, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long insert(String tableName, Map<String, Object> map)
|
|
||||||
{
|
|
||||||
ContentValues values = mapToContentValues(map);
|
|
||||||
return db.insert(tableName, null, values);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void delete(String tableName, String where, String... params)
|
|
||||||
{
|
|
||||||
db.delete(tableName, where, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ContentValues mapToContentValues(Map<String, Object> map)
|
|
||||||
{
|
|
||||||
ContentValues values = new ContentValues();
|
|
||||||
for (Map.Entry<String, Object> entry : map.entrySet())
|
|
||||||
{
|
|
||||||
if (entry.getValue() == null)
|
|
||||||
values.putNull(entry.getKey());
|
|
||||||
else if (entry.getValue() instanceof Integer)
|
|
||||||
values.put(entry.getKey(), (Integer) entry.getValue());
|
|
||||||
else if (entry.getValue() instanceof Long)
|
|
||||||
values.put(entry.getKey(), (Long) entry.getValue());
|
|
||||||
else if (entry.getValue() instanceof Double)
|
|
||||||
values.put(entry.getKey(), (Double) entry.getValue());
|
|
||||||
else if (entry.getValue() instanceof String)
|
|
||||||
values.put(entry.getKey(), (String) entry.getValue());
|
|
||||||
else throw new IllegalStateException(
|
|
||||||
"unsupported type: " + entry.getValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
return values;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015-2017 Á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.database
|
||||||
|
|
||||||
|
import android.content.*
|
||||||
|
import android.database.sqlite.*
|
||||||
|
import org.isoron.uhabits.core.database.*
|
||||||
|
|
||||||
|
class AndroidDatabase(private val db: SQLiteDatabase) : Database {
|
||||||
|
|
||||||
|
override fun beginTransaction() = db.beginTransaction()
|
||||||
|
override fun setTransactionSuccessful() = db.setTransactionSuccessful()
|
||||||
|
override fun endTransaction() = db.endTransaction()
|
||||||
|
override fun close() = db.close()
|
||||||
|
override fun getVersion() = db.version
|
||||||
|
|
||||||
|
override fun query(query: String, vararg params: String)
|
||||||
|
= AndroidCursor(db.rawQuery(query, params))
|
||||||
|
|
||||||
|
override fun execute(query: String, vararg params: Any)
|
||||||
|
= db.execSQL(query, params)
|
||||||
|
|
||||||
|
override fun update(tableName: String,
|
||||||
|
map: Map<String, Any?>,
|
||||||
|
where: String,
|
||||||
|
vararg params: String): Int {
|
||||||
|
val values = mapToContentValues(map)
|
||||||
|
return db.update(tableName, values, where, params)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun insert(tableName: String, map: Map<String, Any?>): Long? {
|
||||||
|
val values = mapToContentValues(map)
|
||||||
|
return db.insert(tableName, null, values)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun delete(tableName: String,
|
||||||
|
where: String,
|
||||||
|
vararg params: String) {
|
||||||
|
db.delete(tableName, where, params)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun mapToContentValues(map: Map<String, Any?>): ContentValues {
|
||||||
|
val values = ContentValues()
|
||||||
|
for ((key, value) in map) {
|
||||||
|
when (value) {
|
||||||
|
null -> values.putNull(key)
|
||||||
|
is Int -> values.put(key, value)
|
||||||
|
is Long -> values.put(key, value)
|
||||||
|
is Double -> values.put(key, value)
|
||||||
|
is String -> values.put(key, value)
|
||||||
|
else -> throw IllegalStateException(
|
||||||
|
"unsupported type: " + value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values
|
||||||
|
}
|
||||||
|
}
|
@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 Á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.database;
|
|
||||||
|
|
||||||
import android.content.*;
|
|
||||||
import android.database.sqlite.*;
|
|
||||||
import android.support.annotation.*;
|
|
||||||
|
|
||||||
import org.isoron.androidbase.*;
|
|
||||||
import org.isoron.uhabits.core.database.*;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
|
|
||||||
import javax.inject.*;
|
|
||||||
|
|
||||||
public class AndroidDatabaseOpener implements DatabaseOpener
|
|
||||||
{
|
|
||||||
private Context context;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public AndroidDatabaseOpener(@NonNull @AppContext Context context)
|
|
||||||
{
|
|
||||||
this.context = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Database open(@NonNull File file)
|
|
||||||
{
|
|
||||||
return new AndroidDatabase(
|
|
||||||
SQLiteDatabase.openDatabase(file.getAbsolutePath(), null,
|
|
||||||
SQLiteDatabase.OPEN_READWRITE));
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015-2017 Á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.database
|
||||||
|
|
||||||
|
import android.database.sqlite.*
|
||||||
|
import org.isoron.uhabits.core.database.*
|
||||||
|
import java.io.*
|
||||||
|
import javax.inject.*
|
||||||
|
|
||||||
|
class AndroidDatabaseOpener @Inject constructor() : DatabaseOpener {
|
||||||
|
override fun open(file: File): AndroidDatabase {
|
||||||
|
return AndroidDatabase(SQLiteDatabase.openDatabase(
|
||||||
|
file.absolutePath, null, SQLiteDatabase.OPEN_READWRITE))
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue