TodayForm dynamic fragment now fully functional: allows selecting tasks form the task list, allows text filtering

Creation of an ArrayAdapter to handle selection for the above
Moved code out of Today Activity into Today Form where it belonged
Replaced TaskFragment Coordinator Layout with a Frame Layout
Re-moved the Floating Action Button into the Activities out of Task Fragment
Simplification of Preferences
This commit is contained in:
bg45
2017-03-22 17:38:59 -04:00
parent 51439ac8b7
commit 34cb77d6c4
23 changed files with 269 additions and 92 deletions

View File

@@ -0,0 +1,10 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AndroidLintHardcodedText" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="LoggerInitializedWithForeignClass" enabled="false" level="WARNING" enabled_by_default="false">
<option name="loggerClassName" value="org.apache.log4j.Logger,org.slf4j.LoggerFactory,org.apache.commons.logging.LogFactory,java.util.logging.Logger" />
<option name="loggerFactoryMethodName" value="getLogger,getLogger,getLog,getLogger" />
</inspection_tool>
</profile>
</component>

View File

@@ -0,0 +1,7 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="PROJECT_PROFILE" value="Project Default" />
<option name="USE_PROJECT_PROFILE" value="true" />
<version value="1.0" />
</settings>
</component>

View File

@@ -1,25 +1,29 @@
package com.wismna.geoffroy.donext.activities;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.preference.PreferenceManager;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.wismna.geoffroy.donext.R;
import com.wismna.geoffroy.donext.dao.Task;
import com.wismna.geoffroy.donext.adapters.TaskRecyclerViewAdapter;
import com.wismna.geoffroy.donext.database.TaskDataAccess;
import com.wismna.geoffroy.donext.fragments.TodayFormDialogFragment;
import java.util.List;
public class TodayActivity extends AppCompatActivity
implements TodayFormDialogFragment.TodayTaskListener {
private boolean mIsLargeLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -33,18 +37,54 @@ public class TodayActivity extends AppCompatActivity
if (ab != null) {
// Enable the Up button
ab.setDisplayHomeAsUpEnabled(true);
ab.setHomeButtonEnabled(true);
}
mIsLargeLayout = getResources().getBoolean(R.bool.large_layout);
}
public void onNewTaskClick(View view) {
List<Task> tasks;
try(TaskDataAccess taskDataAccess = new TaskDataAccess(this)) {
tasks = taskDataAccess.getAllTasks();
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_today, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem displayLayoutItem = menu.findItem(R.id.action_changeLayout);
if (displayLayoutItem == null) return false;
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String layoutType = sharedPref.getString("pref_conf_task_layout", "1");
switch (layoutType) {
case "1" :
displayLayoutItem.setIcon(R.drawable.ic_list_white_24dp);
break;
case "2" :
displayLayoutItem.setIcon(R.drawable.ic_view_list_white_24dp);
break;
}
return super.onPrepareOptionsMenu(menu);
}
/** Called when the user clicks on the Change Layout button */
public void changeLayout(MenuItem item) {
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPref.edit();
String layoutTypeString = sharedPref.getString("pref_conf_task_layout", "1");
int layoutType = Integer.valueOf(layoutTypeString);
editor.putString("pref_conf_task_layout", String.valueOf(layoutType % 2 + 1));
editor.apply();
// Update the ViewPagerAdapter to refresh all tabs
//mSectionsPagerAdapter.notifyDataSetChanged();
// Invalidate the menu to redraw the icon
invalidateOptionsMenu();
}
public void onNewTaskClick(View view) {
TodayFormDialogFragment taskDialogFragment =
TodayFormDialogFragment.newInstance(tasks, TodayActivity.this);
TodayFormDialogFragment.newInstance(this, TodayActivity.this);
// Set some configuration values for the dialog
Bundle args = new Bundle();
@@ -70,7 +110,18 @@ public class TodayActivity extends AppCompatActivity
}
@Override
public void onTodayTaskDialogPositiveClick(DialogFragment dialog, View dialogView) {
public void onTodayTaskDialogPositiveClick(View dialogView) {
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setEnabled(false);
}
@Override
public void onTodayTasksUpdated() {
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setEnabled(true);
try (TaskDataAccess taskDataAccess = new TaskDataAccess(this)) {
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.task_list_view);
((TaskRecyclerViewAdapter)recyclerView.getAdapter()).setItems(taskDataAccess.getTodayTasks());
}
}
}

