{"id":23292093,"url":"https://github.com/mayorjay/marsalbum","last_synced_at":"2025-04-06T18:25:04.456Z","repository":{"id":167727596,"uuid":"618542380","full_name":"mayorJAY/MarsAlbum","owner":"mayorJAY","description":"MarsAlbum is an image loading Android Application that fetches and displays image data gathered by NASA's Rovers on Mars","archived":false,"fork":false,"pushed_at":"2023-05-20T22:05:41.000Z","size":8883,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-13T00:24:38.397Z","etag":null,"topics":["clean-architecture","coroutines","hilt-dependency-injection","image-processing","jetpack-android","kotlin-android","mars","mars-rover","mvvm-architecture","repository-pattern","restful"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mayorJAY.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-03-24T17:40:06.000Z","updated_at":"2023-03-26T22:49:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"a59ceefd-b7f3-475a-b9cd-6fe366a3a771","html_url":"https://github.com/mayorJAY/MarsAlbum","commit_stats":null,"previous_names":["mayorjay/marsalbum"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mayorJAY%2FMarsAlbum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mayorJAY%2FMarsAlbum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mayorJAY%2FMarsAlbum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mayorJAY%2FMarsAlbum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mayorJAY","download_url":"https://codeload.github.com/mayorJAY/MarsAlbum/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247528215,"owners_count":20953386,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["clean-architecture","coroutines","hilt-dependency-injection","image-processing","jetpack-android","kotlin-android","mars","mars-rover","mvvm-architecture","repository-pattern","restful"],"created_at":"2024-12-20T05:28:32.327Z","updated_at":"2025-04-06T18:25:04.421Z","avatar_url":"https://github.com/mayorJAY.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"media/app_icon.png\" title=\"App Logo\"\u003e\n\u003c/p\u003e\n\n# MarsAlbum\n\nMarsAlbum is an Android Application that fetches and displays image data gathered by NASA's Curiosity, Perseverance, Opportunity and Spirit rovers on Mars. The App fetches the data from [NASA API](https://api.nasa.gov/). Each rover has its own set of photos and are being queried separately. The App has a Splash Screen, a Home page showing a list of images (and data) captured by a rover on a particular day. A user can filter for images captured by any rover on any particular Mars Sol. When an image is selected, more details about the image and rover are displayed on a details page. It is implemented using Clean Architecture, Model-View-ViewModel (MVVM) pattern and uses Modern Android Development pattern and libraries. Adequate Unit Tests were also implemented in the codebase.\n\nGet the sample [APK here](https://github.com/mayorJAY/MarsAlbum/blob/main/media/MarsAlbum.apk)\n\n## Screenshots\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"media/screenshots.png\" title=\"App Screenshots\"\u003e\n\u003c/p\u003e\n\n## Project Characteristics\n\nThis application has the following characteristics:\n* 100% Kotlin\n* Modern Architecture (Clean Architecture, Model-View-ViewModel (MVVM))\n* [Android Jetpack Components](https://developer.android.com/jetpack)\n* [Material Design](https://material.io/develop/android/docs/getting-started)\n\n## Tech Stack\n\nMinimum API level is set to 21, this means HolidayInfo can run on approximately 98% of Android devices\n* [Splash Screen](https://developer.android.com/develop/ui/views/launch/splash-screen), the standard recommended Splash Screen library for Android Applications\n* [Retrofit](https://square.github.io/retrofit/) which is a type-safe REST client for Android which makes it easier to consume RESTful web services\n* [Moshi](https://github.com/square/moshi), a modern JSON library for Android, Java and Kotlin\n* [OkHttp Logging Interceptor](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor), an OkHttp interceptor which logs HTTP request and response data\n* [Kotlin Coroutines](https://developer.android.com/kotlin/coroutines) used to perform asynchronous network calls to the remote server\n* [Paging Library](https://developer.android.com/topic/libraries/architecture/paging) which helps to load and display small chunks of data at a time\n* [Hilt](https://dagger.dev/hilt/), a DI library for Android that reduces the boilerplate of using manual DI\n* [ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel) used to store and manage UI-related data in a lifecycle conscious way\n* [LiveData](https://developer.android.com/topic/libraries/architecture/livedata) which is an observable data holder class used to handle data in a lifecycle-aware manner\n* [View Binding](https://developer.android.com/topic/libraries/view-binding) used to easily write code that interacts with views by referencing them directly\n* [Kotlin flow](https://developer.android.com/kotlin/flow) for emitting live updates from a network call sequentially\n* [Material Design](https://material.io/develop/android/docs/getting-started/) which is an adaptable system that guides in maintaining principles and best practices of contemporary UI\n* [Timber](https://github.com/JakeWharton/timber), a utility library for logging and easy debugging\n* [SearchableSpinner](https://github.com/miteshpithadiya/SearchableSpinner), a dialog spinner with a search feature which allows users to search the items loaded in the spinner\n* [SDP/SSP](https://github.com/intuit/sdp) which is a scalable size unit that scales with the screen size. It helps to easily design for multiple screens\n* [JUnit4](https://junit.org/junit4), a testing framework used for writing unit tests\n* [MockWebServer](https://javadoc.io/doc/com.squareup.okhttp3/mockwebserver/3.14.9/overview-summary.html), a library that makes it easy to test how Apps behave when making HTTP/HTTPS calls\n* [Mockito](https://site.mockito.org/), a mocking framework for writing unit tests\n\n## Installation\n\nYou will need an API key from [NASA API](https://api.nasa.gov/), although the API provides a demo API key. In your project's root directory, inside the `local.properties` file, include the following line:\n\n````\napi.key=YOUR_API_KEY\n````","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmayorjay%2Fmarsalbum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmayorjay%2Fmarsalbum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmayorjay%2Fmarsalbum/lists"}