• Stars
    star
    1,793
  • Rank 24,885 (Top 0.6 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 7 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Open Event Mobile App for Organizers and Entry Managers https://play.google.com/store/apps/details?id=com.eventyay.organizer

Open Event Organizer

Open Event Organizer Android App

Build Status Codacy Grade Codecov Coverage Appetize Preview Gitter Twitter Follow

Event management app for organizers using Open Event Platform

The core features of this Android Application are

Currently, the application is released in alpha phase and available here: Google Play and F-Droid.

Get it on Google Play Get it on F-Droid

Roadmap

Planned features & enhancements are:

  • Overview of tracks and sessions
  • Quick session re-scheduling
  • Push notifications for certain triggers

Communication

Please join our mailing list to discuss questions regarding the project: https://groups.google.com/forum/#!forum/open-event

Our chat channel is on gitter here: https://gitter.im/fossasia/open-event-orga-app

Screenshots

Development

Publishing

Each push to master branch automatically publishes the application to Play Store as an Alpha Release. Thus, on each merge into master, the versionCode and versionName MUST be changed accordingly in app/build.gradle

  • versionCode : Integer : To be monotonically incremented with each merge. Failure to do so will lead to publishing error, and thus is a crucial step before any merge
  • versionName : String : User visible version of the app. To be changed following symantic versioning

Libraries:

Android Development Setup

Please find info about the set up of the App in your development environment here.

Project Conventions

There are certain conventions we follow in the project, we recommend that you become familiar with these so that the development process is uniform for everyone:

Dependency Injection

We use Dagger 2 for DI, so please take a look at how it works. We did not create very complex graphs, component or scopes to keep it simple and easy to refactor. But, we do have certain guidelines as to what needs to be injected and how. Every object which is configurable or there is a possibility for it to be shared among objects, instances or lifecycles in future, must be injected through DI. The interface implementations which have obvious constructions are @Binded to their concrete classes and a general rule of thumb we follow is to have only one new keyword in the injectable construction (the @Provides method in Dagger). Meaning that all other dependencies that need to be instantiated during its creation must be passed as arguments and provided by the DI itself.

MVP

The project follows Model-View-Presenter design pattern and requires schematic interfaces for each component to be written first as contracts and then implemented.
All the interactions are done using interfaces only and concrete classes are only used when being injected into required positions. This means any model, view or presenter will only be referenced by its interface. We do so it is easy to mock and test them and there is no discrepancy in the callable methods of the concrete class and the interface.
We realize that MVP is opinionated and there is no strict boundary between the responsibility of each component, but we recommend following this style:

  • View is passive and dumb, there is no logic to be exercised in View, only the ability to show data provided by the presenter through contract is present in the View. This makes it easy to unit test and remove the dependence on Android APIs, thus making the need of instrumentation tests scarce
  • Presenter is responsible for most of the business logic, manipulation of data and organising it for the view to present. All logic for the app is present here and it is devoid of ANY Android related code, making it 100% unit testable. We have created wrapper around common Android APIs in form of models so that they can be mocked and presenter stays clean. The responsibility of presenter includes the fetching of data from external source, observing changes and providing the view with the latest data. It also needs to handle all View interactions that require any logic, such as UI triggers causing complex interactions. Notable exception for this is launching of an Activity on click of a button. There is no logic required in the action and is completely dependent on Android APIs. Lastly, presenter should always clean up after the view is detached to prevent memory leaks
  • Model has the responsibility to hold the data, load it intelligently from appropriate source, be it disk or network, monitor the changes and notify presenter about those, be self sufficient; meaning to update data accordingly as needed without any external trigger (saving the data in disk after updating from network and providing the saved data from next time on), but be configurable (presenter may be able to ask for fresh data from network). The presenter should not worry about the data loading and syncing conditions (like network connectivity, failed update, scheduling jobs, etc) as it is the job of model itself.

Project Structure

Generally, projects are created using package by layer approach where packages are names by layers like ui, activity, fragment, etc but it quickly becomes unscalable in large projects where large number of unrelated classes are crammed in one layer and it becomes difficult to navigate through them.
Instead, we follow package by feature, which at the cost of flatness of our project, provides us packages of isolated functioning related classes which are likely to be a complete self sufficient component of the application. Each package all related classes of view, presenter, their implementations like Activities and Fragments.
A notable exception to this is the common module and data classes like Models and Repositories as they are used in a cross component way.
Note: The interface contract for Presenter and View is present in contract package in each module`

Unit Testing

We have tight and almost complete coverage of unit tests for models and presenters and it was possible because we have focused on adding conditional unit tests with each functionality we have added. Each functionality was tested under various conditions making the tests self documenting about the functionality of app and saved us from various regressions that are caused after rapid development and refactoring of the application. Because we require the developer to write unit tests along with the code, we build up the confidence and credibility of the code base and remove the lag between functionality and test, making it hard for bugs to creep in between that period. Furthermore, if we let PRs merge without addition of unit tests, and the author of PR does not choose to write tests for it, it becomes difficult for someone else to just write tests for someone else's code and brings the coverage down and may cause regressions in future. We and everyone else wants to focus on creating the app better than to keep solving bugs and writing tests as we write code is the only solution.
So, please take a look at already written tests(they are fairly self-documenting) and try to write tests for each functionality you add.

Separation of concerns

Lastly, each class should only perform one task, do it well, and be unit tested for it. For example, if a presenter is doing more than it should, i.e., parsing dates or implementing search logic, better move it in its own class. There can be exceptions for this practice, but if the functionality can be generalised and reused, it should most definitely be transferred in its own class and unit tested.

Branch Policy

The following branches are present in the project:

  • development All development goes on in this branch. If you're making a contribution, you are supposed to make a pull request to development. PRs to development branch must pass a build check and a unit-test check on Circle CI.

  • master This contains shipped code. After significant features/bugfixes are accumulated on development, we make a version update and make a release.

    Please Note that :- Each push to master branch automatically publishes the application to Play Store as an Alpha Release. Thus, on each merge into master, the versionCode and versionName MUST be changed accordingly in app/build.gradle

    • versionCode : Integer : To be monotonically incremented with each merge. Failure to do so will lead to publishing error, and thus is a crucial step before any merge
    • versionName : String : User visible version of the app. To be changed following semantic versioning
  • apk This branch consists of multiple apk's which get generated by the Travis CI when the contributors branch is merged with the development branch and when the development is merged with the master branch. After every merge the previous APK's are deleted and new one's are created. The APK's are generated in accordance with the update-apk.sh script which is present in scripts folder.

PR Guidelines

Please help us follow the best practice to make it easy for the reviewer as well as the contributor. We want to focus on the code quality more than on managing pull request ethics.

  • Single commit per pull request
  • For writing commit messages please read the COMMITSTYLE carefully. Kindly adhere to the guidelines.
  • Follow uniform design practices. The design language must be consistent throughout the app.
  • The pull request will not get merged until and unless the commits are squashed. In case there are multiple commits on the PR, the commit author needs to squash them and not the maintainers cherrypicking and merging squashes.
  • If the PR is related to any front end change, please attach relevant screenshots in the pull request description.

License

This project is currently licensed under the GNU General Public License v3. A copy of LICENSE.md should be present along with the source code. To obtain the software under a different license, please contact FOSSASIA.

More Repositories

1

visdom

A flexible tool for creating, organizing, and sharing visualizations of live, rich data. Supports Torch and Numpy.
Python
9,894
star
2

open-event-server

The Open Event Organizer Server to Manage Events https://test-api.eventyay.com
Python
2,906
star
3

phimpme-android

Phimp.me Photo Imaging and Picture Editor https://play.google.com/store/apps/details?id=org.fossasia.phimpme
Java
2,580
star
4

susi_server

SUSI.AI server backend - the Artificial Intelligence server for personal assistants https://susi.ai
Java
2,500
star
5

susi_android

SUSI.AI Android App https://play.google.com/apps/testing/ai.susi
Kotlin
2,418
star
6

open-event-frontend

The frontend for the Open Event API Server https://test.eventyay.com
JavaScript
2,313
star
7

open-event-droidgen

Open Event Android App Generator https://github.com/fossasia/open-event-android/raw/apk/sample-apk-fossasia17-development.apk
Java
2,048
star
8

pslab-android

PSLab Android App https://play.google.com/store/apps/details?id=io.pslab
Java
2,038
star
9

susi.ai

SUSI.AI Web Client https://susi.ai
JavaScript
2,026
star
10

open-event-wsgen

Open Event Website App Generator https://sched.eventyay.com
JavaScript
2,013
star
11

open-event-attendee-android

Open Event Attendee Android General App https://github.com/fossasia/open-event-android/blob/apk/open-event-dev-app-playStore-debug.apk
Kotlin
1,947
star
12

star-me

Star FOSSASIA Repositories on Github and Support the Community
JavaScript
1,906
star
13

fossasia.org

FOSSASIA Website https://fossasia.org
Less
1,883
star
14

susi_iOS

SUSI AI iOS app http://susi.ai
Swift
1,870
star
15

loklak_search

Frontend Search for loklak server https://loklak.org
TypeScript
1,840
star
16

badgeyay

Attendee Badge Generator for Conferences
JavaScript
1,791
star
17

badge-magic-android

Badge Magic with LEDs - Android App https://play.google.com/apps/testing/org.fossasia.badgemagic
Kotlin
1,788
star
18

meilix

Beautiful Linux System https://meilix.org | APT Repo: http://meilix.fossasia.org
Python
1,779
star
19

pslab-desktop

PSLab Desktop Application https://pslab.io
JavaScript
1,770
star
20

susper.com

Susper Decentralised Search Engine https://susper.com
TypeScript
1,742
star
21

neurolab-android

NeuroLab Android https://github.com/fossasia/neurolab-android/raw/apk/neurolab-dev-debug.apk
Java
1,710
star
22

open-event

Open Event Project, Samples, Documentation and Artwork http://open-event-dev.herokuapp.com
Python
1,701
star
23

labs.fossasia.org

Projects Website for FOSSASIA http://labs.fossasia.org
CSS
1,669
star
24

query-server

Query Server Search Engines
Python
1,665
star
25

gci16.fossasia.org

FOSSASIA Google Code-In Website 2016/17 http://gci16.fossasia.org
HTML
1,659
star
26

codeheat.org

Codeheat Coding Contest Website https://codeheat.org
Less
1,639
star
27

pslab-hardware

PSLab Hardware Design and Schematics https://pslab.io
Prolog
1,633
star
28

pslab-python

Python Library for PSLab Desktop: https://pslab.io
Python
1,632
star
29

flappy-svg

Flappy Bird in SVG. Play it at http://fossasia.github.io/flappy-svg/
JavaScript
1,613
star
30

susi_linux

Hardware for SUSI AI https://susi.ai
Python
1,609
star
31

pslab-scripts

Pocket Science Lab - Scripts for Sensor Experiments
Python
1,604
star
32

gci17.fossasia.org

FOSSASIA Google Code-In Website 2017/18 https://gci17.fossasia.org
CSS
1,598
star
33

gci15.fossasia.org

FOSSASIA Google Code-In Website 2015/16 http://gci15.fossasia.org
HTML
1,596
star
34

susi_skill_cms

A web application framework to edit susi skills http://skills.susi.ai
JavaScript
1,583
star
35

2017.fossasia.org

FOSSASIA Summit 2017 https://2017.fossasia.org
HTML
1,580
star
36

2018.fossasia.org

FOSSASIA Summit 2018 https://2018.fossasia.org
HTML
1,577
star
37

fossasia-communities

FOSSASIA API Files of Communities in Asia
1,576
star
38

open-event-attendee-ios

iOS app for open event
Swift
1,570
star
39

gci14.fossasia.org

FOSSASIA Google Code-In Website 2014/15 http://gci14.fossasia.org
JavaScript
1,569
star
40

knittingpattern

A Python Library for Knitting Patterns
Python
1,569
star
41

2016.fossasia.org

FOSSASIA Summit 2016 https://2016.fossasia.org
CSS
1,564
star
42

2012.fossasia.org

FOSSASIA Summit 2012 Event Site https://2012.fossasia.org
CSS
1,563
star
43

pslab-firmware

Firmware for PSLab Open Hardware Platform https://pslab.io
C
1,559
star
44

loklak_webclient

loklak web application
JavaScript
1,553
star
45

loklak_wok_android

"loklak wok" is a harvesting peer for the loklak_server https://github.com/fossasia/loklak_wok_android/raw/apk/loklak_wok_1.2_20160201.apk
Java
1,549
star
46

susi_chromebot

SUSI.AI Chrome Extension
JavaScript
1,548
star
47

directory.api.fossasia.net

Python
1,547
star
48

yaydoc

Docs! Yay! http://yaydoc.org
JavaScript
1,546
star
49

x-mario

x-mario, the gaming distro
Shell
1,542
star
50

searss

Search to RSS tool
Python
1,542
star
51

neurolab-hardware

Neurolab Hardware
1,541
star
52

2015.fossasia.org

FOSSASIA Summit 2015 Event Site https://2015.fossasia.org
CSS
1,539
star
53

meilix-systemlock

Meilix system lock
Python
1,537
star
54

meilix-generator

WebApp for generating a custom ISO image based on Meilix http://meilix.org
HTML
1,537
star
55

2014.fossasia.org

FOSSASIA Summit 2014 Event Site http://2014.fossasia.org
HTML
1,537
star
56

phimpme-drupal

Phimp.me - Photo App on Drupal
PHP
1,534
star
57

knitlib

Knitting backend library for knitting machines
Python
1,532
star
58

labyrinth

FOSSASIA Labyrinth
JavaScript
1,532
star
59

yaydoc-artwork

Open Source Books
1,532
star
60

sg18.sciencehack.asia

UNESCO Hackathon Website at the FOSSASIA Summit Singapore https://sg18.sciencehack.asia
CSS
1,532
star
61

phimpme-wordpress

Phimp.me - Photo App on Wordpress
PHP
1,532
star
62

CommonsNet

Sharing and Transparency for WiFi Networks
JavaScript
1,531
star
63

knitweb

knitting web app frontend and backend
JavaScript
1,530
star
64

pslab-case

PSLab Case https://pslab.io
1,530
star
65

fossasia.net

FOSSASIA.net Website https://fossasia.net
HTML
1,530
star
66

2011.fossasia.org

FOSSASIA Summit 2011 Event Site http://2011.fossasia.org
HTML
1,530
star
67

unesco.sciencehack.asia

UNESCO Hackathon Website https://unesco.sciencehack.asia
CSS
1,530
star
68

pslab-expeyes

PSLab for ExpEYES - Science Experiments and Data Acquisition for Physics Education https://pslab.io
Python
1,529
star
69

susi_tweetbot

Twitter Bot for Susi http://susi.ai
JavaScript
1,529
star
70

api.fossasia.net

FOSSASIA API
JavaScript
1,529
star
71

fossasia-nodemailer

JavaScript
1,529
star
72

xmario_buildscript

x-mario build script
Shell
1,529
star
73

2023.fossasia.org

HTML
1,528
star
74

hotelxoai.com

The Open Source Hotel in the Mekong Delta in Vietnam
HTML
1,527
star
75

2010.fossasia.org

FOSSASIA Summit 2010 Event Site http://2010.fossasia.org
HTML
1,527
star
76

susi_smart_box

SUSI.AI Smart Box https://susi.ai
1,526
star
77

blog.fossasia.org

Issue Tracker for https://blog.fossasia.org
1,526
star
78

fossasia11-drupal

FOSSASIA 2011 Drupal Site
PHP
1,526
star
79

open-event-next

Open Event Frontend "Next Version" with Vue.js
TypeScript
1,525
star
80

perspektive89.com

Open Source Journal Perspektive89.com
1,525
star
81

fossasia10-drupal

FOSSASIA 2010 Drupal Site
PHP
1,525
star
82

pslab-test-jig

PSLab Test Jig - Boards to test PSLab hardware https://pslab.io
1,523
star
83

cmap.api.fossasia.net

FOSSASIA Community Map
JavaScript
1,523
star
84

fossasia.github.io

FOSSASIA.GitHub.io
HTML
1,523
star
85

feed.api.fossasia.net

PHP
1,522
star
86

loklak-webtweets

FOSSASIA Tweets with loklak http://fossasia.github.io/loklak-webtweets/
Less
1,522
star
87

foss.vn

FOSS.vn Website http://foss.vn
HTML
1,522
star
88

susi_skill_data

A storage place for SUSI.AI skills https://susi.ai
1,521
star
89

susi_fbbot

Susi Facebook Bot http://susi.ai
JavaScript
1,519
star
90

knitpat

Knitting Pattern Format
Python
1,518
star
91

jugaadfest.com

Jugaadfest in India https://jugaadfest.com
HTML
1,518
star
92

susi_desktop

Desktop Client for http://api.susi.ai
JavaScript
1,517
star
93

loklak_wp_plugins

PHP
1,517
star
94

susi_telegrambot

Susi Telegram Bot http://susi.ai
JavaScript
1,516
star
95

susi_slackbot

Ask Susi Messengers http://susi.ai
JavaScript
1,516
star
96

open-event-scraper

Google spreadsheet parsing for Open Event JSON
Python
1,516
star
97

event-collect

event website listing to Open Event format scraper and converter
Python
1,516
star
98

knitserver

JavaScript
1,515
star
99

accounts.susi.ai

Accounts Service for SUSI.AI http://accounts.susi.ai
JavaScript
1,514
star
100

loklak_tweetheatmap

Heat map with tweets by search query using Loklak API and OpenLayers 3
JavaScript
1,513
star