View File

@@ -22,7 +22,7 @@ import java.util.List;
*/
public class TaskRecyclerViewAdapter extends RecyclerView.Adapter<TaskRecyclerViewAdapter.SimpleViewHolder> {
private final List<Task> mValues;
private List<Task> mValues;
private int viewType;
public TaskRecyclerViewAdapter(List<Task> items, int viewType) {
@@ -112,11 +112,15 @@ public class TaskRecyclerViewAdapter extends RecyclerView.Adapter<TaskRecyclerVi
return count;
}
public void setItems(List<Task> tasks) {
this.mValues = tasks;
notifyDataSetChanged();
}
public Task getItem(int position) {
return mValues.get(position);
}
class SimpleViewHolder extends RecyclerView.ViewHolder {
final View mView;
final TextView mIdView;

View File

@@ -0,0 +1,50 @@
package com.wismna.geoffroy.donext.adapters;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.wismna.geoffroy.donext.R;
import com.wismna.geoffroy.donext.dao.Task;
import java.util.List;
/**
* Created by bg45 on 2017-03-22.
* Custom array adapter for the Today Task list view
*/
public class TodayArrayAdapter extends ArrayAdapter<Task> {
public TodayArrayAdapter(@NonNull Context context, @NonNull List<Task> objects) {
super(context, R.layout.list_task_item, objects);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
//return super.getView(position, convertView, parent);
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_task_item, parent, false);
}
TextView titleView = (TextView) convertView.findViewById(R.id.task_list_item_title);
Task item = this.getItem(position);
if (item != null) {
titleView.setText(item.getName());
if (item.isToday()) {
titleView.setTypeface(titleView.getTypeface(), Typeface.BOLD);
titleView.setBackgroundColor(Color.parseColor("#B2DFDB"));
} else {
titleView.setTypeface(Typeface.DEFAULT);
titleView.setBackgroundColor(Color.WHITE);
}
}
return convertView;
}
}

View File

