{"id":19720925,"url":"https://github.com/piasy/expenseapp","last_synced_at":"2026-05-31T23:32:03.407Z","repository":{"id":75583042,"uuid":"262687180","full_name":"Piasy/ExpenseApp","owner":"Piasy","description":"A simple budgeting/expense application, for testing","archived":false,"fork":false,"pushed_at":"2020-05-10T01:14:13.000Z","size":147,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-28T00:14:53.804Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Piasy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-10T00:59:22.000Z","updated_at":"2020-12-02T22:09:18.000Z","dependencies_parsed_at":"2023-06-06T23:45:18.196Z","dependency_job_id":null,"html_url":"https://github.com/Piasy/ExpenseApp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Piasy/ExpenseApp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Piasy%2FExpenseApp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Piasy%2FExpenseApp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Piasy%2FExpenseApp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Piasy%2FExpenseApp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Piasy","download_url":"https://codeload.github.com/Piasy/ExpenseApp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Piasy%2FExpenseApp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33753923,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T23:12:57.015Z","updated_at":"2026-05-31T23:32:03.402Z","avatar_url":"https://github.com/Piasy.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ExpenseApp\n\nA simple budgeting/expense application, for testing\n\n## Notes\n\nAlthough this expense app is not very complex, since there is a note of\n\"use of standard Android design patterns\", so I'll use a pattern.\nBut I haven't worked closely on application development for over 3 years,\nso I'm not very familiar with the state-of-art architecture stuff,\nso I'll use the architecture I used 3 years ago, which is MVP,\nand combined with RxJava2 and Dagger2, but migrate to architecture\ncomponents in Jetpack should not be a big issue. I choose one of my\nopen source project 3 years ago, [Piasy/YaMvp](https://github.com/Piasy/YaMvp).\n\nAnd I'll use a model layer architecture in this diagram:\n\n![](https://blog.piasy.com/img/201605/perfect_android_model_layer.png)\n\nsince we don't store transactions on server,\nso there will only be local DB part.\nAnd here is the [full keynote](https://github.com/Piasy/talks/tree/master/GDGMeetUp_20160807),\nin case of interest, although it's in Chinese.\n\nI forced the application in portrait mode, and didn't create a different\nlayout for tablet, for simplicity right now, but it's easy to support landscape,\ntablet with different layout files/code, and supporting dynamic orientation\nswitch is also not a big issue too.\n\nFeatures not implemented:\n\n+ Different layout for tablet, it should be easy to support tablet with different layout files/code;\n+ Chars tab, using MPAndroidChart should be easy in the future;\n+ Create and edit transaction \u0026 category with UI, I would create two activities for them,\none for transaction create \u0026 edit, another for category create \u0026 edit, we can pass\nmodel object between activity and fragment easily with the help of auto-value-parcel;\n+ Per day or month view for transactions, currently all transactions are listed together,\nshould be easy to add filter based on date;\n+ Dynamic text color based on category color, there should be some open source projects to help with it;\n+ Budgeting monthly, currently all transactions are summed together,\nshould be easy to add filter based on date;\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiasy%2Fexpenseapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpiasy%2Fexpenseapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiasy%2Fexpenseapp/lists"}