diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml
index 68e82b5d1..465a4ae4a 100644
--- a/Habitica/AndroidManifest.xml
+++ b/Habitica/AndroidManifest.xml
@@ -166,6 +166,11 @@
+
+
+
+
+
@@ -199,12 +204,12 @@
android:resource="@xml/avatar_widget_info" />
+ android:label="@string/widget_task_list">
+ android:resource="@xml/task_list_widget_info" />
diff --git a/Habitica/res/layout/widget_configure_task_list.xml b/Habitica/res/layout/widget_configure_task_list.xml
new file mode 100644
index 000000000..52a5f6d8e
--- /dev/null
+++ b/Habitica/res/layout/widget_configure_task_list.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/widget_configure_task_list_item.xml b/Habitica/res/layout/widget_configure_task_list_item.xml
new file mode 100644
index 000000000..2de284224
--- /dev/null
+++ b/Habitica/res/layout/widget_configure_task_list_item.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index b8851355b..32c9b402c 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -416,7 +416,7 @@ To start, which parts of your life do you want to improve?
Add Reward
You completed all your dailies. Well done!
Habitica Do Habit
- Habitica Dailies
+ Habitica Task List
Habitica Add Task
Google play services could not be found.
Purchase
diff --git a/Habitica/res/xml/dailies_task_widget_info.xml b/Habitica/res/xml/task_list_widget_info.xml
similarity index 68%
rename from Habitica/res/xml/dailies_task_widget_info.xml
rename to Habitica/res/xml/task_list_widget_info.xml
index db0b85187..ba50c211a 100644
--- a/Habitica/res/xml/dailies_task_widget_info.xml
+++ b/Habitica/res/xml/task_list_widget_info.xml
@@ -4,6 +4,7 @@
android:minHeight="120dp"
android:minWidth="120dp"
android:updatePeriodMillis="1800000"
- android:resizeMode="horizontal|vertical">
+ android:resizeMode="horizontal|vertical"
+ android:configure="com.habitrpg.android.habitica.ui.activities.TaskListWidgetActivity">
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java
index 5c228a15b..f40aa70f7 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java
@@ -21,6 +21,7 @@ import com.habitrpg.android.habitica.ui.activities.SetupActivity;
import com.habitrpg.android.habitica.ui.activities.SkillMemberActivity;
import com.habitrpg.android.habitica.ui.activities.SkillTasksActivity;
import com.habitrpg.android.habitica.ui.activities.TaskFormActivity;
+import com.habitrpg.android.habitica.ui.activities.TaskListWidgetActivity;
import com.habitrpg.android.habitica.ui.fragments.GemsPurchaseFragment;
import com.habitrpg.android.habitica.ui.fragments.NewsFragment;
import com.habitrpg.android.habitica.ui.fragments.faq.FAQDetailFragment;
@@ -184,4 +185,6 @@ public interface AppComponent {
void inject(AvatarStatsWidgetProvider avatarStatsWidgetProvider);
void inject(SoundManager soundManager);
+
+ void inject(TaskListWidgetActivity taskListWidgetActivity);
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/HabitButtonWidgetActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/HabitButtonWidgetActivity.java
index aa9e15aa2..bfc3b86d1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/HabitButtonWidgetActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/HabitButtonWidgetActivity.java
@@ -1,6 +1,5 @@
package com.habitrpg.android.habitica.ui.activities;
-import android.app.Activity;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -12,7 +11,6 @@ import android.support.v7.widget.RecyclerView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.ui.adapter.SkillTasksRecyclerViewAdapter;
-import com.habitrpg.android.habitica.widget.AddTaskWidgetProvider;
import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
@@ -38,7 +36,6 @@ public class HabitButtonWidgetActivity extends BaseActivity implements TaskClick
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- ButterKnife.bind(this);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskListWidgetActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskListWidgetActivity.java
new file mode 100644
index 000000000..38bc88165
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskListWidgetActivity.java
@@ -0,0 +1,164 @@
+package com.habitrpg.android.habitica.ui.activities;
+
+import android.appwidget.AppWidgetManager;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.support.v7.preference.PreferenceManager;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.habitrpg.android.habitica.R;
+import com.habitrpg.android.habitica.components.AppComponent;
+import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+public class TaskListWidgetActivity extends BaseActivity implements TaskTypeSelected {
+
+ @BindView(R.id.recyclerView)
+ RecyclerView recyclerView;
+ private int widgetId;
+
+ @Override
+ protected int getLayoutResId() {
+ return R.layout.widget_configure_task_list;
+ }
+
+ @Override
+ protected void injectActivity(AppComponent component) {
+ component.inject(this);
+ }
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ Intent intent = getIntent();
+ Bundle extras = intent.getExtras();
+ if (extras != null) {
+ widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
+ }
+
+ // If this activity was started with an intent without an app widget ID,
+ // finish with an error.
+ if (widgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
+ finish();
+ }
+
+ LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
+
+ if (layoutManager == null) {
+ layoutManager = new LinearLayoutManager(this);
+
+ recyclerView.setLayoutManager(layoutManager);
+ }
+
+ HashMap taskTypesMap = new HashMap<>();
+ taskTypesMap.put(getString(R.string.dailies),"dailies");
+ taskTypesMap.put(getString(R.string.todos),"todos");
+
+ recyclerView.setAdapter(new TaskTypeSelectionViewAdapter(taskTypesMap, this));
+ }
+
+ @Override
+ public void taskTypeSelected(String selectedType) {
+ finishWithSelection(selectedType);
+ }
+
+
+
+ public class TaskTypeSelectionViewAdapter extends RecyclerView.Adapter
+ {
+ private HashMap taskTypes;
+ private TaskTypeSelected taskTypeSelected;
+
+ public TaskTypeSelectionViewAdapter(HashMap taskTypes, TaskTypeSelected taskTypeSelected) {
+
+ this.taskTypes = taskTypes;
+ this.taskTypeSelected = taskTypeSelected;
+ }
+
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.widget_configure_task_list_item, parent, false);
+ return new ViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(ViewHolder holder, int position) {
+ ArrayList keys = new ArrayList<>(taskTypes.keySet());
+
+ String label = keys.get(position);
+ String value = taskTypes.get(label);
+
+ holder.bind(label, value);
+ }
+
+ @Override
+ public int getItemCount() {
+ return taskTypes.size();
+ }
+
+ public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
+ @BindView(R.id.text)
+ TextView textView;
+
+ public ViewHolder(View itemView) {
+ super(itemView);
+
+ itemView.setOnClickListener(this);
+ itemView.setClickable(true);
+
+ ButterKnife.bind(this, itemView);
+ }
+
+ private String key;
+
+ public void bind(String label, String key){
+ textView.setText(label);
+ this.key = key;
+ }
+
+ @Override
+ public void onClick(View view) {
+ taskTypeSelected.taskTypeSelected(key);
+ }
+ }
+ }
+
+ private void finishWithSelection(String selectedTaskType) {
+ storeSelectedTaskType(selectedTaskType);
+
+ Intent resultValue = new Intent();
+ resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
+ setResult(RESULT_OK, resultValue);
+ finish();
+
+ Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, this, HabitButtonWidgetProvider.class);
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {widgetId});
+ sendBroadcast(intent);
+ }
+
+ private void storeSelectedTaskType(String selectedTaskType) {
+ SharedPreferences.Editor preferences = PreferenceManager.getDefaultSharedPreferences(this).edit();
+ preferences.putString("habit_list_widget_" + widgetId, selectedTaskType);
+ preferences.apply();
+ }
+}
+
+interface TaskTypeSelected
+{
+ void taskTypeSelected(String selectedType);
+}
+