From d6e05c17ba391418447a5f62fc9e2548af18bbd2 Mon Sep 17 00:00:00 2001 From: Geoffroy Bonneville Date: Wed, 10 Sep 2025 18:40:00 -0400 Subject: [PATCH] Renamed old app into Donext Added DonextV2 module with Compose and Room Set up clean architecture Add DI with Hilt Setup initial database Display task lists on main activity --- .github/workflows/android.yaml | 4 +- .idea/assetWizardSettings.xml | 5 + .idea/deploymentTargetSelector.xml | 3 + .idea/dictionaries/project.xml | 7 ++ .idea/gradle.xml | 3 +- build.gradle | 7 ++ {app => donext}/.gitignore | 0 {app => donext}/build.gradle | 2 + {app => donext}/proguard-rules.pro | 0 .../6.json | 0 {app => donext}/src/main/AndroidManifest.xml | 0 {app => donext}/src/main/ic_launcher-web.png | Bin .../com/wismna/geoffroy/donext/DoNext.java | 0 .../donext/activities/HistoryActivity.java | 0 .../donext/activities/MainActivity.java | 0 .../donext/activities/SettingsActivity.java | 0 .../donext/activities/TodayActivity.java | 0 .../activities/ToolBarActivityBase.java | 0 .../donext/adapters/SectionsPagerAdapter.java | 0 .../SmartFragmentStatePagerAdapter.java | 0 .../adapters/TaskListRecyclerViewAdapter.java | 0 .../adapters/TaskRecyclerViewAdapter.java | 0 .../donext/adapters/TodayArrayAdapter.java | 0 .../com/wismna/geoffroy/donext/dao/Task.java | 0 .../wismna/geoffroy/donext/dao/TaskList.java | 0 .../donext/database/DatabaseHelper.java | 0 .../donext/database/TaskDataAccess.java | 0 .../donext/database/TaskListDataAccess.java | 0 .../donext/fragments/AboutDialogFragment.java | 0 .../fragments/ConfirmDialogFragment.java | 0 .../fragments/DynamicDialogFragment.java | 0 .../donext/fragments/MainFragment.java | 0 .../fragments/TaskFormDialogFragment.java | 0 .../fragments/TaskListsDialogFragment.java | 0 .../donext/fragments/TasksFragment.java | 0 .../fragments/TodayFormDialogFragment.java | 0 .../donext/helpers/TaskListTouchHelper.java | 0 .../donext/helpers/TaskTouchHelper.java | 0 .../listeners/RecyclerItemClickListener.java | 0 .../geoffroy/donext/utils/TaskRunner.java | 0 .../donext/widgets/DividerItemDecoration.java | 0 .../widgets/InterceptTouchRelativeLayout.java | 0 .../widgets/NoScrollingLayoutManager.java | 0 .../donext/widgets/NonSwipeableViewPager.java | 0 .../res/drawable-hdpi/ic_access_alarm.png | Bin .../src/main/res/drawable-hdpi/ic_add.png | Bin .../drawable-hdpi/ic_arrow_right_light.png | Bin .../main/res/drawable-hdpi/ic_check_ligth.png | Bin .../main/res/drawable-hdpi/ic_close_light.png | Bin .../ic_create_new_folder_dark.png | Bin .../res/drawable-hdpi/ic_format_size_dark.png | Bin .../res/drawable-hdpi/ic_history_dark.png | Bin .../ic_keyboard_arrow_left_white_24dp.png | Bin .../ic_keyboard_arrow_right_white_24dp.png | Bin .../res/drawable-hdpi/ic_list_white_24dp.png | Bin .../src/main/res/drawable-hdpi/ic_reorder.png | Bin .../ic_smiley_satisfied_light.png | Bin .../main/res/drawable-hdpi/ic_today_dark.png | Bin .../res/drawable-mdpi/ic_access_alarm.png | Bin .../src/main/res/drawable-mdpi/ic_add.png | Bin .../drawable-mdpi/ic_arrow_right_light.png | Bin .../main/res/drawable-mdpi/ic_check_ligth.png | Bin .../main/res/drawable-mdpi/ic_close_light.png | Bin .../ic_create_new_folder_dark.png | Bin .../res/drawable-mdpi/ic_format_size_dark.png | Bin .../res/drawable-mdpi/ic_history_dark.png | Bin .../ic_keyboard_arrow_left_white_24dp.png | Bin .../ic_keyboard_arrow_right_white_24dp.png | Bin .../res/drawable-mdpi/ic_list_white_24dp.png | Bin .../src/main/res/drawable-mdpi/ic_reorder.png | Bin .../ic_smiley_satisfied_light.png | Bin .../main/res/drawable-mdpi/ic_today_dark.png | Bin .../res/drawable-xhdpi/ic_access_alarm.png | Bin .../src/main/res/drawable-xhdpi/ic_add.png | Bin .../drawable-xhdpi/ic_arrow_right_light.png | Bin .../res/drawable-xhdpi/ic_check_ligth.png | Bin .../res/drawable-xhdpi/ic_close_light.png | Bin .../ic_create_new_folder_dark.png | Bin .../drawable-xhdpi/ic_format_size_dark.png | Bin .../res/drawable-xhdpi/ic_history_dark.png | Bin .../ic_keyboard_arrow_left_white_24dp.png | Bin .../ic_keyboard_arrow_right_white_24dp.png | Bin .../res/drawable-xhdpi/ic_list_white_24dp.png | Bin .../main/res/drawable-xhdpi/ic_reorder.png | Bin .../ic_smiley_satisfied_light.png | Bin .../main/res/drawable-xhdpi/ic_today_dark.png | Bin .../res/drawable-xxhdpi/ic_access_alarm.png | Bin .../src/main/res/drawable-xxhdpi/ic_add.png | Bin .../drawable-xxhdpi/ic_arrow_right_light.png | Bin .../res/drawable-xxhdpi/ic_check_ligth.png | Bin .../res/drawable-xxhdpi/ic_close_light.png | Bin .../ic_create_new_folder_dark.png | Bin .../drawable-xxhdpi/ic_format_size_dark.png | Bin .../res/drawable-xxhdpi/ic_history_dark.png | Bin .../ic_keyboard_arrow_left_white_24dp.png | Bin .../ic_keyboard_arrow_right_white_24dp.png | Bin .../drawable-xxhdpi/ic_list_white_24dp.png | Bin .../main/res/drawable-xxhdpi/ic_reorder.png | Bin .../ic_smiley_satisfied_light.png | Bin .../res/drawable-xxhdpi/ic_today_dark.png | Bin .../ic_keyboard_arrow_left_white_24dp.png | Bin .../ic_keyboard_arrow_right_white_24dp.png | Bin .../drawable-xxxhdpi/ic_list_white_24dp.png | Bin .../ic_low_priority_lightgray_24dp.xml | 0 .../drawable/ic_priority_high_red_24dp.xml | 0 .../res/drawable/ic_refresh_black_24dp.xml | 0 .../src/main/res/drawable/task_select.xml | 0 .../src/main/res/drawable/tasklist_select.xml | 0 .../main/res/layout-v21/content_task_form.xml | 0 .../main/res/layout-w600dp/fragment_main.xml | 0 .../src/main/res/layout/activity_history.xml | 0 .../src/main/res/layout/activity_main.xml | 0 .../src/main/res/layout/activity_today.xml | 0 .../src/main/res/layout/content_about.xml | 0 .../src/main/res/layout/content_task_form.xml | 0 .../src/main/res/layout/content_tasklists.xml | 0 .../main/res/layout/content_today_form.xml | 0 .../res/layout/fragment_dynamic_dialog.xml | 0 .../src/main/res/layout/fragment_main.xml | 0 .../res/layout/fragment_task_confirmation.xml | 0 .../res/layout/fragment_task_detailed.xml | 0 .../main/res/layout/fragment_task_first.xml | 0 .../main/res/layout/fragment_task_simple.xml | 0 .../src/main/res/layout/fragment_tasklist.xml | 0 .../src/main/res/layout/fragment_tasks.xml | 0 .../src/main/res/layout/list_task_item.xml | 0 .../main/res/layout/list_tasklist_item.xml | 0 .../src/main/res/layout/toolbar.xml | 0 .../main/res/menu/menu_dynamic_fragment.xml | 0 .../src/main/res/menu/menu_main.xml | 0 .../src/main/res/menu/menu_today.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../mipmap-hdpi/ic_launcher_foreground.png | Bin .../res/mipmap-hdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../mipmap-mdpi/ic_launcher_foreground.png | Bin .../res/mipmap-mdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../mipmap-xhdpi/ic_launcher_foreground.png | Bin .../res/mipmap-xhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../src/main/res/values-fr/arrays.xml | 0 .../src/main/res/values-fr/plurals.xml | 0 .../src/main/res/values-fr/strings.xml | 0 .../src/main/res/values-v21/styles.xml | 0 .../src/main/res/values-w600dp/bools.xml | 0 .../src/main/res/values-w820dp/dimens.xml | 0 .../src/main/res/values/arrays.xml | 0 {app => donext}/src/main/res/values/bools.xml | 0 .../src/main/res/values/colors.xml | 0 .../src/main/res/values/dimens.xml | 0 .../src/main/res/values/plurals.xml | 0 .../src/main/res/values/strings.xml | 0 .../src/main/res/values/styles.xml | 0 .../src/main/res/xml/preferences.xml | 0 .../geoffroy/donext/ExampleUnitTest.java | 0 donextv2/.gitignore | 1 + donextv2/build.gradle.kts | 71 +++++++++++ donextv2/proguard-rules.pro | 21 ++++ .../donext/ExampleInstrumentedTest.kt | 24 ++++ donextv2/src/main/AndroidManifest.xml | 18 +++ .../geoffroy/donext/DonextApplication.kt | 8 ++ .../wismna/geoffroy/donext/data/Converters.kt | 17 +++ .../wismna/geoffroy/donext/data/Mappers.kt | 41 +++++++ .../donext/data/entities/TaskEntity.kt | 22 ++++ .../donext/data/entities/TaskListEntity.kt | 12 ++ .../donext/data/injection/DatabaseModule.kt | 31 +++++ .../donext/data/injection/RepositoryModule.kt | 18 +++ .../geoffroy/donext/data/local/Database.kt | 65 ++++++++++ .../geoffroy/donext/data/local/dao/TaskDao.kt | 32 +++++ .../donext/data/local/dao/TaskListDao.kt | 24 ++++ .../local/repository/TaskRepositoryImpl.kt | 56 +++++++++ .../geoffroy/donext/domain/model/Task.kt | 14 +++ .../geoffroy/donext/domain/model/TaskList.kt | 7 ++ .../domain/repository/TaskRepository.kt | 18 +++ .../domain/usecase/GetTaskListsUseCase.kt | 10 ++ .../donext/presentation/MainActivity.kt | 114 ++++++++++++++++++ .../presentation/screen/TaskListScreen.kt | 19 +++ .../donext/presentation/ui/theme/Color.kt | 11 ++ .../donext/presentation/ui/theme/Theme.kt | 57 +++++++++ .../donext/presentation/ui/theme/Type.kt | 34 ++++++ .../presentation/viewmodel/MainViewModel.kt | 34 ++++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1226 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 547 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3041 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 952 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 408 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 1976 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 1704 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 743 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4303 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 2448 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 1100 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 6588 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 3434 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 2006 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 9532 bytes donextv2/src/main/res/values/colors.xml | 4 + donextv2/src/main/res/values/strings.xml | 4 + donextv2/src/main/res/values/themes.xml | 5 + settings.gradle | 3 +- 210 files changed, 832 insertions(+), 4 deletions(-) create mode 100644 .idea/dictionaries/project.xml rename {app => donext}/.gitignore (100%) rename {app => donext}/build.gradle (99%) rename {app => donext}/proguard-rules.pro (100%) rename {app => donext}/schemas/com.wismna.geoffroy.donext.data.AppDatabase/6.json (100%) rename {app => donext}/src/main/AndroidManifest.xml (100%) rename {app => donext}/src/main/ic_launcher-web.png (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/DoNext.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/activities/HistoryActivity.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/activities/SettingsActivity.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/activities/TodayActivity.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/activities/ToolBarActivityBase.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/adapters/SectionsPagerAdapter.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/adapters/SmartFragmentStatePagerAdapter.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/adapters/TaskRecyclerViewAdapter.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/adapters/TodayArrayAdapter.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/dao/Task.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/database/DatabaseHelper.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/fragments/AboutDialogFragment.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/fragments/MainFragment.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/fragments/TaskFormDialogFragment.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/helpers/TaskListTouchHelper.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/helpers/TaskTouchHelper.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/utils/TaskRunner.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/widgets/DividerItemDecoration.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/widgets/InterceptTouchRelativeLayout.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/widgets/NoScrollingLayoutManager.java (100%) rename {app => donext}/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_access_alarm.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_add.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_arrow_right_light.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_check_ligth.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_close_light.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_create_new_folder_dark.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_format_size_dark.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_history_dark.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_keyboard_arrow_left_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_keyboard_arrow_right_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_list_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_reorder.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_smiley_satisfied_light.png (100%) rename {app => donext}/src/main/res/drawable-hdpi/ic_today_dark.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_access_alarm.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_add.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_arrow_right_light.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_check_ligth.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_close_light.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_create_new_folder_dark.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_format_size_dark.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_history_dark.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_keyboard_arrow_left_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_keyboard_arrow_right_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_list_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_reorder.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_smiley_satisfied_light.png (100%) rename {app => donext}/src/main/res/drawable-mdpi/ic_today_dark.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_access_alarm.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_add.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_arrow_right_light.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_check_ligth.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_close_light.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_create_new_folder_dark.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_format_size_dark.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_history_dark.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_keyboard_arrow_left_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_keyboard_arrow_right_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_list_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_reorder.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_smiley_satisfied_light.png (100%) rename {app => donext}/src/main/res/drawable-xhdpi/ic_today_dark.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_access_alarm.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_add.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_arrow_right_light.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_check_ligth.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_close_light.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_create_new_folder_dark.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_format_size_dark.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_history_dark.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_left_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_right_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_list_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_reorder.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_smiley_satisfied_light.png (100%) rename {app => donext}/src/main/res/drawable-xxhdpi/ic_today_dark.png (100%) rename {app => donext}/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_left_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_right_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable-xxxhdpi/ic_list_white_24dp.png (100%) rename {app => donext}/src/main/res/drawable/ic_low_priority_lightgray_24dp.xml (100%) rename {app => donext}/src/main/res/drawable/ic_priority_high_red_24dp.xml (100%) rename {app => donext}/src/main/res/drawable/ic_refresh_black_24dp.xml (100%) rename {app => donext}/src/main/res/drawable/task_select.xml (100%) rename {app => donext}/src/main/res/drawable/tasklist_select.xml (100%) rename {app => donext}/src/main/res/layout-v21/content_task_form.xml (100%) rename {app => donext}/src/main/res/layout-w600dp/fragment_main.xml (100%) rename {app => donext}/src/main/res/layout/activity_history.xml (100%) rename {app => donext}/src/main/res/layout/activity_main.xml (100%) rename {app => donext}/src/main/res/layout/activity_today.xml (100%) rename {app => donext}/src/main/res/layout/content_about.xml (100%) rename {app => donext}/src/main/res/layout/content_task_form.xml (100%) rename {app => donext}/src/main/res/layout/content_tasklists.xml (100%) rename {app => donext}/src/main/res/layout/content_today_form.xml (100%) rename {app => donext}/src/main/res/layout/fragment_dynamic_dialog.xml (100%) rename {app => donext}/src/main/res/layout/fragment_main.xml (100%) rename {app => donext}/src/main/res/layout/fragment_task_confirmation.xml (100%) rename {app => donext}/src/main/res/layout/fragment_task_detailed.xml (100%) rename {app => donext}/src/main/res/layout/fragment_task_first.xml (100%) rename {app => donext}/src/main/res/layout/fragment_task_simple.xml (100%) rename {app => donext}/src/main/res/layout/fragment_tasklist.xml (100%) rename {app => donext}/src/main/res/layout/fragment_tasks.xml (100%) rename {app => donext}/src/main/res/layout/list_task_item.xml (100%) rename {app => donext}/src/main/res/layout/list_tasklist_item.xml (100%) rename {app => donext}/src/main/res/layout/toolbar.xml (100%) rename {app => donext}/src/main/res/menu/menu_dynamic_fragment.xml (100%) rename {app => donext}/src/main/res/menu/menu_main.xml (100%) rename {app => donext}/src/main/res/menu/menu_today.xml (100%) rename {app => donext}/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {app => donext}/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {app => donext}/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename {app => donext}/src/main/res/mipmap-hdpi/ic_launcher_foreground.png (100%) rename {app => donext}/src/main/res/mipmap-hdpi/ic_launcher_round.png (100%) rename {app => donext}/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {app => donext}/src/main/res/mipmap-mdpi/ic_launcher_foreground.png (100%) rename {app => donext}/src/main/res/mipmap-mdpi/ic_launcher_round.png (100%) rename {app => donext}/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename {app => donext}/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png (100%) rename {app => donext}/src/main/res/mipmap-xhdpi/ic_launcher_round.png (100%) rename {app => donext}/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {app => donext}/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png (100%) rename {app => donext}/src/main/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename {app => donext}/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {app => donext}/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png (100%) rename {app => donext}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename {app => donext}/src/main/res/values-fr/arrays.xml (100%) rename {app => donext}/src/main/res/values-fr/plurals.xml (100%) rename {app => donext}/src/main/res/values-fr/strings.xml (100%) rename {app => donext}/src/main/res/values-v21/styles.xml (100%) rename {app => donext}/src/main/res/values-w600dp/bools.xml (100%) rename {app => donext}/src/main/res/values-w820dp/dimens.xml (100%) rename {app => donext}/src/main/res/values/arrays.xml (100%) rename {app => donext}/src/main/res/values/bools.xml (100%) rename {app => donext}/src/main/res/values/colors.xml (100%) rename {app => donext}/src/main/res/values/dimens.xml (100%) rename {app => donext}/src/main/res/values/plurals.xml (100%) rename {app => donext}/src/main/res/values/strings.xml (100%) rename {app => donext}/src/main/res/values/styles.xml (100%) rename {app => donext}/src/main/res/xml/preferences.xml (100%) rename {app => donext}/src/test/java/com/wismna/geoffroy/donext/ExampleUnitTest.java (100%) create mode 100644 donextv2/.gitignore create mode 100644 donextv2/build.gradle.kts create mode 100644 donextv2/proguard-rules.pro create mode 100644 donextv2/src/androidTest/java/com/wismna/geoffroy/donext/ExampleInstrumentedTest.kt create mode 100644 donextv2/src/main/AndroidManifest.xml create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/DonextApplication.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/data/Converters.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/data/Mappers.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/data/entities/TaskEntity.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/data/entities/TaskListEntity.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/data/injection/DatabaseModule.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/data/injection/RepositoryModule.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/Database.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/dao/TaskDao.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/dao/TaskListDao.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/repository/TaskRepositoryImpl.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/Task.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/TaskList.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/domain/repository/TaskRepository.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/domain/usecase/GetTaskListsUseCase.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/MainActivity.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskListScreen.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Color.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Theme.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Type.kt create mode 100644 donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/MainViewModel.kt create mode 100644 donextv2/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 donextv2/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 donextv2/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 donextv2/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 donextv2/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 donextv2/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 donextv2/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 donextv2/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 donextv2/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 donextv2/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 donextv2/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 donextv2/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 donextv2/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 donextv2/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 donextv2/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 donextv2/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 donextv2/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 donextv2/src/main/res/values/colors.xml create mode 100644 donextv2/src/main/res/values/strings.xml create mode 100644 donextv2/src/main/res/values/themes.xml diff --git a/.github/workflows/android.yaml b/.github/workflows/android.yaml index 47c3fe4..c380515 100644 --- a/.github/workflows/android.yaml +++ b/.github/workflows/android.yaml @@ -8,7 +8,7 @@ on: workflow_dispatch: env: - BUILD_DIR: app/build/outputs/bundle/release + BUILD_DIR: donext/build/outputs/bundle/release jobs: build: @@ -26,7 +26,7 @@ jobs: - name: Replace tokens in build.gradle run: | - sed -i 's/#{\([^}]*\)}/${\1}/g' app/build.gradle + sed -i 's/#{\([^}]*\)}/${\1}/g' donext/build.gradle - name: Cache Gradle uses: actions/cache@v3 diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index 6d7c648..178af39 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -3,6 +3,11 @@ \ No newline at end of file diff --git a/.idea/dictionaries/project.xml b/.idea/dictionaries/project.xml new file mode 100644 index 0000000..83a788d --- /dev/null +++ b/.idea/dictionaries/project.xml @@ -0,0 +1,7 @@ + + + + donext + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 639c779..3e94301 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -10,7 +10,8 @@ diff --git a/build.gradle b/build.gradle index b926e12..457a751 100644 --- a/build.gradle +++ b/build.gradle @@ -15,12 +15,19 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:8.13.0' classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.3' + classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.21' + classpath 'org.jetbrains.kotlin:compose-compiler-gradle-plugin:2.0.21' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } +plugins { + id("com.google.devtools.ksp") version "2.0.21-1.0.27" apply false + id("com.google.dagger.hilt.android") version "2.57.1" apply false +} + allprojects { repositories { mavenCentral() diff --git a/app/.gitignore b/donext/.gitignore similarity index 100% rename from app/.gitignore rename to donext/.gitignore diff --git a/app/build.gradle b/donext/build.gradle similarity index 99% rename from app/build.gradle rename to donext/build.gradle index 7f41091..b1488fc 100644 --- a/app/build.gradle +++ b/donext/build.gradle @@ -1,6 +1,8 @@ apply plugin: 'com.android.application' android { + compileSdk 35 + defaultConfig { applicationId "com.wismna.geoffroy.donext" minSdkVersion 21 diff --git a/app/proguard-rules.pro b/donext/proguard-rules.pro similarity index 100% rename from app/proguard-rules.pro rename to donext/proguard-rules.pro diff --git a/app/schemas/com.wismna.geoffroy.donext.data.AppDatabase/6.json b/donext/schemas/com.wismna.geoffroy.donext.data.AppDatabase/6.json similarity index 100% rename from app/schemas/com.wismna.geoffroy.donext.data.AppDatabase/6.json rename to donext/schemas/com.wismna.geoffroy.donext.data.AppDatabase/6.json diff --git a/app/src/main/AndroidManifest.xml b/donext/src/main/AndroidManifest.xml similarity index 100% rename from app/src/main/AndroidManifest.xml rename to donext/src/main/AndroidManifest.xml diff --git a/app/src/main/ic_launcher-web.png b/donext/src/main/ic_launcher-web.png similarity index 100% rename from app/src/main/ic_launcher-web.png rename to donext/src/main/ic_launcher-web.png diff --git a/app/src/main/java/com/wismna/geoffroy/donext/DoNext.java b/donext/src/main/java/com/wismna/geoffroy/donext/DoNext.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/DoNext.java rename to donext/src/main/java/com/wismna/geoffroy/donext/DoNext.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/activities/HistoryActivity.java b/donext/src/main/java/com/wismna/geoffroy/donext/activities/HistoryActivity.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/activities/HistoryActivity.java rename to donext/src/main/java/com/wismna/geoffroy/donext/activities/HistoryActivity.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java b/donext/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java rename to donext/src/main/java/com/wismna/geoffroy/donext/activities/MainActivity.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/activities/SettingsActivity.java b/donext/src/main/java/com/wismna/geoffroy/donext/activities/SettingsActivity.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/activities/SettingsActivity.java rename to donext/src/main/java/com/wismna/geoffroy/donext/activities/SettingsActivity.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/activities/TodayActivity.java b/donext/src/main/java/com/wismna/geoffroy/donext/activities/TodayActivity.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/activities/TodayActivity.java rename to donext/src/main/java/com/wismna/geoffroy/donext/activities/TodayActivity.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/activities/ToolBarActivityBase.java b/donext/src/main/java/com/wismna/geoffroy/donext/activities/ToolBarActivityBase.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/activities/ToolBarActivityBase.java rename to donext/src/main/java/com/wismna/geoffroy/donext/activities/ToolBarActivityBase.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/adapters/SectionsPagerAdapter.java b/donext/src/main/java/com/wismna/geoffroy/donext/adapters/SectionsPagerAdapter.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/adapters/SectionsPagerAdapter.java rename to donext/src/main/java/com/wismna/geoffroy/donext/adapters/SectionsPagerAdapter.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/adapters/SmartFragmentStatePagerAdapter.java b/donext/src/main/java/com/wismna/geoffroy/donext/adapters/SmartFragmentStatePagerAdapter.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/adapters/SmartFragmentStatePagerAdapter.java rename to donext/src/main/java/com/wismna/geoffroy/donext/adapters/SmartFragmentStatePagerAdapter.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java b/donext/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java rename to donext/src/main/java/com/wismna/geoffroy/donext/adapters/TaskListRecyclerViewAdapter.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskRecyclerViewAdapter.java b/donext/src/main/java/com/wismna/geoffroy/donext/adapters/TaskRecyclerViewAdapter.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/adapters/TaskRecyclerViewAdapter.java rename to donext/src/main/java/com/wismna/geoffroy/donext/adapters/TaskRecyclerViewAdapter.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/adapters/TodayArrayAdapter.java b/donext/src/main/java/com/wismna/geoffroy/donext/adapters/TodayArrayAdapter.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/adapters/TodayArrayAdapter.java rename to donext/src/main/java/com/wismna/geoffroy/donext/adapters/TodayArrayAdapter.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/dao/Task.java b/donext/src/main/java/com/wismna/geoffroy/donext/dao/Task.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/dao/Task.java rename to donext/src/main/java/com/wismna/geoffroy/donext/dao/Task.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java b/donext/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java rename to donext/src/main/java/com/wismna/geoffroy/donext/dao/TaskList.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/database/DatabaseHelper.java b/donext/src/main/java/com/wismna/geoffroy/donext/database/DatabaseHelper.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/database/DatabaseHelper.java rename to donext/src/main/java/com/wismna/geoffroy/donext/database/DatabaseHelper.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java b/donext/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java rename to donext/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java b/donext/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java rename to donext/src/main/java/com/wismna/geoffroy/donext/database/TaskListDataAccess.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/AboutDialogFragment.java b/donext/src/main/java/com/wismna/geoffroy/donext/fragments/AboutDialogFragment.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/fragments/AboutDialogFragment.java rename to donext/src/main/java/com/wismna/geoffroy/donext/fragments/AboutDialogFragment.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java b/donext/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java rename to donext/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java b/donext/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java rename to donext/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/MainFragment.java b/donext/src/main/java/com/wismna/geoffroy/donext/fragments/MainFragment.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/fragments/MainFragment.java rename to donext/src/main/java/com/wismna/geoffroy/donext/fragments/MainFragment.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskFormDialogFragment.java b/donext/src/main/java/com/wismna/geoffroy/donext/fragments/TaskFormDialogFragment.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskFormDialogFragment.java rename to donext/src/main/java/com/wismna/geoffroy/donext/fragments/TaskFormDialogFragment.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java b/donext/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java rename to donext/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java b/donext/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java rename to donext/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java b/donext/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java rename to donext/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/helpers/TaskListTouchHelper.java b/donext/src/main/java/com/wismna/geoffroy/donext/helpers/TaskListTouchHelper.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/helpers/TaskListTouchHelper.java rename to donext/src/main/java/com/wismna/geoffroy/donext/helpers/TaskListTouchHelper.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/helpers/TaskTouchHelper.java b/donext/src/main/java/com/wismna/geoffroy/donext/helpers/TaskTouchHelper.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/helpers/TaskTouchHelper.java rename to donext/src/main/java/com/wismna/geoffroy/donext/helpers/TaskTouchHelper.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java b/donext/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java rename to donext/src/main/java/com/wismna/geoffroy/donext/listeners/RecyclerItemClickListener.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/utils/TaskRunner.java b/donext/src/main/java/com/wismna/geoffroy/donext/utils/TaskRunner.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/utils/TaskRunner.java rename to donext/src/main/java/com/wismna/geoffroy/donext/utils/TaskRunner.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/widgets/DividerItemDecoration.java b/donext/src/main/java/com/wismna/geoffroy/donext/widgets/DividerItemDecoration.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/widgets/DividerItemDecoration.java rename to donext/src/main/java/com/wismna/geoffroy/donext/widgets/DividerItemDecoration.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/widgets/InterceptTouchRelativeLayout.java b/donext/src/main/java/com/wismna/geoffroy/donext/widgets/InterceptTouchRelativeLayout.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/widgets/InterceptTouchRelativeLayout.java rename to donext/src/main/java/com/wismna/geoffroy/donext/widgets/InterceptTouchRelativeLayout.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/widgets/NoScrollingLayoutManager.java b/donext/src/main/java/com/wismna/geoffroy/donext/widgets/NoScrollingLayoutManager.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/widgets/NoScrollingLayoutManager.java rename to donext/src/main/java/com/wismna/geoffroy/donext/widgets/NoScrollingLayoutManager.java diff --git a/app/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java b/donext/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java similarity index 100% rename from app/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java rename to donext/src/main/java/com/wismna/geoffroy/donext/widgets/NonSwipeableViewPager.java diff --git a/app/src/main/res/drawable-hdpi/ic_access_alarm.png b/donext/src/main/res/drawable-hdpi/ic_access_alarm.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_access_alarm.png rename to donext/src/main/res/drawable-hdpi/ic_access_alarm.png diff --git a/app/src/main/res/drawable-hdpi/ic_add.png b/donext/src/main/res/drawable-hdpi/ic_add.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_add.png rename to donext/src/main/res/drawable-hdpi/ic_add.png diff --git a/app/src/main/res/drawable-hdpi/ic_arrow_right_light.png b/donext/src/main/res/drawable-hdpi/ic_arrow_right_light.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_arrow_right_light.png rename to donext/src/main/res/drawable-hdpi/ic_arrow_right_light.png diff --git a/app/src/main/res/drawable-hdpi/ic_check_ligth.png b/donext/src/main/res/drawable-hdpi/ic_check_ligth.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_check_ligth.png rename to donext/src/main/res/drawable-hdpi/ic_check_ligth.png diff --git a/app/src/main/res/drawable-hdpi/ic_close_light.png b/donext/src/main/res/drawable-hdpi/ic_close_light.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_close_light.png rename to donext/src/main/res/drawable-hdpi/ic_close_light.png diff --git a/app/src/main/res/drawable-hdpi/ic_create_new_folder_dark.png b/donext/src/main/res/drawable-hdpi/ic_create_new_folder_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_create_new_folder_dark.png rename to donext/src/main/res/drawable-hdpi/ic_create_new_folder_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_format_size_dark.png b/donext/src/main/res/drawable-hdpi/ic_format_size_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_format_size_dark.png rename to donext/src/main/res/drawable-hdpi/ic_format_size_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_history_dark.png b/donext/src/main/res/drawable-hdpi/ic_history_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_history_dark.png rename to donext/src/main/res/drawable-hdpi/ic_history_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_keyboard_arrow_left_white_24dp.png b/donext/src/main/res/drawable-hdpi/ic_keyboard_arrow_left_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_keyboard_arrow_left_white_24dp.png rename to donext/src/main/res/drawable-hdpi/ic_keyboard_arrow_left_white_24dp.png diff --git a/app/src/main/res/drawable-hdpi/ic_keyboard_arrow_right_white_24dp.png b/donext/src/main/res/drawable-hdpi/ic_keyboard_arrow_right_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_keyboard_arrow_right_white_24dp.png rename to donext/src/main/res/drawable-hdpi/ic_keyboard_arrow_right_white_24dp.png diff --git a/app/src/main/res/drawable-hdpi/ic_list_white_24dp.png b/donext/src/main/res/drawable-hdpi/ic_list_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_list_white_24dp.png rename to donext/src/main/res/drawable-hdpi/ic_list_white_24dp.png diff --git a/app/src/main/res/drawable-hdpi/ic_reorder.png b/donext/src/main/res/drawable-hdpi/ic_reorder.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_reorder.png rename to donext/src/main/res/drawable-hdpi/ic_reorder.png diff --git a/app/src/main/res/drawable-hdpi/ic_smiley_satisfied_light.png b/donext/src/main/res/drawable-hdpi/ic_smiley_satisfied_light.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_smiley_satisfied_light.png rename to donext/src/main/res/drawable-hdpi/ic_smiley_satisfied_light.png diff --git a/app/src/main/res/drawable-hdpi/ic_today_dark.png b/donext/src/main/res/drawable-hdpi/ic_today_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_today_dark.png rename to donext/src/main/res/drawable-hdpi/ic_today_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_access_alarm.png b/donext/src/main/res/drawable-mdpi/ic_access_alarm.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_access_alarm.png rename to donext/src/main/res/drawable-mdpi/ic_access_alarm.png diff --git a/app/src/main/res/drawable-mdpi/ic_add.png b/donext/src/main/res/drawable-mdpi/ic_add.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_add.png rename to donext/src/main/res/drawable-mdpi/ic_add.png diff --git a/app/src/main/res/drawable-mdpi/ic_arrow_right_light.png b/donext/src/main/res/drawable-mdpi/ic_arrow_right_light.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_arrow_right_light.png rename to donext/src/main/res/drawable-mdpi/ic_arrow_right_light.png diff --git a/app/src/main/res/drawable-mdpi/ic_check_ligth.png b/donext/src/main/res/drawable-mdpi/ic_check_ligth.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_check_ligth.png rename to donext/src/main/res/drawable-mdpi/ic_check_ligth.png diff --git a/app/src/main/res/drawable-mdpi/ic_close_light.png b/donext/src/main/res/drawable-mdpi/ic_close_light.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_close_light.png rename to donext/src/main/res/drawable-mdpi/ic_close_light.png diff --git a/app/src/main/res/drawable-mdpi/ic_create_new_folder_dark.png b/donext/src/main/res/drawable-mdpi/ic_create_new_folder_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_create_new_folder_dark.png rename to donext/src/main/res/drawable-mdpi/ic_create_new_folder_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_format_size_dark.png b/donext/src/main/res/drawable-mdpi/ic_format_size_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_format_size_dark.png rename to donext/src/main/res/drawable-mdpi/ic_format_size_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_history_dark.png b/donext/src/main/res/drawable-mdpi/ic_history_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_history_dark.png rename to donext/src/main/res/drawable-mdpi/ic_history_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_keyboard_arrow_left_white_24dp.png b/donext/src/main/res/drawable-mdpi/ic_keyboard_arrow_left_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_keyboard_arrow_left_white_24dp.png rename to donext/src/main/res/drawable-mdpi/ic_keyboard_arrow_left_white_24dp.png diff --git a/app/src/main/res/drawable-mdpi/ic_keyboard_arrow_right_white_24dp.png b/donext/src/main/res/drawable-mdpi/ic_keyboard_arrow_right_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_keyboard_arrow_right_white_24dp.png rename to donext/src/main/res/drawable-mdpi/ic_keyboard_arrow_right_white_24dp.png diff --git a/app/src/main/res/drawable-mdpi/ic_list_white_24dp.png b/donext/src/main/res/drawable-mdpi/ic_list_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_list_white_24dp.png rename to donext/src/main/res/drawable-mdpi/ic_list_white_24dp.png diff --git a/app/src/main/res/drawable-mdpi/ic_reorder.png b/donext/src/main/res/drawable-mdpi/ic_reorder.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_reorder.png rename to donext/src/main/res/drawable-mdpi/ic_reorder.png diff --git a/app/src/main/res/drawable-mdpi/ic_smiley_satisfied_light.png b/donext/src/main/res/drawable-mdpi/ic_smiley_satisfied_light.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_smiley_satisfied_light.png rename to donext/src/main/res/drawable-mdpi/ic_smiley_satisfied_light.png diff --git a/app/src/main/res/drawable-mdpi/ic_today_dark.png b/donext/src/main/res/drawable-mdpi/ic_today_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_today_dark.png rename to donext/src/main/res/drawable-mdpi/ic_today_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_access_alarm.png b/donext/src/main/res/drawable-xhdpi/ic_access_alarm.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_access_alarm.png rename to donext/src/main/res/drawable-xhdpi/ic_access_alarm.png diff --git a/app/src/main/res/drawable-xhdpi/ic_add.png b/donext/src/main/res/drawable-xhdpi/ic_add.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_add.png rename to donext/src/main/res/drawable-xhdpi/ic_add.png diff --git a/app/src/main/res/drawable-xhdpi/ic_arrow_right_light.png b/donext/src/main/res/drawable-xhdpi/ic_arrow_right_light.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_arrow_right_light.png rename to donext/src/main/res/drawable-xhdpi/ic_arrow_right_light.png diff --git a/app/src/main/res/drawable-xhdpi/ic_check_ligth.png b/donext/src/main/res/drawable-xhdpi/ic_check_ligth.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_check_ligth.png rename to donext/src/main/res/drawable-xhdpi/ic_check_ligth.png diff --git a/app/src/main/res/drawable-xhdpi/ic_close_light.png b/donext/src/main/res/drawable-xhdpi/ic_close_light.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_close_light.png rename to donext/src/main/res/drawable-xhdpi/ic_close_light.png diff --git a/app/src/main/res/drawable-xhdpi/ic_create_new_folder_dark.png b/donext/src/main/res/drawable-xhdpi/ic_create_new_folder_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_create_new_folder_dark.png rename to donext/src/main/res/drawable-xhdpi/ic_create_new_folder_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_format_size_dark.png b/donext/src/main/res/drawable-xhdpi/ic_format_size_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_format_size_dark.png rename to donext/src/main/res/drawable-xhdpi/ic_format_size_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_history_dark.png b/donext/src/main/res/drawable-xhdpi/ic_history_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_history_dark.png rename to donext/src/main/res/drawable-xhdpi/ic_history_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_keyboard_arrow_left_white_24dp.png b/donext/src/main/res/drawable-xhdpi/ic_keyboard_arrow_left_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_keyboard_arrow_left_white_24dp.png rename to donext/src/main/res/drawable-xhdpi/ic_keyboard_arrow_left_white_24dp.png diff --git a/app/src/main/res/drawable-xhdpi/ic_keyboard_arrow_right_white_24dp.png b/donext/src/main/res/drawable-xhdpi/ic_keyboard_arrow_right_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_keyboard_arrow_right_white_24dp.png rename to donext/src/main/res/drawable-xhdpi/ic_keyboard_arrow_right_white_24dp.png diff --git a/app/src/main/res/drawable-xhdpi/ic_list_white_24dp.png b/donext/src/main/res/drawable-xhdpi/ic_list_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_list_white_24dp.png rename to donext/src/main/res/drawable-xhdpi/ic_list_white_24dp.png diff --git a/app/src/main/res/drawable-xhdpi/ic_reorder.png b/donext/src/main/res/drawable-xhdpi/ic_reorder.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_reorder.png rename to donext/src/main/res/drawable-xhdpi/ic_reorder.png diff --git a/app/src/main/res/drawable-xhdpi/ic_smiley_satisfied_light.png b/donext/src/main/res/drawable-xhdpi/ic_smiley_satisfied_light.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_smiley_satisfied_light.png rename to donext/src/main/res/drawable-xhdpi/ic_smiley_satisfied_light.png diff --git a/app/src/main/res/drawable-xhdpi/ic_today_dark.png b/donext/src/main/res/drawable-xhdpi/ic_today_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_today_dark.png rename to donext/src/main/res/drawable-xhdpi/ic_today_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_access_alarm.png b/donext/src/main/res/drawable-xxhdpi/ic_access_alarm.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_access_alarm.png rename to donext/src/main/res/drawable-xxhdpi/ic_access_alarm.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_add.png b/donext/src/main/res/drawable-xxhdpi/ic_add.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_add.png rename to donext/src/main/res/drawable-xxhdpi/ic_add.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_arrow_right_light.png b/donext/src/main/res/drawable-xxhdpi/ic_arrow_right_light.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_arrow_right_light.png rename to donext/src/main/res/drawable-xxhdpi/ic_arrow_right_light.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_check_ligth.png b/donext/src/main/res/drawable-xxhdpi/ic_check_ligth.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_check_ligth.png rename to donext/src/main/res/drawable-xxhdpi/ic_check_ligth.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_close_light.png b/donext/src/main/res/drawable-xxhdpi/ic_close_light.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_close_light.png rename to donext/src/main/res/drawable-xxhdpi/ic_close_light.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_create_new_folder_dark.png b/donext/src/main/res/drawable-xxhdpi/ic_create_new_folder_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_create_new_folder_dark.png rename to donext/src/main/res/drawable-xxhdpi/ic_create_new_folder_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_format_size_dark.png b/donext/src/main/res/drawable-xxhdpi/ic_format_size_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_format_size_dark.png rename to donext/src/main/res/drawable-xxhdpi/ic_format_size_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_history_dark.png b/donext/src/main/res/drawable-xxhdpi/ic_history_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_history_dark.png rename to donext/src/main/res/drawable-xxhdpi/ic_history_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_left_white_24dp.png b/donext/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_left_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_left_white_24dp.png rename to donext/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_left_white_24dp.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_right_white_24dp.png b/donext/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_right_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_right_white_24dp.png rename to donext/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_right_white_24dp.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_list_white_24dp.png b/donext/src/main/res/drawable-xxhdpi/ic_list_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_list_white_24dp.png rename to donext/src/main/res/drawable-xxhdpi/ic_list_white_24dp.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_reorder.png b/donext/src/main/res/drawable-xxhdpi/ic_reorder.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_reorder.png rename to donext/src/main/res/drawable-xxhdpi/ic_reorder.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_smiley_satisfied_light.png b/donext/src/main/res/drawable-xxhdpi/ic_smiley_satisfied_light.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_smiley_satisfied_light.png rename to donext/src/main/res/drawable-xxhdpi/ic_smiley_satisfied_light.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_today_dark.png b/donext/src/main/res/drawable-xxhdpi/ic_today_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_today_dark.png rename to donext/src/main/res/drawable-xxhdpi/ic_today_dark.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_left_white_24dp.png b/donext/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_left_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_left_white_24dp.png rename to donext/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_left_white_24dp.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_right_white_24dp.png b/donext/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_right_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_right_white_24dp.png rename to donext/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_right_white_24dp.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_list_white_24dp.png b/donext/src/main/res/drawable-xxxhdpi/ic_list_white_24dp.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_list_white_24dp.png rename to donext/src/main/res/drawable-xxxhdpi/ic_list_white_24dp.png diff --git a/app/src/main/res/drawable/ic_low_priority_lightgray_24dp.xml b/donext/src/main/res/drawable/ic_low_priority_lightgray_24dp.xml similarity index 100% rename from app/src/main/res/drawable/ic_low_priority_lightgray_24dp.xml rename to donext/src/main/res/drawable/ic_low_priority_lightgray_24dp.xml diff --git a/app/src/main/res/drawable/ic_priority_high_red_24dp.xml b/donext/src/main/res/drawable/ic_priority_high_red_24dp.xml similarity index 100% rename from app/src/main/res/drawable/ic_priority_high_red_24dp.xml rename to donext/src/main/res/drawable/ic_priority_high_red_24dp.xml diff --git a/app/src/main/res/drawable/ic_refresh_black_24dp.xml b/donext/src/main/res/drawable/ic_refresh_black_24dp.xml similarity index 100% rename from app/src/main/res/drawable/ic_refresh_black_24dp.xml rename to donext/src/main/res/drawable/ic_refresh_black_24dp.xml diff --git a/app/src/main/res/drawable/task_select.xml b/donext/src/main/res/drawable/task_select.xml similarity index 100% rename from app/src/main/res/drawable/task_select.xml rename to donext/src/main/res/drawable/task_select.xml diff --git a/app/src/main/res/drawable/tasklist_select.xml b/donext/src/main/res/drawable/tasklist_select.xml similarity index 100% rename from app/src/main/res/drawable/tasklist_select.xml rename to donext/src/main/res/drawable/tasklist_select.xml diff --git a/app/src/main/res/layout-v21/content_task_form.xml b/donext/src/main/res/layout-v21/content_task_form.xml similarity index 100% rename from app/src/main/res/layout-v21/content_task_form.xml rename to donext/src/main/res/layout-v21/content_task_form.xml diff --git a/app/src/main/res/layout-w600dp/fragment_main.xml b/donext/src/main/res/layout-w600dp/fragment_main.xml similarity index 100% rename from app/src/main/res/layout-w600dp/fragment_main.xml rename to donext/src/main/res/layout-w600dp/fragment_main.xml diff --git a/app/src/main/res/layout/activity_history.xml b/donext/src/main/res/layout/activity_history.xml similarity index 100% rename from app/src/main/res/layout/activity_history.xml rename to donext/src/main/res/layout/activity_history.xml diff --git a/app/src/main/res/layout/activity_main.xml b/donext/src/main/res/layout/activity_main.xml similarity index 100% rename from app/src/main/res/layout/activity_main.xml rename to donext/src/main/res/layout/activity_main.xml diff --git a/app/src/main/res/layout/activity_today.xml b/donext/src/main/res/layout/activity_today.xml similarity index 100% rename from app/src/main/res/layout/activity_today.xml rename to donext/src/main/res/layout/activity_today.xml diff --git a/app/src/main/res/layout/content_about.xml b/donext/src/main/res/layout/content_about.xml similarity index 100% rename from app/src/main/res/layout/content_about.xml rename to donext/src/main/res/layout/content_about.xml diff --git a/app/src/main/res/layout/content_task_form.xml b/donext/src/main/res/layout/content_task_form.xml similarity index 100% rename from app/src/main/res/layout/content_task_form.xml rename to donext/src/main/res/layout/content_task_form.xml diff --git a/app/src/main/res/layout/content_tasklists.xml b/donext/src/main/res/layout/content_tasklists.xml similarity index 100% rename from app/src/main/res/layout/content_tasklists.xml rename to donext/src/main/res/layout/content_tasklists.xml diff --git a/app/src/main/res/layout/content_today_form.xml b/donext/src/main/res/layout/content_today_form.xml similarity index 100% rename from app/src/main/res/layout/content_today_form.xml rename to donext/src/main/res/layout/content_today_form.xml diff --git a/app/src/main/res/layout/fragment_dynamic_dialog.xml b/donext/src/main/res/layout/fragment_dynamic_dialog.xml similarity index 100% rename from app/src/main/res/layout/fragment_dynamic_dialog.xml rename to donext/src/main/res/layout/fragment_dynamic_dialog.xml diff --git a/app/src/main/res/layout/fragment_main.xml b/donext/src/main/res/layout/fragment_main.xml similarity index 100% rename from app/src/main/res/layout/fragment_main.xml rename to donext/src/main/res/layout/fragment_main.xml diff --git a/app/src/main/res/layout/fragment_task_confirmation.xml b/donext/src/main/res/layout/fragment_task_confirmation.xml similarity index 100% rename from app/src/main/res/layout/fragment_task_confirmation.xml rename to donext/src/main/res/layout/fragment_task_confirmation.xml diff --git a/app/src/main/res/layout/fragment_task_detailed.xml b/donext/src/main/res/layout/fragment_task_detailed.xml similarity index 100% rename from app/src/main/res/layout/fragment_task_detailed.xml rename to donext/src/main/res/layout/fragment_task_detailed.xml diff --git a/app/src/main/res/layout/fragment_task_first.xml b/donext/src/main/res/layout/fragment_task_first.xml similarity index 100% rename from app/src/main/res/layout/fragment_task_first.xml rename to donext/src/main/res/layout/fragment_task_first.xml diff --git a/app/src/main/res/layout/fragment_task_simple.xml b/donext/src/main/res/layout/fragment_task_simple.xml similarity index 100% rename from app/src/main/res/layout/fragment_task_simple.xml rename to donext/src/main/res/layout/fragment_task_simple.xml diff --git a/app/src/main/res/layout/fragment_tasklist.xml b/donext/src/main/res/layout/fragment_tasklist.xml similarity index 100% rename from app/src/main/res/layout/fragment_tasklist.xml rename to donext/src/main/res/layout/fragment_tasklist.xml diff --git a/app/src/main/res/layout/fragment_tasks.xml b/donext/src/main/res/layout/fragment_tasks.xml similarity index 100% rename from app/src/main/res/layout/fragment_tasks.xml rename to donext/src/main/res/layout/fragment_tasks.xml diff --git a/app/src/main/res/layout/list_task_item.xml b/donext/src/main/res/layout/list_task_item.xml similarity index 100% rename from app/src/main/res/layout/list_task_item.xml rename to donext/src/main/res/layout/list_task_item.xml diff --git a/app/src/main/res/layout/list_tasklist_item.xml b/donext/src/main/res/layout/list_tasklist_item.xml similarity index 100% rename from app/src/main/res/layout/list_tasklist_item.xml rename to donext/src/main/res/layout/list_tasklist_item.xml diff --git a/app/src/main/res/layout/toolbar.xml b/donext/src/main/res/layout/toolbar.xml similarity index 100% rename from app/src/main/res/layout/toolbar.xml rename to donext/src/main/res/layout/toolbar.xml diff --git a/app/src/main/res/menu/menu_dynamic_fragment.xml b/donext/src/main/res/menu/menu_dynamic_fragment.xml similarity index 100% rename from app/src/main/res/menu/menu_dynamic_fragment.xml rename to donext/src/main/res/menu/menu_dynamic_fragment.xml diff --git a/app/src/main/res/menu/menu_main.xml b/donext/src/main/res/menu/menu_main.xml similarity index 100% rename from app/src/main/res/menu/menu_main.xml rename to donext/src/main/res/menu/menu_main.xml diff --git a/app/src/main/res/menu/menu_today.xml b/donext/src/main/res/menu/menu_today.xml similarity index 100% rename from app/src/main/res/menu/menu_today.xml rename to donext/src/main/res/menu/menu_today.xml diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/donext/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to donext/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/donext/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to donext/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/donext/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-hdpi/ic_launcher.png rename to donext/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/donext/src/main/res/mipmap-hdpi/ic_launcher_foreground.png similarity index 100% rename from app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png rename to donext/src/main/res/mipmap-hdpi/ic_launcher_foreground.png diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/donext/src/main/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/mipmap-hdpi/ic_launcher_round.png rename to donext/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/donext/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-mdpi/ic_launcher.png rename to donext/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/donext/src/main/res/mipmap-mdpi/ic_launcher_foreground.png similarity index 100% rename from app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png rename to donext/src/main/res/mipmap-mdpi/ic_launcher_foreground.png diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/donext/src/main/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/mipmap-mdpi/ic_launcher_round.png rename to donext/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/donext/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to donext/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/donext/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png similarity index 100% rename from app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png rename to donext/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/donext/src/main/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/mipmap-xhdpi/ic_launcher_round.png rename to donext/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/donext/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to donext/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/donext/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png similarity index 100% rename from app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png rename to donext/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/donext/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to donext/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/donext/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to donext/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/donext/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png similarity index 100% rename from app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png rename to donext/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/donext/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to donext/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/app/src/main/res/values-fr/arrays.xml b/donext/src/main/res/values-fr/arrays.xml similarity index 100% rename from app/src/main/res/values-fr/arrays.xml rename to donext/src/main/res/values-fr/arrays.xml diff --git a/app/src/main/res/values-fr/plurals.xml b/donext/src/main/res/values-fr/plurals.xml similarity index 100% rename from app/src/main/res/values-fr/plurals.xml rename to donext/src/main/res/values-fr/plurals.xml diff --git a/app/src/main/res/values-fr/strings.xml b/donext/src/main/res/values-fr/strings.xml similarity index 100% rename from app/src/main/res/values-fr/strings.xml rename to donext/src/main/res/values-fr/strings.xml diff --git a/app/src/main/res/values-v21/styles.xml b/donext/src/main/res/values-v21/styles.xml similarity index 100% rename from app/src/main/res/values-v21/styles.xml rename to donext/src/main/res/values-v21/styles.xml diff --git a/app/src/main/res/values-w600dp/bools.xml b/donext/src/main/res/values-w600dp/bools.xml similarity index 100% rename from app/src/main/res/values-w600dp/bools.xml rename to donext/src/main/res/values-w600dp/bools.xml diff --git a/app/src/main/res/values-w820dp/dimens.xml b/donext/src/main/res/values-w820dp/dimens.xml similarity index 100% rename from app/src/main/res/values-w820dp/dimens.xml rename to donext/src/main/res/values-w820dp/dimens.xml diff --git a/app/src/main/res/values/arrays.xml b/donext/src/main/res/values/arrays.xml similarity index 100% rename from app/src/main/res/values/arrays.xml rename to donext/src/main/res/values/arrays.xml diff --git a/app/src/main/res/values/bools.xml b/donext/src/main/res/values/bools.xml similarity index 100% rename from app/src/main/res/values/bools.xml rename to donext/src/main/res/values/bools.xml diff --git a/app/src/main/res/values/colors.xml b/donext/src/main/res/values/colors.xml similarity index 100% rename from app/src/main/res/values/colors.xml rename to donext/src/main/res/values/colors.xml diff --git a/app/src/main/res/values/dimens.xml b/donext/src/main/res/values/dimens.xml similarity index 100% rename from app/src/main/res/values/dimens.xml rename to donext/src/main/res/values/dimens.xml diff --git a/app/src/main/res/values/plurals.xml b/donext/src/main/res/values/plurals.xml similarity index 100% rename from app/src/main/res/values/plurals.xml rename to donext/src/main/res/values/plurals.xml diff --git a/app/src/main/res/values/strings.xml b/donext/src/main/res/values/strings.xml similarity index 100% rename from app/src/main/res/values/strings.xml rename to donext/src/main/res/values/strings.xml diff --git a/app/src/main/res/values/styles.xml b/donext/src/main/res/values/styles.xml similarity index 100% rename from app/src/main/res/values/styles.xml rename to donext/src/main/res/values/styles.xml diff --git a/app/src/main/res/xml/preferences.xml b/donext/src/main/res/xml/preferences.xml similarity index 100% rename from app/src/main/res/xml/preferences.xml rename to donext/src/main/res/xml/preferences.xml diff --git a/app/src/test/java/com/wismna/geoffroy/donext/ExampleUnitTest.java b/donext/src/test/java/com/wismna/geoffroy/donext/ExampleUnitTest.java similarity index 100% rename from app/src/test/java/com/wismna/geoffroy/donext/ExampleUnitTest.java rename to donext/src/test/java/com/wismna/geoffroy/donext/ExampleUnitTest.java diff --git a/donextv2/.gitignore b/donextv2/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/donextv2/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/donextv2/build.gradle.kts b/donextv2/build.gradle.kts new file mode 100644 index 0000000..349224d --- /dev/null +++ b/donextv2/build.gradle.kts @@ -0,0 +1,71 @@ +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("org.jetbrains.kotlin.plugin.compose") + id("com.google.devtools.ksp") + id("com.google.dagger.hilt.android") +} + +android { + namespace = "com.wismna.geoffroy.donext" + compileSdk = 36 + + defaultConfig { + applicationId = "com.wismna.geoffroy.donext" + minSdk = 26 + targetSdk = 36 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = "11" + } + buildFeatures { + compose = true + viewBinding = true + } + composeOptions { + kotlinCompilerExtensionVersion = "1.1.1" + } +} + +dependencies { + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.9.3") + implementation("androidx.activity:activity-compose:1.10.1") + implementation(platform("androidx.compose:compose-bom:2025.08.01")) + implementation("androidx.compose.ui:ui") + implementation("androidx.compose.ui:ui-graphics") + implementation("androidx.compose.ui:ui-tooling-preview") + implementation("androidx.compose.material3:material3") + implementation("androidx.navigation:navigation-compose:2.9.4") + implementation("androidx.hilt:hilt-navigation-compose:1.2.0") + androidTestImplementation(platform("androidx.compose:compose-bom:2025.08.01")) + androidTestImplementation("androidx.compose.ui:ui-test-junit4") + debugImplementation("androidx.compose.ui:ui-tooling") + debugImplementation("androidx.compose.ui:ui-test-manifest") + + val roomVersion = "2.8.0" + implementation("androidx.room:room-runtime:$roomVersion") + ksp("androidx.room:room-compiler:$roomVersion") + + val hiltVersion = "2.57.1" + implementation("com.google.dagger:hilt-android:$hiltVersion") + ksp("com.google.dagger:hilt-android-compiler:$hiltVersion") +} + diff --git a/donextv2/proguard-rules.pro b/donextv2/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/donextv2/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/donextv2/src/androidTest/java/com/wismna/geoffroy/donext/ExampleInstrumentedTest.kt b/donextv2/src/androidTest/java/com/wismna/geoffroy/donext/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..2c6638f --- /dev/null +++ b/donextv2/src/androidTest/java/com/wismna/geoffroy/donext/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.wismna.geoffroy.donext + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.wismna.geoffroy.donext", appContext.packageName) + } +} \ No newline at end of file diff --git a/donextv2/src/main/AndroidManifest.xml b/donextv2/src/main/AndroidManifest.xml new file mode 100644 index 0000000..0da9a03 --- /dev/null +++ b/donextv2/src/main/AndroidManifest.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/DonextApplication.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/DonextApplication.kt new file mode 100644 index 0000000..49da01c --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/DonextApplication.kt @@ -0,0 +1,8 @@ +package com.wismna.geoffroy.donext + +import android.app.Application +import dagger.hilt.android.HiltAndroidApp + +@HiltAndroidApp +class DonextApplication: Application() { +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/data/Converters.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/Converters.kt new file mode 100644 index 0000000..fd7809d --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/Converters.kt @@ -0,0 +1,17 @@ +package com.wismna.geoffroy.donext.data + +import androidx.room.TypeConverter +import java.time.Instant + + +class Converters { + @TypeConverter + fun fromTimestamp(value: Long?): Instant? { + return value?.let { Instant.ofEpochMilli(it) } + } + + @TypeConverter + fun instantToTimestamp(instant: Instant?): Long? { + return instant?.toEpochMilli() + } +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/data/Mappers.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/Mappers.kt new file mode 100644 index 0000000..041a8b8 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/Mappers.kt @@ -0,0 +1,41 @@ +package com.wismna.geoffroy.donext.data + +import com.wismna.geoffroy.donext.data.entities.TaskEntity +import com.wismna.geoffroy.donext.data.entities.TaskListEntity +import com.wismna.geoffroy.donext.domain.model.Task +import com.wismna.geoffroy.donext.domain.model.TaskList +import java.time.Instant + +fun TaskEntity.toDomain() = Task( + id = id, + name = name, + isDone = isDone, + taskListId = taskListId, + description = description, + cycles = cycles, + isDeleted = isDeleted, + updateDate = Instant.ofEpochMilli(updateDate) +) + +fun Task.toEntity() = TaskEntity( + id = id, + name = name, + isDone = isDone, + taskListId = taskListId, + description = description, + cycles = cycles, + isDeleted = isDeleted, + updateDate = updateDate.toEpochMilli() +) + +fun TaskListEntity.toDomain() = TaskList( + id = id, + name = name, + isDeleted = isDeleted +) + +fun TaskList.toEntity() = TaskListEntity( + id = id, + name = name, + isDeleted = isDeleted +) diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/data/entities/TaskEntity.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/entities/TaskEntity.kt new file mode 100644 index 0000000..4eacfd8 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/entities/TaskEntity.kt @@ -0,0 +1,22 @@ +package com.wismna.geoffroy.donext.data.entities + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "tasks") +data class TaskEntity( + @PrimaryKey(autoGenerate = true) + val id: Long = 0, + val name: String, + val description: String, + val cycles: Int = 0, + @ColumnInfo(name = "done") + val isDone: Boolean = false, + @ColumnInfo(name = "deleted") + val isDeleted: Boolean = false, + @ColumnInfo(name = "task_list_id") + val taskListId: Long, + @ColumnInfo(name = "update_date") + val updateDate: Long = System.currentTimeMillis() +) diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/data/entities/TaskListEntity.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/entities/TaskListEntity.kt new file mode 100644 index 0000000..5d4bd43 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/entities/TaskListEntity.kt @@ -0,0 +1,12 @@ +package com.wismna.geoffroy.donext.data.entities + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "task_lists") +data class TaskListEntity( + @PrimaryKey(autoGenerate = true) + val id: Long = 0, + val name: String, + val isDeleted: Boolean = false +) diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/data/injection/DatabaseModule.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/injection/DatabaseModule.kt new file mode 100644 index 0000000..cb4735e --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/injection/DatabaseModule.kt @@ -0,0 +1,31 @@ +package com.wismna.geoffroy.donext.data.injection + +import android.content.Context +import com.wismna.geoffroy.donext.data.local.AppDatabase +import com.wismna.geoffroy.donext.data.local.dao.TaskDao +import com.wismna.geoffroy.donext.data.local.dao.TaskListDao +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object DatabaseModule { + + @Provides + @Singleton + fun provideDatabase( + @ApplicationContext context: Context + ): AppDatabase { + return AppDatabase.buildDatabase(context) + } + + @Provides + fun provideTaskDao(db: AppDatabase): TaskDao = db.taskDao() + + @Provides + fun provideTaskListDao(db: AppDatabase): TaskListDao = db.taskListDao() +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/data/injection/RepositoryModule.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/injection/RepositoryModule.kt new file mode 100644 index 0000000..7a877fa --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/injection/RepositoryModule.kt @@ -0,0 +1,18 @@ +package com.wismna.geoffroy.donext.data.injection + +import com.wismna.geoffroy.donext.data.local.repository.TaskRepositoryImpl +import com.wismna.geoffroy.donext.domain.repository.TaskRepository +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +abstract class RepositoryModule { + + @Binds + abstract fun bindTaskRepository( + impl: TaskRepositoryImpl + ): TaskRepository +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/Database.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/Database.kt new file mode 100644 index 0000000..7a5b189 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/Database.kt @@ -0,0 +1,65 @@ +package com.wismna.geoffroy.donext.data.local + +import android.content.Context +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +import androidx.room.TypeConverters +import androidx.room.migration.Migration +import androidx.sqlite.db.SupportSQLiteDatabase +import com.wismna.geoffroy.donext.data.Converters +import com.wismna.geoffroy.donext.data.local.dao.TaskDao +import com.wismna.geoffroy.donext.data.local.dao.TaskListDao +import com.wismna.geoffroy.donext.data.entities.TaskEntity +import com.wismna.geoffroy.donext.data.entities.TaskListEntity +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +@Database( + entities = [TaskEntity::class, TaskListEntity::class], + version = 7 +) +@TypeConverters(Converters::class) +abstract class AppDatabase : RoomDatabase() { + abstract fun taskDao(): TaskDao + abstract fun taskListDao(): TaskListDao + + companion object { + @Volatile + private var DB_INSTANCE: AppDatabase? = null + + val MIGRATION_6_7 = object : Migration(6, 7) { + override fun migrate(db: SupportSQLiteDatabase) { + // TODO: migrate from old Donext database (v6) + } + } + + fun buildDatabase(context: Context): AppDatabase { + return DB_INSTANCE ?: synchronized(this) { + val instance = Room.databaseBuilder( + context, + AppDatabase::class.java, + "donext.db" + ) + .addMigrations(MIGRATION_6_7) + .fallbackToDestructiveMigration(false) + .addCallback(object : Callback() { + override fun onCreate(db: SupportSQLiteDatabase) { + super.onCreate(db) + // insert default lists + CoroutineScope(Dispatchers.IO).launch { + val dao = DB_INSTANCE?.taskListDao() + dao?.insertTaskList(TaskListEntity(name = "Work")) + dao?.insertTaskList(TaskListEntity(name = "Personal")) + dao?.insertTaskList(TaskListEntity(name = "Shopping")) + } + } + }) + .build() + DB_INSTANCE = instance + return instance + } + } + } +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/dao/TaskDao.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/dao/TaskDao.kt new file mode 100644 index 0000000..d33798c --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/dao/TaskDao.kt @@ -0,0 +1,32 @@ +package com.wismna.geoffroy.donext.data.local.dao + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import androidx.room.Update +import com.wismna.geoffroy.donext.data.entities.TaskEntity + +@Dao +interface TaskDao { + @Query("SELECT * FROM tasks WHERE task_list_id = :listId") + suspend fun getTasksForList(listId: Long): List + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insertTask(task: TaskEntity) + + @Update + suspend fun updateTask(task: TaskEntity) + + @Query("UPDATE tasks SET done = :done, update_date = :updateDate WHERE id = :taskId") + suspend fun markTaskDone(taskId: Long, done: Boolean, updateDate: Long = System.currentTimeMillis()) + + @Query("UPDATE tasks SET deleted = :deleted, update_date = :updateDate WHERE id = :taskId") + suspend fun markTaskDeleted(taskId: Long, deleted: Boolean, updateDate: Long = System.currentTimeMillis()) + + @Query("UPDATE tasks SET cycles = cycles + 1, update_date = :updateDate WHERE id = :taskId") + suspend fun increaseCycle(taskId: Long, updateDate: Long = System.currentTimeMillis()) + + @Query("UPDATE tasks SET deleted = :deleted WHERE id = :taskListId") + suspend fun deleteAllTasksFromList(taskListId: Long, deleted: Boolean) +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/dao/TaskListDao.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/dao/TaskListDao.kt new file mode 100644 index 0000000..ec5d7a1 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/dao/TaskListDao.kt @@ -0,0 +1,24 @@ +package com.wismna.geoffroy.donext.data.local.dao + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import androidx.room.Update +import com.wismna.geoffroy.donext.data.entities.TaskListEntity +import kotlinx.coroutines.flow.Flow + +@Dao +interface TaskListDao { + @Query("SELECT * FROM task_lists WHERE isDeleted = 0") + fun getTaskLists(): Flow> + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insertTaskList(taskList: TaskListEntity) + + @Update + suspend fun updateTaskList(taskList: TaskListEntity) + + @Query("UPDATE task_lists SET isDeleted = :isDeleted WHERE id = :listId") + suspend fun deleteTaskList(listId: Long, isDeleted: Boolean) +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/repository/TaskRepositoryImpl.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/repository/TaskRepositoryImpl.kt new file mode 100644 index 0000000..d0244ad --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/data/local/repository/TaskRepositoryImpl.kt @@ -0,0 +1,56 @@ +package com.wismna.geoffroy.donext.data.local.repository + +import com.wismna.geoffroy.donext.data.local.dao.TaskDao +import com.wismna.geoffroy.donext.data.local.dao.TaskListDao +import com.wismna.geoffroy.donext.data.toDomain +import com.wismna.geoffroy.donext.data.toEntity +import com.wismna.geoffroy.donext.domain.model.Task +import com.wismna.geoffroy.donext.domain.model.TaskList +import com.wismna.geoffroy.donext.domain.repository.TaskRepository +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import java.time.Instant +import javax.inject.Inject + +class TaskRepositoryImpl @Inject constructor( + private val taskDao: TaskDao, + private val taskListDao: TaskListDao +): TaskRepository { + override suspend fun getTasksForList(listId: Long): List { + return taskDao.getTasksForList(listId).map { it.toDomain() } + } + + override suspend fun insertTask(task: Task) { + taskDao.insertTask(task.toEntity()) + } + + override suspend fun updateTask(task: Task) { + val updated = task.copy(updateDate = Instant.now()) + taskDao.updateTask(updated.toEntity()) + } + + override suspend fun deleteTask(taskId: Long, isDeleted: Boolean) { + taskDao.markTaskDeleted(taskId, isDeleted) + } + + override suspend fun closeTask(taskId: Long, isDone: Boolean) { + taskDao.markTaskDone(taskId, isDone) + } + + override suspend fun increaseTaskCycle(taskId: Long) { + taskDao.increaseCycle(taskId) + } + + override fun getTaskLists(): Flow> { + return taskListDao.getTaskLists().map {entities -> entities.map { it.toDomain() }} + } + + override suspend fun insertTaskList(taskList: TaskList) { + taskListDao.insertTaskList(taskList.toEntity()) + } + + override suspend fun deleteTaskList(taskListId: Long, isDeleted: Boolean) { + taskDao.deleteAllTasksFromList(taskListId, isDeleted) + taskListDao.deleteTaskList(taskListId, isDeleted) + } +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/Task.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/Task.kt new file mode 100644 index 0000000..3bc2ba3 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/Task.kt @@ -0,0 +1,14 @@ +package com.wismna.geoffroy.donext.domain.model + +import java.time.Instant + +data class Task( + val id: Long, + val name: String, + val description: String, + val cycles: Int, + val isDone: Boolean, + val isDeleted: Boolean, + val taskListId: Long, + val updateDate: Instant = Instant.now() +) diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/TaskList.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/TaskList.kt new file mode 100644 index 0000000..33c39b0 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/TaskList.kt @@ -0,0 +1,7 @@ +package com.wismna.geoffroy.donext.domain.model + +data class TaskList( + val id: Long, + val name: String, + val isDeleted: Boolean +) diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/repository/TaskRepository.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/repository/TaskRepository.kt new file mode 100644 index 0000000..1d2af95 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/repository/TaskRepository.kt @@ -0,0 +1,18 @@ +package com.wismna.geoffroy.donext.domain.repository + +import com.wismna.geoffroy.donext.domain.model.Task +import com.wismna.geoffroy.donext.domain.model.TaskList +import kotlinx.coroutines.flow.Flow + +interface TaskRepository { + suspend fun getTasksForList(listId: Long): List + suspend fun insertTask(task: Task) + suspend fun updateTask(task: Task) + suspend fun deleteTask(taskId: Long, isDeleted: Boolean) + suspend fun closeTask(taskId: Long, isDone: Boolean) + suspend fun increaseTaskCycle(taskId: Long) + + fun getTaskLists(): Flow> + suspend fun insertTaskList(taskList: TaskList) + suspend fun deleteTaskList(taskListId: Long, isDeleted: Boolean) +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/usecase/GetTaskListsUseCase.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/usecase/GetTaskListsUseCase.kt new file mode 100644 index 0000000..d6f4245 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/usecase/GetTaskListsUseCase.kt @@ -0,0 +1,10 @@ +package com.wismna.geoffroy.donext.domain.usecase + +import com.wismna.geoffroy.donext.domain.model.TaskList +import com.wismna.geoffroy.donext.domain.repository.TaskRepository +import kotlinx.coroutines.flow.Flow +import javax.inject.Inject + +class GetTaskListsUseCase @Inject constructor(private val repository: TaskRepository) { + operator fun invoke(): Flow> = repository.getTaskLists() +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/MainActivity.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/MainActivity.kt new file mode 100644 index 0000000..2ea1351 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/MainActivity.kt @@ -0,0 +1,114 @@ +package com.wismna.geoffroy.donext.presentation + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.PrimaryTabRow +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Tab +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextOverflow +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import com.wismna.geoffroy.donext.domain.model.TaskList +import com.wismna.geoffroy.donext.presentation.screen.TaskListScreen +import com.wismna.geoffroy.donext.presentation.ui.theme.DoNextTheme +import com.wismna.geoffroy.donext.presentation.viewmodel.MainViewModel +import dagger.hilt.android.AndroidEntryPoint + +@AndroidEntryPoint +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContent { + DoNextTheme { + Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> + val viewModel: MainViewModel = hiltViewModel() + MainScreen( + viewModel, + modifier = Modifier.padding(innerPadding) + ) + } + } + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun MainScreen(viewModel: MainViewModel, modifier: Modifier = Modifier) { + val navController = rememberNavController() + + if (viewModel.isLoading) { + // Show loading or empty state + Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + CircularProgressIndicator() + } + } else { + val startDestination = viewModel.taskLists[0] + // TODO: get last opened tab from saved settings + var selectedDestination by rememberSaveable { mutableIntStateOf(0) } + + Scaffold(modifier = modifier) { contentPadding -> + PrimaryTabRow( + selectedTabIndex = selectedDestination, + modifier = Modifier.padding(contentPadding) + ) { + viewModel.taskLists.forEachIndexed { index, destination -> + Tab( + selected = selectedDestination == index, + onClick = { + navController.navigate(route = destination.name) + selectedDestination = index + }, + text = { + Text( + text = destination.name, + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) + } + ) + } + } + AppNavHost(navController, startDestination, viewModel) + } + } +} + +@Composable +fun AppNavHost( + navController: NavHostController, + startDestination: TaskList, + viewModel: MainViewModel, + modifier: Modifier = Modifier +) { + NavHost( + navController, + startDestination = startDestination.name + ) { + viewModel.taskLists.forEach { destination -> + composable(destination.name) { + TaskListScreen(destination, modifier) + } + } + } +} + diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskListScreen.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskListScreen.kt new file mode 100644 index 0000000..d16e625 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskListScreen.kt @@ -0,0 +1,19 @@ +package com.wismna.geoffroy.donext.presentation.screen + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import com.wismna.geoffroy.donext.domain.model.TaskList + +@Composable +fun TaskListScreen(taskList: TaskList, modifier: Modifier = Modifier) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text("${taskList.name} Screen") + } +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Color.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Color.kt new file mode 100644 index 0000000..a1b8176 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Color.kt @@ -0,0 +1,11 @@ +package com.wismna.geoffroy.donext.presentation.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Purple40 = Color(0xFF6650a4) +val PurpleGrey40 = Color(0xFF625b71) +val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Theme.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Theme.kt new file mode 100644 index 0000000..56e735b --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Theme.kt @@ -0,0 +1,57 @@ +package com.wismna.geoffroy.donext.presentation.ui.theme + +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40 + + /* Other default colors to override + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + */ +) + +@Composable +fun DoNextTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Type.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Type.kt new file mode 100644 index 0000000..fdb6885 --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/theme/Type.kt @@ -0,0 +1,34 @@ +package com.wismna.geoffroy.donext.presentation.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/MainViewModel.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/MainViewModel.kt new file mode 100644 index 0000000..0270dca --- /dev/null +++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/MainViewModel.kt @@ -0,0 +1,34 @@ +package com.wismna.geoffroy.donext.presentation.viewmodel + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.wismna.geoffroy.donext.domain.model.TaskList +import com.wismna.geoffroy.donext.domain.usecase.GetTaskListsUseCase +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import javax.inject.Inject + +@HiltViewModel +class MainViewModel @Inject constructor( + getTaskLists: GetTaskListsUseCase +) : ViewModel() { + + var taskLists by mutableStateOf>(emptyList()) + private set + + var isLoading by mutableStateOf(true) + private set + + init { + getTaskLists() + .onEach { lists -> + taskLists = lists + isLoading = false + } + .launchIn(viewModelScope) + } +} \ No newline at end of file diff --git a/donextv2/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/donextv2/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/donextv2/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/donextv2/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/donextv2/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/donextv2/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/donextv2/src/main/res/mipmap-hdpi/ic_launcher.png b/donextv2/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..707efd3992b6ac227115d5ef3821f9e0008381db GIT binary patch literal 1226 zcmV;*1U37KP)IZaFKg|3&Ix}Y6rQ~QALlve zdEVxEWikp13JMCT2ZZVM`4Kz`J%tEPemKAX_@KQF44_OiFBQ@(2Bpq&RG~K=5p?E4 zDG9F`uU+)Oyo3Of^AA;eW291Nu2$+yz?rJiTY!)T=BF~vbk#XvnS(ExAW2(N%PfX_ zdmb{JMNB4Bq?Tq5z~L@~97zj|Fhgxv>F(JdKw*kh<3WA_l{*w^WiVT_zX-hs0w_F5 zTU^2~pfU!i9A;|vnb2z>fFcsK$4~N|K?tb8j9vo*lsNx{k$*r2OAvsLmvRqCU0@|Z z1c(3;AOb{y2oM1xKqCNX-l7WFb)XjZ7G4jzzTf^EsM9Ud29)vnd1!8V0eyXaA=j#2l=PKkMtP8m|<@^dNsn;OtVgx8SK!U5)W333a=6+(8J|JD@ zS*W?*C>GRE>%vcejvyrJVg$&SlJ#a$1jvVQ>vQbnO;Bf8sEc`L4z8aZj$Y{P?E|Bw z9_B2x5+IZ+-3$eXuR&K=Pk#p5dmK<)e#^&Va})u>sbn~E4LUmP9#gcXwF|ZtREtZI zcLqqqF7E5~Rj_))6~DFWyI&x6$?4ZF9fsT95zZb4r?suy15RsO7wp(u^M0Fx!7)p_iyOOgHK4983r+PJmIu=bi>YlHIS_1pv}7j!fdczzU%Qi7TGfw z8zAM=ib36K_n|s5Q@k?=fBs%A6tRY!sce8tRd@XsZY7pw+4{%I%DxQGnmRp9_b^E3 zY=89EB*C@LLAc(TGkiD_?qXjuNKc-2ctT?9n#!O50?k5;IDK&XdBZ_yqvm$USL>?a zzlW`ZAlXWWi$g$|5ocQ9u)PH>z-uH#T@L*N;dkWzGv_XBlt z%DmEm0mTWqtK8F(7dS32j-=EQh@O@GEqYa{vd8#)sP_Y=k7v(0T>ol71jUC;&ia$Q z>o)T^&FR(e2Mv6IfaLN>K{rEXxSgo|fssEY(wDZ%AW>V);N;zzG&w#4J+e6yAqy;` z$FfgRcshJ~Ojd48;^wolifxx-lv^re6=QXbl=XXY8%p9BZn%T8859kFw zIlWE$FqlU#u(XRB$G%Qwie-vtN|3nXU0$ZJkMT~AL5FILTplf-I58@6!h|UwNm=Lt oy`ZO&cp69;C!(OBppZno1ca%PGGVOd82|tP07*qoM6N<$g1>P*2><{9 literal 0 HcmV?d00001 diff --git a/donextv2/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/donextv2/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..371b7e78a8f208c5fea5bb7f4cd437146c59c30a GIT binary patch literal 547 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 literal 0 HcmV?d00001 diff --git a/donextv2/src/main/res/mipmap-mdpi/ic_launcher.png b/donextv2/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..feb64ba4569891a521f484bf670d19ccce895315 GIT binary patch literal 952 zcmV;p14sOcP)6`+3tqZX&`H5J`Qzc{6~T{tqUsV?BK~&}ob~ zJpjur#tt(@4D9B<0%_8>o%a*ynZLl07!VAy8{`I%Tl8$Ezt%Lal0(2#)+d6*l39{8Z5U95%dR;(US(yvql`uyEs^njdJwlVZ)YjCx=sd%)Ub@&Bl_O=RKl#Wz2U7C4 z{r~&-FIo7*$M65$Lskx~2V8T!Po}fwAlU zU%LA8e?irrp_hpR$aG z%93WKkbm^r|7(DuNeItfa^b&)>mqQuzjV!&|G$6#0Xy*J>o4F83i3pF@`nG{Z@q>) z{?PG9|D6Mu55Ah%+;!pqRU5AT|M~Mb+!I}skN>}R6XN(kfBybIe)`FO2ft;5w#l+`H6-Mh553kX z$P;z#2XUtPA<>*R9PJMbe-8}d!Cf`uN{zu9140|-%at*(oBL*PO>oTr zuWLQ+t(;nv5>5{wO)+t3nsu(yx100d0N#3>KR_5_x4zx%|7u2!>ws?KBxa6`nTJP3 zTh*w3qmJdIcRJQnKk8ad{Q#oriQ#ryO@60pSi6avTM3kWn2DXK1p1UgkzZKPSwzal zS5O=oThJII>;l=%FRbeVatjfmkM0R=HXwr=i1`K>b3@!h#>6`)vlttvu?{50lVL}} apa1~$#-jAGR}r=V0000xhFy!$aK` zQ5NgnTQ~KTHQ9^bVD6ayLFC_qz??Tn=Fh$ny(=s#(sNELOG@Ig(4;wv=b7boQam42 z3(vU70W=XAG%Q^4x=Q&>=K12J&-?kquKumwQhAU?*vH_Y6~{KYXFHzHyk*0{^Zvp{ zQ~Rx7ZOqNyN9fN;XeyP`xsxuF=DLBYskM4dTO~)a>5dH6eJQzXre&}m6$0bkzK;8k0(6*9yKHKN&V)CEo#?tA4xuUwyX6$6jN?7x%IbvOQpBV?VpKjxYM8Q zuh$H^78a@353@6NCq4bSbgx@eO~=&qEq`51HgffsWkx@B5!ODOQ9UsuNmRsl nP1B;z(10zz(a2%Iz@Twgy*Ws1DPMGVE=a=D)z4*}Q$iB}b?U11 literal 0 HcmV?d00001 diff --git a/donextv2/src/main/res/mipmap-mdpi/ic_launcher_round.png b/donextv2/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e31f7f3350c65811dcf68539635e30d20c2fdf GIT binary patch literal 1976 zcmV;p2S@mcP)oJMgAC{LlS zpfF?hNXRl}I)vyZS$He&)fiQpe^(nbs}JT{w!;Z zmUZelOP$(yybl9K!xP*G_XQowB~_E1jp4=*<>$;bp2ZYA_;o%YRh)T1X)xJ@2(+~$ zgLQ#UCMGCrxG6sPfvH?*j>3aC@j%tgp&oYJxGGjV&6yI^MEHZM0aq z!Ohm;yNye+azyYL2GbVNB<#Q&&BfecgjVLj`Q%&l6 z*>wWG75buPsWk1?K~`XAUthA0w@{Itqu;1RCr)2QzyHxDN*aE?g`%)7aY0><6p;s$ z9IU`gn}%a`j=ryZvkF~m`WM-3Hc`@X?;)v6bS%UaoabTzV`ml!SyVxY%2?6oXn~j| zRp`h1R@B||Sd`qj*-h#aV*#8QQMjR`PpaBUu!|d$mXxtYN!*gob(|k>K}!=(qt)+! zD@s-*euL&?0OEq$G5~HQTX5iGHl;EaP{x*&dphq6D>F=ph&+58R%d>B;ic4!aAh)_{Pu z(^vwbs(rICfi`CZJduSoLlP)z4-88QWC=*MyMl4>cK;s;0Qis6&!CiTX9p4CD%7%` z!0^;CmcU%~ju2M_MpFRr)?GiLu5K#zW*=y@Bf%#SAm2c61c>wimHt?}CkZg%Z{NAk zTJ75PduZ{hQ_f#tZ~b=|Fb4_%rtLgu=QeHaedNqLTeX>mY~F%>CoyITiJdMbyuu>(rt<3V0j?UY zLSNVZiCS8_1j*HF?YMNVA!jyo?*;Vi*>e`$U(KCp?S@)*=2J4xqRuYPZQAk7Z^Lom z`qToK5{7aVtjfp$%yy;39C?yPZK$~KSj@pdu}e=NIiyzFAu8!t;4_i+ADs%<)?%qm9 z;xZ(!un9eS+|QD@`A-iSEBu+y%)KC}oW_M*BgQ(#ZY#jVL5L1sl@ltlEGEfXgO20Go?(~KsDDtBgq6{yT*DKM%g3G8M2R8V8R&Im9 zBS&iX=PFWn14b9;LoB12is<|+BXz6-vz@)a5hZUuGpwy7_Wj>5w%PP)srQRc1ku0)c+nMT+Ng~_M?2+h~%Y!P{U0rK(R(0Tv3A;HNfZJbx?WE*p_ZaIuWjWq(VA<#J(Txy0yGD$N>{$W;V#GXc+r+WbiwSt@NNb$ka z83w_s8jkyfMdUVu4$uWU1?72nSc4wK2a6w;dDCV@E)OD-v!$BMQ?iKtO;EEaVvgKZ z=#F-hg0JBo{0D8IE%d>C!)P5olupmQGXZ2?rGY@;$t02~THmQ*#wpXaOF-Zn?!kX_ z8$Y^_!~-vT47Lb>Ac&mtbeu5Of%hL?p=C0CPXcXVC*`i!3H}34Y+<4NTFB=B0000< KMNUMnLSTYxOswnx literal 0 HcmV?d00001 diff --git a/donextv2/src/main/res/mipmap-xhdpi/ic_launcher.png b/donextv2/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..daa9a874ad16f3ab7bc666b5002e3bb38be723b5 GIT binary patch literal 1704 zcmV;Z23PrsP)97hmFPWOPGe$Ts$5$=nN`?8Af^UQo_cbt{i{d|5W?>qjS zoT#X%sHmu@sHmvAQl)lFOg!X5Ipl&Y9ESbBi&8n9OMHB4_m=l+_2)el@w@tm#O4fA zX!iI?G5mLD43LF2Mxq_31*JA;b*NVNi%P4jV5wobXL*%UTE24yvOp%trZp?k zTYhL(fWim6# z0Y&U*SN%gjl#A9AT7HO9leLy_`I>AayVyU};@h--o(W?Uw+n(sY}zc60Q2(7-+ysW zc9GvK7i%Kmg5lW&M`c`+%j4Z!GqkJq2Slv(V?X#V-^Jpxn+de_nAzwcI6AXx05>xnqMgcLI^)C;d6OQb}5YTN?l1azbaY_IqApBahlNB{{S0VIF~kN^@u0!RP}AOR$R1dsp{Kmter2_ON_x`5&F zI?#;U3)HD(laiAIziWUhMOuZxm`lVvdRtvsvOLNF^y1y;jBF61Dbk!fn7YYtLX81*q4PVmxfT*#1 z;NVxq{39vW;Ns(osT+#~;WsoG_)V6*chV%i5yK&GKbsTu0uqG&yspl&$r9lIFU{6tQVrHGtpCIOeIMx#k^lO;BM643UB z5Sy5>C$wFnHZ&SU9d<}SdrQ<&yWwD~%^J=PXaos$>>+&yIxVcdvM zZz?reyabgt+k{19MV0qWJ|&wD9w0`}mz#OItuC}+8x!xMpg`}({# zZCH3(c}UC-i+LTza;RNM><$PRo_b5>J!&ShlF0%*ke!oA)!oCxM}{X_dG-kzJ&;?p zFF?KKTHuJy_qeEx1}<`IJ^w1DSiW;mM3UHZz)_6^>TB2sc)}d zo__585SBoeAc+SV3_&Ky1{qmcbxNUCoRr@10GyMdlv>0000=)PrOU|Q$t;uunK>+N0ptdK;JV-FV` zbMeVeT|VjFp?l{N*aW>F+q>2s=!x-vAXaqp#naQa z#^ukd?%d_dySnKjGY;e(ySx6uwLQ0>)-q?zdUopNav7~1+;O?j1ZVVnH6CDTJHW!m#EdW` z%sb)ZR-3-+S9jG78hQWM*mur8^4G5R-CpMD_8Y7V&ui~ktsJ@TWcH3d^ZY*N`w&+7)w^H_FE6twQ)5>QZ5Yydob%*)pjyE!=zlO#z?H2!D*0TNb zz`pIjLw&{rfsXpnY zY`r1oLjK9PvoH1w>xe6PC+!rN`LyY1*PG}&%hJW$`h8+1h|Jufpt{1 zbiYZu<9(WSCx|oS{G>=dk0_YAnwxS98Ocr?+%Nf?ucm!3d*Yi0GQ-o=&t;ucLK6TC CMjagh literal 0 HcmV?d00001 diff --git a/donextv2/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/donextv2/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..f71ac936eb8570505c64a4767e9a669d242acb01 GIT binary patch literal 4303 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 Jvd$@?2>>VPHthfa literal 0 HcmV?d00001 diff --git a/donextv2/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/donextv2/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..92f4f87617aa01f73f1daefdd5f65b270a4dce09 GIT binary patch literal 6588 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 WJon8r=4Jn(024z?gBpF$gI%eQV_ z2`ai()0HGRk6a!qmpCjDGnX(^XEt9ZzC>m#b?1KC?zY|SuK#y??!I@=_w#-KJl}hu zSO(3(*4-8W00;Vh${_$iC{_h+1tXn|pa1}{meMJE4rdL_3_U(|IDV5ld3&fiQ9*Gk zyy_~-XM25JdbeT{m-@vk>=hjQLG;Dr19tSo-`3zeqT;IZ(`Jrq@i)>3&q&9YzT~Iu z{Hd{aw_$N^owfu4=l}n}3~WdVb^qj?G9|u&G}x;SvE&6^b+yP0#k0^@q0pNJAPa;D zv=|mF(&`Op^EU$w{$*J8_Wv_t&HGKn+h~q$>OFbdPxe`SNAqZj)s?NRZbHOVP%6!0 zt@OW^{YO9EtiKw?B5!xLv^w>3>rrrDM;;1V-TO0`hW4Be7X)IjI_i6EOo4KKkUwB+ z;wM<4>=9jp31zxQxk%MSsxgYnr|)e_Zz&hGOhxUv>v$R`7CnSz;PG3bYn(6eA`@Vm?|=dI9uQgvmD&S-lrrG0z(G-^r{*O1Yv>RQDxtg zzDn5hg{S;cNd^etD8&Yawyo~*b5S^uq^&a@+e-`vZbD^GDZtLcgrh`xnrFd6Ro!~E zkJ+7CV(?0qrY|7G?}MMxB1pVlw%nmd)~w+ykM*YWC~d(+k^pdp4BO1eNR@w&O5eN) z=x}o9!F7n$+%H0g&SuZe(tsL+YuPn7vJZXHOvqKd{ATu=Ap3mRU z@xPKfKIU}|g}7!CDogJlHQ~V?+O*VuuEB*!h*SsI7?DId{j6>)`-xJuvA-KdB#;T1 zpyqW7d4`!=%>36TB+ztral|T8IM*h1=rP1Khm&7ZR8#!#fczK+1|WyG5`} zuBpEJp=m@Z-yB9-?$g=ft3}_0F_!&gnQmF#91vK>H5kba)e{gCC$F%9HwgqJ)M;M6 z#2D>JoJX<}HS9UfEQ9F0svO#KNT-=Cc?>DZ@(o0Swg9lC1{O--w*nfefv=+j<5cTB zaL6AWS96X#E-4kmXcIMGT4qfG0wCs1iLnXJAL!mN&aItISYAkkH5b}+G_x%M3zH}G z6B(_OXW}==EnsB~GSV(nbUHhhjql6kC&UJAtJsZ|?c1-@c#5+Tu~Q6QkKRt`M3Y`b;el7Qnuv*OX@oraX|WhYTK}@z`E60jRma+)fOJcX)gN z3g4g0%eqHKsCPM%FHM$8S3>5IUlmG?Rq#N5RM~6fND}NARb>2Can=+J#&oNI$#>b@ z@EJ|H#BicM2oO-Ge^<=%mpfGOB$Ps9{aPTeca4&JKBT#5xPRd#NK&tcVf}S6AA4VmsTgD?_*HvKVaqm0XP7SsQ>@~ literal 0 HcmV?d00001 diff --git a/donextv2/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/donextv2/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..1686c785b6065f039e0490f6d285eead44cc59d1 GIT binary patch literal 9532 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 literal 0 HcmV?d00001 diff --git a/donextv2/src/main/res/values/colors.xml b/donextv2/src/main/res/values/colors.xml new file mode 100644 index 0000000..a0f46dc --- /dev/null +++ b/donextv2/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #303F9F + diff --git a/donextv2/src/main/res/values/strings.xml b/donextv2/src/main/res/values/strings.xml new file mode 100644 index 0000000..a751aca --- /dev/null +++ b/donextv2/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + DoNext + MainActivity + \ No newline at end of file diff --git a/donextv2/src/main/res/values/themes.xml b/donextv2/src/main/res/values/themes.xml new file mode 100644 index 0000000..5c9c22a --- /dev/null +++ b/donextv2/src/main/res/values/themes.xml @@ -0,0 +1,5 @@ + + + +