plants-app's Introduction
plants-app's People
plants-app's Issues
Add Task History - to show that task is completed
This is a huge feature, so you can try to decompose it by yourself.
Try to start from planning how it should look, and then decomposing it into several tasks.
You can create them by yourself in this board - just use tag to mark them. Or you can write down some plan in any other document or just in mind.
Requirements for this task is:
- Store info about tasks, to track that they are completed.
- UI Should show that task is completed.
- You should plan this with keeping in mind that you could fetch some statistics for tasks.
Create Abstraction for ImageLoading
- Instead of Using Glide everywhere , create some top-level function in some Ext file that will load images for you
- do not cash images
Plant Creation Screen: UI + ViewModel
Requirements:
- Should be opened from "Plants Screen"
- Should simple layout
- After click on "Save Button" should log collected data with Timber and then send event to navigate backward
Add Tasks Screen with hardcoded Tasks
Requirements:
- Fragment, ViewModel, Adapter
- Hardcode Data On ViewModel
- Create Simple UI For Tasks
- Set Hardcoded Fragment for now as Root page of Tasks Screen
Create Empty project
Initialise git repository with 2 branches
- main
- develop
These 2 branches should contain only readme file
Then create new branch - for example called "create-empty-project"
Create pull request from "create-empty-project" to "develop" branch
Requirements:
- go through all created files and remove unused files and unused code.
- Pull request should consist only from files and code that is needed to successfully run empty Activity
- Do not forget to add gitignore file
Goal of this task to investigate what files created when you create empty project from template
Article about gitflow (this is why we need to create main, develop, and other branches):
https://nvie.com/posts/a-successful-git-branching-model/
Show task for current day
- Add ability to show tasks for today on Tasks Screen
- Hardcode date inside of ViewModel
- Calculate tasks for date in TasksRepository
- Get data from stored Tasks (do not change Task class , only leave TODO to refactor it later)
Create base for UI: BottomNavigationView and 2 fragments
Add Room library to Plants feature
You need to change repository implementation to Room
Add validation on CreatePlant screen
Required fields:
- Name,
- Species Name
- Watering Frequency
Optional fields:
- Image
In case if input is invalid - show user message - with toast
- Use LiveData with string res for concrete error.
- Process when user tries to add already added plant
Block task completion when task is in future
Requirements:
- User should be able to complete tasks only on Today screen, all other screens should just hide this button.
Show notifications only for uncompleted tasks
Notification for the task should be shown only if task was not yet completed.
Add ability to choose image for image creation screen from gallery
On click on image there should be opened app gallery so user can select image for plant
Refactor: Move creation of database into Hilt
- Remove Singleton from RoomPlantsDatabase
Inprove UI Of TasksForDaysScreen
- Add a normal Header that will show
-- Today, if current day is today
-- Tomorrow, if page day is next of today
-- "5 Nov 2021", or some other beautiful format for other dates
Also add buttons to go next/prev day
Plant Details: Add ability to delete Plant
- Add ability to delete Plant from Plant Detail Screen
- Probably delete corresponding tasks for this plant
Feature: Add one more type of periodic task
Add new types of Tasks: "Spraying" and "Loosening"
Keep in mind that we will add more tasks in future
- Refactor application to support these new 2 tasks.
- Add icons for each type of tasks on Tasks screen
- Also provide some description for tasks on task card (instead of "Water" string that is taken from Task model)
Watch DI Course On Dagger 2 and Add Hilt To Application
You can watch this playlist on Dagger 2(around 2 hours), to get some idea of what is Dagger 2:
https://www.youtube.com/watch?v=G5P_vDL1ZLg&list=PL0SwNXKJbuNkYFUda5rlA-odAVyWItRCP&index=1
Requirements:
- Add Hilt to Project
- All items, you've provided with constructor, change to Hilt
Add static code analyse tools [Detekt]
Add detekt
with default settings
If there are some codestyle errors in current code - fix them and prepare new pull request (you can try auto fix most issues with detekt)
Add icon to application
- Find or create icon for an application
- Add it to project so user can see icon instead of default icon
- [Optionally] If you have ideas for ne name< you can rename app - or leave it as is
Add Filtering to Plants Screen
Right now you have search field that is doing nothing
- Add ability to filter items
- Use ViewModel for filtering
- make it reactive - so when user change search field - he see result right here
Plant Detail Screen: UI + ViewModel
Bug: Fix issue with date calculation
Open Tasks screen when User clicks on Notification
Bug: Tasks for Plants are shown for a full day instead of refreshing at midnight
Maybe create Plants with midnight time
Add TasksForDaysFragment with Hardcoded Fragments
Requirements:
- Fragment, ViewPager, ViewModel, AdapterForViewPager with hardcoded fragments
-Use already created hardcoded fragments to populate ViewPager adapter
Fix UI/UX For Plants Feature
Create Screen:
- Use text input layout everywhere
- Fix sizes and constraints
- Change Days frequency to AutocompleteTextView(you will need to provide from code)
https://material.io/components/text-fields/android
Plants Screen:
- Fix margins padding etc.
- Fix UX with SearchView
Plant Detail screen:
- Same as Creation screen, but without editing
Add ViewBindingDelegate library and refactor screens
Read this article:
https://habr.com/ru/post/501158/
https://github.com/androidbroadcast/ViewBindingPropertyDelegate
And add library described in article, and refactor view binding usage
Show notifications for Tasks at some specific time every day
- Show one notification for each task every day at some specific time
- Notification should consist of Image, Plant title, Task type
Process case when user forget to complete task.
- Think how to process case when User did not complete previous tasks.
Theoretical: Read about periodic tasks on android
https://developer.android.com/topic/libraries/architecture/workmanager
- Read some info about JobScheduler, AlarmManager, other stuff
Cover CreatePlant Validator with unit tests
If you want to - you can use workshop here as a reference
https://github.com/Android-Academy-Global/fundamentals-2020-homework/blob/workshop-3-todos/workshop/workshop1.md
Testing: Add several unit tests for RoomTasksRepository
- Add several test cases for RoomTasksRepository
- Create and provide StubPlantWithTasksDao
- Refactor code to simplify and beautify code
Workshop 2-3 show some examples of how to do simplify test code, you can watch these examples later here.
https://github.com/Android-Academy-Global/fundamentals-2020-homework/tree/testing-workshop-start/workshop
Connect CreatePlant and Plants screens
You need to create PlantsRepository interface inside of domain
Use PlantsRepository from ViewModel
Also create PlantsRepository implementation and move it to constructor of view models (Use ViewModel factory)
Add Tasks Info On PlantDetailScreen
Plants Screen: UI + ViewModel
Requirements:
- Create Model for Plant
- Create layout for screen
- Create simple layout for Plant item
- Use ViewModel + LiveData, and hardcode list of items
Some links :
https://github.com/mastani/android-convention-cheatsheet
https://jeroenmols.com/blog/2016/03/07/resourcenaming/
Add ability to select image on create screen from Camera
- I think you can provide some AlertDialog to user and then open camera or gallery
Add Unit-tests on GitHub
Connect Plant Screen with PlantDetail Screen
When user clicks on plant, this plant should-be opened in detail screen
Show tasks screen for nearest 30 days
- Hardcode 30 days so viewpager will consist of 30 pages
- Check that it will work normally
Add Task History
Requirements:
- Store dates when tasks were completed.
- UI should show that task is completed.
Add ability to delete plant from Detail Screen
- User should be able to completely delete plant on the PlantDetailScreen
- [Optionally] you can do it with toolbar icon, not with button in layout
Move Code from ContextExt to SaveUriInStorageUseCase
- You need to move extension code that saves data in storage, into UseCase class ()
- And inject this class into ViewModel
I'm talking about
fun Context.saveImageInAppStorage(imageUri: Uri): Uri
Bug: Fix frequency selection on Plant Creation Screen
Enable Infinite scrolling on ViewPager
- Add ability to scroll indefinelety
- ViewPager should get one parameter - date. And all pages inside should be of (n+1) days
Prepopulate database with file
Bug: Fix issue with loading images from gallery
Bug: Fix issue with navigation
Right now when you jump between fragments with bottom navigation - they are added to back stack - investigate and fix this issue
Refactoring code
- Refactor Tasks Repository code
- Fix unit-tests
Change primary date for calculation on when to show task
Calculate dates for showing task according to last date of task completion (instead of creation date of plant)
Modify Tasks screen to Show Plant with Tasks
Requirements:
- Task screen should show plant card and inside of this plant card show all tasks for this plant
- Example of UI I provided in Telegram
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.