First item in recycler view has emphasis

Removed task layout change functionality
Moved all informative text to the bottom
Priority now shows icons instead of changing text color and weight
Corrected bug when editing any item that would replace first item information
This commit is contained in:
BONNEVILLE Geoffroy
2018-11-08 18:38:54 +01:00
parent 2aa5ff4cdf
commit 2656f3d253
20 changed files with 215 additions and 153 deletions

47
.idea/assetWizardSettings.xml generated Normal file
View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="WizardSettings">
<option name="children">
<map>
<entry key="vectorWizard">
<value>
<PersistentState>
<option name="children">
<map>
<entry key="vectorAssetStep">
<value>
<PersistentState>
<option name="children">
<map>
<entry key="clipartAsset">
<value>
<PersistentState>
<option name="values">
<map>
<entry key="url" value="jar:file:/C:/Program%20Files/Android/Android%20Studio/plugins/android/lib/android.jar!/images/material_design_icons/notification/ic_priority_high_black_24dp.xml" />
</map>
</option>
</PersistentState>
</value>
</entry>
</map>
</option>
<option name="values">
<map>
<entry key="color" value="b5151a" />
<entry key="outputName" value="ic_priority_high_red_24dp" />
<entry key="sourceFile" value="C:\Users\GBE" />
</map>
</option>
</PersistentState>
</value>
</entry>
</map>
</option>
</PersistentState>
</value>
</entry>
</map>
</option>
</component>
</project>

Binary file not shown.

View File

