StudGent – Stadsgids voor studenten – Benjamin Cottyn / Wouter Deryckere / Floris Devreese / Ah-Lun Tang



StudGent – Stadsgids voor studenten – Benjamin Cottyn / Wouter Deryckere / Floris Devreese / Ah-Lun Tang

0 0


slides


On Github studgent / slides

StudGent

Stadsgids voor studenten

Benjamin Cottyn / Wouter Deryckere / Floris Devreese / Ah-Lun Tang

Behoefte

  • Nieuwe studenten in Gent.
    • Wegwijs?
    • Leuke plekjes?
    • Feestjes?

Oplossing: StudGent app

  • Stadsgids
  • Informatief
  • Interactief

Overzicht app

Hoofdscherm

Optie menu

Inloggen

In de buurt

ActionBar menu items

Lijstweergave

Detailweergave

Evenementen

Detailweergave

Uitdagingen

Checkin

Detailweergave

Am I Drunk? mini-game

Am I Drunk? mini-game

Quiz

Antwoord ingeven

Vrienden

Vriend verwijderen

Vriend toevoegen

Profiel bekijken

Package structure

Activities

Business objects & datasources

Locaties & afstanden

  • Afstanden nodig voor
    • Point of Interest
    • Quiz
  • Afstand bijwerken bij verandering locatie
  • Nodig in meerdere Activities

→ Repetitieve code!

LocationUtil

  • Volgt singleton design pattern
    • LocationManager in constructor
    • Vraagt getLastKnownLocation op
  • Implementeert LocationListener
    • onLocationChanged:
      • Afstanden bijwerken
      • Activities bijwerken
  • Sensor uitzetten
    • In onPause() & onResume()

Voorbeeld: POIDetailActivity

Voorbeeld: POIDetailActivity

Sensor uitzetten

@Override
public void onPause(){
  LocationUtil.getInstance(this).onPause();
  super.onPause();
}
@Override
public void onResume(){
  LocationUtil.getInstance(this).onResume();
  super.onResume();
}

Augmented Reality

  • Wat is het?
  • Activity met twee views
    • AugmentedActivity
    • OverlayView
    • POIView

AugmentedActivity

  • Camera
  • Sensors
  • Beheer OverlayView

OverlayView

  • Laden & bijhouden POIViews
  • Location (GPS)
  • OverlayView “roteren”

POIViews roteren

public void updateOverlay(int az) {
  for (POIView v : pois) {
    float bearing = devLoc.bearingTo(
        LocationUtil.getLocationFromLatLng( v.getPoi().getLocation() ) 
    );
    float t = ((az - bearing) + 180) % 360 - 180;
    if (t > fov) {
      // Do not draw, because poi is outside fov
      v.setVisibility(View.INVISIBLE);
    } else {
      float offset = ((az - bearing) + 180) % 360 - 180;
      offset = (offset / fov) * screenWidth;
      v.setTranslationX( -offset + ( screenWidth/2 - v.getMinWidth()/2 ) );
      // Force visibility with a SurfaceHolder beneath this view
      v.setVisibility(View.VISIBLE);
      v.requestLayout();
    }
  }
}

POIView

  • Houdt POI bij
  • Tekent icoon & naam
  • onMeasure() overschreven

onMeasure()

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  minWidth = 0;
  int minHeight = 0;
  int textWidth = (int) tpaint.measureText(poi.getName());
  int iconWidth = (int) (circleRadius*2 + cpaint.getStrokeWidth()*2);
  minWidth = Math.max(textWidth, iconWidth);
  minHeight = screenHeight;
  setMeasuredDimension(
    MeasureSpec.makeMeasureSpec(minWidth, MeasureSpec.EXACTLY), 
    MeasureSpec.makeMeasureSpec(minHeight, MeasureSpec.EXACTLY)
  );
}

Voorbeeld: Gebouw B

Voorbeeld: Gebouw B

Voorbeeld: Gebouw D

Development Workflow

  • Continuous Integration
  • Crashlytics

Continuous Integration: Travis

Compiler fout

Crashlytics

  • Meerdere developers
  • Emulator ↔ Echt toestel
  • Op locatie testen

Stacktrace

Stacktrace

Stacktrace

Future releases

  • Nieuwsstream
  • Eigen evenement & POI toevoegen
  • Kalender integratie
  • Groepen/clubs
  • Discussies en opmerkingen
  • RSVP

Binnenkort beschikbaar ;-)

Benjamin Cottyn / Wouter Deryckere / Floris Devreese / Ah-Lun Tang

http://studgent.ahlun.be https://github.com/studgent (MIT License)
0