package com.nbs.client.assassins.models; import java.util.UUID; import com.google.android.gms.maps.model.LatLng; import com.nbs.client.assassins.services.LocationService; import com.nbs.client.assassins.utils.Bus; import com.nbs.client.assassins.utils.KeyValueStore; import com.nbs.client.assassins.utils.LocationUtils; import android.content.Context; import android.location.Location; public class User extends KeyValueStore { private static final String TAG = "User"; private static final String ID = "install_id"; private static final String TOKEN = "token"; private static final String USERNAME = "username"; public static final String LOGIN_COMPLETE = "com.nbs.client.assassins.USER_TOKEN_CHANGED"; public static final String LOGOUT_COMPLETE = "com.nbs.client.assassins.LOGOUT_COMPLETE"; public static final String FOCUSED_GAME_CHANGED = "com.nbs.client.assassins.FOCUSED_GAME_CHANGED"; private Context c; public User(Context c) { this.c = c; } public synchronized String getInstallId() { String installId = getString(c,ID); if (installId == null) { installId = UUID.randomUUID().toString(); putString(c, ID, installId); } return installId; } public String getUsername() { return getString(c,USERNAME); } public synchronized void setUsername(String username) { putString(c,USERNAME, username); } public boolean hasUsername() { return getUsername() != null; } public String getToken() { return getString(c,TOKEN); } public synchronized void setToken(String token) { putString(c,TOKEN, token); if(token != null) { Bus.post(c,LOGIN_COMPLETE); } } public boolean hasToken() { return getToken() != null; } public LatLng getLocation() { return getLatLng(c, "my"); } public synchronized void setLocation(Location lastLocation) { putLatLng(c, "my", LocationUtils.locationToLatLng(lastLocation)); } public synchronized void setLocation(double lat, double lng) { LatLng oldLoc = getLocation(); LatLng newLoc = new LatLng(lat,lng); putLatLng(c,"my", newLoc); if(oldLoc == null || !oldLoc.equals(newLoc)) { Bus.post(c,LocationService.LOCATION_UPDATED); } } public boolean isLoggedIn() { return hasToken() && hasUsername(); } public synchronized void logout() { Bus.post(c, User.LOGOUT_COMPLETE); setUsername(null); setToken(null); } @Override public String toString() { return "[ token=" + getToken() + ", username=" + getUsername() + ", install_id=" + getInstallId() + ", location=" + getLocation() + " ]" ; } public String getFocusedMatch() { return getString(c, "focused_match"); } public void setFocusedMatch(String matchId) { putString(c, "focused_match", matchId); Bus.post(c, User.FOCUSED_GAME_CHANGED); } public void login(String username, String token) { setUsername(username); setToken(token); Bus.post(c, User.LOGIN_COMPLETE); } }