@@ -9,7 +9,7 @@ android {
minSdkVersion 19 minSdkVersion 19
targetSdkVersion 28 targetSdkVersion 28
versionCode 27 versionCode 27
versionName "1.6" versionName "1.7"
} }
buildTypes { buildTypes {
release { release {

View File

@@ -75,22 +75,6 @@ public class MainActivity extends AppCompatActivity {
startActivity(intent); startActivity(intent);
} }
/** 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.parseInt(layoutTypeString);
editor.putString("pref_conf_task_layout", String.valueOf(layoutType % 2 + 1));
editor.apply();
// Update the ViewPagerAdapter to refresh all tabs
ViewPager viewPager = getMainFragmentViewPager();
if (viewPager != null) {
Objects.requireNonNull(viewPager.getAdapter()).notifyDataSetChanged();
}
}
/** Called when the user clicks the Edit Lists button */ /** Called when the user clicks the Edit Lists button */
public void openTaskLists(MenuItem menuItem) { public void openTaskLists(MenuItem menuItem) {
FragmentManager fragmentManager = getSupportFragmentManager(); FragmentManager fragmentManager = getSupportFragmentManager();

View File

@@ -1,15 +1,12 @@
package com.wismna.geoffroy.donext.activities; package com.wismna.geoffroy.donext.activities;
import android.content.SharedPreferences;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.design.widget.FloatingActionButton; import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
@@ -21,6 +18,7 @@ import com.wismna.geoffroy.donext.fragments.TodayFormDialogFragment;
import org.joda.time.LocalDate; import org.joda.time.LocalDate;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
public class TodayActivity extends ToolBarActivityBase public class TodayActivity extends ToolBarActivityBase
implements TodayFormDialogFragment.TodayTaskListener { implements TodayFormDialogFragment.TodayTaskListener {
@@ -66,24 +64,10 @@ public class TodayActivity extends ToolBarActivityBase
fab.setEnabled(true); fab.setEnabled(true);
try (TaskDataAccess taskDataAccess = new TaskDataAccess(this)) { try (TaskDataAccess taskDataAccess = new TaskDataAccess(this)) {
RecyclerView recyclerView = findViewById(R.id.task_list_view); RecyclerView recyclerView = findViewById(R.id.task_list_view);
((TaskRecyclerViewAdapter)recyclerView.getAdapter()).setItems(taskDataAccess.getTodayTasks()); ((TaskRecyclerViewAdapter)Objects.requireNonNull(recyclerView.getAdapter())).setItems(taskDataAccess.getTodayTasks());
} }
} }
/** 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.parseInt(layoutTypeString);
editor.putString("pref_conf_task_layout", String.valueOf(layoutType % 2 + 1));
editor.apply();
// TODO: find a less ugly way to refresh the list
// Update the ViewPagerAdapter to refresh all tabs
this.recreate();
}
public void onNewTaskClick(View view) { public void onNewTaskClick(View view) {
TodayFormDialogFragment taskDialogFragment = TodayFormDialogFragment taskDialogFragment =
TodayFormDialogFragment.newInstance(TodayActivity.this); TodayFormDialogFragment.newInstance(TodayActivity.this);

View File

@@ -21,48 +21,53 @@ import java.util.List;
/** /**
* {@link RecyclerView.Adapter} that can display a {@link Task}. * {@link RecyclerView.Adapter} that can display a {@link Task}.
*/ */
public class TaskRecyclerViewAdapter extends RecyclerView.Adapter<TaskRecyclerViewAdapter.SimpleViewHolder> { public class TaskRecyclerViewAdapter extends RecyclerView.Adapter<TaskRecyclerViewAdapter.StandardViewHolder> {
private List<Task> mValues; private List<Task> mValues;
private int viewType;
private boolean mIsToday; private boolean mIsToday;
private boolean mIsHistory;
public TaskRecyclerViewAdapter(List<Task> items, int viewType, boolean isToday) { public TaskRecyclerViewAdapter(List<Task> items, boolean isToday, boolean isHistory) {
mValues = items; mValues = items;
mIsToday = isToday; mIsToday = isToday;
this.viewType = viewType; mIsHistory = isHistory;
} }
@NonNull @NonNull
@Override @Override
public SimpleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public StandardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view; View view = LayoutInflater.from(parent.getContext())
switch (viewType) .inflate(viewType, parent, false);
{ return new StandardViewHolder(view);
case 2:
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fragment_task_detailed, parent, false);
return new DetailedViewHolder(view);
default:
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fragment_task_simple, parent, false);
return new SimpleViewHolder(view);
}
} }
@Override @Override
public void onBindViewHolder(@NonNull final SimpleViewHolder holder, int position) { public void onBindViewHolder(@NonNull final StandardViewHolder holder, int position) {
// Set basic information // Set basic information
holder.mItem = mValues.get(position); holder.mItem = mValues.get(position);
holder.mIdView.setText(String.valueOf(holder.mItem.getId())); holder.mIdView.setText(String.valueOf(holder.mItem.getId()));
holder.mCycleView.setText(String.valueOf(holder.mItem.getCycle())); holder.mCycleView.setText(String.valueOf(holder.mItem.getCycle()));
holder.mTitleView.setText(holder.mItem.getName()); holder.mTitleView.setText(holder.mItem.getName());
// Set optional description holder.mDescriptionView.setText(holder.mItem.getDescription());
if (holder instanceof DetailedViewHolder)
((DetailedViewHolder)holder).mDescriptionView.setText(holder.mItem.getDescription());
// Set task rendering // Set task rendering
if (position > 0) {
holder.mTitleView.setTypeface(Typeface.DEFAULT); holder.mTitleView.setTypeface(Typeface.DEFAULT);
holder.mTitleView.setTextColor(Color.BLACK); holder.mTitleView.setTextColor(Color.BLACK);
}
// Set priority
switch (holder.mItem.getPriority())
{
case 0:
holder.mIconView.setImageResource(R.drawable.ic_low_priority_lightgray_24dp);
break;
case 2:
holder.mIconView.setImageResource(R.drawable.ic_priority_high_red_24dp);
break;
default:
holder.mIconView.setImageDrawable(null);
break;
}
// Additional information will not be displayed in Today view // Additional information will not be displayed in Today view
if (mIsToday) return; if (mIsToday) return;
@@ -74,21 +79,7 @@ public class TaskRecyclerViewAdapter extends RecyclerView.Adapter<TaskRecyclerVi
holder.mIconView.setImageResource(R.drawable.ic_close_light); holder.mIconView.setImageResource(R.drawable.ic_close_light);
else if(dueDate != null && dueDate.isBefore(LocalDate.now())) else if(dueDate != null && dueDate.isBefore(LocalDate.now()))
holder.mIconView.setImageResource(R.drawable.ic_access_alarm); holder.mIconView.setImageResource(R.drawable.ic_access_alarm);
int priority = holder.mItem.getPriority();
// Set priority
switch (priority)
{
case 0:
holder.mTitleView.setTextColor(Color.LTGRAY);
break;
case 2:
holder.mTitleView.setTypeface(holder.mTitleView.getTypeface(), Typeface.BOLD);
break;
default:
// No special styles to apply
break;
}
} }
@Override @Override
@@ -103,7 +94,8 @@ public class TaskRecyclerViewAdapter extends RecyclerView.Adapter<TaskRecyclerVi
@Override @Override
public int getItemViewType(int position) { public int getItemViewType(int position) {
return viewType; if (position == 0 && !mIsHistory) return R.layout.fragment_task_first;
return R.layout.fragment_task_detailed;
} }
public void add(Task item, int position) { public void add(Task item, int position) {
@@ -138,15 +130,16 @@ public class TaskRecyclerViewAdapter extends RecyclerView.Adapter<TaskRecyclerVi
return mValues.get(position); return mValues.get(position);
} }
class SimpleViewHolder extends RecyclerView.ViewHolder { class StandardViewHolder extends RecyclerView.ViewHolder {
final View mView; final View mView;
final TextView mIdView; final TextView mIdView;
final ImageView mIconView; final ImageView mIconView;
final TextView mCycleView; final TextView mCycleView;
final TextView mTitleView; final TextView mTitleView;
final TextView mDescriptionView;
Task mItem; Task mItem;
SimpleViewHolder(View view) { StandardViewHolder(View view) {
super(view); super(view);
mView = view; mView = view;
@@ -154,22 +147,10 @@ public class TaskRecyclerViewAdapter extends RecyclerView.Adapter<TaskRecyclerVi
mIconView = view.findViewById(R.id.task_icon); mIconView = view.findViewById(R.id.task_icon);
mCycleView = view.findViewById(R.id.task_cycle); mCycleView = view.findViewById(R.id.task_cycle);
mTitleView = view.findViewById(R.id.task_name); mTitleView = view.findViewById(R.id.task_name);
}
@Override
public String toString() {
return super.toString() + " '" + mTitleView.getText() + "'";
}
}
private class DetailedViewHolder extends SimpleViewHolder {
private final TextView mDescriptionView;
private DetailedViewHolder(View view) {
super(view);
mDescriptionView = view.findViewById(R.id.task_description); mDescriptionView = view.findViewById(R.id.task_description);
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return super.toString() + " '" + mTitleView.getText() + "'"; return super.toString() + " '" + mTitleView.getText() + "'";

View File

@@ -38,12 +38,12 @@ import com.wismna.geoffroy.donext.database.TaskDataAccess;
import com.wismna.geoffroy.donext.database.TaskListDataAccess; import com.wismna.geoffroy.donext.database.TaskListDataAccess;
import com.wismna.geoffroy.donext.helpers.TaskTouchHelper; import com.wismna.geoffroy.donext.helpers.TaskTouchHelper;
import com.wismna.geoffroy.donext.listeners.RecyclerItemClickListener; import com.wismna.geoffroy.donext.listeners.RecyclerItemClickListener;
import com.wismna.geoffroy.donext.widgets.DividerItemDecoration;
import com.wismna.geoffroy.donext.widgets.NoScrollingLayoutManager; import com.wismna.geoffroy.donext.widgets.NoScrollingLayoutManager;
import org.joda.time.LocalDate; import org.joda.time.LocalDate;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* A fragment representing a list of Items. * A fragment representing a list of Items.
@@ -106,14 +106,10 @@ public class TasksFragment extends Fragment implements
recyclerView = view.findViewById(R.id.task_list_view); recyclerView = view.findViewById(R.id.task_list_view);
recyclerView.setLayoutManager(isHistory ? new LinearLayoutManager(context) : new NoScrollingLayoutManager(context)); recyclerView.setLayoutManager(isHistory ? new LinearLayoutManager(context) : new NoScrollingLayoutManager(context));
// Set RecyclerView Adapter
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
// Get all tasks // Get all tasks
try (TaskDataAccess taskDataAccess = new TaskDataAccess(view.getContext())) { try (TaskDataAccess taskDataAccess = new TaskDataAccess(view.getContext())) {
taskRecyclerViewAdapter = new TaskRecyclerViewAdapter( taskRecyclerViewAdapter = new TaskRecyclerViewAdapter(
isTodayView? taskDataAccess.getTodayTasks() : taskDataAccess.getAllTasksFromList(taskListId, isHistory), isTodayView? taskDataAccess.getTodayTasks() : taskDataAccess.getAllTasksFromList(taskListId, isHistory), isTodayView, isHistory);
Integer.valueOf(sharedPref.getString("pref_conf_task_layout", "1")), isTodayView);
} }
recyclerView.setAdapter(taskRecyclerViewAdapter); recyclerView.setAdapter(taskRecyclerViewAdapter);
@@ -142,13 +138,14 @@ public class TasksFragment extends Fragment implements
args.putString("button_negative", args.putString("button_negative",
isHistory ? getString(R.string.task_list_ok) : getString(R.string.new_task_cancel)); isHistory ? getString(R.string.task_list_ok) : getString(R.string.new_task_cancel));
args.putString("button_neutral", getString(R.string.new_task_delete)); args.putString("button_neutral", getString(R.string.new_task_delete));
args.putInt("position", position);
// Set current tab value to new task dialog // Set current tab value to new task dialog
ViewPager viewPager = getActivity().findViewById(R.id.container); ViewPager viewPager = Objects.requireNonNull(getActivity()).findViewById(R.id.container);
List<TaskList> taskLists; List<TaskList> taskLists;
Task task = taskRecyclerViewAdapter.getItem(position); Task task = taskRecyclerViewAdapter.getItem(position);
if (viewPager != null) { if (viewPager != null) {
taskLists = ((SectionsPagerAdapter) viewPager.getAdapter()).getAllItems(); taskLists = ((SectionsPagerAdapter) Objects.requireNonNull(viewPager.getAdapter())).getAllItems();
args.putInt("list", viewPager.getCurrentItem()); args.putInt("list", viewPager.getCurrentItem());
} }
else { else {
@@ -215,7 +212,7 @@ public class TasksFragment extends Fragment implements
// Update remaining tasks - only when needed // Update remaining tasks - only when needed
TextView remainingTasksView = view.findViewById(R.id.remaining_task_count); TextView remainingTasksView = view.findViewById(R.id.remaining_task_count);
NoScrollingLayoutManager noScrollingLayoutManager = (NoScrollingLayoutManager)layoutManager; NoScrollingLayoutManager noScrollingLayoutManager = (NoScrollingLayoutManager)layoutManager;
int remainingTaskCount = totalTasks - noScrollingLayoutManager.findLastVisibleItemPosition() - 1; int remainingTaskCount = totalTasks - (noScrollingLayoutManager != null ? noScrollingLayoutManager.findLastVisibleItemPosition() : 1) - 1;
if (remainingTaskCount == 0) remainingTasksView.setText(""); if (remainingTaskCount == 0) remainingTasksView.setText("");
else remainingTasksView.setText(resources.getQuantityString(R.plurals.task_remaining, remainingTaskCount, remainingTaskCount)); else remainingTasksView.setText(resources.getQuantityString(R.plurals.task_remaining, remainingTaskCount, remainingTaskCount));
@@ -223,7 +220,7 @@ public class TasksFragment extends Fragment implements
} }
}); });
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity())); //recyclerView.addItemDecoration(new DividerItemDecoration(getActivity()));
return view; return view;
} }
@@ -319,8 +316,7 @@ public class TasksFragment extends Fragment implements
} }
// Update the task // Update the task
else { else {
assert args != null; int position = args != null ? args.getInt("position") : 0;
int position = args.getInt("position");
// Check if task list was changed // Check if task list was changed
if ((isTodayView && !isToday) || (!isTodayView && task.getTaskListId() != taskList.getId())) if ((isTodayView && !isToday) || (!isTodayView && task.getTaskListId() != taskList.getId()))
{ {
@@ -356,7 +352,10 @@ public class TasksFragment extends Fragment implements
confirmArgs.putInt("ItemPosition", itemPosition); confirmArgs.putInt("ItemPosition", itemPosition);
confirmArgs.putInt("Direction", -1); confirmArgs.putInt("Direction", -1);
confirmDialogFragment.setArguments(confirmArgs); confirmDialogFragment.setArguments(confirmArgs);
confirmDialogFragment.show(getFragmentManager(), title); FragmentManager fragmentManager = getFragmentManager();
if (fragmentManager != null) {
confirmDialogFragment.show(fragmentManager, title);
}
} }
else { else {
PerformTaskAction(itemPosition, -1); PerformTaskAction(itemPosition, -1);
@@ -394,7 +393,10 @@ public class TasksFragment extends Fragment implements
args.putInt("ItemPosition", itemPosition); args.putInt("ItemPosition", itemPosition);
args.putInt("Direction", direction); args.putInt("Direction", direction);
confirmDialogFragment.setArguments(args); confirmDialogFragment.setArguments(args);
confirmDialogFragment.show(getFragmentManager(), title); FragmentManager fragmentManager = getFragmentManager();
if (fragmentManager != null) {
confirmDialogFragment.show(fragmentManager, title);
}
} }
else PerformTaskAction(itemPosition, direction); else PerformTaskAction(itemPosition, direction);
} }
@@ -430,6 +432,7 @@ public class TasksFragment extends Fragment implements
} }
// Setup the snack bar // Setup the snack bar
// TODO: use the main activity view instead
snackbar = Snackbar.make(view, resources.getString(R.string.snackabar_label, action), Snackbar.LENGTH_LONG) snackbar = Snackbar.make(view, resources.getString(R.string.snackabar_label, action), Snackbar.LENGTH_LONG)
.setAction(resources.getString(R.string.snackabar_button), new View.OnClickListener() { .setAction(resources.getString(R.string.snackabar_button), new View.OnClickListener() {
@Override @Override

View File

@@ -4,6 +4,7 @@ import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.Rect; import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper; import android.support.v7.widget.helper.ItemTouchHelper;
import android.text.Layout; import android.text.Layout;
@@ -35,7 +36,7 @@ public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
} }
@Override @Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { public int getSwipeDirs(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
// Allow both directions swiping on first item, only left on the others // Allow both directions swiping on first item, only left on the others
if (viewHolder.getAdapterPosition() == 0) if (viewHolder.getAdapterPosition() == 0)
return ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; return ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
@@ -43,17 +44,17 @@ public class TaskTouchHelper extends ItemTouchHelper.SimpleCallback {
} }
@Override @Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false; return false;
} }
@Override @Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
mAdapter.onItemSwiped(viewHolder.getAdapterPosition(), direction); mAdapter.onItemSwiped(viewHolder.getAdapterPosition(), direction);
} }
@Override @Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder,
float dX, float dY, int actionState, boolean isCurrentlyActive) { float dX, float dY, int actionState, boolean isCurrentlyActive) {
// Get RecyclerView item from the ViewHolder // Get RecyclerView item from the ViewHolder
View itemView = viewHolder.itemView; View itemView = viewHolder.itemView;

View File

@@ -1,6 +1,7 @@
package com.wismna.geoffroy.donext.listeners; package com.wismna.geoffroy.donext.listeners;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector; import android.view.GestureDetector;
import android.view.MotionEvent; import android.view.MotionEvent;
@@ -30,7 +31,7 @@ public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListen
} }
@Override @Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { public boolean onInterceptTouchEvent(@NonNull RecyclerView view, @NonNull MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY()); View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
@@ -40,7 +41,7 @@ public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListen
} }
@Override @Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { public void onTouchEvent(@NonNull RecyclerView view, @NonNull MotionEvent motionEvent) {
} }

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.View; import android.view.View;
@@ -34,7 +35,7 @@ public class DividerItemDecoration extends RecyclerView.ItemDecoration {
}*/ }*/
@Override @Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
int left = parent.getPaddingLeft(); int left = parent.getPaddingLeft();
int right = parent.getWidth() - parent.getPaddingRight(); int right = parent.getWidth() - parent.getPaddingRight();

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#899AB5"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M14,5h8v2h-8zM14,10.5h8v2h-8zM14,16h8v2h-8zM2,11.5C2,15.08 4.92,18 8.5,18L9,18v2l3,-3 -3,-3v2h-0.5C6.02,16 4,13.98 4,11.5S6.02,7 8.5,7L12,7L12,5L8.5,5C4.92,5 2,7.92 2,11.5z"/>
</vector>

