From ee86b42c1a15fee5b8c273222c01283cae751d40 Mon Sep 17 00:00:00 2001 From: BONNEVILLE Geoffroy Date: Wed, 20 Dec 2017 18:54:21 +0100 Subject: [PATCH] Code cleanup ViewPagerAdapter now has its own file Async classes are static with WeakReferences to containing entity History and Today icons are changed Created new History activity Modified TasksFragment to determine parent activity (Today, History or else) --- app/build.gradle | 5 +- app/src/main/AndroidManifest.xml | 13 ++- .../donext/activities/AboutActivity.java | 7 +- .../donext/activities/HistoryActivity.java | 19 ++++ .../donext/activities/MainActivity.java | 22 ++-- .../donext/activities/TodayActivity.java | 8 +- .../donext/adapters/SectionsPagerAdapter.java | 51 +++++++++ .../SmartFragmentStatePagerAdapter.java | 6 +- .../adapters/TaskListRecyclerViewAdapter.java | 14 +-- .../adapters/TaskRecyclerViewAdapter.java | 14 +-- .../donext/adapters/TodayArrayAdapter.java | 6 +- .../com/wismna/geoffroy/donext/dao/Task.java | 8 -- .../wismna/geoffroy/donext/dao/TaskList.java | 16 --- .../donext/database/TaskDataAccess.java | 16 +-- .../donext/database/TaskListDataAccess.java | 4 +- .../fragments/ConfirmDialogFragment.java | 4 +- .../fragments/DynamicDialogFragment.java | 11 +- .../donext/fragments/MainFragment.java | 104 ++++-------------- .../fragments/TaskListsDialogFragment.java | 60 ++++------ .../donext/fragments/TasksFragment.java | 68 ++++++------ .../fragments/TodayFormDialogFragment.java | 27 +++-- .../listeners/RecyclerItemClickListener.java | 1 - .../donext/widgets/NonSwipeableViewPager.java | 6 + .../res/drawable-hdpi-v11/ic_stat_name.png | Bin 331 -> 0 bytes .../res/drawable-hdpi-v9/ic_stat_name.png | Bin 392 -> 0 bytes .../res/drawable-hdpi/ic_history_dark.png | Bin 0 -> 840 bytes .../main/res/drawable-hdpi/ic_stat_name.png | Bin 961 -> 0 bytes .../main/res/drawable-hdpi/ic_today_dark.png | Bin 0 -> 306 bytes .../res/drawable-mdpi-v11/ic_stat_name.png | Bin 255 -> 0 bytes .../res/drawable-mdpi-v9/ic_stat_name.png | Bin 304 -> 0 bytes .../res/drawable-mdpi/ic_history_dark.png | Bin 0 -> 561 bytes .../main/res/drawable-mdpi/ic_stat_name.png | Bin 643 -> 0 bytes .../main/res/drawable-mdpi/ic_today_dark.png | Bin 0 -> 221 bytes .../res/drawable-xhdpi-v11/ic_stat_name.png | Bin 351 -> 0 bytes .../res/drawable-xhdpi-v9/ic_stat_name.png | Bin 496 -> 0 bytes .../res/drawable-xhdpi/ic_history_dark.png | Bin 0 -> 1049 bytes .../main/res/drawable-xhdpi/ic_stat_name.png | Bin 1248 -> 0 bytes .../main/res/drawable-xhdpi/ic_today_dark.png | Bin 0 -> 337 bytes .../res/drawable-xxhdpi-v11/ic_stat_name.png | Bin 503 -> 0 bytes .../res/drawable-xxhdpi-v9/ic_stat_name.png | Bin 620 -> 0 bytes .../res/drawable-xxhdpi/ic_history_dark.png | Bin 0 -> 1790 bytes .../main/res/drawable-xxhdpi/ic_stat_name.png | Bin 437 -> 0 bytes .../res/drawable-xxhdpi/ic_today_dark.png | Bin 0 -> 572 bytes app/src/main/res/layout/activity_history.xml | 13 +++ app/src/main/res/menu/menu_main.xml | 4 +- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 5 +- 47 files changed, 266 insertions(+), 247 deletions(-) create mode 100644 app/src/main/java/com/wismna/geoffroy/donext/activities/HistoryActivity.java create mode 100644 app/src/main/java/com/wismna/geoffroy/donext/adapters/SectionsPagerAdapter.java delete mode 100644 app/src/main/res/drawable-hdpi-v11/ic_stat_name.png delete mode 100644 app/src/main/res/drawable-hdpi-v9/ic_stat_name.png create mode 100644 app/src/main/res/drawable-hdpi/ic_history_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_stat_name.png create mode 100644 app/src/main/res/drawable-hdpi/ic_today_dark.png delete mode 100644 app/src/main/res/drawable-mdpi-v11/ic_stat_name.png delete mode 100644 app/src/main/res/drawable-mdpi-v9/ic_stat_name.png create mode 100644 app/src/main/res/drawable-mdpi/ic_history_dark.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_stat_name.png create mode 100644 app/src/main/res/drawable-mdpi/ic_today_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi-v11/ic_stat_name.png delete mode 100644 app/src/main/res/drawable-xhdpi-v9/ic_stat_name.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_history_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_stat_name.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_today_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi-v11/ic_stat_name.png delete mode 100644 app/src/main/res/drawable-xxhdpi-v9/ic_stat_name.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_history_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_stat_name.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_today_dark.png create mode 100644 app/src/main/res/layout/activity_history.xml diff --git a/app/build.gradle b/app/build.gradle index e623797..8201ac1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,13 +8,14 @@ android { applicationId "com.wismna.geoffroy.donext" minSdkVersion 19 targetSdkVersion 27 - versionCode 23 - versionName "1.4.8" + versionCode 24 + versionName "1.5" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + zipAlignEnabled true } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cbf6d54..530aa07 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,8 +50,19 @@ + + + + + + + - \ No newline at end of file diff --git a/app/src/main/java/com/wismna/geoffroy/donext/activities/AboutActivity.java b/app/src/main/java/com/wismna/geoffroy/donext/activities/AboutActivity.java index 6f7e88a..072e00a 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/activities/AboutActivity.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/activities/AboutActivity.java @@ -8,6 +8,9 @@ import android.widget.TextView; import com.wismna.geoffroy.donext.BuildConfig; import com.wismna.geoffroy.donext.R; +/** + * About Activity class + */ public class AboutActivity extends AppCompatActivity { @Override @@ -15,10 +18,10 @@ public class AboutActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); - TextView versionDonext = (TextView) findViewById(R.id.version_donext); + TextView versionDonext = findViewById(R.id.version_donext); versionDonext.setText(getResources().getString(R.string.about_version_donext, BuildConfig.VERSION_NAME)); - TextView versionAndroid = (TextView) findViewById(R.id.version_android); + TextView versionAndroid = findViewById(R.id.version_android); versionAndroid.setText(getResources().getString(R.string.about_version_android, Build.VERSION.SDK_INT)); } diff --git a/app/src/main/java/com/wismna/geoffroy/donext/activities/HistoryActivity.java b/app/src/main/java/com/wismna/geoffroy/donext/activities/HistoryActivity.java new file mode 100644 index 0000000..8cb6611 --- /dev/null +++ b/app/src/main/java/com/wismna/geoffroy/donext/activities/HistoryActivity.java @@ -0,0 +1,19 @@ +package com.wismna.geoffroy.donext.activities; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; + +import com.wismna.geoffroy.donext.R; + +/** + * Created by gbe on 17-12-19. + * History Activity class + */ +public class HistoryActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_history); + } +} diff --git a/app/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java b/app/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java index a816c15..3d82a39 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java @@ -12,6 +12,7 @@ import android.view.MenuItem; import android.view.View; import com.wismna.geoffroy.donext.R; +import com.wismna.geoffroy.donext.adapters.SectionsPagerAdapter; import com.wismna.geoffroy.donext.fragments.MainFragment; import com.wismna.geoffroy.donext.fragments.TaskFormDialogFragment; import com.wismna.geoffroy.donext.fragments.TaskListsDialogFragment; @@ -73,9 +74,8 @@ public class MainActivity extends AppCompatActivity { editor.apply(); // Update the ViewPagerAdapter to refresh all tabs - MainFragment fragment = getMainFragment(); - fragment.getViewPager().getAdapter().notifyDataSetChanged(); - //mSectionsPagerAdapter.notifyDataSetChanged(); + ViewPager viewPager = getMainFragmentViewPager(); + viewPager.getAdapter().notifyDataSetChanged(); } /** Called when the user clicks the Edit Lists button */ @@ -96,8 +96,8 @@ public class MainActivity extends AppCompatActivity { /** Called when the user clicks the History button*/ public void openHistory(MenuItem item) { - MainFragment fragment = getMainFragment(); - fragment.toggleHistory(); + Intent intent = new Intent(this, HistoryActivity.class); + startActivity(intent); } /** Called when the user clicks the Settings button */ @@ -114,12 +114,11 @@ public class MainActivity extends AppCompatActivity { /** Called when user clicks on the New Task floating button */ public void onNewTaskClick(View view) { - - MainFragment fragment = getMainFragment(); - ViewPager viewPager = fragment.getViewPager(); + ViewPager viewPager = getMainFragmentViewPager(); if (viewPager == null) return; int currentTabPosition = viewPager.getCurrentItem(); - MainFragment.SectionsPagerAdapter pagerAdapter = (MainFragment.SectionsPagerAdapter) viewPager.getAdapter(); + SectionsPagerAdapter pagerAdapter = (SectionsPagerAdapter) viewPager.getAdapter(); + assert pagerAdapter != null; TaskFormDialogFragment taskDialogFragment = TaskFormDialogFragment.newInstance(null, pagerAdapter.getAllItems(), (TasksFragment) pagerAdapter.getRegisteredFragment(currentTabPosition)); @@ -141,8 +140,9 @@ public class MainActivity extends AppCompatActivity { taskDialogFragment.showFragment(fragmentManager, title, getResources().getBoolean(R.bool.large_layout)); } - private MainFragment getMainFragment(){ + private ViewPager getMainFragmentViewPager(){ FragmentManager manager = getSupportFragmentManager(); - return (MainFragment)manager.findFragmentById(R.id.fragment_main); + MainFragment fragment = (MainFragment)manager.findFragmentById(R.id.fragment_main); + return fragment.getViewPager(); } } diff --git a/app/src/main/java/com/wismna/geoffroy/donext/activities/TodayActivity.java b/app/src/main/java/com/wismna/geoffroy/donext/activities/TodayActivity.java index 121134e..ef633e6 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/activities/TodayActivity.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/activities/TodayActivity.java @@ -25,7 +25,7 @@ public class TodayActivity extends AppCompatActivity protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_today); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); // Get a support ActionBar corresponding to this toolbar @@ -79,16 +79,16 @@ public class TodayActivity extends AppCompatActivity @Override public void onTodayTaskDialogPositiveClick(View dialogView) { - FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + FloatingActionButton fab = findViewById(R.id.fab); fab.setEnabled(false); } @Override public void onTodayTasksUpdated() { - FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + FloatingActionButton fab = findViewById(R.id.fab); fab.setEnabled(true); try (TaskDataAccess taskDataAccess = new TaskDataAccess(this)) { - RecyclerView recyclerView = (RecyclerView) findViewById(R.id.task_list_view); + RecyclerView recyclerView = findViewById(R.id.task_list_view); ((TaskRecyclerViewAdapter)recyclerView.getAdapter()).setItems(taskDataAccess.getTodayTasks()); } } diff --git a/app/src/main/java/com/wismna/geoffroy/donext/adapters/SectionsPagerAdapter.java b/app/src/main/java/com/wismna/geoffroy/donext/adapters/SectionsPagerAdapter.java new file mode 100644 index 0000000..d2f0901 --- /dev/null +++ b/app/src/main/java/com/wismna/geoffroy/donext/adapters/SectionsPagerAdapter.java @@ -0,0 +1,51 @@ +package com.wismna.geoffroy.donext.adapters; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; + +import com.wismna.geoffroy.donext.dao.TaskList; +import com.wismna.geoffroy.donext.fragments.TasksFragment; + +import java.util.List; + +/** + * A {@link FragmentPagerAdapter} that returns a fragment corresponding to + * one of the sections/tabs/pages. + */ +public class SectionsPagerAdapter extends SmartFragmentStatePagerAdapter { + + private List taskLists; + + public SectionsPagerAdapter(FragmentManager fm, List taskLists) { + super(fm); + this.taskLists = taskLists; + } + + @Override + public Fragment getItem(int position) { + // getItem is called to instantiate the fragment for the given page. + // Return a PlaceholderFragment (defined as a static inner class below). + TaskList taskList = taskLists.get(position); + return TasksFragment.newTaskListInstance(taskList.getId()); + } + + @Override + public int getCount() { + if (taskLists != null) { + // Show the task lists + return taskLists.size(); + } + return 0; + } + + @Override + public CharSequence getPageTitle(int position) { + if (taskLists == null) return "N/A"; + return taskLists.get(position).getName(); + } + + public List getAllItems(){ + return taskLists; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wismna/geoffroy/donext/adapters/SmartFragmentStatePagerAdapter.java b/app/src/main/java/com/wismna/geoffroy/donext/adapters/SmartFragmentStatePagerAdapter.java index bae6059..09bb5c7 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/adapters/SmartFragmentStatePagerAdapter.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/adapters/SmartFragmentStatePagerAdapter.java @@ -1,5 +1,6 @@ package com.wismna.geoffroy.donext.adapters; +import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; @@ -17,16 +18,17 @@ public abstract class SmartFragmentStatePagerAdapter extends FragmentStatePagerA // Sparse array to keep track of registered fragments in memory private final SparseArray registeredFragments = new SparseArray<>(); - public SmartFragmentStatePagerAdapter(FragmentManager fragmentManager) { + SmartFragmentStatePagerAdapter(FragmentManager fragmentManager) { super(fragmentManager); } @Override - public int getItemPosition(Object object) { + public int getItemPosition(@NonNull Object object) { return POSITION_NONE; } // Register the fragment when the item is instantiated + @NonNull @Override public Object instantiateItem(ViewGroup container, int position) { Fragment fragment = (Fragment) super.instantiateItem(container, position); diff --git a/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java b/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java index ab05915..8e3b8f9 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java @@ -1,6 +1,5 @@ package com.wismna.geoffroy.donext.adapters; -import android.support.v4.view.MotionEventCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -54,12 +53,11 @@ public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter { 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); - TextView taskView = (TextView) convertView.findViewById(R.id.task_list_item_tasklist); - LinearLayout layoutView = (LinearLayout) convertView.findViewById(R.id.task_list_item_layout); + TextView titleView = convertView.findViewById(R.id.task_list_item_title); + TextView taskView = convertView.findViewById(R.id.task_list_item_tasklist); + LinearLayout layoutView = convertView.findViewById(R.id.task_list_item_layout); Task item = this.getItem(position); if (item != null) { titleView.setText(item.getName()); diff --git a/app/src/main/java/com/wismna/geoffroy/donext/dao/Task.java b/app/src/main/java/com/wismna/geoffroy/donext/dao/Task.java index 15c8457..a1f3672 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/dao/Task.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/dao/Task.java @@ -59,18 +59,10 @@ public class Task { this.cycle = cycle; } - public boolean isDone() { - return done != 0; - } - public void setDone(int done) { this.done = done; } - public boolean isDeleted() { - return deleted != 0; - } - public void setDeleted(int deleted) { this.deleted = deleted; } diff --git a/app/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java b/app/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java index a4ae8f8..940c11a 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java @@ -8,8 +8,6 @@ public class TaskList { private long id; private String name; private long taskCount; - private int order; - private Boolean visible; public long getId() { return id; @@ -35,20 +33,6 @@ public class TaskList { this.taskCount = taskCount; } - public int getOrder() { - return order; - } - - public void setOrder(int order) { - this.order = order; - } - - public void setVisible(int visible) { - this.visible = visible != 0; - } - public Boolean isVisible() { - return visible; - } @Override public String toString() { return name; diff --git a/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java b/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java index 6fe760f..c83fb7a 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java @@ -133,25 +133,25 @@ public class TaskDataAccess implements AutoCloseable { return getTasksFromCursor(cursor); } - public int setDone(long id) { - return update(id, DatabaseHelper.TASKS_COLUMN_DONE, 1); + public void setDone(long id) { + update(id, DatabaseHelper.TASKS_COLUMN_DONE, 1); } - public int increaseCycle(int newCycle, long id) { - return update(id, DatabaseHelper.TASKS_COLUMN_CYCLE, newCycle); + public void increaseCycle(int newCycle, long id) { + update(id, DatabaseHelper.TASKS_COLUMN_CYCLE, newCycle); } - public int deleteTask(long id) { + public void deleteTask(long id) { /*database.delete(DatabaseHelper.TASKS_TABLE_NAME, DatabaseHelper.COLUMN_ID + " = " + taskId, null);*/ - return update(id, DatabaseHelper.TASKS_COLUMN_DELETED, 1); + update(id, DatabaseHelper.TASKS_COLUMN_DELETED, 1); } - private int update(long id, String column, Object value) { + private void update(long id, String column, Object value) { ContentValues contentValues = new ContentValues(); if (value instanceof Integer) contentValues.put(column, (int) value); - return database.update(DatabaseHelper.TASKS_TABLE_NAME, contentValues, DatabaseHelper.COLUMN_ID + " = " + id, null); + database.update(DatabaseHelper.TASKS_TABLE_NAME, contentValues, DatabaseHelper.COLUMN_ID + " = " + id, null); } private Task cursorToTask(Cursor cursor) { diff --git a/app/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java b/app/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java index 192dcb1..290a1a3 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java @@ -133,8 +133,8 @@ public class TaskListDataAccess implements AutoCloseable { TaskList taskList = new TaskList(); taskList.setId(cursor.getLong(0)); taskList.setName(cursor.getString(1)); - taskList.setOrder(cursor.getInt(2)); - taskList.setVisible(cursor.getInt(3)); + //taskList.setOrder(cursor.getInt(2)); + //taskList.setVisible(cursor.getInt(3)); // Get "false" count column if it exists if (cursor.getColumnCount() == 5) taskList.setTaskCount(cursor.getLong(4)); diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java index f16f53f..eb33a55 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java @@ -1,6 +1,5 @@ package com.wismna.geoffroy.donext.fragments; -import android.annotation.SuppressLint; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; @@ -49,7 +48,8 @@ public class ConfirmDialogFragment extends DialogFragment { Bundle args = getArguments(); LayoutInflater inflater = getActivity().getLayoutInflater(); // No need for a parent in a Dialog Fragment - @SuppressLint("InflateParams") View view = inflater.inflate(R.layout.fragment_task_confirmation, null); + View view = inflater.inflate(R.layout.fragment_task_confirmation, null); + assert args != null; builder.setView(view).setMessage(args.getString("message")) .setPositiveButton(args.getInt("button"), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java index 571dddf..8123fef 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java @@ -1,6 +1,5 @@ package com.wismna.geoffroy.donext.fragments; -import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; @@ -63,10 +62,12 @@ public abstract class DynamicDialogFragment extends DialogFragment { @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { // Inflate and set the layout for the dialog - LayoutInflater inflater = getActivity().getLayoutInflater(); + Activity activity = getActivity(); + assert activity != null; + LayoutInflater inflater = activity.getLayoutInflater(); // As it is a Dialog, the root ViewGroup can be null without issues - @SuppressLint("InflateParams") final View view = inflater.inflate(R.layout.fragment_dynamic_dialog, null); - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + final View view = inflater.inflate(R.layout.fragment_dynamic_dialog, null); + AlertDialog.Builder builder = new AlertDialog.Builder(activity); Bundle args = getArguments(); // Set the dialog buttons assert args != null; @@ -102,7 +103,6 @@ public abstract class DynamicDialogFragment extends DialogFragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - //super.onCreateOptionsMenu(menu, inflater); menu.clear(); getActivity().getMenuInflater().inflate(R.menu.menu_dynamic_fragment, menu); } @@ -110,6 +110,7 @@ public abstract class DynamicDialogFragment extends DialogFragment { @Override public void onPrepareOptionsMenu(Menu menu) { Bundle args = getArguments(); + assert args != null; // Show the neutral button if needed if (mButtonCount < 3) { menu.removeItem(R.id.menu_neutral_button); diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/MainFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/MainFragment.java index f1035d2..5988c06 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/MainFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/MainFragment.java @@ -1,14 +1,15 @@ package com.wismna.geoffroy.donext.fragments; +import android.app.Activity; import android.content.SharedPreferences; import android.graphics.Point; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; @@ -21,7 +22,7 @@ import android.widget.ArrayAdapter; import android.widget.ListView; import com.wismna.geoffroy.donext.R; -import com.wismna.geoffroy.donext.adapters.SmartFragmentStatePagerAdapter; +import com.wismna.geoffroy.donext.adapters.SectionsPagerAdapter; import com.wismna.geoffroy.donext.adapters.TaskRecyclerViewAdapter; import com.wismna.geoffroy.donext.dao.Task; import com.wismna.geoffroy.donext.dao.TaskList; @@ -38,72 +39,46 @@ public class MainFragment extends Fragment implements TasksFragment.TaskChangedA private ViewPager mViewPager; private SectionsPagerAdapter mSectionsPagerAdapter; private TabLayout tabLayout; - private List taskLists; - private boolean isHistory = false; public MainFragment() { // Required empty public constructor } - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param isHistory Will this fragment show the task history? - * @return A new instance of fragment MainFragment. - */ - // TODO: Rename and change types and number of parameters - // TODO: History should get its own activity and this fragment - public static MainFragment newInstance(boolean isHistory) { - MainFragment fragment = new MainFragment(); - Bundle args = new Bundle(); - args.putBoolean("history", isHistory); - fragment.setArguments(args); - return fragment; - } - public ViewPager getViewPager() { return mViewPager; } - public void toggleHistory() { - isHistory = !isHistory; - mSectionsPagerAdapter.notifyDataSetChanged(); - } - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - isHistory = getArguments().getBoolean("history"); - } - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment mView = inflater.inflate(R.layout.fragment_main, container, false); AppCompatActivity activity = (AppCompatActivity) getActivity(); Toolbar toolbar = mView.findViewById(R.id.toolbar); + assert activity != null; activity.setSupportActionBar(toolbar); - // Create the adapter that will return a fragment for each of the three - // primary sections of the activity. - mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager()); - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(activity); // Access database to retrieve Tabs + List taskLists; try (TaskListDataAccess taskListDataAccess = new TaskListDataAccess(activity)) { taskLists = taskListDataAccess.getAllTaskLists(); + + // Create the adapter that will return a fragment for each of the three + // primary sections of the activity. + mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager(), taskLists); mSectionsPagerAdapter.notifyDataSetChanged(); } + boolean isLargeLayout = getResources().getBoolean(R.bool.large_layout); + + // TODO: determine whether this is the first startup, and if so, show a tutorial of sorts + // No tasks, show the edit task lists fragment if (taskLists.size() == 0) { TaskListsDialogFragment taskListFragment = new TaskListsDialogFragment(); String title = getString(R.string.task_list_no_lists); - FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); + FragmentManager fragmentManager = activity.getSupportFragmentManager(); // Set the arguments Bundle args = new Bundle(); @@ -113,6 +88,7 @@ public class MainFragment extends Fragment implements TasksFragment.TaskChangedA taskListFragment.showFragment(fragmentManager, title, getResources().getBoolean(R.bool.large_layout)); } + // Otherwise, show the normal view else { int lastOpenedList = sharedPref.getInt("last_opened_tab", 0); // Set up the ViewPager with the sections adapter. @@ -121,9 +97,11 @@ public class MainFragment extends Fragment implements TasksFragment.TaskChangedA // Open last opened tab mViewPager.setCurrentItem(lastOpenedList); - if (!getResources().getBoolean(R.bool.large_layout)) { + if (!isLargeLayout) { tabLayout = mView.findViewById(R.id.tabs); + // Hide the tabs if there is only one task list + if (taskLists.size() == 1) tabLayout.setVisibility(View.INVISIBLE); tabLayout.setupWithViewPager(mViewPager); // Handles scroll detection (only available for SDK version >=23) @@ -140,6 +118,8 @@ public class MainFragment extends Fragment implements TasksFragment.TaskChangedA } else { ListView listView = mView.findViewById(R.id.list); + // Hide the list if there is only one task list + if (taskLists.size() == 1) listView.setVisibility(View.INVISIBLE); //listView.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, taskLists)); listView.setAdapter(new ArrayAdapter<>(activity, R.layout.list_tasklist_item, taskLists)); //listView.setSelection(lastOpenedList); @@ -196,48 +176,12 @@ public class MainFragment extends Fragment implements TasksFragment.TaskChangedA View rightArrow = mView.findViewById(R.id.right_arrow); if (rightArrow != null) { Point size = new Point(); - getActivity().getWindowManager().getDefaultDisplay().getSize(size); + Activity activity = getActivity(); + assert activity != null; + activity.getWindowManager().getDefaultDisplay().getSize(size); if (scrollX == tabLayout.getChildAt(0).getMeasuredWidth() - tabLayout.getMeasuredWidth()) rightArrow.setVisibility(View.INVISIBLE); else rightArrow.setVisibility(View.VISIBLE); } } - - /** - * A {@link FragmentPagerAdapter} that returns a fragment corresponding to - * one of the sections/tabs/pages. - */ - public class SectionsPagerAdapter extends SmartFragmentStatePagerAdapter { - - SectionsPagerAdapter(FragmentManager fm) { - super(fm); - } - - @Override - public Fragment getItem(int position) { - // getItem is called to instantiate the fragment for the given page. - // Return a PlaceholderFragment (defined as a static inner class below). - TaskList taskList = taskLists.get(position); - return TasksFragment.newTaskListInstance(taskList.getId(), isHistory, MainFragment.this); - } - - @Override - public int getCount() { - if (taskLists != null) { - // Show the task lists - return taskLists.size(); - } - return 3; - } - - @Override - public CharSequence getPageTitle(int position) { - if (taskLists == null) return "N/A"; - return taskLists.get(position).getName(); - } - - public List getAllItems(){ - return taskLists; - } - } } diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java index c79ac65..3cd503b 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java @@ -22,6 +22,7 @@ import com.wismna.geoffroy.donext.dao.TaskList; import com.wismna.geoffroy.donext.database.TaskListDataAccess; import com.wismna.geoffroy.donext.helpers.TaskListTouchHelper; +import java.lang.ref.WeakReference; import java.util.List; /** @@ -53,38 +54,9 @@ public class TaskListsDialogFragment extends DynamicDialogFragment implements mContentLayoutId = R.layout.content_tasklists; taskListDataAccess = new TaskListDataAccess(getContext(), TaskListDataAccess.MODE.WRITE); - new GetTaskListsTask().execute(taskListDataAccess); + new GetTaskListsTask(this).execute(taskListDataAccess); } - /*@Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - - mView = inflater.inflate(R.layout.content_tasklists, container, false); - - Button createTaskListButton = mView.findViewById(R.id.new_task_list_button); - createTaskListButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - EditText editText = mView.findViewById(R.id.new_task_list_name); - String text = editText.getText().toString(); - if (text.matches("")) { - editText.setError(getResources().getString(R.string.task_list_new_list_error)); - return; - } - int position = taskListRecyclerViewAdapter.getItemCount(); - - TaskList taskList = taskListDataAccess.createTaskList(text, position); - taskListRecyclerViewAdapter.add(taskList, position); - - editText.setText(""); - toggleVisibleCreateNewTaskListLayout(mView); - } - }); - - return mView; - }*/ - @Override public void onStart() { super.onStart(); @@ -223,7 +195,13 @@ public class TaskListsDialogFragment extends DynamicDialogFragment implements } } - private class GetTaskListsTask extends AsyncTask> { + private static class GetTaskListsTask extends AsyncTask> { + private WeakReference fragmentReference; + + GetTaskListsTask(TaskListsDialogFragment context) { + fragmentReference = new WeakReference<>(context); + } + @Override protected List doInBackground(TaskListDataAccess... params) { TaskListDataAccess taskListDataAccess = params[0]; @@ -233,21 +211,23 @@ public class TaskListsDialogFragment extends DynamicDialogFragment implements @Override protected void onPostExecute(List taskLists) { super.onPostExecute(taskLists); - taskListRecyclerViewAdapter = - new TaskListRecyclerViewAdapter(taskLists, TaskListsDialogFragment.this); + TaskListsDialogFragment fragment = fragmentReference.get(); + if (fragment == null) return; + fragment.taskListRecyclerViewAdapter = + new TaskListRecyclerViewAdapter(taskLists, fragment); // Set the adapter - Context context = getContext(); - RecyclerView recyclerView = (RecyclerView) findViewById(R.id.task_lists_view); + Context context = fragment.getContext(); + RecyclerView recyclerView = (RecyclerView) fragment.findViewById(R.id.task_lists_view); recyclerView.setLayoutManager(new LinearLayoutManager(context)); - recyclerView.setAdapter(taskListRecyclerViewAdapter); + recyclerView.setAdapter(fragment.taskListRecyclerViewAdapter); // Set the Touch Helper - ItemTouchHelper.Callback callback = new TaskListTouchHelper(taskListRecyclerViewAdapter); - mItemTouchHelper = new ItemTouchHelper(callback); - mItemTouchHelper.attachToRecyclerView(recyclerView); + ItemTouchHelper.Callback callback = new TaskListTouchHelper(fragment.taskListRecyclerViewAdapter); + fragment.mItemTouchHelper = new ItemTouchHelper(callback); + fragment.mItemTouchHelper.attachToRecyclerView(recyclerView); - toggleVisibleCreateNewTaskListLayout(); + fragment.toggleVisibleCreateNewTaskListLayout(); } } } diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java index 335e337..6e2bf73 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java @@ -1,17 +1,19 @@ package com.wismna.geoffroy.donext.fragments; +import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewPager; +import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; import android.view.LayoutInflater; @@ -26,6 +28,9 @@ import android.widget.Spinner; import android.widget.TextView; import com.wismna.geoffroy.donext.R; +import com.wismna.geoffroy.donext.activities.HistoryActivity; +import com.wismna.geoffroy.donext.activities.TodayActivity; +import com.wismna.geoffroy.donext.adapters.SectionsPagerAdapter; import com.wismna.geoffroy.donext.adapters.TaskRecyclerViewAdapter; import com.wismna.geoffroy.donext.dao.Task; import com.wismna.geoffroy.donext.dao.TaskList; @@ -48,7 +53,7 @@ public class TasksFragment extends Fragment implements ConfirmDialogFragment.ConfirmDialogListener, TaskTouchHelper.TaskTouchHelperAdapter{ - interface TaskChangedAdapter { + public interface TaskChangedAdapter { void onTaskListChanged(Task task, int tabPosition); } @@ -69,15 +74,11 @@ public class TasksFragment extends Fragment implements public TasksFragment() { } - public static TasksFragment newTaskListInstance(long taskListId, boolean isHistory, - TaskChangedAdapter taskChangedAdapter) { + public static TasksFragment newTaskListInstance(long taskListId) { TasksFragment fragment = new TasksFragment(); Bundle args = new Bundle(); args.putLong(TASK_LIST_ID, taskListId); - args.putBoolean("history", isHistory); fragment.setArguments(args); - fragment.mAdapter = taskChangedAdapter; - fragment.isTodayView = false; fragment.setRetainInstance(true); return fragment; } @@ -88,19 +89,23 @@ public class TasksFragment extends Fragment implements if (getArguments() != null) { taskListId = getArguments().getLong(TASK_LIST_ID); - isHistory = getArguments().getBoolean("history"); + Activity parentActivity = getActivity(); + if (parentActivity instanceof HistoryActivity) isHistory = true; + if (parentActivity instanceof TodayActivity) isTodayView = true; + // TODO: check that this works! + mAdapter = (MainFragment)getParentFragment(); } } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_tasks, container, false); final Context context = view.getContext(); // Set the Recycler view recyclerView = view.findViewById(R.id.task_list_view); - recyclerView.setLayoutManager(new NoScrollingLayoutManager(context)); + recyclerView.setLayoutManager(isHistory ? new LinearLayoutManager(context) : new NoScrollingLayoutManager(context)); // Set RecyclerView Adapter SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext()); @@ -113,14 +118,17 @@ public class TasksFragment extends Fragment implements } recyclerView.setAdapter(taskRecyclerViewAdapter); - // Set ItemTouch helper in RecyclerView to handle swipe move on elements - final Resources resources = getResources(); - ItemTouchHelper.Callback callback = new TaskTouchHelper(this, - ContextCompat.getColor(context, R.color.colorPrimary), - ContextCompat.getColor(context, R.color.colorAccent)); - ItemTouchHelper helper = new ItemTouchHelper(callback); - helper.attachToRecyclerView(recyclerView); + if (!isHistory) { + // Set ItemTouch helper in RecyclerView to handle swipe move on elements + ItemTouchHelper.Callback callback = new TaskTouchHelper(this, + ContextCompat.getColor(context, R.color.colorPrimary), + ContextCompat.getColor(context, R.color.colorAccent)); + ItemTouchHelper helper = new ItemTouchHelper(callback); + helper.attachToRecyclerView(recyclerView); + } + + final Resources resources = getResources(); // Implements touch listener to add click detection recyclerView.addOnItemTouchListener( new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() { @@ -131,9 +139,10 @@ public class TasksFragment extends Fragment implements Bundle args = new Bundle(); args.putInt("position", position); args.putBoolean("today", sharedPref.getBoolean("pref_conf_today_enable", false)); - args.putBoolean("neutral", true); + args.putInt("button_count", isHistory ? 1 : 3); args.putString("button_positive", getString(R.string.new_task_save)); - args.putString("button_negative", getString(R.string.new_task_cancel)); + args.putString("button_negative", + isHistory ? getString(R.string.task_list_ok) : getString(R.string.new_task_cancel)); args.putString("button_neutral", getString(R.string.new_task_delete)); // Set current tab value to new task dialog @@ -141,7 +150,7 @@ public class TasksFragment extends Fragment implements List taskLists; Task task = taskRecyclerViewAdapter.getItem(position); if (viewPager != null) { - taskLists = ((MainFragment.SectionsPagerAdapter) viewPager.getAdapter()).getAllItems(); + taskLists = ((SectionsPagerAdapter) viewPager.getAdapter()).getAllItems(); args.putInt("list", viewPager.getCurrentItem()); } else { @@ -164,19 +173,8 @@ public class TasksFragment extends Fragment implements // Open the fragment as a dialog or as full-screen depending on screen size String title = getString(R.string.action_edit_task); - if (isLargeLayout) { - taskDialogFragment.show(manager, title); - } - else { - // The device is smaller, so show the fragment fullscreen - FragmentTransaction transaction = manager.beginTransaction(); - // For a little polish, specify a transition animation - transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); - // To make it fullscreen, use the 'content' root view as the container - // for the fragment, which is always the root view for the activity - transaction.add(android.R.id.content, taskDialogFragment, title) - .addToBackStack(null).commit(); - } + assert manager != null; + taskDialogFragment.showFragment(manager, title, isLargeLayout); } }) ); @@ -235,6 +233,7 @@ public class TasksFragment extends Fragment implements @Override public void onConfirmDialogClick(DialogFragment dialog, ConfirmDialogFragment.ButtonEvent event) { Bundle args = dialog.getArguments(); + assert args != null; int itemPosition = args.getInt("ItemPosition"); int direction = args.getInt("Direction"); @@ -317,6 +316,7 @@ public class TasksFragment extends Fragment implements } // Update the task else { + assert args != null; int position = args.getInt("position"); // Check if task list was changed if ((isTodayView && !isToday) || (!isTodayView && task.getTaskListId() != taskList.getId())) @@ -340,6 +340,7 @@ public class TasksFragment extends Fragment implements Bundle args = dialog.getArguments(); // Delete task from Adapter + assert args != null; final int itemPosition = args.getInt("position"); if (showDialog) { @@ -418,6 +419,7 @@ public class TasksFragment extends Fragment implements break; case -1: FragmentManager manager = getFragmentManager(); + assert manager != null; DialogFragment dialog = (DialogFragment) manager.findFragmentByTag(getString(R.string.action_edit_task)); if (dialog != null) dialog.dismiss(); action = resources.getString(R.string.snackabar_action_deleted); diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java index 75a372e..4743652 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java @@ -18,6 +18,7 @@ import com.wismna.geoffroy.donext.database.TaskDataAccess; import org.joda.time.LocalDate; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -50,7 +51,7 @@ public class TodayFormDialogFragment extends DynamicDialogFragment { super.onCreate(savedInstanceState); mContentLayoutId = R.layout.content_today_form; // Load the tasks asynchronously - new LoadTasks().execute(getActivity()); + new LoadTasks(this).execute(getActivity()); } private void setLayoutValues(List tasks) { @@ -94,7 +95,7 @@ public class TodayFormDialogFragment extends DynamicDialogFragment { protected void onPositiveButtonClick(View view) { mListener.onTodayTaskDialogPositiveClick(view); // Only commit the updated tasks to DB - new UpdateTasks().execute(mUpdatedTasks.toArray(new Task[mUpdatedTasks.size()])); + new UpdateTasks(this).execute(mUpdatedTasks.toArray(new Task[mUpdatedTasks.size()])); dismiss(); } @@ -108,7 +109,13 @@ public class TodayFormDialogFragment extends DynamicDialogFragment { dismiss(); } - private class LoadTasks extends AsyncTask> { + static class LoadTasks extends AsyncTask> { + private WeakReference fragmentReference; + + LoadTasks(TodayFormDialogFragment context) { + fragmentReference = new WeakReference<>(context); + } + @Override protected List doInBackground(Context... params) { try(TaskDataAccess taskDataAccess = new TaskDataAccess(params[0])) { @@ -119,15 +126,21 @@ public class TodayFormDialogFragment extends DynamicDialogFragment { @Override protected void onPostExecute(List tasks) { super.onPostExecute(tasks); - setLayoutValues(tasks); + fragmentReference.get().setLayoutValues(tasks); } } - private class UpdateTasks extends AsyncTask { + private static class UpdateTasks extends AsyncTask { + private WeakReference fragmentReference; + + UpdateTasks(TodayFormDialogFragment context) { + fragmentReference = new WeakReference<>(context); + } + @Override protected Integer doInBackground(Task... params) { int elementsUpdated = 0; - try (TaskDataAccess taskDataAccess = new TaskDataAccess(getActivity(), TaskDataAccess.MODE.WRITE)) { + try (TaskDataAccess taskDataAccess = new TaskDataAccess(fragmentReference.get().getActivity(), TaskDataAccess.MODE.WRITE)) { for (Task task : params) { taskDataAccess.updateTodayTasks(task.getId(), task.isToday()); @@ -140,7 +153,7 @@ public class TodayFormDialogFragment extends DynamicDialogFragment { @Override protected void onPostExecute(Integer integer) { super.onPostExecute(integer); - mListener.onTodayTasksUpdated(); + fragmentReference.get().mListener.onTodayTasksUpdated(); } } } diff --git a/app/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java b/app/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java index f161c52..22f3aba 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java @@ -32,7 +32,6 @@ public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListen @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { View childView = view.findChildViewUnder(e.getX(), e.getY()); - //int childId = view.getChildAdapterPosition(childView); if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); return true; diff --git a/app/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java b/app/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java index a5884a9..9c4f457 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java @@ -28,6 +28,12 @@ public class NonSwipeableViewPager extends ViewPager { @Override public boolean onTouchEvent(MotionEvent event) { // Never allow swiping to switch between pages + performClick(); return false; } + + @Override + public boolean performClick() { + return super.performClick(); + } } diff --git a/app/src/main/res/drawable-hdpi-v11/ic_stat_name.png b/app/src/main/res/drawable-hdpi-v11/ic_stat_name.png deleted file mode 100644 index 44943ec1e578e17d6e4912f49b1bb229e1e2d1a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmV-R0kr;!P)R>n zzS6Hb=YDlh(~Zw(%hr!d2$29;kOuxYdjcRseF@V-j=0wugx>54gA4UJ-V?%*IB0?v zaB1)rbSQg8m(C07mstbEK9P~TauPgs1Swsiq2R57u8_+tma?Ygo9DZQ_T^DkE};rNTvAr@31wp? zD=TLU|FJ_>$O>5@EA(TbB{l9r+aL#;JJ%KJGk>7 z;Ak||P(%G*Wm$Gdt~K|q(lo8XdN!Ngs%FZvoFII|S?ypU#0^7(AP}G~isGLAPaym; z48w-A?77<-p6B^=xm>PzM|*+Te-kAqbFavFRtlmhsyOWXelNI-jFnPwN%*luDY!IT zq7-^7|e*L4Lr2u=@CThB8=0W-7&T!`a%18NzNB*_-6Whk$) zm-A-}u<(I?Ck6QY3AR$eYwWcJj^hY$ctm`z)ZHN@H)g`3X7Yd8yp7*8T#D=M!?GuhZaGLPvciKhEIdjCJU1n z{2A~_;|PW2As=B=QYc#mXCufx4?Za5F2x#79P?7iENF^B_5tu*A%7y4R0|;&6|ed! z$i+B8Iq*Uen!Qm4H*lE9uxT_5yWbeNuA@vD5&?M67x^m;> znI3aI$5W;lHE{rRdT}7&#JIuv{vYGR&MJx&e9trt(eJ2L2nC!lbzrpGK@0z10-waV zFMMy#RvFuEy@(CNDKu;}=b-{$?Ef+-EUWRQDA<3-Cj02ZY1?GxHFDd*6CsyQn-iM; z3qtphZ3-QC2^#~s{orFjWR8!xTNj8)Z)M|FoF6g(x$2C+f_H z)sz&^&T+;HIxrYTNj9kp8t48M#pNmMLs=%yiW=Yio++-BeZFR^zzUmVn)z8p(zx&C z?L+A8KstOMv8>XmsWrU;`+XRnSL_k=svlb3)+kj@X$o7bKC5$wH3hDnd_4z-`EpKu z8<`{gY?%9OYGhE^vNeg~?gN9vUzv{(-xZYx6_Z}VCd83`Ma{?sS_2nq^^Jhi-xcu6 z@&m^fmu#r+)UX@A)MU6ElILOoeYE(>p;P7y$uj?UofmQKKQW~(ZD~uJbNdD1tmm1^{Q4S%>g(5lSe29=j4k-y=U@jTMOlUGnE|d!ra_3UMfb*Ff<&LSh z@Ez7W&#G~;_gZ^)(-?WP>Zw_?)_?t;y=TwNfA6@s-}oP+udnY46wii+v<$H4G#~~qp7`VN7u8XFiGpwZD$OKop&)9dRi9UdNr?L9g=;$Ex?*9*4QHAW*N zBbGWiI3UF7>1o*B^Ye4=#hP%vV5`P@dwcnm8ik82E zj}Pv}8m!&i+~jLXVt}n0>+bHR{{DWGc6WCvTCuaUBQn5NjdgZ*vU8*E@9(2#46`H# z*s8Ji_I7q|)Z^o0)Qn-4!~k10*3#0#&W(C_c!-)Y%#s*jtHv4{8mO(U&7{yr83+XU zbtJ;t&_^jTz*ddb)zwjRbF)czcXvE=b#+y&+tJ$E8qdHisSdVkth&0I>g(%Gy1l*S zp(`sZoVT{NQcq70e+0;Jw8$a6#(StCM=x?56aup(2H2{xii!%Vsi`sP=H`ZnE-x>0 z4uc51kG!j^>+>3dAvaubHCsJ2|*4sp}@Dx&Kje@R*jXG zmQs0nxk=a8*F1D-X^HdN+FHI~gL^2>akQa}7_adjYRJ)x90n1XB{9HOjRkj-++ftz z)fEq2SXdD2c7%gMV3t$|TQycxRKyKNU0z=DP>;tW*6j!fg}^MS4z_Bnu&|Jdi;GRV zxVYe?b40>g+?3?xN!;)q0$VkfkdQzrDJhhgm>5%m3AWW4 zd&6&v!{Laj^7Hd?#`H%7RaI4s9UUF~D~wYcA0Pjv0s|~CgKVGWV<@N7=@0&W{KbD; jECd#qmXD!+<0r>I5rw#yU;rX;00000NkvXXu0mjfAL!MS diff --git a/app/src/main/res/drawable-hdpi/ic_today_dark.png b/app/src/main/res/drawable-hdpi/ic_today_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5e217b0fd615723c8473a1837a2907e1f55412fe GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtpPnv`Ar-gY&b-LgtRT|1S4v0X z$UFDN?Y+km_^-G*m2KZU*}9Q=B2(Z+=imG_(`C-#VSIvHz%uW`N-4xx!4lg%-5%7Ah|ZuHbW9q^xInbU&BKJ0lj)3$C`!kLpVl znI=s%1I)1Cnp0Dr$hjhzLqq%E?ey2&o%yR`(tN!{+b9ZpDFf}Gf$1{4DymGbKa2^;444$rjF6*2UngCPA BbsGQx literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi-v11/ic_stat_name.png b/app/src/main/res/drawable-mdpi-v11/ic_stat_name.png deleted file mode 100644 index 8c9c68deb959c56a78a9b26e697e11e12835253d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj$2?seLn>}1CrE62@c;k+MGk9N zkJMCL`QUi9V^Xr?;d%~^V~f>zRxN83Y5v)GgTEu($+Wy#=U`*?!mKc-uOEbs=5Tl9 z|5um4!<6J#BNp+0xlF|4%?BE}#4LEYxUV_hT=IZ-Nrb`7o)p{O6z+x+b%FgXN!l9! ztpws*H?3VzlshHj0_&0d1Wo2yJnNO0T1<#xzbSUXro&BFVxCxpljz+xv4cwzA~bXQ z&NGE6*ts}bZjtYZSZoqTOW;+a>EiQv3`;b24*Pt@h>teZ=7D>gTe~DWM4f Do@Zdb diff --git a/app/src/main/res/drawable-mdpi-v9/ic_stat_name.png b/app/src/main/res/drawable-mdpi-v9/ic_stat_name.png deleted file mode 100644 index 9a740c441da3e337b5095a7b853f66e856a059c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 zcmV-00nh%4P)X1^@s6IQ*`u0002@Nkl5K=(24(&nf(DOPI5Q3YSJ>=lQ2Lq2c^Jeqr5X1P_ z4^~xGUDGt{&w1On8*-D2SX$L}y-Sir7DXY@n?vMz9+IPm+Oe1K5J@3~Ow&}dAA&P- z?8~yeDF$H}${+}|K&@h+yZnY?;QPMxJkOj98Os*63V~&rWf=q8AjCdx+^Z~j zYh+)z!FmClArzJog$QK;00000p}V?vS1ISz%h8zuvr%3i%H%|*INkq4B{Z5VOs{e!3OwZ zKKsCHCwT+7XMuJ>y`*msxMRNSR+GEI0SmAyDzq3Q0B%@}F)Pjk%rOl-I(CBsgE&F( zMsdUk?2{FcCZ|u(ZeaH-(j?YAD`rwAc{6j^GO?8rP|I#1BO@Tn1Pm1`fb6!}jnzrx9GU>Z5j(hrkOhAF|^(0&ZFIOW);KQ-Kv*+mMC`FPPEU`?L@{ zWZz$`P000>X1^@s6#OZ}&0006?NkluLnOV zBo>QNB9Y)ElS#_w^E8{yXgnTMp-_-O9ewDa7w6$8g9eWn-Z;U|SSolg4ylyWeH zuV)|-VB1kDmDt0ER)b3-nM@0Z!$E4bniLAf$zUEn@Z0yJ^`}@YuFK^zoeO;6 d_xt_{{R3Dh#fGpocX9v#002ovPDHLkV1j#mE7Sl0 diff --git a/app/src/main/res/drawable-mdpi/ic_today_dark.png b/app/src/main/res/drawable-mdpi/ic_today_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2e2fc92601c5f9311f3223874ba4d0b7eb7fa8 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJC7v#hAr-gYPD|u!P~dU1b-MC& z5i_TgM9H*Q9FO|nrEqaOam?{udE>#~&&B+w3>ELiowMZp(s8EXnFdRlgObs!GqwH) z+N1iv&G7!byk)nW|74{FoYKd8G?|tyXgFB&S!n}9*rn zgaU5bi*j!`pwChvu+brxk-L5R?w|7yc150i*2LZEC-}nQkdPT)xo_fA@tBxES-bzM VC71Eek^{Pz!PC{xWt~$(697TNS6Ki6 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi-v11/ic_stat_name.png b/app/src/main/res/drawable-xhdpi-v11/ic_stat_name.png deleted file mode 100644 index 53b008f9a4a8bfb1c829359a0536939fc74cf5bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmV-l0igbgP)1g&@fP#Te6Klofp{yjPS0JZnXt4Q~X2pB13qbzKF^{cB;e z3R9pE!DmVd0)HVu$2sD_u*KLNt8GQi7GpDU2)vz$&RteJ1l1P;;t_HgeKB^=YCBQu zi?La}#1Mc01Rwwb2tWV=!3)gfE}8hb5e6eM=Tsxm`+{AGu0|kDTw`4Pg-B_i$=Zv3 x{3vqN{C|@YNuo)#iB8CPb2NyAg&@f9=Lz7yf4Vn0=_5T$1lT98qi5{iHFPdL z^Q*~ZLMvX0jRu3kcP>vf*4jCOH{^*$T}rm^rPu43G6e5u(V3S8AbKatnw<6b0lM9; zDN|yAPN$Q)>ZVwERu}*;j5C1Ya3}}B%4zjK0MJBgXsdOS)uOAML$lep@~fPEcZ6Y> zvF}CzaU5sVOh}wVWAQj=gK=&=9;eO#))`R>*#BCxEa z!|vM5{GaSQ@CfV6%~@7yzyh&5~0tXZ>W%~}99GBT0}=7HVd z6u1Zaz$cIbUqL^31TKOESP3TNdf~<37E@v?O+i@$~`%ERyug+hB44Kj4r=go7pn zM``5c1%3b~1=tOb3i9{`icAHq5(MoJtpAN2hb{~9X)`tIzvcvEqjRYTf34|w%&CB; zL7oUpbPG@^2z17yzcGG%WT#H8);>B3i~egEac^ zsZ)Tpf>uytdfs0U5&_tN_==O?OeD*QTLs=NQ25P*F0)&z$mhDO+e5DIXglV_7(r<(-=L_;XRbxxjV zRr+{R^O;?pTLHjyLjs&r9q4q4knqw1=n$paPs{Sv1vH6}aFOhQiw({hNHQHk0x)MnjA&}zJVowB%CEwQz{{A)H zi7*kWBOx+&2LWDc8~t<5=s69q`1b#yc+u@pDqFY3YzjN!cblvj>wuq)n5p8s(w?vs z8H&R$XBs8N-wFINm81Akz8JV3XD`mWGdz@thoSg%*o8%j&lquf4>Tx=^D$ffo*hKC zDeM>6K79w<0lH}FW#Bxm=ViXx#cXjlM`QL#s#$U4G(@jK*&~PjU^}h$Sa;b&f4YMn zNUHdI%%0GMWm?+mB5@rwYq|8$EJ7i>l{H*AdofxT_C-pmV1wd^K6+}GI}fPow5LIE zwWdOfTGXaczY$gtB1&S^(#YOTTihRMg$~fk4=eZx%>uEAHEY(aS+i!%nr8b45Mgnl Tm}h{I00000NkvXXu0mjfE@<$V literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_stat_name.png b/app/src/main/res/drawable-xhdpi/ic_stat_name.png deleted file mode 100644 index 68b0ef790b397a3729f49d4e6188cd88cd25e316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1248 zcmYL}e^AnA9LK+8Z8J#4_KuK@{?t?AsU-Q4&KW2uh^+S=M4a5$WOcuv6z%zY*K^bIzq9vWi zU^0chy}i#Y{nTdeE7I#0gTuouBcr3;fk8p5-9)pPMcSd=HA3N1PF!3bgTaWjS@A)y zInfLTL*vv`Jj&BEAyWNXrINpJ$P(X%!{L$0?DA70v3Rwb!s79qQOAyT-Q;l2QGH$G zn(W`l*B#2cm&Rx`nR40V zExom=X@6_iSAB+!iw9{ft*uK-%xZyvsZc6~BO~EiSy^8cykA~kt#q+NB46qn5q%1U zA_E(J84B?XCX-$Mnx7}+yL78md(Xel&dGU;K5Pz!yn$cahuSF?i~HV~-P`jPQe!tK zr>0KRzkS}-MN`qL%-1EJKrjoWp`q)aBpz=HNLuaPPZFO$og8lDohhL}i^J${;lxCg zQ@4XssWj?irERV)aTR<>wpQ9<3CWG)W}J?>~gX068Mj23$Nd6Nr)}|LS9xVw6b@h8F&F?PE?) zR~09S!RdKY>T{Ox{3PNf43w>$%k6I#3R!1kW93&!nPCrhH}=a;BBIeCBWGu4*8>Mm z_l}IPQb|N&;AjPm9p*7`IsySMA`q-_INX^83j%?F0Z!0s+kkZggV}(?-a{>Y} zF&Iqtwc^@Zr`Bit-Q3*D*IPiXj*F?;K>sB@otcxHn@i1OG7%={!+w61nGkr^#!Z{v zIok7hJmdDaF49E0%TpM@2ZO;RFXjPbjb5)T;adW!y}jM_=+Uy()m1Q%U}`m5?NaG2 z#!`s diff --git a/app/src/main/res/drawable-xhdpi/ic_today_dark.png b/app/src/main/res/drawable-xhdpi/ic_today_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b30527919374960ee62aad6af57b5394504e4341 GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV3hE5aSW-r_4bw_*C7Xi)`v1q zIm`zSB_BCda_@*zYpp`-gVvzTl}R7`3Yi3T%v?&$ZeILpyEuMo`CeYq zcg|*wars(NrUQ2`UO8+vGg}vEJVV1qHs2*nw@kWb+w6aH*YBKGlWTHyx_enHO5)F7 zn)=KU@Qb0c+=_eUZbQap_2TB& z3MGMJ72FHn@BJH4r`i6JXk8Jsv!C;?|PFuZ5D?f;MY!<{?VRaai#A3xbzf=$De zVcMnH2Or*ky|?ok+h)VIf?RXgx3Oh6|H?Ss6YjgTw?t6Ti9@l4=LzFYo{s6ej^Eh` OGSJi2&t;ucLK6U#2Y+S8cUQUh@#|pcT zD0FZ{u{v&ft+b~@VUc#mb)^-qB0B`T1Oz#wT()1(^H5RT;M&c#t7qSu-U%1J@SS~> z@SaimdC9Xc^$%{|=r;bR)qi4UOrL-ghhobgt79`3m26)>`_i8Ft;d!|pQ<`)!aViN z_dOo!Hfu~(YeTPTGqMOc{Ac$t3)#T1?y1CrnJ3O{u+pv#zNYP-##P^%R9}7jlJ(2U z&KurpN&oBkQ#0f3j_2?E&5b^5>@5txbaF|-v!&nF_T2G$Ui0|L((7t>Vmy!6FzL?T zko;eDdJWUu86S$@2(OsPxS)8x!&)AOtqe>Y3JpMFfn(#myN@$-)Oj6xMe6NKIRzXT z7+EIRMNc*R9o0E=t>$KS!_A_pW%e!$8qL-Fw@ZlRO@>_?w*OqdW13{a$*f&{v@#=&x$+#fLQX&Gk&_!Wg3^X*Nx94jhn< znKNH@UAwWENF)-8L?V$$Boc`ZM7>_`T)R@KoCVpBY#gB5?ONIh91n-XQ@_26#o`6} zOn6V@0OfL7X=4SfT>x6GRvbNS-qSchsZ>(h2n+;(_cSteGMPN4LCG!vm%8TF*n-zi z09~WZod@st`w8sJQK!?H!4}y8@Toud<955f@uXq>%6~l0KLS&1#Ido{=9RQw)Hm-@K?a59&G@; z;rV9BwOv-=L)Y;0)CFM0>wyF0ayiBP4L~V%MEji1Yi<54)p?D6*X^wTtxf>QwD}By z0)%ml3V;CY8z7s_D(27ukZJQ71V8`;z@svmjA9NQ0GT$QK>!XK0DEwW3(1x97G}zg zM&l+3fF%R?L{lp)*X#AAV+Sle1EkaGH&{i%02p}&NTpJbcz6*3fGGeHzW$i-@DuzB z&*4?brpy-%|FH9^fPHzwZ%|>FGGii{u diff --git a/app/src/main/res/drawable-xxhdpi/ic_history_dark.png b/app/src/main/res/drawable-xxhdpi/ic_history_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..31e1a6de068fe3c6cfd84ffb7df05be738fdaab6 GIT binary patch literal 1790 zcmVu(iR5WlyShb>rI3#~hTgb{#${)2Feu#fN&VLhIm;Wa5& zcm<(}u$gd>aGr3Ja3>=8*>f;T8=-;6@S46?@zV&e5RMYA#!$El{}2ulUM5s}#gC0W zNO+rY!JyLb2mUfTn1{*g+utJeIZ%8#N-#v*q**IS&=xF~CCADiZ-^fVPi1}9e@eKW zAjOZzZA4oSWKH>x5qdSv`VyiW4nK#05&TZq`;RlvSyBFS!ljtAl4Jkfgf|Gw2#a7; z4l5h+^CFDJ3+o=jnV4T2=N2t#S3W0D*CGhdp=b|b4WTB+__M*oQG6v~`QT?>N^3&Z z79ok^#Op&OV-=eD;dkyJ3`8)(rnDJgZAj&_kRK3gE$~*4QpL@X8THDvD1T)Lw^KrW zr^!)Za5%&|!EW*SG(`U{*ThmrEdThL|uH5*r;M&hHfp(wC$NgLqkrs7J#4 z_k<})Ty*yc1^9(S#{^EG1%$Ig89q)_RTc5KWKrYTydl9Zv;lh!DmiWto=FPRm4u&# z)yKqVm&D`a!s_e^UPF?=@HSzXxiCdx^kPBc#t~eHYewq?v!%!-1dU_Po(P)d%A;If z5=2EaTpHjV!R$YvGipFx=^hvgERG4}Yj>r5-p%S)Fn5_SPxH7Fj%7&3WygF3}WV>!SSsd0OP76qP?~ZP$MW@wPw%& z>l8u9pq2U%+Db}_GIMFkGdIHqn6HqX_eG|g zWS~kAf>vkP0F5ZG2NmY3Ofpc5csIxZ6&W@_y<(%LKh${xgjPEobu9BtD(EtR?y74< z1Dp?i;Da8R>c9y9DL=~B67bG1(U+7r?1DzMyC8fCJ1rWa5Y<%)ihu=Eo8>UDnMK%= zJBs9X#_=gR1HeaCSLx2k(HgG`L#MNsK|B+o56G~34yB$Sh)Fb4R8^cydZ3c!;PAkUP zpi?*4Hpu_rBl~kVk9?6y%Paxg7!Da|vIR zxut8;mPug)@)4WDOyrJ=Nt*cqlZP|elbjcXc&=06cGtKNrraGRTKVI6pDwM}p!Rb` zq5Qv`TzOMwghDQZ1o;jNX8#tKOis(<6=3N8YZoMTgGP72CM)s1L4qbMHqKVBEi?6{ za{||M(&z@f!31emg86%h@T>6di09JiS2?8n%}UY|t=M)(SZdjos}V+)gndk~rY#x*G0q*c+nC z%jJs|X?8oR`g~`c>&Zg!RfE%;VXiQ{<>Vw}OhKQ(r50f}aQac!Xwcc;gRFKA-rX1S zcE#)Hiq7ZKMmS4+Bf?JFFfQC)6(`d~Ir>GsYbXLA*Kz4z`jlU$gck(;q^i&V1n%g0 z6-T7z!-vHc{>;1^R8)6lvLg;k!@78{M1>)<7s_0;WJ OkeH{dpUXO@geCw7K*iwz diff --git a/app/src/main/res/drawable-xxhdpi/ic_today_dark.png b/app/src/main/res/drawable-xxhdpi/ic_today_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e48ce0631b53e0aa08bf1d5d80bdf70800dd0a46 GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U}E-kaSW-r_4cm4_hAQ_V;`?M z9b@J_4A~mwy{9YM zr*3*{{PNVcexNg8U`yeS+LudBCO^9rw5yP3@9EIv+oqjcBK*?e$p`)=!7r!nzC$hwD z`*eC^g!{(R=?9{&9RjjmGAA6|WOD489YdaE$pO_jsmjSO)eo-=)qQFIiE)A4wtdMD zw)*YeJ0rxbM5Q+EMSX41`qGbo=l%$&n*ZbF3+JlGwLhYlFW&g?@ScJi*WRVCB;vnn pKG%Bkdjh9oi+~dci166{iF?wsZNWkxE+>Ip>gnp|vd$@?2>?_N<)8on literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_history.xml b/app/src/main/res/layout/activity_history.xml new file mode 100644 index 0000000..c53dbe3 --- /dev/null +++ b/app/src/main/res/layout/activity_history.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 263e3b9..ab93660 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -13,7 +13,7 @@ android:orderInCategory="15" android:title="@string/action_todayList" android:onClick="showTodayList" - android:icon="@drawable/ic_stat_name" + android:icon="@drawable/ic_today_dark" android:visible="false" app:showAsAction="ifRoom" /> Sorry, your Android version is not supported. Historique OK + Historique \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cbe2d9a..f03c98c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -20,6 +20,7 @@ Delete task list? Drag handle Create a new task list + OK List @@ -80,5 +81,7 @@ Sorry, your Android version is not supported. History - OK + + History +