An android app that shows time-line of upcoming rocket launches. Showcases architecture of a real android application and usage of some libraries. Application loads data about rocket launches from the server and stores them to the database for off-line usage.
- Modularize the application into modules
Domainmodule has no android dependencies.
- Focus on testability with unit tests and UI tests. For UI tests is used the Espresso library with the Robot pattern which allows to create clear and understandable tests.
- Use kotlin coroutines for asynchronous jobs.
- ViewModel - Store UI-related data that isn't destroyed on app rotations.
- Room - Store launch data received from the server in SQLite database.
- Data Binding - Declaratively bind observable data to UI elements.
- Lifecycles - Handle events from ViewModel to Fragments/Activity.
- WorkManager - Used for periodic data fetching from server and for showing Android notification of upcoming launch.
- Navigation - Handle everything needed for navigation between fragments and creation of deep links.
- Kotlin Coroutines For managing asynchronous calls with simplified code and reducing needs for callbacks. For event based code are used
Material components Application uses material theme for easier styling of UI components and for dark theme.
- Server for app isn't currently running publicly. App should works even without server, when is build with parameter
gradle.properiets. In this case the response is generated from static JSON from the assets.
run UI tests on connected device:
run unit tests:
Environment variables (optional)
SPACE_APP_API_KEY- key will be used for communication with server, but is recommended for now to use
use_fake_reponse_api=trueparameter in the
SPACE_APP_GOOGLE_MAPS_KEY- use a google maps api key and replace google-services.json file if you want to show the map in the Launch detail.
Copyright 2014 Valter Kasper Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.