mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
activity to choose task type before adding the widget
This commit is contained in:
parent
51aca742f4
commit
d69895279f
8 changed files with 205 additions and 7 deletions
|
|
@ -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">
|
||||
|
|
|
|||
7
Habitica/res/layout/widget_configure_task_list.xml
Normal file
7
Habitica/res/layout/widget_configure_task_list.xml
Normal 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>
|
||||
21
Habitica/res/layout/widget_configure_task_list_item.xml
Normal file
21
Habitica/res/layout/widget_configure_task_list_item.xml
Normal 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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
Loading…
Reference in a new issue