Skip to content

Commit

Permalink
chore: Release 0.8.0 (#2371)
Browse files Browse the repository at this point in the history
chore: Release 0.8.0
  • Loading branch information
iamareebjamal authored Oct 3, 2019
2 parents 905b8d9 + cbe5ce8 commit e2bd4ae
Show file tree
Hide file tree
Showing 60 changed files with 502 additions and 265 deletions.
5 changes: 5 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,8 @@ script:
- ./gradlew build
after_success:
- bash scripts/update-apk.sh

branches:
only:
- master
- development
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
## How to Contribute

First please go through the [Open Source Developer Guide and Best Practices at FOSSASIA](https://blog.fossasia.org/open-source-developer-guide-and-best-practices-at-fossasia/)
### Raising an issue:
This is an Open Source project and we would be happy to see contributors who report bugs and file feature requests submitting pull requests as well.
This project adheres to the Contributor Covenant code of conduct.
Expand Down
38 changes: 21 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,27 @@
[![Mailing List](https://img.shields.io/badge/Mailing%20List-FOSSASIA-blue.svg)](https://groups.google.com/forum/#!forum/open-event)
[![Twitter Follow](https://img.shields.io/twitter/follow/eventyay.svg?style=social&label=Follow&maxAge=2592000?style=flat-square)](https://twitter.com/eventyay)

An events app to discover events happening around the world using the Open Event Platform on Eventyay.com.
An events app to discover events happening around the world using the Open Event Platform on [Eventyay](https://eventyay.com).

Eventyay Attendee App provides following features for users:
- All events by the organizers can be viewed
- Functionality to filter out events by date, time, location and event name
- Users can buy tickets and register as attendees for any event
- Pay for their orders via PayPal and Stripe
- All important event details such as location, date, and timing of the event can be viewed
- Users can view all the tickets bought for an event with their status
- Easy check-in using QR code for Tickets and see check-in timings
- Users can view similar events
- Users have the privilege to mark an event as favorite

Application is available here:

<a href='https://play.google.com/store/apps/details?id=com.eventyay.attendee'><img alt='Get it on Google Play' src='docs/images/ic_play_store.png' height="80"/></a>
<a href='https://f-droid.org/en/packages/com.eventyay.attendee/'><img alt='Get it on F-Droid' src='docs/images/ic_fdroid.png' height="80"/></a>

## Roadmap

Planned features & enhancements are:



## Communication

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

Our chat channel is on gitter [here](https://gitter.im/fossasia/open-event-attendee-android)

Expand All @@ -32,19 +37,20 @@ Our chat channel is on gitter [here](https://gitter.im/fossasia/open-event-atten
<td><img src = "fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_3.jpg"></td>
</tr>
<tr>
<td><img src = "fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_4.jpg"></td>
<td><img src = "fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_5.jpg"></td>
<td><img src = "fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_6.jpg"></td>
<td><img src = "fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_7.jpg"></td>
</tr>
<tr>
<td><img src = "fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_7.jpg"></td>
<td><img src = "fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_8.jpg"></td>
<td><img src = "fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_9.jpg"></td>
</tr>
</table>

## Development

A native Android app using Kotlin for writing code.
A native Android app using Kotlin for writing code and [Open event server](https://github.com/fossasia/open-event-server) for API.

### Libraries used and their documentation

Expand All @@ -58,6 +64,10 @@ A native Android app using Kotlin for writing code.
- JSON API Converter [Docs](https://github.com/jasminb/jsonapi-converter)
- OkHttp [Docs](http://square.github.io/okhttp/)
- Room Persistence Library [Docs](https://developer.android.com/topic/libraries/architecture/room)
- PayPal [Docs](https://github.com/paypal/PayPal-Android-SDK)
- Navigation Architecture Component [Docs](https://developer.android.com/guide/navigation/navigation-getting-started)
- Mapbox [Docs](https://docs.mapbox.com/)
- Stetho [Docs](https://github.com/facebook/stetho)

### Project Conventions

Expand Down Expand Up @@ -108,13 +118,7 @@ Please help us follow the best practices to make it easy for the reviewer as wel
* If you would like to work on an issue, drop in a comment at the issue. If it is already assigned to someone, but there is no sign of any work being done, please free to drop in a comment so that the issue can be assigned to you if the previous assignee has dropped it entirely.

## For Testers: Testing the App
If you are a tester and want to test the app, you have two ways to do that:
1. **Installing APK on your device:** You can get debug APK as well as Release APK in apk branch of the repository. After each PR merge, both the APKs are automatically updated. So, just download the APK you want and install it on your device. The APKs will always be the latest one.

## Open Event Attendee Android Suggestions

- Suggestion form link: [Form](https://docs.google.com/forms/d/e/1FAIpQLSd7Y1T1xoXeYaAG_b6Tu1YYK-jZssoC5ltmQbkUX0kmDZaKYw/viewform)
- Suggestion responses link: [Sheet](https://docs.google.com/spreadsheets/d/1SzR75MBEVrTY1sDM3KAMm9wltiulDAp0QT5hv9eJkKM/edit#gid=1676755229)
**Installing APK on your device:** You can get debug APK as well as Release APK in apk branch of the repository. After each PR merge, both the APKs are automatically updated. So, just download the APK you want and install it on your device. The APKs will always be the latest one.

## License

Expand Down
45 changes: 25 additions & 20 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id "com.diffplug.gradle.spotless" version "3.24.2"
id "com.diffplug.gradle.spotless" version "3.24.3"
}

apply plugin: 'com.android.application'
Expand All @@ -11,6 +11,7 @@ apply plugin: "com.github.b3er.local.properties"

def STRIPE_API_TOKEN = System.getenv('STRIPE_API_TOKEN') ?: "YOUR_API_KEY"
def MAPBOX_KEY = System.getenv('MAPBOX_KEY') ?: "pk.eyJ1IjoiYW5nbWFzMSIsImEiOiJjanNqZDd0N2YxN2Q5NDNuNTBiaGt6eHZqIn0.BCrxjW6rP_OuOuGtbhVEQg"
def PAYPAL_CLIENT_ID= System.getenv('PAYPAL_CLIENT_ID') ?: "YOUR_API_KEY"
def LOCAL_KEY_PRESENT = project.hasProperty('SIGNING_KEY_FILE') && rootProject.file(SIGNING_KEY_FILE).exists()

android {
Expand All @@ -22,8 +23,8 @@ android {
applicationId "com.eventyay.attendee"
minSdkVersion 21
targetSdkVersion 28
versionCode 14
versionName "0.7.0"
versionCode 15
versionName "0.8.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
multiDexEnabled true
Expand Down Expand Up @@ -58,6 +59,7 @@ android {
buildConfigField "String", "DEFAULT_BASE_URL", '"https://api.eventyay.com/v1/"'
buildConfigField "String", "MAPBOX_KEY", '"'+MAPBOX_KEY+'"'
buildConfigField "String", "STRIPE_API_KEY", '"'+STRIPE_API_TOKEN+'"'
buildConfigField "String", "PAYPAL_CLIENT_ID", '"'+PAYPAL_CLIENT_ID+'"'
resValue "string", "FRONTEND_HOST", "eventyay.com"
if (LOCAL_KEY_PRESENT || TRAVIS_BUILD)
signingConfig signingConfigs.release
Expand All @@ -66,6 +68,7 @@ android {
buildConfigField "String", "DEFAULT_BASE_URL", '"https://open-event-api-dev.herokuapp.com/v1/"'
buildConfigField "String", "MAPBOX_KEY", '"'+MAPBOX_KEY+'"'
buildConfigField "String", "STRIPE_API_KEY", '"'+STRIPE_API_TOKEN+'"'
buildConfigField "String", "PAYPAL_CLIENT_ID", '"'+PAYPAL_CLIENT_ID+'"'
resValue "string", "FRONTEND_HOST", "open-event-fe.netlify.com"
}
}
Expand Down Expand Up @@ -121,22 +124,22 @@ repositories {
}

dependencies {
def lifecycle_version = "2.2.0-alpha03"
def lifecycle_version = "2.2.0-alpha05"
def koin_version = "2.0.1"
def roomVersion = "2.1.0"
def ktx_version = "1.0.0"
def ktx2_version = "2.0.0"
def nav_version = "2.1.0-beta02"
def ktx_version = "1.1.0"
def ktx2_version = "2.1.0"
def nav_version = "2.1.0"
def anko_version = "0.10.8"
def paging_version = "2.1.0"

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta03'
implementation 'com.google.android.material:material:1.1.0-alpha09'
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta04'
implementation 'com.google.android.material:material:1.1.0-alpha10'
implementation "androidx.browser:browser:1.0.0"
implementation 'androidx.exifinterface:exifinterface:1.0.0'
implementation "androidx.lifecycle:lifecycle-extensions:${lifecycle_version}"
Expand All @@ -146,7 +149,7 @@ dependencies {
implementation "androidx.room:room-rxjava2:${roomVersion}"
kapt "androidx.room:room-compiler:${roomVersion}"
testImplementation "androidx.room:room-testing:${roomVersion}"
implementation 'androidx.preference:preference:1.1.0-rc01'
implementation 'androidx.preference:preference:1.1.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

// KTX
Expand All @@ -172,24 +175,24 @@ dependencies {

implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.9.6"
implementation 'com.github.jasminb:jsonapi-converter:0.9'
implementation 'com.squareup.okhttp3:logging-interceptor:4.1.0'
implementation 'com.squareup.retrofit2:retrofit:2.6.1'
implementation 'com.squareup.retrofit2:converter-jackson:2.6.1'
implementation 'com.squareup.okhttp3:logging-interceptor:4.2.1'
implementation 'com.squareup.retrofit2:retrofit:2.6.2'
implementation 'com.squareup.retrofit2:converter-jackson:2.6.2'

// Cards Shimmer Animation
implementation 'com.facebook.shimmer:shimmer:0.5.0'

// RxJava
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.11'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.12'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.2'

// Picasso
implementation 'com.squareup.picasso:picasso:2.71828'

// Stripe
implementation 'com.stripe:stripe-android:10.3.0'
implementation 'com.stripe:stripe-android:11.1.4'

// QR Code
implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
Expand All @@ -203,7 +206,7 @@ dependencies {
implementation "org.jetbrains.anko:anko-design:$anko_version"

//Mapbox java sdk
implementation 'com.mapbox.mapboxsdk:mapbox-sdk-services:4.8.0'
implementation 'com.mapbox.mapboxsdk:mapbox-sdk-services:4.9.0'

// SimpleCropView
implementation 'com.isseiaoki:simplecropview:1.1.8'
Expand All @@ -215,7 +218,7 @@ dependencies {
testImplementation 'com.github.iamareebjamal:stetho-noop:1.2.1'

//LeakCanary
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-2'
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-3'

// Paging
implementation "androidx.paging:paging-runtime:$paging_version"
Expand All @@ -231,11 +234,13 @@ dependencies {
implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2'


//PayPal
implementation 'com.paypal.sdk:paypal-android-sdk:2.16.0'

testImplementation 'junit:junit:4.12'
testImplementation 'org.threeten:threetenbp:1.4.0'
testImplementation "org.koin:koin-test:$koin_version"
testImplementation 'androidx.arch.core:core-testing:2.0.1'
testImplementation 'androidx.arch.core:core-testing:2.1.0'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"formatVersion": 1,
"database": {
"version": 9,
"identityHash": "dfbd417bf9235824cb59ac1a0a03fa1f",
"identityHash": "ceaeb211922de9668d95362a86917dac",
"entities": [
{
"tableName": "Event",
Expand Down Expand Up @@ -701,7 +701,7 @@
},
{
"tableName": "Attendee",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `firstname` TEXT, `lastname` TEXT, `email` TEXT, `address` TEXT, `city` TEXT, `state` TEXT, `country` TEXT, `jobTitle` TEXT, `phone` TEXT, `taxBusinessInfo` TEXT, `billingAddress` TEXT, `homeAddress` TEXT, `shippingAddress` TEXT, `company` TEXT, `workAddress` TEXT, `workPhone` TEXT, `website` TEXT, `blog` TEXT, `github` TEXT, `facebook` TEXT, `twitter` TEXT, `gender` TEXT, `isCheckedIn` INTEGER, `checkinTimes` TEXT, `isCheckedOut` INTEGER NOT NULL, `pdfUrl` TEXT, `ticketId` TEXT, `event` INTEGER, `ticket` INTEGER, PRIMARY KEY(`id`), FOREIGN KEY(`event`) REFERENCES `Event`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`ticket`) REFERENCES `Ticket`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `firstname` TEXT, `lastname` TEXT, `email` TEXT, `address` TEXT, `city` TEXT, `state` TEXT, `country` TEXT, `jobTitle` TEXT, `phone` TEXT, `taxBusinessInfo` TEXT, `billingAddress` TEXT, `homeAddress` TEXT, `shippingAddress` TEXT, `company` TEXT, `workAddress` TEXT, `workPhone` TEXT, `website` TEXT, `blog` TEXT, `github` TEXT, `facebook` TEXT, `twitter` TEXT, `gender` TEXT, `isCheckedIn` INTEGER, `checkinTimes` TEXT, `isCheckedOut` INTEGER NOT NULL, `pdfUrl` TEXT, `ticketId` TEXT, `checkedIn` TEXT, `checkedOut` TEXT, `event` INTEGER, `ticket` INTEGER, PRIMARY KEY(`id`), FOREIGN KEY(`event`) REFERENCES `Event`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`ticket`) REFERENCES `Ticket`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
"fields": [
{
"fieldPath": "id",
Expand Down Expand Up @@ -871,6 +871,18 @@
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "checkedIn",
"columnName": "checkedIn",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "checkedOut",
"columnName": "checkedOut",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "event",
"columnName": "event",
Expand Down Expand Up @@ -994,7 +1006,7 @@
},
{
"tableName": "Order",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `paymentMode` TEXT, `country` TEXT, `status` TEXT, `amount` REAL NOT NULL, `identifier` TEXT, `orderNotes` TEXT, `completedAt` TEXT, `city` TEXT, `address` TEXT, `createdAt` TEXT, `zipcode` TEXT, `paidVia` TEXT, `discountCodeId` TEXT, `ticketsPdfUrl` TEXT, `transactionId` TEXT, `isBillingEnabled` INTEGER NOT NULL, `taxBusinessInfo` TEXT, `company` TEXT, `event` INTEGER, `attendees` TEXT NOT NULL, PRIMARY KEY(`id`))",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `paymentMode` TEXT, `country` TEXT, `status` TEXT, `amount` REAL NOT NULL, `identifier` TEXT, `orderNotes` TEXT, `completedAt` TEXT, `state` TEXT, `city` TEXT, `address` TEXT, `createdAt` TEXT, `zipcode` TEXT, `paidVia` TEXT, `discountCodeId` TEXT, `ticketsPdfUrl` TEXT, `transactionId` TEXT, `isBillingEnabled` INTEGER NOT NULL, `taxBusinessInfo` TEXT, `company` TEXT, `isExpired` INTEGER, `event` INTEGER, `attendees` TEXT NOT NULL, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
Expand Down Expand Up @@ -1044,6 +1056,12 @@
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "state",
"columnName": "state",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "city",
"columnName": "city",
Expand Down Expand Up @@ -1110,6 +1128,12 @@
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "isExpired",
"columnName": "isExpired",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "event",
"columnName": "event",
Expand Down Expand Up @@ -2211,7 +2235,7 @@
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'dfbd417bf9235824cb59ac1a0a03fa1f')"
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ceaeb211922de9668d95362a86917dac')"
]
}
}
7 changes: 7 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@
<data
android:scheme="https"
android:host="@string/FRONTEND_HOST"/>
<data
android:pathPrefix="/e"/>
<data
android:pathPrefix="/reset-password"/>
<data
android:pathPrefix="/email"/>

</intent-filter>
</activity>
<provider
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import org.fossasia.openevent.general.attendees.Attendee
import org.fossasia.openevent.general.attendees.AttendeeDao
import org.fossasia.openevent.general.attendees.AttendeeIdConverter
import org.fossasia.openevent.general.attendees.ListAttendeeIdConverter
import org.fossasia.openevent.general.attendees.AttendeeConverter
import org.fossasia.openevent.general.attendees.ListAttendeeConverter
import org.fossasia.openevent.general.attendees.forms.CustomForm
import org.fossasia.openevent.general.auth.User
import org.fossasia.openevent.general.auth.UserDao
Expand Down Expand Up @@ -59,7 +59,7 @@ import org.fossasia.openevent.general.ticket.TicketIdConverter
Settings::class, Proposal::class, Tax::class], version = 9)
@TypeConverters(EventIdConverter::class, EventTopicConverter::class, EventTypeConverter::class,
EventSubTopicConverter::class, TicketIdConverter::class, MicroLocationConverter::class, UserIdConverter::class,
AttendeeIdConverter::class, ListAttendeeIdConverter::class, SessionTypeConverter::class, TrackConverter::class,
AttendeeConverter::class, ListAttendeeConverter::class, SessionTypeConverter::class, TrackConverter::class,
SpeakersCallConverter::class, ListSpeakerIdConverter::class)
abstract class OpenEventDatabase : RoomDatabase() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ data class Attendee(
val isCheckedOut: Boolean = false,
val pdfUrl: String? = null,
val ticketId: String? = null,
val checkedIn: String? = null,
val checkedOut: String? = null,
@ColumnInfo(index = true)
@Relationship("event")
var event: EventId? = null,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.fossasia.openevent.general.attendees

import androidx.room.TypeConverter
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper

class AttendeeConverter {

@TypeConverter
fun toAttendee(json: String): Attendee? {
return jacksonObjectMapper().readerFor(Attendee::class.java).readValue<Attendee>(json)
}

@TypeConverter
fun toJson(attendee: Attendee?) = ObjectMapper().writeValueAsString(attendee)
}
Loading

0 comments on commit e2bd4ae

Please sign in to comment.