{"id":21012591,"url":"https://github.com/igeligel/androidmitfahren","last_synced_at":"2026-03-07T09:31:05.415Z","repository":{"id":87626235,"uuid":"55774429","full_name":"igeligel/AndroidMitfahren","owner":"igeligel","description":":iphone: This is an app created in the course \"Android\" of the Ostfalia Hochschule für angewandte Wissenschaften in Wolfenbüttel. It lets you create uber like lift requests and also search for them.","archived":false,"fork":false,"pushed_at":"2016-05-30T10:37:23.000Z","size":920,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-12T07:48:29.179Z","etag":null,"topics":["android","android-application","android-development","android-studio","clean-code","clean-code-android","java","layer-architecture","uber"],"latest_commit_sha":null,"homepage":"","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/igeligel.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":"2016-04-08T11:36:04.000Z","updated_at":"2017-10-23T18:30:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"ee6e9fad-d6c1-4df2-8246-a5495d708802","html_url":"https://github.com/igeligel/AndroidMitfahren","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/igeligel/AndroidMitfahren","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igeligel%2FAndroidMitfahren","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igeligel%2FAndroidMitfahren/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igeligel%2FAndroidMitfahren/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igeligel%2FAndroidMitfahren/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/igeligel","download_url":"https://codeload.github.com/igeligel/AndroidMitfahren/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igeligel%2FAndroidMitfahren/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30210826,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T09:02:10.694Z","status":"ssl_error","status_checked_at":"2026-03-07T09:02:08.429Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["android","android-application","android-development","android-studio","clean-code","clean-code-android","java","layer-architecture","uber"],"created_at":"2024-11-19T09:37:48.682Z","updated_at":"2026-03-07T09:31:05.390Z","avatar_url":"https://github.com/igeligel.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Android Mitfahren\n\nThis is an app created in the course \"Android\" of the Ostfalia Hochschule für angewandte Wissenschaften in Wolfenbüttel. It lets you create ride requests and also search for them.\n\n## Install\n1. Clone the project\n2. Build the project with gradlew or open it with Android Studio.\n\n## Table of Content\n1. **[General Architecture](#general-architecture)**\n2. **[Data Layer](#data-layer)**\n * **[Database package](#database-package)**\n * **[Entity package](#entity-package)**\n * **[Repository package](#repository-package)**\n3. **[Domain Layer](#domain-layer)**\n * **[Interactor Package](#interactor-Package)**\n * **[Models package](#Models-package)**\n * **[Validator package](#validator-package)**\n4. **[Presentation Layer](#presentation-Layer)**\n * **[Basic overview](#basic-overview)**\n * **[Enums package](#enums-package)**\n * **[Listeners package](#listeners-package)**\n * **[Presenter package](#presenter-package)**\n * **[View package](#view-package)**\n    * **[Activity package](#activity-package)**\n    * **[Adapter package](#adapter-package)**\n    * **[Model package](#model-package)**\n5. **[Contribution](#contribution)**\n6. **[License](#license)**\n\n## General Architecture\n![alt text](documentation/main-architecture.png \"General Architecture\")\n\nAs you can see we have divided the application in three layers:\n- Data Layer\n- Domain Layer\n- Presentation Layer\n\nWe also have a dependency rule. It goes from the outside to the inner core of the application which is the data layer. This is really important to structure the logic and to encapsulate data.\n\n## Data Layer\nThe data layer is the lowest layer of the application. It is handling all raw data operations like:\n- Creating Data\n- Reading Data\n- Updating Data\n- Deleting Data\n\nSo this is a simple [CRUD application](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete).\nWe decided to use the local database of your android phone because this was a requirement.\n\n![alt text](documentation/data-layer-architecture.png \"Data Layer\")\n\nWe have three packages in this layer:\n- Database package\n- Entity package\n- Repository package\n\n### Database package\nThe database package contains all the required code for working with the local database. Because we need the database just once we have created a singleton containing the database as property. Also this package has classes which defines table schemes.\n\n### Entity package\nThen we have created the entity package which contains the entities **of the database**. Currently we only have one entity which is Ride.\n\n![alt text](documentation/ride-entity.png \"Ride Entity\")\n\n### Repository package\nWe also have a repository package which is a basic repository and let you easily exchange the persistence component behind the data layer. With this repository pattern it is super easy to change the system to an actual REST api.\n\nThe repository needs to implement an interface which contains these methods:\n- void InsertOrUpdateRide(Ride ride)\n- ArrayList\u003cRide\u003e SearchRides(String startPoint, String endPoint, long departureTime, SearchType searchType)\n\nYou can find more information of the repository in the javadoc.\n\n## Domain Layer\nThe domain layer contains all the business logic of the application. It has a dependency on the data layer but not on the presentation layer so it should not access instances or other classes, methods, variables of the presentation layer.\nThe dependency to the data layer is just there to give access to the data. The data will be provided by the repository which was declared earlier.\n\n![alt text](documentation/domain-layer-architecture.png \"Data Layer\")\n\nThe domain layer contains three packages:\n- Interactor package\n- Models package\n- Validator package\n\n### Interactor Package\nThe interactor package contains the interactor for the repository patttern of the data layer. This should be the only class which should have a dependency on the data layer.\n\n### Models package\nThis package contains the models used in the business logic. These models are:\n- CreateRideModel\n- SearchRideModel\n- SearchType\n\n![alt text](documentation/models-package-classes.png \"Models\")\n\nThese classes are used to create or search rides. The SearchType is required by other classes.\n\n### Validator package\nThis package just has basic classes which validates the models of the business logic.\n\n## Presentation Layer\nThis package contains the general components of the user interface:\n- enums\n- listeners\n- presenter\n- view\n\n![alt text](documentation/presentation-layer-architecture.png \"Data Layer\")\n\n### Basic overview\nThis graphic will explain the user interface flow:\n\n![alt text](documentation/create-gui-flow.png \"Create UI\")\n\nYou can see that we got a view model and the listener in the end. Both are bound together indirectly because the listener needs to take an activity, which will converted to a view model, or the view model directly. So you just have the listeners to handle events.\n\n### Enums package\nThis package is just a helper package for selecting specific modes of creating and searching rides.\n\n### Listeners package\nThese are the listeners for the ui component. Each activity should have a listener which implements the basic Interface ICreateListeners, so you definitely set up listeners for an activity. These are important because they can change the view model of the activity.\n\n### Presenter package\nWe have different presenters. A presenter is a simple user interface manager. Each activity has one presenter which creates the view model for the activity. This is important because we can then easily extract data out of the view model and do not have unneccessary data. Another good encapsulation strategy.\n\nPresenters can also be unbound presenters which are used over many listeners to increase functionality.\n\n### View package\nThe view package contains just raw data which is applied to the user interface.\n\n#### Activity package\nContains the activities. Those activities build up the view models initial state. They should not do more.\n\n#### Adapter package\nContains basic adapters for user interface components.\n\n#### Model package\nContains the view models of our activities.\n\n## Contribution\nIf you want to contribute, you need to do these steps:\n1. Fork the repository\n2. Make your changes\n3. Make a pull request\n\nWe are using Google Checkstyle for unique coding style. You can download the xml configuration file [here](https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml).\n\n## License\nMIT © [Kevin Peters](https://github.com/igeligel) and [Leon Brettin](https://github.com/LeonBre)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figeligel%2Fandroidmitfahren","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Figeligel%2Fandroidmitfahren","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figeligel%2Fandroidmitfahren/lists"}