View File

@@ -0,0 +1,6 @@
<vector android:height="24dp" android:tint="#B5151A"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M12,19m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"/>
<path android:fillColor="#FF000000" android:pathData="M10,3h4v12h-4z"/>
</vector>

View File

@@ -19,7 +19,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="end|bottom" android:layout_gravity="end|bottom"
android:layout_margin="@dimen/fab_margin" android:layout_margin="16dp"
android:onClick="onNewTaskClick" android:onClick="onNewTaskClick"
android:src="@drawable/ic_add" /> android:src="@drawable/ic_add" />

View File

@@ -10,7 +10,7 @@
android:id="@+id/task_cycle" android:id="@+id/task_cycle"
android:layout_width="30dp" android:layout_width="30dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingTop="10dp" android:layout_margin="10dp"
android:textAppearance="?attr/textAppearanceListItem" /> android:textAppearance="?attr/textAppearanceListItem" />
<TextView <TextView
android:id="@+id/task_id" android:id="@+id/task_id"

View File

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="120dp"
android:paddingTop="5dp"
android:orientation="horizontal"
android:focusable="true"
android:background="@color/colorPrimaryLight" >
<TextView
android:id="@+id/task_cycle"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_gravity="center"
android:textAppearance="?attr/textAppearanceListItem" />
<TextView
android:id="@+id/task_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
<ImageView
android:id="@+id/task_icon"
android:layout_width="24dp"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:layout_marginEnd="5dp"
android:contentDescription="@string/task_alarm"/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="120dp"
android:orientation="vertical">
<TextView
android:id="@+id/task_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/colorAccent"
android:textAppearance="?attr/textAppearanceListItem" />
<TextView
android:id="@+id/task_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:maxLines="4"
android:textSize="16sp"
android:textAppearance="?attr/textAppearanceListItemSmall" />
</LinearLayout>
</LinearLayout>

