Giter Site home page Giter Site logo

squanchy-dev / squanchy-android Goto Github PK

View Code? Open in Web Editor NEW
295.0 15.0 45.0 27.29 MB

Open source Android app for your conferences

License: Apache License 2.0

Java 8.44% Shell 0.63% Kotlin 90.94%
android conference reactive-extensions firebase firestore kotlin circleci

squanchy-android's Introduction

Squanchy Android [ARCHIVED]

Master CI Apache 2 license

Note: this project has been archived an put in read-only mode. No further features nor fixes are coming. If you're interested in taking over as maintainer please get in touch on Twitter.

Squanchy is an open source platform for conferences. The source code for the Firebase backend and for the Flutter port of the app is available in other repositories of this organisation.

Documentation is available on http://squanchy.net/. The project is maintained by independent contributors (see CONTRIBUTORS.md).

Setting up the app

Starting your own conference app is easy and requires little effort, but you need to prepare some files. See docs/setup.md for detailed instructions.

Please note that this app uses some third party services:

  • Firebase (Firestore, Push messages, etc.)
  • Fabric: Crashlytics

While not all of them are strictly necessary for the app to work (with the exception of Firebase's RTDB), it is currently not possible for the code to work without them. We plan on eventually abstracting away the implementations so that they would simply be disabled if there is no API configured, but we haven't done it yet. If you need to use Squanchy without some of those implementations, please feel free to make them optional and contribute back to mainline your changes.

Git hooks

The project uses Detekt and KtLint to validate Kotlin code before committing. This is done with a Git pre-commit hook, which is automatically installed by Gradle when the clean or assemble tasks are run. You can also install the hook manually from Gradle by executing the installGitHooks task on the root project: $ ./gradlew installGitHooks.

If you wish to commit code that is failing this test for whatever reason, you can use the --no-verify flag when committing with git. Please note that if you don't address the issues before pushing, the CI will fail the build.

License

Squanchy Android is released under Apache 2.0 licence. See the LICENSE file.

squanchy-android's People

Contributors

alexstyl avatar catt-stefano avatar cmargonis avatar cortinico avatar danybony avatar dextorer avatar fossabot avatar fourlastor avatar frapontillo avatar friedger avatar jonreeve avatar okondakov avatar quiro91 avatar rock3r avatar romandanylyk avatar setdar avatar taraskunyk avatar tasomaniac avatar tiwiz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

squanchy-android's Issues

Favorite an event

Favorite an event from the event details.

The favorites for a user are stored in /user/{userId}/favorites/{eventId} with value true

Rate sessions

This requires accounts support (see #56), and collects ratings on the database.

Deep link support

Allow to deep-link into activities by URL:

  • Homescreen
  • Event details
  • Speaker details

One-activity-per-screen

Let's not use fragments wherever possible; we're having some serious state loss issues because of that in some cases (e.g., multi-window on N+).

This issue is about splitting things out of the current uber-activity, HomeActivity, but should include no behaviour changes nor other refactors, whenever possible. Splitting activities out should mean we move code to per-domain packages instead of per-component-type (e.g., ScheduleActivity should be in schedule rather than ui)

Activities to create:

  • NavigationDrawerActivity (base class)
  • ScheduleActivity
  • BirdsOfFeatherActivity
  • SocialEventsActivity
  • SocialFeedActivity
  • MyScheduleActivity
  • VenueActivity (combo venue info + floorplans)
  • SpeakersActivity
  • AboutActivity

Screen: conference info

Contains:

  • Links to conference social media
  • Blurb about conference
  • Photo album (?)
  • Link to previous years' talks

Handle "no event with given ID" in event details

Currently trying to load an event details with an unknown ID results in nothing loading and an empty page; instead it should either show an empty state or pop an error toast and close the activity.

Replace any "connfa" reference with "squanchy", remove Connfa code

Package names, classes, resources. All must go.

  • Step 1: package com.connfa -> net.squanchy; classes Connfa* -> Squanchy*
  • Step 2: rename all remaining references connfa -> squanchy (including resources)
  • Step 3: remove all Connfa code (except for the Social screen)

Homescreen empty states

If a page content is empty, it will simply be an empty page. It should have some sort of empty state.

TODO:

Collapsing appbar on the event details screen

Exact behaviour TBD but likely crossfading the title between expanded and collapsed state, and speakers fading in/out.

Also to look at: set "what"/"where"/"about" labels' and speaker container visibility to GONE by default

Fix build crashing

Build crashes with !zip.isFile() error.

As per Issue 230211, one possible solution is to migrate to a newer gradle plugin (2.3.0-RC1)

Account login and favourites sync

Use Firebase login to connect to a Google/GitHub account so that we have a concept of user identity. Sync favourite talks to Firebase for signed-in users.

Note: this requires sign-in onboarding and a "do you want to sync your favourites?" prompt when adding a fave for the first time

Fav talk starting notification

Show a user that a favourite talk is about to start. In the notification: Talk title, speaker(s), room, timeslot (e.g., 9:00โ€”10:00)

Screen: settings

Items:

  • Log in/log out1 (done in #177)
  • Enable/disable notifications (done in #136)
  • Configure wifi1
  • FOSS licences (done in #192)
  • About the app:
    • version info (done in #153)
    • repo URL
    • other?

Notes:
1 not part of MVP, see login story

Screen: Favorites

What's remaining service wise is to use EventRepository.events() and filter by event.favorited()

What's remaining UI wise is ???

Support different item types in schedule

Support non-talk/keynote items in the schedule, such as:

  • registration
  • coffee_break
  • lunch
  • social
  • other

Note: all those types do not support speakers and experience levels

Add custom fonts

Add custom fonts from Dropbox folder using Calligraphy and setting style attributes

Screen: onboarding

Three pages:

  • Contest/location opt-in (done in #211, #213)
    • Prompts for location permission
    • If BLE is off, offers to turn it on
    • Enables NearIt when both are on
  • Account sign-in (done in #319)
    • Pops up the sign-in bottom sheet
  • WiFi pre-configuration (depends on #59)
    • During onboarding, if the wifi configuration is available, we should prompt users if they want us to autoconfigure the wifi for the conference.
  • Analytics opt-out/GDPR readiness (depends on #515)
    • During onboarding we should offer users the ability to opt out from analytics

Screen: venue info

Contains: venue name and address (plus map?), directions link.

Non-MVP: venue info (transport close by, etc), room info (capacity), floor plans

Screen: speaker details

Contains: photo, full name, company, bio, (social) link(s), list of talks (title, day, timeslot, room -- tapping it brings to the talk details)

Screen: search

Accessed from the appbar on any screen of the app.

Designs (WIP):

Resting state (before typing) Results (after typing)
image TODO

Autocomplete (non-MVP):
image

Fix crash on notification

With API < 23, the notification crashes with this logacat

FATAL EXCEPTION: main
Process: it.droidconit.dummiladisciassette, PID: 8283
java.lang.NoSuchMethodError: No virtual method getColor(ILandroid/content/res/Resources$Theme;)I in class Landroid/content/res/Resources; or its super classes (declaration of 'android.content.res.Resources' appears in /system/framework/framework.jar)
at net.squanchy.notification.NotificationCreator.createDefaultBuilder(NotificationCreator.java:97)
at net.squanchy.notification.NotificationCreator.createFrom(NotificationCreator.java:50)
at net.squanchy.notification.NotificationCreator.createFrom(NotificationCreator.java:41)
at net.squanchy.DebugActivity.createAndNotifyTalksCount(DebugActivity.java:62)
at net.squanchy.DebugActivity.testSingleNotification(DebugActivity.java:50)
at net.squanchy.DebugActivity.lambda$onCreate$0(DebugActivity.java:38)
at net.squanchy.DebugActivity$$Lambda$1.onClick(Unknown Source)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19858)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5696)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

Opening develop brunch in Android Studio 2.3

Hi!
I have some problems with APPLICATION_ID when trying to open project.

Error:A problem occurred while evaluating entry:
- File application.properties does not exist.
- No environment variable defined for key 'APPLICATION_ID'

Auto-configure WiFi

Facility to add WiFi SSID to the device's configuration.

The goal is to allow users to configure the conference Wifi in advance (or at the venue if/when we have geofencing again, see #318). This would be likely presented with an option in the settings.

In addition to this, once this is implemented we'll prompt users in the onboarding (#60) with this feature, but it's tracked separately.

Error states: should probably just be a bottom sheet informing the user we could not setup the Wifi automagically, but that they can add it manually and give them the network name and password (with a way to copy them to the clipboard, maybe?).

Dev details

See:

Rework networking layer

We want to get rid of the Model-that-does-networking approach in the app and create a cleanly separated network layer that emits immutable models instead. This goes hand-in-hand with dropping the Drupal SDK module and simply performing REST requests against the backend.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.