diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/MainApplication.java b/App/src/main/java/cc/softwarefactory/lokki/android/MainApplication.java index cde74cb7..ff704113 100644 --- a/App/src/main/java/cc/softwarefactory/lokki/android/MainApplication.java +++ b/App/src/main/java/cc/softwarefactory/lokki/android/MainApplication.java @@ -11,7 +11,6 @@ import android.support.v4.util.LruCache; import android.util.Log; -import com.fasterxml.jackson.annotation.JsonProperty; import com.google.android.gms.maps.GoogleMap; import java.util.ArrayList; @@ -21,7 +20,6 @@ import cc.softwarefactory.lokki.android.models.Contact; import cc.softwarefactory.lokki.android.models.MainUser; import cc.softwarefactory.lokki.android.models.Place; -import cc.softwarefactory.lokki.android.models.User; import cc.softwarefactory.lokki.android.utilities.AnalyticsUtils; import cc.softwarefactory.lokki.android.utilities.PreferenceUtils; @@ -41,103 +39,19 @@ public class MainApplication extends Application { * Int array enumerating the codes used for different Google Maps map view types */ public static final int[] mapTypes = {GoogleMap.MAP_TYPE_NORMAL, GoogleMap.MAP_TYPE_SATELLITE, GoogleMap.MAP_TYPE_HYBRID}; + /** * Currently selected Google Maps map view type. * TODO: make private with proper accessor methods to disallow values not in mapTypes */ public static int mapType = 0; - public static String emailBeingTracked; - /** - * User dashboard JSON object. Format: - * { - * "battery":"", - * "canseeme":["c429003ba3a3c508cba1460607ab7f8cd4a0d450"], - * "icansee":{ - * "c429003ba3a3c508cba1460607ab7f8cd4a0d450":{ - * "battery":"", - * "location":{}, - * "visibility":true - * } - * }, - * "idmapping":{ - * "a1b2c3d4e5f6g7h8i9j10k11l12m13n14o15p16q":"test@test.com", - * "c429003ba3a3c508cba1460607ab7f8cd4a0d450":"family.member@example.com" - * }, - * "location":{}, - * "visibility":true - * } - */ - public static class Dashboard extends User { - /** - * List of user ids that can see me - */ - @JsonProperty("canseeme") - private List canSeeMe; - - /** - * Map where key is user id and value is the user object. Users that I can see. - */ - @JsonProperty("icansee") - private Map iCanSee; - - /** - * Map between user ids and email addresses. - */ - @JsonProperty("idmapping") - private Map idMapping; - - public List getUserIdsICanSee() { - return new ArrayList(iCanSee.keySet()); - } - - public List getUserIds() { - return new ArrayList(idMapping.keySet()); - } - public String getEmailByUserId(String userId) { - return idMapping.get(userId); - } - - public boolean containsEmail(String email) { - for (String containedEmail : idMapping.values()) { - if (email.equals(containedEmail)) return true; - } - return false; - } - - public User getUserICanSeeByUserId(String userId) { - return iCanSee.get(userId); - } - - public List getCanSeeMe() { - return canSeeMe; - } - - public void setCanSeeMe(List canSeeMe) { - this.canSeeMe = canSeeMe; - } - - public Map getiCanSee() { - return iCanSee; - } - - public void setiCanSee(Map iCanSee) { - this.iCanSee = iCanSee; - } - - public Map getIdMapping() { - return idMapping; - } - - public void setIdMapping(Map idMapping) { - this.idMapping = idMapping; - } - } - public static Dashboard dashboard = null; + public static String emailBeingTracked; public static MainUser user; public static List contacts; + /** * Is the user visible to others? */ @@ -187,8 +101,6 @@ protected int sizeOf(String key, Bitmap bitmap) { .build()); } - user = new MainUser(this); - super.onCreate(); } diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/activities/MainActivity.java b/App/src/main/java/cc/softwarefactory/lokki/android/activities/MainActivity.java index 96f96333..23914cef 100644 --- a/App/src/main/java/cc/softwarefactory/lokki/android/activities/MainActivity.java +++ b/App/src/main/java/cc/softwarefactory/lokki/android/activities/MainActivity.java @@ -35,6 +35,8 @@ import android.support.v7.widget.SearchView; import android.widget.Toast; +import cc.softwarefactory.lokki.android.models.MainUser; +import cc.softwarefactory.lokki.android.services.UserService; import com.androidquery.AQuery; import com.androidquery.callback.AjaxCallback; import com.androidquery.callback.AjaxStatus; @@ -89,6 +91,8 @@ public class MainActivity extends AppCompatActivity implements NavigationDrawerF private PlaceService placeService; + private UserService userService; + //Is this activity currently paused? private boolean paused = true; @@ -219,9 +223,9 @@ protected void onResume() { LocalBroadcastManager.getInstance(this).registerReceiver(serverErrorReceiver, new IntentFilter("SERVER-ERROR")); Log.i(TAG, "onResume - check if dashboard is null"); - if (MainApplication.dashboard == null) { + if (MainApplication.user == null) { Log.w(TAG, "onResume - dashboard was null, get dashboard from server"); - ServerApi.getDashboard(getApplicationContext()); + userService.getDashBoard(); } if (MainApplication.contacts == null) { Log.w(TAG, "onResume - dashboard was null, get contacts from server"); @@ -378,6 +382,7 @@ private void signUserIn() { finish(); } } else { // User already logged-in + if (MainApplication.user == null) MainApplication.user = new MainUser(this); MainApplication.user.setEmail(PreferenceUtils.getString(this, PreferenceUtils.KEY_USER_ACCOUNT)); ((NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer)).setUserInfo(); GcmHelper.start(getApplicationContext()); // Register to GCM @@ -729,7 +734,6 @@ public void onClick(DialogInterface dialog, int which){ PreferenceUtils.setString(main, PreferenceUtils.KEY_LOCAL_CONTACTS, null); PreferenceUtils.setString(main, PreferenceUtils.KEY_PLACES, null); MainApplication.user = null; - MainApplication.dashboard = null; MainApplication.contacts = null; MainApplication.places = null; MainApplication.firstTimeZoom = true; @@ -751,7 +755,6 @@ public void logoutSilent(){ PreferenceUtils.setString(main, PreferenceUtils.KEY_LOCAL_CONTACTS, null); PreferenceUtils.setString(main, PreferenceUtils.KEY_PLACES, null); MainApplication.user = null; - MainApplication.dashboard = null; MainApplication.contacts = null; MainApplication.places = null; MainApplication.firstTimeZoom = true; diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/activities/SignUpActivity.java b/App/src/main/java/cc/softwarefactory/lokki/android/activities/SignUpActivity.java index 0759d483..ad1dead0 100644 --- a/App/src/main/java/cc/softwarefactory/lokki/android/activities/SignUpActivity.java +++ b/App/src/main/java/cc/softwarefactory/lokki/android/activities/SignUpActivity.java @@ -111,8 +111,9 @@ private void doSignUp() { aq.id(R.id.email).getEditText().setError(errorMessage); return; } - if (MainApplication.user == null) MainApplication.user = new MainUser(getApplicationContext()); + if (MainApplication.user == null) MainApplication.user = new MainUser(this); MainApplication.user.setEmail(accountName); + PreferenceUtils.setString(this, PreferenceUtils.KEY_DEVICE_ID, Utils.getDeviceId()); ServerApi.signUp(this, new SignUpCallback()); @@ -155,6 +156,7 @@ public void callback(String url, JSONObject json, AjaxStatus status) { String id = json.optString("id"); String authorizationToken = json.optString("authorizationtoken"); String userType = json.optString("userType"); + if (MainApplication.user == null) MainApplication.user = new MainUser(SignUpActivity.this); MainApplication.user.setUserId(id); PreferenceUtils.setString(SignUpActivity.this, PreferenceUtils.KEY_AUTH_TOKEN, authorizationToken); Log.d(TAG, "User id: " + id); diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/androidServices/DataService.java b/App/src/main/java/cc/softwarefactory/lokki/android/androidServices/DataService.java index 9fe1442f..cfd40698 100644 --- a/App/src/main/java/cc/softwarefactory/lokki/android/androidServices/DataService.java +++ b/App/src/main/java/cc/softwarefactory/lokki/android/androidServices/DataService.java @@ -14,13 +14,9 @@ import android.util.Log; -import java.io.IOException; - -import cc.softwarefactory.lokki.android.MainApplication; import cc.softwarefactory.lokki.android.services.ContactService; import cc.softwarefactory.lokki.android.services.PlaceService; -import cc.softwarefactory.lokki.android.utilities.JsonUtils; -import cc.softwarefactory.lokki.android.utilities.PreferenceUtils; +import cc.softwarefactory.lokki.android.services.UserService; import cc.softwarefactory.lokki.android.utilities.ServerApi; @@ -39,6 +35,7 @@ public class DataService extends Service { private static PlaceService placeService; private static ContactService contactService; + private static UserService userService; public static void start(Context context) { Log.d(TAG, "start Service called"); @@ -76,15 +73,12 @@ public void onCreate() { super.onCreate(); setTimer(); serviceRunning = true; - try { - MainApplication.dashboard = JsonUtils.createFromJson(PreferenceUtils.getString(this.getApplicationContext(), PreferenceUtils.KEY_DASHBOARD), MainApplication.Dashboard.class); - } catch (IOException e) { - MainApplication.dashboard = null; - } + userService = new UserService(getApplicationContext()); placeService = new PlaceService(getApplicationContext()); contactService = new ContactService(getApplicationContext()); + getDashboard(); getPlaces(); getContacts(); } @@ -115,7 +109,7 @@ public int onStartCommand(Intent intent, int flags, int startId) { } if (extras.containsKey(ALARM_TIMER)) { - fetchDashboard(); + getDashboard(); } if (extras.containsKey(GET_PLACES)) { getPlaces(); } if (extras.containsKey(GET_CONTACTS)) { @@ -134,10 +128,9 @@ private void getContacts() { contactService.getContacts(); } - private void fetchDashboard() { - + private void getDashboard() { Log.d(TAG, "alarmCallback"); - ServerApi.getDashboard(this); + userService.getDashBoard(); } @Override diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/fragments/MapViewFragment.java b/App/src/main/java/cc/softwarefactory/lokki/android/fragments/MapViewFragment.java index 9417aa5b..4fed3cbd 100644 --- a/App/src/main/java/cc/softwarefactory/lokki/android/fragments/MapViewFragment.java +++ b/App/src/main/java/cc/softwarefactory/lokki/android/fragments/MapViewFragment.java @@ -559,7 +559,7 @@ protected void onPostExecute(Bitmap bitmapResult) { if (bitmapResult == null || cancelAsyncTasks || !isAdded() || map == null) { return; } - Person marker = null; + Person marker; try{ marker = (Person) person.clone(); } diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/models/JSONMap.java b/App/src/main/java/cc/softwarefactory/lokki/android/models/JSONMap.java deleted file mode 100644 index e7e450b4..00000000 --- a/App/src/main/java/cc/softwarefactory/lokki/android/models/JSONMap.java +++ /dev/null @@ -1,84 +0,0 @@ -package cc.softwarefactory.lokki.android.models; - -import android.support.annotation.NonNull; - -import java.util.Collection; -import java.util.Map; -import java.util.Set; - -public abstract class JSONMap implements Map { - - //implementing class must handle mapping json key to map. - protected abstract Map getMap(); - - public void update(String id, V value) { - getMap().put(id, value); - } - - public boolean has(String key) { - return getMap().containsKey(key); - } - - @Override - public void clear() { - getMap().clear(); - } - - @Override - public boolean containsKey(Object key) { - return getMap().containsKey(key); - } - - @Override - public boolean containsValue(Object value) { - return getMap().containsValue(value); - } - - @NonNull - @Override - public Set> entrySet() { - return getMap().entrySet(); - } - - @Override - public V get(Object key) { - return getMap().get(key); - } - - @Override - public boolean isEmpty() { - return getMap().isEmpty(); - } - - @NonNull - @Override - public Set keySet() { - return getMap().keySet(); - } - - @Override - public V put(String key, V value) { - return getMap().put(key, value); - } - - @Override - public void putAll(Map map) { - getMap().putAll(map); - } - - @Override - public V remove(Object key) { - return getMap().remove(key); - } - - @Override - public int size() { - return getMap().size(); - } - - @NonNull - @Override - public Collection values() { - return getMap().values(); - } -} diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/models/MainUser.java b/App/src/main/java/cc/softwarefactory/lokki/android/models/MainUser.java index 941903de..9275443a 100644 --- a/App/src/main/java/cc/softwarefactory/lokki/android/models/MainUser.java +++ b/App/src/main/java/cc/softwarefactory/lokki/android/models/MainUser.java @@ -4,26 +4,56 @@ import cc.softwarefactory.lokki.android.utilities.PreferenceUtils; import cc.softwarefactory.lokki.android.utilities.Utils; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +@JsonIgnoreProperties(value = {"userId", "email"}) public class MainUser extends Person { + private boolean visibility; // define visibility scope + private String battery; // battery status house keeping info + + @JsonIgnore private Context context; + //Jackson requires an empty constructor + public MainUser() {} + public MainUser(Context context) { this.context = context; } - @Override + @JsonIgnore public void setUserId(String userId) { - PreferenceUtils.setString(this.context, PreferenceUtils.KEY_USER_ID, userId); super.setUserId(userId); + if (context != null) { + PreferenceUtils.setString(context, PreferenceUtils.KEY_USER_ID, userId); + } } - @Override + @JsonIgnore public void setEmail(String email) { - PreferenceUtils.setString(this.context, PreferenceUtils.KEY_USER_ACCOUNT, email); super.setEmail(email); - setPhoto(Utils.getDefaultAvatarInitials(context, getEmail())); + if (context != null) { + PreferenceUtils.setString(context, PreferenceUtils.KEY_USER_ACCOUNT, email); + setPhoto(Utils.getDefaultAvatarInitials(context, getEmail())); + } + } + + public boolean isVisibility() { + return visibility; + } + + public void setVisibility(boolean visibility) { + this.visibility = visibility; + } + + public String getBattery() { + return battery; + } + + public void setBattery(String battery) { + this.battery = battery; } @Override diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/models/User.java b/App/src/main/java/cc/softwarefactory/lokki/android/models/User.java deleted file mode 100644 index 3dc89f7c..00000000 --- a/App/src/main/java/cc/softwarefactory/lokki/android/models/User.java +++ /dev/null @@ -1,45 +0,0 @@ -package cc.softwarefactory.lokki.android.models; - -/** - * Model class for User - * @author panchamukhi - */ -public class User { - - - private UserLocation location; // track user location - private boolean visibility; // define visibility scope - private String battery; // battery status house keeping info - - public String getBattery() { - return battery; - } - - public void setBattery(String battery) { - this.battery = battery; - } - - - public UserLocation getUserLocation() { - return location; - } - - public void setUserLocation(UserLocation location) { - - this.location = location; - } - - public boolean isVisibility() { - return visibility; - } - public void setVisibility(boolean visibility) { - this.visibility = visibility; - } - public UserLocation getLocation() { - return location; - } - public void setLocation(UserLocation location) { - this.location = location; - } - -} diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/services/ApiService.java b/App/src/main/java/cc/softwarefactory/lokki/android/services/ApiService.java index 6ecd9cb8..ddfaa9ef 100644 --- a/App/src/main/java/cc/softwarefactory/lokki/android/services/ApiService.java +++ b/App/src/main/java/cc/softwarefactory/lokki/android/services/ApiService.java @@ -3,6 +3,7 @@ import android.content.Context; import android.util.Log; +import cc.softwarefactory.lokki.android.MainApplication; import com.androidquery.AQuery; import com.androidquery.callback.AjaxCallback; import com.fasterxml.jackson.core.JsonProcessingException; @@ -31,7 +32,7 @@ public ApiService(Context context) { } private String generateUrl(String urlSuffix) { - String userId = PreferenceUtils.getString(context, PreferenceUtils.KEY_USER_ID); + String userId = MainApplication.user.getUserId(); String url = apiUrl + "user/" + userId + "/" + urlSuffix; return url; } diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/services/ContactService.java b/App/src/main/java/cc/softwarefactory/lokki/android/services/ContactService.java index 4ecd7ac6..3d0f5098 100644 --- a/App/src/main/java/cc/softwarefactory/lokki/android/services/ContactService.java +++ b/App/src/main/java/cc/softwarefactory/lokki/android/services/ContactService.java @@ -339,8 +339,7 @@ private Contact getSynchronizedWithPhone(Contact contact) { synchronizedContact.setUserId(contact.getUserId()); synchronizedContact.setIsIgnored(contact.isIgnored()); - Bitmap photo = null; - if (phoneContact != null) photo = phoneContact.getPhoto(); + Bitmap photo = phoneContact.getPhoto(); synchronizedContact.setPhoto(photo); contact = synchronizedContact; } diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/services/UserService.java b/App/src/main/java/cc/softwarefactory/lokki/android/services/UserService.java new file mode 100644 index 00000000..f15e87c3 --- /dev/null +++ b/App/src/main/java/cc/softwarefactory/lokki/android/services/UserService.java @@ -0,0 +1,116 @@ +package cc.softwarefactory.lokki.android.services; + +import android.content.Context; +import android.content.Intent; +import android.support.v4.content.LocalBroadcastManager; +import android.util.Log; +import cc.softwarefactory.lokki.android.BuildConfig; +import cc.softwarefactory.lokki.android.MainApplication; +import cc.softwarefactory.lokki.android.models.MainUser; +import cc.softwarefactory.lokki.android.models.ServerError; +import cc.softwarefactory.lokki.android.utilities.JsonUtils; +import cc.softwarefactory.lokki.android.utilities.PreferenceUtils; +import com.androidquery.callback.AjaxCallback; +import com.androidquery.callback.AjaxStatus; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; + +public class UserService extends ApiService { + + + private final String restPath = "version/" + BuildConfig.VERSION_CODE + "/dashboard"; + private final String TAG = "UserService"; + + public UserService(Context context) { + super(context); + } + + @Override + String getTag() { + return TAG; + } + + @Override + String getCacheKey() { + return PreferenceUtils.KEY_DASHBOARD; + } + + private void handleServerError(ServerError serverError) { + + String errorType = serverError.getErrorType(); + if (!errorType.isEmpty()) + { + Intent intent = new Intent("SERVER-ERROR"); + intent.putExtra("errorType", errorType); + if (!serverError.getErrorMessage().isEmpty()) { + intent.putExtra("errorMessage", serverError.getErrorMessage()); + } else { + intent.putExtra("errorMessage", "Unknown error"); + } + + LocalBroadcastManager.getInstance(context).sendBroadcast(intent); + } + } + + public void getDashBoard() { + get(restPath, new AjaxCallback() { + @Override + public void callback(String url, String json, AjaxStatus status) { + Log.d(TAG, "dashboardCallback"); + + JSONObject jsonObject = null; + + try { + jsonObject = new JSONObject(json); + } catch (JSONException e) { + Log.e(TAG, "serializing json string to JsonObject failed"); + e.printStackTrace(); + } + + if (status.getCode() == 401) { + Log.e(TAG, "Status login failed. App should exit."); + PreferenceUtils.setString(context, PreferenceUtils.KEY_AUTH_TOKEN, ""); + Intent intent = new Intent("EXIT"); + LocalBroadcastManager.getInstance(context).sendBroadcast(intent); + + } else if (status.getCode() == 404) { + Log.e(TAG, "User does not exist. Must sign up again."); + String message = "Your account has expired. Please sign up again."; + String errorType = "FORCE_TO_SIGN_UP"; //Must sign up error type + Intent intent = new Intent("SERVER-ERROR"); + intent.putExtra("errorMessage", message); + intent.putExtra("errorType", errorType); + LocalBroadcastManager.getInstance(context).sendBroadcast(intent); + } else if (jsonObject != null) { + Log.d(TAG, "json returned: " + json); + try { + if (jsonObject.has("serverError")) + { + ServerError serverError = JsonUtils.createFromJson(jsonObject.get("serverError").toString(), ServerError.class); + handleServerError(serverError); + return; + } + + //Merge results with MainApplication.user + MainUser user = JsonUtils.createFromJson(json, MainUser.class); + MainApplication.user.setBattery(user.getBattery()); + MainApplication.user.setLocation(user.getLocation()); + MainApplication.user.setVisibility(user.isVisibility()); + updateCache(JsonUtils.serialize(MainApplication.user)); + + } catch (IOException | JSONException e) { + Log.e(TAG, "Parsing JSON failed!"); + e.printStackTrace(); + } + Intent intent = new Intent("LOCATION-UPDATE"); + LocalBroadcastManager.getInstance(context).sendBroadcast(intent); + + } else { + Log.e(TAG, "Error: " + status.getCode() + " - " + status.getMessage()); + } + } + }); + } +} diff --git a/App/src/main/java/cc/softwarefactory/lokki/android/utilities/ServerApi.java b/App/src/main/java/cc/softwarefactory/lokki/android/utilities/ServerApi.java index 13cb17eb..c88fa8d6 100644 --- a/App/src/main/java/cc/softwarefactory/lokki/android/utilities/ServerApi.java +++ b/App/src/main/java/cc/softwarefactory/lokki/android/utilities/ServerApi.java @@ -5,9 +5,7 @@ package cc.softwarefactory.lokki.android.utilities; import android.content.Context; -import android.content.Intent; import android.location.Location; -import android.support.v4.content.LocalBroadcastManager; import android.util.Log; import com.androidquery.AQuery; @@ -16,14 +14,11 @@ import org.json.JSONException; import org.json.JSONObject; -import java.io.IOException; import java.util.HashMap; import java.util.Map; -import cc.softwarefactory.lokki.android.BuildConfig; import cc.softwarefactory.lokki.android.MainApplication; import cc.softwarefactory.lokki.android.constants.Constants; -import cc.softwarefactory.lokki.android.models.ServerError; public class ServerApi { @@ -37,7 +32,7 @@ public static void signUp(Context context, AjaxCallback signUpCallba AQuery aq = new AQuery(context); String url = ApiUrl + "signup"; - String userAccount = PreferenceUtils.getString(context, PreferenceUtils.KEY_USER_ACCOUNT); + String userAccount = MainApplication.user.getEmail(); String deviceId = PreferenceUtils.getString(context, PreferenceUtils.KEY_DEVICE_ID); Map params = new HashMap<>(); params.put("email", userAccount); @@ -51,82 +46,6 @@ public static void signUp(Context context, AjaxCallback signUpCallba Log.d(TAG, "Sign up - email: " + userAccount + ", deviceId: " + deviceId + ", language: " + Utils.getLanguage()); } - private static void handleServerError(ServerError serverError, final Context context) { - - String errorType = serverError.getErrorType(); - if (!errorType.isEmpty()) - { - Intent intent = new Intent("SERVER-ERROR"); - intent.putExtra("errorType", errorType); - if (!serverError.getErrorMessage().isEmpty()) { - intent.putExtra("errorMessage", serverError.getErrorMessage()); - } else { - intent.putExtra("errorMessage", "Unknown error"); - } - - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - } - } - - public static void getDashboard(final Context context) { - Log.d(TAG, "getDashboard"); - AQuery aq = new AQuery(context); - - String userId = PreferenceUtils.getString(context, PreferenceUtils.KEY_USER_ID); - final String authorizationToken = PreferenceUtils.getString(context, PreferenceUtils.KEY_AUTH_TOKEN); - String url = ApiUrl + "user/" + userId + "/version/" + BuildConfig.VERSION_CODE + "/dashboard"; - - AjaxCallback cb = new AjaxCallback() { - @Override - public void callback(String url, JSONObject json, AjaxStatus status) { - Log.d(TAG, "dashboardCallback"); - - if (status.getCode() == 401) { - Log.e(TAG, "Status login failed. App should exit."); - PreferenceUtils.setString(context, PreferenceUtils.KEY_AUTH_TOKEN, ""); - Intent intent = new Intent("EXIT"); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - - } else if (status.getCode() == 404) { - Log.e(TAG, "User does not exist. Must sign up again."); - String message = "Your account has expired. Please sign up again."; - String errorType = "FORCE_TO_SIGN_UP"; //Must sign up error type - Intent intent = new Intent("SERVER-ERROR"); - intent.putExtra("errorMessage", message); - intent.putExtra("errorType", errorType); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - } else if (json != null) { - Log.d(TAG, "json returned: " + json); - try { - if (json.has("serverError")) - { - ServerError serverError = JsonUtils.createFromJson(json.get("serverError").toString(), ServerError.class); - handleServerError(serverError, context); - return; - } - - MainApplication.dashboard = JsonUtils.createFromJson(json.toString(), MainApplication.Dashboard.class); - PreferenceUtils.setString(context, PreferenceUtils.KEY_DASHBOARD, JsonUtils.serialize(MainApplication.dashboard)); - MainApplication.user.setLocation(MainApplication.dashboard.getLocation()); - } catch (IOException e) { - Log.e(TAG, "Parsing JSON failed!"); - e.printStackTrace(); - } catch (JSONException e) { - Log.e(TAG, "Parsing JSON failed!"); - e.printStackTrace(); - } - Intent intent = new Intent("LOCATION-UPDATE"); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - - } else { - Log.e(TAG, "Error: " + status.getCode() + " - " + status.getMessage()); - } - } - }; - cb.header("authorizationtoken", authorizationToken); - aq.ajax(url, JSONObject.class, cb); - } - public static void logStatus(String request, AjaxStatus status) { Log.d(TAG, request + " result code: " + status.getCode()); Log.d(TAG, request + " result message: " + status.getMessage()); @@ -140,7 +59,7 @@ public static void sendLocation(Context context, Location location) throws JSONE Log.d(TAG, "sendLocation"); AQuery aq = new AQuery(context); - String userId = PreferenceUtils.getString(context, PreferenceUtils.KEY_USER_ID); + String userId = MainApplication.user.getUserId(); String authorizationToken = PreferenceUtils.getString(context, PreferenceUtils.KEY_AUTH_TOKEN); String url = ApiUrl + "user/" + userId + "/location"; @@ -168,7 +87,7 @@ public static void sendGCMToken(Context context, String GCMToken) throws JSONExc Log.d(TAG, "sendGCMToken"); AQuery aq = new AQuery(context); - String userId = PreferenceUtils.getString(context, PreferenceUtils.KEY_USER_ID); + String userId = MainApplication.user.getUserId(); String authorizationToken = PreferenceUtils.getString(context, PreferenceUtils.KEY_AUTH_TOKEN); String url = ApiUrl + "user/" + userId + "/gcmToken"; @@ -191,7 +110,7 @@ public static void requestUpdates(Context context) throws JSONException { Log.d(TAG, "requestUpdates"); AQuery aq = new AQuery(context); - String userId = PreferenceUtils.getString(context, PreferenceUtils.KEY_USER_ID); + String userId = MainApplication.user.getUserId(); String authorizationToken = PreferenceUtils.getString(context, PreferenceUtils.KEY_AUTH_TOKEN); String url = ApiUrl + "user/" + userId + "/update/locations"; @@ -214,7 +133,7 @@ public static void setVisibility(Context context, Boolean visible) throws JSONEx Log.d(TAG, "setVisibility"); AQuery aq = new AQuery(context); - String userId = PreferenceUtils.getString(context, PreferenceUtils.KEY_USER_ID); + String userId = MainApplication.user.getUserId(); String authorizationToken = PreferenceUtils.getString(context, PreferenceUtils.KEY_AUTH_TOKEN); String url = ApiUrl + "user/" + userId + "/visibility"; diff --git a/App/src/test/java/cc/softwarefactory/lokki/android/espresso/MapScreenTest.java b/App/src/test/java/cc/softwarefactory/lokki/android/espresso/MapScreenTest.java index 18d02fd2..65b86436 100644 --- a/App/src/test/java/cc/softwarefactory/lokki/android/espresso/MapScreenTest.java +++ b/App/src/test/java/cc/softwarefactory/lokki/android/espresso/MapScreenTest.java @@ -1,6 +1,8 @@ package cc.softwarefactory.lokki.android.espresso; +import cc.softwarefactory.lokki.android.models.Contact; +import com.fasterxml.jackson.core.JsonProcessingException; import com.squareup.okhttp.mockwebserver.MockResponse; import com.squareup.okhttp.mockwebserver.RecordedRequest; @@ -28,9 +30,9 @@ public void testVisibilityIconIsPresent() { onView(withId(R.id.action_visibility)).check(matches(isDisplayed())); } - public void testSwitchingVisibilityOffSendsRequest() throws JSONException, TimeoutException, InterruptedException { - String dashboardJsonString = MockJsonUtils.getEmptyDashboardJson(); - getMockDispatcher().setDashboardResponse(new MockResponse().setBody(dashboardJsonString)); + public void testSwitchingVisibilityOffSendsRequest() throws JSONException, TimeoutException, InterruptedException, JsonProcessingException { + getMockDispatcher().setDashboardResponse(new MockResponse().setBody(MockJsonUtils.getEmptyDashboardJson())); + getMockDispatcher().setGetContactsResponse(new MockResponse().setBody(MockJsonUtils.getContactsJsonWith(new Contact[]{}))); RequestsHandle requests = getMockDispatcher().setVisibilityResponse(new MockResponse().setResponseCode(200)); MainApplication.visible = true; @@ -47,12 +49,12 @@ public void testSwitchingVisibilityOffSendsRequest() throws JSONException, Timeo assertFalse(putRequestBody.getBoolean("visibility")); } - - public void testSwitchingVisibilityOnSendsRequest() throws JSONException, TimeoutException, InterruptedException { + public void testSwitchingVisibilityOnSendsRequest() throws JSONException, TimeoutException, InterruptedException, JsonProcessingException { String dashboardJsonString = MockJsonUtils.getEmptyDashboardJson(); JSONObject dashboardJson = new JSONObject(dashboardJsonString); dashboardJson.put("visibility", false); getMockDispatcher().setDashboardResponse(new MockResponse().setBody(dashboardJson.toString())); + getMockDispatcher().setGetContactsResponse(new MockResponse().setBody(MockJsonUtils.getContactsJsonWith(new Contact[]{}))); RequestsHandle requests = getMockDispatcher().setVisibilityResponse(new MockResponse().setResponseCode(200)); MainApplication.visible = false; diff --git a/App/src/test/java/cc/softwarefactory/lokki/android/espresso/PlacesScreenTest.java b/App/src/test/java/cc/softwarefactory/lokki/android/espresso/PlacesScreenTest.java index 060a478e..2da3a1cd 100644 --- a/App/src/test/java/cc/softwarefactory/lokki/android/espresso/PlacesScreenTest.java +++ b/App/src/test/java/cc/softwarefactory/lokki/android/espresso/PlacesScreenTest.java @@ -8,7 +8,6 @@ import com.squareup.okhttp.mockwebserver.MockResponse; import org.json.JSONException; -import org.json.JSONObject; import cc.softwarefactory.lokki.android.R; import cc.softwarefactory.lokki.android.espresso.utilities.MockJsonUtils; @@ -60,23 +59,20 @@ public void testPlacesOnPlacesScreen() throws JSONException, JsonProcessingExcep onView(withText("Testplace1")).check(matches(isDisplayed())); } - public void testContactAppearsInPlace() throws JSONException, JsonProcessingException { getMockDispatcher().setPlacesResponse(new MockResponse().setBody(MockJsonUtils.getPlacesJson())); - String[] contactEmails = new String[]{"family.member@example.com"}; - JSONObject location = new JSONObject(); - location.put("lat", "37.483477313364574") //Testplace1 - .put("lon", "-122.14838393032551") - .put("acc", "100"); - JSONObject[] locations = new JSONObject[]{location}; - getMockDispatcher().setDashboardResponse(new MockResponse().setBody(MockJsonUtils - .getDashboardJsonContactsUserLocation(contactEmails, locations, location))); + getMockDispatcher().setDashboardResponse(new MockResponse().setBody(MockJsonUtils.getEmptyDashboardJson())); + + String email = "family.member@example.com"; + Contact contact = MockJsonUtils.createContact(email); + contact.setLocation(new UserLocation(new LatLng(37.483477313364574, -122.14838393032551), 100)); + getMockDispatcher().setGetContactsResponse(new MockResponse().setBody(MockJsonUtils.getContactsJsonWith(new Contact[]{contact}))); + enterPlacesScreen(); onView(allOf(withId(R.id.scrollView1), hasSibling(withText("Testplace1")))) .check(matches(hasDescendant(isAssignableFrom(ImageView.class)))); } - public void testClickContactOpensMap() throws JSONException, InterruptedException, JsonProcessingException { getMockDispatcher().setPlacesResponse(new MockResponse().setBody(MockJsonUtils.getPlacesJson())); diff --git a/App/src/test/java/cc/softwarefactory/lokki/android/espresso/utilities/MockJsonUtils.java b/App/src/test/java/cc/softwarefactory/lokki/android/espresso/utilities/MockJsonUtils.java index c4dff2a8..b5702872 100644 --- a/App/src/test/java/cc/softwarefactory/lokki/android/espresso/utilities/MockJsonUtils.java +++ b/App/src/test/java/cc/softwarefactory/lokki/android/espresso/utilities/MockJsonUtils.java @@ -77,9 +77,6 @@ public static String getEmptyDashboardJson() throws JSONException { JSONObject jsonObject = new JSONObject(); jsonObject .put("battery", "") - .put("canseeme", new JSONArray()) - .put("icansee", new JSONObject()) - .put("idmapping", new JSONObject().put(TestUtils.VALUE_TEST_USER_ID, TestUtils.VALUE_TEST_USER_ACCOUNT)) .put("location", new JSONObject()) .put("visibility", true); @@ -119,39 +116,6 @@ public static Contact createContact(String email) { return contact; } - public static String getDashboardJsonContactsUserLocation(String[] contactEmails, JSONObject[] locations, JSONObject userLocation) throws JSONException { - if (contactEmails.length != locations.length) { - return "parameters must be equal"; - } - JSONArray canseemeJsonArray = new JSONArray(); - JSONObject icanseeJsonObject = new JSONObject(); - JSONObject idmappingJsonObject = new JSONObject().put(TestUtils.VALUE_TEST_USER_ID, TestUtils.VALUE_TEST_USER_ACCOUNT); - - for (String contactEmail : contactEmails) { - String contactId = Hashing.sha1().hashString(contactEmail).toString(); - - canseemeJsonArray.put(contactId); - - icanseeJsonObject.put(contactId, new JSONObject() - .put("battery", "") - .put("location", userLocation) - .put("visibility", true)); - - idmappingJsonObject.put(contactId, contactEmail); - } - - JSONObject jsonObject = new JSONObject(); - jsonObject - .put("battery", "") - .put("canseeme", canseemeJsonArray) - .put("icansee", icanseeJsonObject) - .put("idmapping", idmappingJsonObject) - .put("location", locations[0]) - .put("visibility", true); - - return jsonObject.toString(); - } - public static String getEmptyPlacesJson() { return "{}"; } diff --git a/App/src/test/java/cc/softwarefactory/lokki/android/espresso/utilities/TestUtils.java b/App/src/test/java/cc/softwarefactory/lokki/android/espresso/utilities/TestUtils.java index 9e4dd359..4a1294c6 100644 --- a/App/src/test/java/cc/softwarefactory/lokki/android/espresso/utilities/TestUtils.java +++ b/App/src/test/java/cc/softwarefactory/lokki/android/espresso/utilities/TestUtils.java @@ -25,7 +25,6 @@ public class TestUtils { public static void clearAppData(Context targetContext) { PreferenceUtils.setBoolean(targetContext, PreferenceUtils.KEY_NOT_FIRST_TIME_LAUNCH, false); - MainApplication.dashboard = null; MainApplication.user = new MainUser(targetContext); SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(targetContext).edit(); editor.clear();