View File

@@ -6,15 +6,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@drawable/task_select" > android:background="@drawable/task_select" >
<TextView
android:id="@+id/total_task_cycles"
android:layout_width="100dp"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/total_task_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center"/>
<TextView <TextView
android:id="@+id/no_more_tasks" android:id="@+id/no_more_tasks"
android:text="@string/task_no_tasks" android:text="@string/task_no_tasks"
@@ -42,10 +33,7 @@
android:id="@+id/task_list_view" android:id="@+id/task_list_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginStart="5dp" android:layout_marginBottom="70dp"
android:layout_marginEnd="5dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:name="com.wismna.geoffroy.donext.activities.TaskFragment" android:name="com.wismna.geoffroy.donext.activities.TaskFragment"
app:layoutManager="LinearLayoutManager" app:layoutManager="LinearLayoutManager"
tools:context=".fragments.TasksFragment" tools:context=".fragments.TasksFragment"
@@ -81,9 +69,40 @@
android:textColor="@android:color/white" android:textColor="@android:color/white"
android:visibility="gone"/> android:visibility="gone"/>
</RelativeLayout> </RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="70dp"
android:layout_gravity="bottom"
android:background="@color/colorPrimaryLight"/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_gravity="bottom"
android:layout_marginTop="5dp"
android:paddingTop="15dp"
android:orientation="horizontal"
android:focusable="true"
android:background="?android:attr/selectableItemBackground" >
<TextView
android:id="@+id/total_task_cycles"
android:layout_width="100dp"
android:layout_marginStart="10dp"
android:layout_height="wrap_content"/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:focusable="true"
android:background="?android:attr/selectableItemBackground" >
<TextView
android:id="@+id/total_task_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView <TextView
android:id="@+id/remaining_task_count" android:id="@+id/remaining_task_count"
android:layout_width="150dp" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"/>
android:layout_gravity="bottom|center"/> </LinearLayout>
</LinearLayout>
</FrameLayout> </FrameLayout>

