Giter Club home page Giter Club logo

android's Introduction

Binder - Android App

by Chris Foster, Mitch Hentges, Sheldon Roddick and Steve Lyall

Binder is currently under development. We appreciate your feedback on the app as well as any input and suggestions you might have. Feel free to email us at [email protected] or connect with us on GitHub at https://github.com/binder-app/android.

Binder is an Android application designed to match students with study buddies. It is accessible to anyone with an Android device running Android 4.1 or later.

##Initial Set-Up

###Installation Note If you have recieved an evaluation copy of Binder as an .apk file, download it to your Android device and open it to install the app. You may need to allow installation of applications from sources other than the Google Play Store, under Settings -> Security -> Unknown Sources.

###Getting Started When you first launch the app, you will be asked to complete your profile, which includes your name, photo, phone number (this lets you get in touch with your matches), program of study, academic year, courses in progress and a short biography.

To take a photo, tap the grey camera icon.

To select your courses, begin typing your course name in the Find Courses box. A list of possible courses is shown. Once you choose one, tap the plus sign to add it to your course list. To remove a course from your list of selected courses, just tap and hold the course in the course list.

When you have completed your profile, tap the green Start button to start looking for matches!

Browsing Suggestions

Binder shows you profiles of other Binder users, one at a time. To read more about them, tap the info icon in the top right-hand corner of the screen.

If you'd be interested in connecting with the user you're currently looking at, swipe their profile card to the right. If not, swipe to the left to ignore them. Choose carefully, as you only get to review users' profiles once!

Reviewing Matches

If Binder finds that a user you like has also liked you, you'll be notified of the match when you launch the app. To get in touch, tap the green button to add the user to your phone contacts. You can then send the user a text to hook up to study when it works best for you both!

#Development

Project source available at https://github.com/binder-app/android

Setup

  1. Install JDK

  2. Install the Android SDK

  3. Run android and install the following packages:

    • Tools
      • Android SDK Tools
      • Android SDK Platform-tools
      • Android SDK Build-tools
    • Android 6.0 (API 23)
      • SDK Platform
    • Extras
      • Android Support Repository
  4. (Optional) Add the following line to your ~/.gradle/gradle.properties org.gradle.daemon=true

Build

  1. gradle build

Test

  1. Ensure that you've got an android device connected that shows up when you adb devices
  2. gradle connectedAndroidTest

Deploy to device

  1. gradle installDebug

android's People

Contributors

mitchhentges avatar roddicks avatar stevelyall avatar

Stargazers

 avatar

Watchers

 avatar  avatar

android's Issues

Add courses to Profile during profile creation

FirstLaunchActivity takes in a class list as a string, and has code to create a Profile object which is sent to the API. Right now courses are not included in profiles.

Profile has an addCourse method and maintains a List of Course objects which is used to convert it to JSON, but we should determine what rules we want to follow parsing course names.

I know we discussed this a lot earlier, should we just take the list of courses as a string from the user? If so, what format are we agreeing to use?

COMP 1130
COMP1130
comp1130
comp 1130
comp 113
or any other misspelling, for that matter?

Course List removed after photo taken

During profile creation, if you fill out the profile then take the photo, when returning to the profile creation screen the list of courses is empty again.

Steps to reproduce:

  1. From a clean install, run the app.
  2. Fill out the profile except for the photo. Add several courses to your course list.
  3. Take the photo.
  4. On returning to the ProfileCreationActivity, the course list is empty.

Possibly related to saving state on activity pause and resume when the camera is launched?

Crashes on subsequent launches after clean install

Nexus 5 Android 6.0

https://www.dropbox.com/s/ce6hf8k3awq8kbd/device-2015-11-22-200347.mp4?dl=0

