/**
* CurrentUser.java
* Used for storage of name, uid and location information of the current user.
*/
package stetson.CTF.utils;
import stetson.CTF.JoinCTF;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
public class CurrentUser {
public static final String TAG = "CurrentUser";
// User Info
private static String name = "";
private static String uid = "";
private static double latitude = -1;
private static double longitude = -1;
private static float accuracy = -1;
private static boolean isObserver = false;
private static boolean isFacebookUser = false;
// Game Info
private static String gameId = "";
// Location members
private static LocationManager locationManager;
private static LocationListener locationListener;
// Mutators
public static void setLocation(double lati, double longi) {
CurrentUser.latitude = lati;
CurrentUser.longitude = longi;
}
public static void setName(String name) {
CurrentUser.name = name;
}
public static void setUID(String uid) {
CurrentUser.uid = uid;
}
public static void setGameId(String game) {
CurrentUser.gameId = game;
}
public static void setAccuracy(float accuracy) {
CurrentUser.accuracy = accuracy;
}
public static void setIsObserver(boolean isObserver) {
CurrentUser.isObserver = isObserver;
}
// Accessors
public static float getAccuracy() {
return CurrentUser.accuracy;
}
public static String getGameId() {
return CurrentUser.gameId;
}
public static String getName() {
return name;
}
public static String getUID() {
return uid;
}
public static double getLongitude() {
return CurrentUser.longitude;
}
public static double getLatitude() {
return CurrentUser.latitude;
}
public static boolean getIsObserver() {
return isObserver;
}
public static void setFacebookUser(boolean facebook) {
isFacebookUser = facebook;
}
public static boolean isFacebookuser() {
return isFacebookUser;
}
public static boolean hasLocation() {
if(CurrentUser.accuracy == -1 || CurrentUser.latitude == -1 || CurrentUser.longitude == -1) {
return false;
}
return true;
}
/**
* Generates HttpParams automatically for quering the server for a list of games.
* @param hbr
* @return
*/
public static String buildQueryParams() {
String params = "";
params += "latitude=" + CurrentUser.latitude;
params += "&longitude=" + CurrentUser.longitude;
params += "&accuracy=" + CurrentUser.accuracy;
params += "&user_id=" + CurrentUser.uid;
params += "&name=" + Connections.encString(CurrentUser.name);
return params;
}
/**
* Stops the locationListener given a location manager.
* @param lm
*/
public static void stopLocation(LocationManager lm) {
if(locationListener != null) {
lm.removeUpdates(locationListener);
locationListener = null;
}
}
/**
* Periodically updates the users location.
* @param lm
* @param frequency
*/
public static void userLocation(LocationManager lm, int frequency) {
// Setup our location manager
locationManager = lm;
// Remove all updates for the current listener (if one exists)
CurrentUser.stopLocation(lm);
// Setup our location listener
locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
Log.i(TAG, "Update Location.");
CurrentUser.setLocation(location.getLatitude(), location.getLongitude());
CurrentUser.setAccuracy(location.getAccuracy());
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Minimum distance to move a gps update
int distThreshold = 0;
switch(frequency) {
case JoinCTF.GPS_UPDATE_FREQUENCY_GAME:
distThreshold = JoinCTF.GPS_UPDATE_DISTANCE_GAME;
break;
case JoinCTF.GPS_UPDATE_FREQUENCY_INTRO:
distThreshold = JoinCTF.GPS_UPDATE_DISTANCE_INTRO;
break;
case JoinCTF.GPS_UPDATE_FREQUENCY_BACKGROUND:
distThreshold = JoinCTF.GPS_UPDATE_DISTANCE_BACKGROUND;
break;
}
// Start requesting updates per given time
Log.i(TAG, "New GPS Parsing: FREQ=" + frequency + ", DIST=" + distThreshold);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, frequency, distThreshold, locationListener);
}
/**
* generates a new UID.
* @param name
*/
public static String genUID() {
// Generate a new uid
String uid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";
while(uid.contains("x"))
uid = uid.replaceFirst("x", Long.toHexString(Math.round(Math.random() * 16.0)));
uid = uid.toUpperCase();
setUID(uid);
return uid;
}
}