View File

@@ -2,30 +2,17 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
tools:context=".activities.MainActivity"> tools:context=".activities.MainActivity">
<!--<item
android:id="@+id/action_newTask"
android:orderInCategory="10"
android:title="@string/action_new_task"
android:onClick="openNewTaskDialog"
app:showAsAction="never" />-->
<item <item
android:id="@+id/action_todayList" android:id="@+id/action_todayList"
android:orderInCategory="15" android:orderInCategory="05"
android:title="@string/action_todayList" android:title="@string/action_todayList"
android:onClick="showTodayList" android:onClick="showTodayList"
android:icon="@drawable/ic_today_dark" android:icon="@drawable/ic_today_dark"
android:visible="false" android:visible="false"
app:showAsAction="ifRoom" /> app:showAsAction="ifRoom" />
<item
android:id="@+id/action_changeLayout"
android:orderInCategory="20"
android:title="@string/action_changeLayout"
android:onClick="changeLayout"
android:icon="@drawable/ic_format_size_dark"
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/action_editTabs" android:id="@+id/action_editTabs"
android:orderInCategory="25" android:orderInCategory="15"
android:title="@string/action_editTabs" android:title="@string/action_editTabs"
android:onClick="openTaskLists" android:onClick="openTaskLists"
android:icon="@drawable/ic_list_white_24dp" android:icon="@drawable/ic_list_white_24dp"

