An open API service indexing awesome lists of open source software.

https://github.com/darkalexwang/eventreporter

This is a LBS based Android app for users to report events and search nearby events.
https://github.com/darkalexwang/eventreporter

android java

Last synced: 2 months ago
JSON representation

This is a LBS based Android app for users to report events and search nearby events.

Awesome Lists containing this project

README

        

# Android Event Reporter

## Business Design
- To design a LBS based Android app for users to report events and search nearby events.

## General Function Instruction
- Login and register: each user can register an account with a unique username and login in to enjoy the app.
- Designed a view to list all events in database according to report time.
- Integrated **Google Map API** to track current user’s location and display nearby hot events as well as navigating to the event.
- Developed a view to show details of the clicked event and make comment or like to it.
- Provided a view to report new event with title, description, image and location.
- Other supported features:
* Used **Google Firebase (Database and Storage)** to store and manage UGC including comments, images, descriptions, title, geolocations, etc.
* Integrated in-app advertising (**Google AdMob**) to display Google advertisers and interact with users.

[EventReporter Demo](https://imgur.com/gallery/JtEQi2s)

## Infrastructure Design
![infrastructure design](https://raw.githubusercontent.com/DarkAlexWang/EventReporter/master/doc/Infrastructure.png)
> Activity and Fragment design

- `MainActivity`: for login and register.
- `EventActivity`: show events in two ways, one for all events list, the other for nearby hot events in Google Map.
- `EventsFragment`: show all events in list view.
- `EventListAdapter`: get data of events and ads, and distribute them to corresponding positions in RecyclerView.
- `EventMapFragment`: show nearby hot events in Google Map with markers and navigate to the event.
- `CommentActivity`: show detail information of each specific event clicked by users, including title, username, time, description, comments, etc. and also make new comment on it.
- `CommentAdapter`: get data of event and comments, and distribute them to corresponding positions in RecyclerView.
- `EventReportActivity`: report new event with title, description, location, image, etc.
- `User`: create instance when registering with attributes of each user.
- `Event`: create instance when reporting a new event with attributes like title, like, comment, etc.
- `Comment`: create instance when making comments to a specific event with attributes like description, username, eventId, like, etc.
- `Utils`: some helper method like encryption of password, calculation of distance between two locations, time transformation, etc.
- `LocationTracker`: get permission from users to use Android system GPS or network to get current location.

## Database Design
Use Google Firebase Database to store and manage UGC:
### users

users collection design

> users collection design

### events

events collection design

> events collection design

### comments

comments collection design

> comments collection design

## Implementation Details
- About **ANR (application not responding)**: Image and string information of events should be stored **separately in cloud storage(Firebase Storage) and database(only store image link/url)** respectively. When loading events in events list, first loading string information in database like title, username, descriptions…then use `AsyncTask` to download image from cloud storage located by image url in database (in **backend thread**), after finishing downloading, showing the image in **UI thread**.
- How to design **event activity**?
* Show all events in list view --> `Fragment`
* Show nearby events in map with markers --> `Fragment`
* Comment on specific event --> `Activity`
* **First and second features** are two parallel functions of events showing, also they should be presented **independently and also fast loading**, so it’s appropriate to **use two independent fragments** attached on EventActivity.
* Since **comments are related to specific event**, and they are not independent, so we should use another **activity to show detail information of a specific event** with title, username, description, time, comments, and in the same time, making comment to it.
- Design EventsFragment and CommentActivity with **RecyclerView**
* `EventsFragment`: to let users scroll up and down all events and ads together, we need to use RecyclerView instead of a layout (static without function scrollbar)
* `CommentActivity`: to let users scroll up and down event and all comments together, we need to use RecyclerView instead of a layout (static without function scrollbar, and the size is fixed which may cause users can only see a few comments one time)
- Design pattern
* **Singleton**: Firebase database uses singleton pattern so that the whole app share one database instance and the same data

## Application Screenshot
### Login and register

login and register activity

> login and register activity

### Show all events

events fragment

> events fragment

### Event details and make comments

comment activity

> comment activity

### Report new event

event report activity

> event report activity

### Show nearby events in Google Map

event map fragment

> event map fragment
>
### Show Notification Locally

FCM Messaging fragment

> event map fragment