@@ -90,6 +90,13 @@ public class TaskDataAccess implements AutoCloseable {
" AND " + DatabaseHelper.TASKS_COLUMN_LIST + " = " + taskListId, null);
}
public int updateTodayTasks(long id, boolean isTodayList){
ContentValues contentValues = new ContentValues();
contentValues.put(DatabaseHelper.TASKS_COLUMN_TODAYDATE, isTodayList? LocalDate.now().toString() : "");
return database.update(DatabaseHelper.TASKS_TABLE_NAME, contentValues,
DatabaseHelper.COLUMN_ID + " == " + id, null);
}
public List<Task> getAllTasks() {
Cursor cursor = database.query(DatabaseHelper.TASKS_TABLE_NAME, taskColumns,
DatabaseHelper.TASKS_COLUMN_DONE + " = " + 0 +

View File

@@ -110,10 +110,15 @@ public abstract class DynamicDialogFragment extends DialogFragment {
@Override
public void onPrepareOptionsMenu(Menu menu) {
Bundle args = getArguments();
// Show the neutral button if needed
if (!mHasNeutralButton) {
menu.removeItem(R.id.menu_neutral_button);
}
else {
menu.findItem(R.id.menu_neutral_button).setTitle(args.getString("button_neutral"));
}
menu.findItem(R.id.menu_positive_button).setTitle(args.getString("button_positive"));
super.onPrepareOptionsMenu(menu);
}

View File

@@ -46,7 +46,7 @@ import java.util.List;
public class TasksFragment extends Fragment implements
TaskFormDialogFragment.NewTaskListener,
ConfirmDialogFragment.ConfirmDialogListener,
TaskTouchHelper.TaskTouchHelperAdapter {
TaskTouchHelper.TaskTouchHelperAdapter{
public interface TaskChangedAdapter {
void onTaskListChanged(Task task, int tabPosition);

View File

@@ -1,18 +1,22 @@
package com.wismna.geoffroy.donext.fragments;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import com.wismna.geoffroy.donext.R;
import com.wismna.geoffroy.donext.adapters.TodayArrayAdapter;
import com.wismna.geoffroy.donext.dao.Task;
import com.wismna.geoffroy.donext.database.TaskDataAccess;
import org.joda.time.LocalDate;
import java.util.List;
@@ -26,16 +30,20 @@ public class TodayFormDialogFragment extends DynamicDialogFragment {
* implement this interface in order to receive event callbacks.
* Each method passes the DialogFragment in case the host needs to query it. */
public interface TodayTaskListener {
void onTodayTaskDialogPositiveClick(DialogFragment dialog, View dialogView);
void onTodayTaskDialogPositiveClick(View dialogView);
void onTodayTasksUpdated();
}
private TodayFormDialogFragment.TodayTaskListener mListener;
private List<Task> tasks;
public static TodayFormDialogFragment newInstance(List<Task> tasks, TodayTaskListener todayTaskListener) {
public static TodayFormDialogFragment newInstance(Context context, TodayTaskListener todayTaskListener) {
TodayFormDialogFragment fragment = new TodayFormDialogFragment();
fragment.tasks = tasks;
fragment.mListener = todayTaskListener;
// TODO: put this in an AsyncTask
try(TaskDataAccess taskDataAccess = new TaskDataAccess(context)) {
fragment.tasks = taskDataAccess.getAllTasks();
}
fragment.setRetainInstance(true);
return fragment;
}
@@ -59,15 +67,17 @@ public class TodayFormDialogFragment extends DynamicDialogFragment {
private void setLayoutValues(View view) {
EditText editText = (EditText) view.findViewById(R.id.today_search);
ListView listView = (ListView) view.findViewById(R.id.today_tasks);
final ArrayAdapter<Task> adapter = new ArrayAdapter<>(getActivity(), R.layout.list_task_item, tasks);
final ListView listView = (ListView) view.findViewById(R.id.today_tasks);
final TodayArrayAdapter adapter = new TodayArrayAdapter(getActivity(), tasks);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Set as selected
Task task = tasks.get(position);
view.setSelected(!view.isSelected());
// Set Today date for the task
Task task = adapter.getItem(position);
if (task == null) return;
task.setTodayDate(task.isToday() ? "" : LocalDate.now().toString());
adapter.notifyDataSetChanged();
}
});
editText.addTextChangedListener(new TextWatcher() {
@@ -90,7 +100,10 @@ public class TodayFormDialogFragment extends DynamicDialogFragment {
@Override
protected void onPositiveButtonClick(View view) {
mListener.onTodayTaskDialogPositiveClick(TodayFormDialogFragment.this, view);
mListener.onTodayTaskDialogPositiveClick(view);
// TODO: find a way to filter this list to only get changed tasks
new UpdateTasks().execute(tasks.toArray(new Task[tasks.size()]));
dismiss();
}
@Override
@@ -102,4 +115,25 @@ public class TodayFormDialogFragment extends DynamicDialogFragment {
protected void onNegativeButtonClick() {
dismiss();
}
}
private class UpdateTasks extends AsyncTask<Task, Void, Integer> {
@Override
protected Integer doInBackground(Task... params) {
int elementsUpdated = 0;
try (TaskDataAccess taskDataAccess = new TaskDataAccess(getActivity(), TaskDataAccess.MODE.WRITE)) {
for (Task task :
params) {
taskDataAccess.updateTodayTasks(task.getId(), task.isToday());
elementsUpdated++;
}
}
return elementsUpdated;
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
mListener.onTodayTasksUpdated();
}
}
}

View File

@@ -8,7 +8,7 @@
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.wismna.geoffroy.donext.activities.AboutActivity">
tools:context=".activities.AboutActivity">
<TextView
android:id="@+id/version_donext"
android:layout_width="wrap_content"

View File

@@ -51,4 +51,13 @@
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="@dimen/fab_margin"
android:onClick="onNewTaskClick"
android:src="@drawable/ic_add_white_24dp" />
</android.support.design.widget.CoordinatorLayout>

View File

@@ -4,19 +4,14 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.wismna.geoffroy.donext.activities.TodayActivity">
android:fitsSystemWindows="true"
tools:context=".activities.TodayActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
<include layout="@layout/toolbar" android:id="@+id/toolbar" />
</android.support.design.widget.AppBarLayout>
@@ -28,4 +23,13 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:layout="@layout/fragment_tasks" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="@dimen/fab_margin"
android:onClick="onNewTaskClick"
android:src="@drawable/ic_add_white_24dp" />
</android.support.design.widget.CoordinatorLayout>

View File

@@ -4,6 +4,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"
android:focusable="true"
android:focusableInTouchMode="true"
android:background="@android:color/background_light" >
<EditText
android:id="@+id/today_search"
@@ -17,7 +19,9 @@
android:id="@+id/today_tasks"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textFilterEnabled="true">
android:textFilterEnabled="true"
android:drawSelectorOnTop="true"
android:choiceMode="multipleChoice">
</ListView>
</LinearLayout>

View File

@@ -10,6 +10,7 @@
android:theme="@style/AppTheme.AppBarOverlay">
<include layout="@layout/toolbar" android:id="@+id/dialog_toolbar" />
</android.support.design.widget.AppBarLayout>
<!-- This will contain the actual contents of the dialog -->
<FrameLayout
android:id="@+id/dynamic_fragment_content"
android:layout_width="match_parent"

View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
@@ -63,14 +64,4 @@
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="@dimen/fab_margin"
android:onClick="onNewTaskClick"
android:src="@drawable/ic_add_white_24dp" />
</android.support.design.widget.CoordinatorLayout>
</FrameLayout>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/task_list_item_title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp"

View File

@@ -4,11 +4,11 @@
<item
android:id="@+id/menu_positive_button"
android:orderInCategory="100"
android:title="@string/new_task_save"
android:title="@android:string/ok"
app:showAsAction="always"/>
<item
android:id="@+id/menu_neutral_button"
android:orderInCategory="50"
android:title="@string/new_task_delete"
android:title="@android:string/untitled"
app:showAsAction="ifRoom"/>
</menu>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_changeLayout"
android:orderInCategory="20"
android:title="@string/action_changeLayout"
android:onClick="changeLayout"
android:icon="@drawable/ic_view_list_white_24dp"
app:showAsAction="always" />
</menu>

View File

@@ -6,6 +6,6 @@
</string-array>
<string-array name="settings_today_actions">
<item>Terminer</item>
<item>Supprimer</item>
<item>Réinitialiser</item>
</string-array>
</resources>

View File

@@ -23,7 +23,7 @@
<string name="new_task_priority_low">Basse</string>
<string name="new_task_priority_normal">Normale</string>
<string name="new_task_save">Enregistrer</string>
<string name="settings_category_tasklists">Liste de tâche</string>
<string name="settings_category_tasklists">Listes de tâche</string>
<string name="settings_category_tasks">Tâches</string>
<string name="settings_confirm_delete">Confirmation de suppression</string>
<string name="settings_confirm_donext">Confirmation sur suivant</string>
@@ -59,9 +59,9 @@
<string name="task_total">%1$d tâche%2$s</string>
<string name="task_total_cycles">%1$d cycle%2$s</string>
<string name="title_activity_task_list">TaskListActivity</string>
<string name="settings_today_title">Liste Aujourd\'hui</string>
<string name="settings_today_enable">Activer la liste Aujourd\'hui?</string>
<string name="settings_today_desc">La liste Aujourd\'hui est une liste spéciale, dans laquelle les tâches n\'existent que pour la journée en cours. Chaque jour, cette liste est réinitialisée.</string>
<string name="settings_today_title">Vue Aujourd\'hui</string>
<string name="settings_today_enable">Activer la vue Aujourd\'hui?</string>
<string name="settings_today_desc">La vue Aujourd\'hui est une façon particulière d\'organiser vos tâches. Choisissez quelles tâches vous voulez faire dans la journée et elles apparaîtront dans cette vue. À la fin de la journée, cette vue est réinitialisée.</string>
<string name="task_list_today">Aujourd\'hui</string>
<string name="task_list_today_list_error">Le nom \"Aujourd\'hui\" est réservé. Vous pouvez activer la liste Aujourd\'hui dans les paramètres.</string>
<string name="settings_today_action_title">Action à entreprendre à la fin de la journée:</string>
@@ -70,6 +70,6 @@
<string name="action_todayList">Vue Aujourd\'hui</string>
<string name="title_activity_today">Aujourd\'hui</string>
<string name="new_task_today">Ajouter la tâche à la vue Aujourd\'hui?</string>
<string name="today_search_hint">Rechercher...</string>
<string name="today_search_hint">Rechercher</string>
<string name="action_today_select">Choisissez des tâches</string>
</resources>

View File

@@ -19,7 +19,7 @@
</string-array>
<string-array name="settings_today_actions">
<item>Done</item>
<item>Delete</item>
<item>Reset</item>
</string-array>
<string-array name="settings_today_action_values" translatable="false">
<item>1</item>

View File

@@ -75,9 +75,9 @@
<string name="settings_confirm_markdone">Confirm on done?</string>
<string name="settings_confirm_delete">Confirm on delete?</string>
<string name="settings_task_layout">Task layout</string>
<string name="settings_today_title">Today list</string>
<string name="settings_today_enable">Enable Today list?</string>
<string name="settings_today_desc">The Today list is a special kind of list, in which tasks only exist for the current day. Each day, the list is reset.</string>
<string name="settings_today_title">Today view</string>
<string name="settings_today_enable">Enable Today view?</string>
<string name="settings_today_desc">The Today view is a special way of showing your tasks. Select which tasks you want to do during the day and they will show up in this view. At the end of the day, the view is reset.</string>
<string name="settings_today_action_title">Action at the end of the day</string>
<string name="settings_max_lists_label">Maximum number of lists</string>
@@ -85,13 +85,11 @@
<string name="about_version_donext">DoNext version %s</string>
<string name="about_version_android">Android version %d</string>
<string name="about_link" translatable="false">https://github.com/wismna</string>
<string name="action_todayList">Today View</string>
<string name="title_activity_today">Today</string>
<string name="new_task_today">Add task to Today View?</string>
<string name="title_activity_main2">Main2Activity</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="today_search_hint">Search...</string>
<!-- Strings related to Today -->
<string name="title_activity_today">Today</string>
<string name="action_todayList">Today View</string>
<string name="new_task_today">Add task to Today View?</string>
<string name="today_search_hint">Search…</string>
<string name="action_today_select">Select tasks</string>
</resources>

View File

@@ -27,30 +27,20 @@
android:key="pref_conf_tasklist_del"
android:title="@string/settings_confirm_delete"
android:defaultValue="true" />
<ListPreference
android:key="pref_conf_max_lists"
android:title="@string/settings_max_lists_label"
android:dialogTitle="@string/settings_max_lists_label"
android:entries="@array/settings_max_lists_number"
android:entryValues="@array/settings_max_lists_number"
android:summary="%s"
android:defaultValue="5" />
<PreferenceScreen
android:title="@string/settings_today_title">
<PreferenceCategory
android:title="@string/settings_today_title" />
<SwitchPreference
android:key="pref_conf_today_enable"
android:title="@string/settings_today_enable"
android:summary="@string/settings_today_desc"/>
<ListPreference
android:key="pref_conf_today_action"
android:title="@string/settings_today_action_title"
android:dialogTitle="@string/settings_today_title"
android:entries="@array/settings_today_actions"
android:entryValues="@array/settings_today_action_values"
android:summary="%s"
android:defaultValue="2" />
</PreferenceScreen>
<ListPreference
android:key="pref_conf_max_lists"
android:title="@string/settings_max_lists_label"
android:dialogTitle="@string/settings_max_lists_label"
android:entries="@array/settings_max_lists_number"
android:entryValues="@array/settings_max_lists_number"
android:summary="%s"
android:defaultValue="5" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/settings_today_title">
<SwitchPreference
android:key="pref_conf_today_enable"
android:title="@string/settings_today_enable"
android:summary="@string/settings_today_desc"/>
</PreferenceCategory>
</PreferenceScreen>