View File

@@ -1,11 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> 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_format_size_dark"
app:showAsAction="always" />
</menu> </menu>

View File

@@ -2,6 +2,7 @@
<resources> <resources>
<color name="colorPrimary">#3F51B5</color> <color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color> <color name="colorPrimaryDark">#303F9F</color>
<color name="colorPrimaryLight">#dde2ff</color>
<color name="colorAccent">#FF4081</color> <color name="colorAccent">#FF4081</color>
<color name="ic_launcher_background">@color/colorPrimaryDark</color> <color name="ic_launcher_background">@color/colorPrimaryDark</color>
</resources> </resources>

View File

@@ -74,7 +74,7 @@
<string name="donext_description">DoNext is a new kind of task manager, based on the premise that creating too many tasks is counterproductive. Instead, swipe tasks left and right to push them back to the bottom of your backlog to work on them at a later time!</string> <string name="donext_description">DoNext is a new kind of task manager, based on the premise that creating too many tasks is counterproductive. Instead, swipe tasks left and right to push them back to the bottom of your backlog to work on them at a later time!</string>
<string name="about_version_donext">DoNext version %s</string> <string name="about_version_donext">DoNext version %s</string>
<string name="about_version_android">Android version %d</string> <string name="about_version_android">Android version %d</string>
<string name="about_link" translatable="false">https://github.com/wismna</string> <string name="about_link" translatable="false">https://wismna.github.io/DoNext/</string>
<!-- Strings related to Today --> <!-- Strings related to Today -->
<string name="title_activity_today">Today</string> <string name="title_activity_today">Today</string>
@@ -84,7 +84,7 @@
<string name="action_today_select">Select tasks</string> <string name="action_today_select">Select tasks</string>
<string name="task_list_edit_list_hint">List name</string> <string name="task_list_edit_list_hint">List name</string>
<string name="incompatible_sdk_version">Sorry, your Android version is not supported.</string> <string name="incompatible_sdk_version">Sorry, your Android version is not supported.</string>
<string name="today_no_tasks">Noting to do today</string> <string name="today_no_tasks">Nothing to do today</string>
<string name="today_create_tasks">Add some tasks there</string> <string name="today_create_tasks">Add some tasks there</string>
<!-- String related to History --> <!-- String related to History -->