activity to choose task type before adding the widget

This commit is contained in:
Negue 2016-11-17 22:55:30 +01:00
parent 51aca742f4
commit d69895279f
8 changed files with 205 additions and 7 deletions

View file

@ -166,6 +166,11 @@
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
<activity android:name=".ui.activities.TaskListWidgetActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
<service
android:name=".helpers.notifications.HabiticaFirebaseMessagingService">
@ -199,12 +204,12 @@
android:resource="@xml/avatar_widget_info" />
</receiver>
<receiver android:name=".widget.DailiesWidgetProvider"
android:label="@string/widget_dailies">
android:label="@string/widget_task_list">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/dailies_task_widget_info" />
android:resource="@xml/task_list_widget_info" />
</receiver>
<receiver android:name=".widget.HabitButtonWidgetProvider"
android:label="@string/widget_habit_button">

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recyclerView"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/CardView.Default"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
style="@style/CardContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</android.support.v7.widget.CardView>

View file

@ -416,7 +416,7 @@ To start, which parts of your life do you want to improve?</string>
<string name="add_reward">Add Reward</string>
<string name="all_dailies_completed">You completed all your dailies. Well done!</string>
<string name="widget_habit_button">Habitica Do Habit</string>
<string name="widget_dailies">Habitica Dailies</string>
<string name="widget_task_list">Habitica Task List</string>
<string name="widget_add_task">Habitica Add Task</string>
<string name="google_services_missing">Google play services could not be found.</string>
<string name="gem.purchase.toolbartitle">Purchase</string>

View file

@ -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">
</appwidget-provider>

View file

@ -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);
}

View file

@ -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();

View file

@ -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<String, String> 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<TaskTypeSelectionViewAdapter.ViewHolder>
{
private HashMap<String, String> taskTypes;
private TaskTypeSelected taskTypeSelected;
public TaskTypeSelectionViewAdapter(HashMap<String, String> 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<String> 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);
}