Steps to reproduce:

  1. Uninstall the app
  2. Install the app
  3. Create a test profile including a picture
  4. The suggestion view activity is displayed. Exit the app.
  5. Relaunch the app.
 FATAL EXCEPTION: main
                                                           Process: ca.binder, PID: 32515
                                                           java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference
                                                               at ca.binder.remote.Photo.base64(Photo.java:40)
                                                               at ca.binder.domain.Match.writeToParcel(Match.java:119)
                                                               at android.os.Parcel.writeParcelable(Parcel.java:1416)
                                                               at android.os.Parcel.writeValue(Parcel.java:1322)
                                                               at android.os.Parcel.writeList(Parcel.java:738)
                                                               at android.os.Parcel.writeValue(Parcel.java:1344)
                                                               at android.os.Parcel.writeArrayMapInternal(Parcel.java:665)
                                                               at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330)
                                                               at android.os.Bundle.writeToParcel(Bundle.java:1079)
                                                               at android.os.Parcel.writeBundle(Parcel.java:690)
                                                               at android.content.Intent.writeToParcel(Intent.java:7788)
                                                               at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2639)
                                                               at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507)
                                                               at android.app.Activity.startActivityForResult(Activity.java:3917)
                                                               at android.app.Activity.startActivityForResult(Activity.java:3877)
                                                               at android.app.Activity.startActivity(Activity.java:4200)
                                                               at android.app.Activity.startActivity(Activity.java:4168)
                                                               at ca.binder.MainActivity$1.use(MainActivity.java:106)
                                                               at ca.binder.remote.request.AsyncServerRequest$1$1.run(AsyncServerRequest.java:33)
                                                               at android.os.Handler.handleCallback(Handler.java:739)
                                                               at android.os.Handler.dispatchMessage(Handler.java:95)
                                                               at android.os.Looper.loop(Looper.java:148)
                                                               at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Retrieve Matches

need to retrieve matches from the server and display them to the user.

Needs a MatchViewActivity or similar.
We can check for matches when the app starts if we don't want to implement a service and notifications.

Crash - Changing UI from non-UI-thread

The callback for the AsyncServerRequest doesn't run stuff on the UI thread, and consumers are changing the UI anyway 'cause #yolo.

Ensure that the Async thinger runs the result on the UI thread

Make Year formatting consistent

The year input in FirstLaunchActivity is a String (1st), the Profile object takes an int, the API handles it as a string, and the suggestions view shows it as a concatenated string (Year 1).

To save us some sub-stringing, parsing, concatenating, etc, we should decide on a single way the year should be inputted and displayed.

My suggestion would be to take it in as a string ex) 1st, and just reuse this everywhere and concatenate it with year when the profile is viewed.
Any ideas?

Zero suggestions retrieved from server

SuggestionViewActivity asynchronously attempts to get suggestions from the server, but none are retrieved.

getTestSuggestions() can be called in onCreate to show some static test data temporarily

check for suggestions or matches on app resume

if the application stops and the SuggestionViewActivity resumes, no new suggestions are shown even if more users are available until the app is restarted.

in the same case, it does not check for matches again.

Crashes after confirming photo taken with device

@roddicks I know you're not done with the FirstLaunchActivity just yet, though working on it I'm getting a crash on my device once I take my photo and tap the checkmark to confirm it.

Does this work on your devices? Or is it a device specific issue for me?

ca.binder E/AndroidRuntime: FATAL EXCEPTION: main
                                                           Process: ca.binder, PID: 32383
                                                           java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=9999, result=-1, data=Intent {  }} to activity {ca.binder/ca.binder.FirstLaunchActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.database.Cursor.moveToFirst()' on a null object reference
                                                               at android.app.ActivityThread.deliverResults(ActivityThread.java:3699)
                                                               at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)
                                                               at android.app.ActivityThread.-wrap16(ActivityThread.java)
                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                               at android.os.Looper.loop(Looper.java:148)
                                                               at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                            Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.database.Cursor.moveToFirst()' on a null object reference
                                                               at ca.binder.BinderUtilities.findImageFileFromUri(BinderUtilities.java:30)
                                                               at ca.binder.FirstLaunchActivity.onActivityResult(FirstLaunchActivity.java:106)
                                                               at android.app.Activity.dispatchActivityResult(Activity.java:6428)
                                                               at android.app.ActivityThread.deliverResults(ActivityThread.java:3695)
                                                               at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 
                                                               at android.app.ActivityThread.-wrap16(ActivityThread.java) 
                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 
                                                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                               at android.os.Looper.loop(Looper.java:148) 
                                                               at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

API level?

Our current min SDK version is 21, what do you guys think about trying to reduce this somewhat? Right now we're only supporting Lollipop and higher, do we think this could be limit who we can test with somewhat?

Thoughts?

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.