Project made as a home work for the subject "Android Programming Fundamentlals", part of the Master de Desarrollo de Aplicaciones Móviles. It works as a list/map with that shows trees that has been classified as monumental. The app has being developed in Java. I like Kotlin, but i want to refresh Java and, honestly, i feel building time for Java is shorter than for Kotlin. It uses the MVVM pattern. My first time, a lot of chances it is wrongly implemented. The original source is this GVA webpage. From this pdf, a GoogleSheet has been created, and with Sheety, the same GoogleDrive acts like a REST server, feeded from the GoogleSheet.
- Retrofit for network
- Room for caching/storing info
- LiveData to update UI
- MVVM
- CardView to show info
- Toolbar
- Valencia/Castellón/Alicante spinner
- Progress indicator when loading data
- Observers cancellations between requests
- Click on CardView to show details
- Screen adjusted in detail fragment (navigation bar and title)
- UTM to lat/lng
- Map with all trees
- Our position in map. I’ve used setMyLocationEnabled instead of LocationManager
- Custom marker
- Landscape design
- Styling details fragment
- Browser from button in details
- Some user options
- Error control if network request fails
- Filtering by species
- Filtering by town
- Distances request to Google API
- Favorite and visited lists
- Adding photos and more info (thing about it) to the selected tree, in the detail screen
- Unique(s) view models in graphs, shared between elements
- Sending data using graph
- Center computation with reduce
- Zoom level depending on edge rectangle
- Recycler View
- Network requests with Retrofit.
- JSon request, GSON to parse it (not used at 100%)
- Internationalization
- Constraint Layout
- Orientation
- Activity + Fragments
- VectorDrawable
- Shared Prefences
- Sensors (GPS)
- Asynchronous code: Thread, Handler, ExecutorService
- State restored from rotation, either via LiveData subscription or Bundle
- Databases (SQLite through Room)
- DiffCallback (ListAdapter instead of Adapter), but for this app, it has worst performance, so i left RecyclerView.Adapter
- View Binding
- ViewModel + LiveData to request to SQLite (with Room), update UI and create messages from user events.
- Navigation graph to replace fragments in a very easy way
- To navigate from item in recycler to detail fragment, i use a SingleLiveEvent. I should use the graph to send data (a tree in this case), which i think is a better solution, but i didn’t try and finally i left like this.