From d69895279f4b406d5a03102a1ac44eafb0faef50 Mon Sep 17 00:00:00 2001 From: Negue Date: Thu, 17 Nov 2016 22:55:30 +0100 Subject: [PATCH] activity to choose task type before adding the widget --- Habitica/AndroidManifest.xml | 9 +- .../res/layout/widget_configure_task_list.xml | 7 + .../widget_configure_task_list_item.xml | 21 +++ Habitica/res/values/strings.xml | 2 +- ...get_info.xml => task_list_widget_info.xml} | 3 +- .../habitica/components/AppComponent.java | 3 + .../activities/HabitButtonWidgetActivity.java | 3 - .../ui/activities/TaskListWidgetActivity.java | 164 ++++++++++++++++++ 8 files changed, 205 insertions(+), 7 deletions(-) create mode 100644 Habitica/res/layout/widget_configure_task_list.xml create mode 100644 Habitica/res/layout/widget_configure_task_list_item.xml rename Habitica/res/xml/{dailies_task_widget_info.xml => task_list_widget_info.xml} (68%) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskListWidgetActivity.java 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); +} +