204 lines
5.6 KiB
Java
204 lines
5.6 KiB
Java
package com.safemobile.lib;
|
|
|
|
import android.os.Parcel;
|
|
import android.os.Parcelable;
|
|
import androidx.annotation.NonNull;
|
|
|
|
import com.google.gson.Gson;
|
|
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
import java.text.DateFormat;
|
|
import java.text.ParseException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Date;
|
|
import java.util.Locale;
|
|
|
|
/**
|
|
* Created by Adi on 8/11/2017.
|
|
*/
|
|
|
|
public class Position implements Parcelable, Comparable<Position>{
|
|
// region private fields
|
|
public double latitude;
|
|
public double longitude;
|
|
public Date positionTime;
|
|
public double speed;
|
|
public String address;
|
|
public float accuracy;
|
|
//endregion
|
|
|
|
/**
|
|
* Default constructor
|
|
*/
|
|
public Position()
|
|
{
|
|
latitude = 0;
|
|
longitude = 0;
|
|
positionTime = new Date(0);
|
|
speed = 0;
|
|
address = "";
|
|
accuracy = 0;
|
|
}
|
|
|
|
public Position(String json)
|
|
{
|
|
try {
|
|
JSONObject posObj = new JSONObject(json);
|
|
speed = posObj.isNull("speed")
|
|
? 0 : posObj.getDouble("speed");
|
|
latitude = posObj.isNull("latitude")
|
|
? 0 : posObj.getDouble("latitude");
|
|
longitude = posObj.isNull("longitude")
|
|
? 0 : posObj.getDouble("longitude");
|
|
address = posObj.isNull("address")
|
|
? "" : posObj.getString("address");
|
|
|
|
accuracy = posObj.isNull("accuracy")
|
|
? 0 : (float) posObj.getDouble("accuracy");
|
|
|
|
String posTime = posObj.isNull("positionTime")
|
|
? "" : posObj.getString("positionTime");
|
|
if(posTime.length() > 0)
|
|
{
|
|
//May 16, 2018 12:01:47
|
|
try
|
|
{
|
|
String timeFormat = "MMMMM d, yyyy HH:mm:ss";
|
|
DateFormat format = new SimpleDateFormat(timeFormat, Locale.ENGLISH);
|
|
positionTime = format.parse(posTime);
|
|
}
|
|
catch (ParseException e)
|
|
{
|
|
String timeFormat = "MMM d, yyyy HH:mm:ss";
|
|
DateFormat format = new SimpleDateFormat(timeFormat, Locale.ENGLISH);
|
|
positionTime = format.parse(posTime);
|
|
}
|
|
}
|
|
|
|
} catch (JSONException e) {
|
|
e.printStackTrace();
|
|
positionTime = new Date(0);
|
|
} catch (ParseException e) {
|
|
e.printStackTrace();
|
|
positionTime = new Date(0);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public Position(double latitude, double longitude)
|
|
{
|
|
this.latitude = latitude;
|
|
this.longitude = longitude;
|
|
positionTime = new Date(0);
|
|
speed = 0;
|
|
address = "";
|
|
accuracy = 0;
|
|
}
|
|
|
|
/**
|
|
* Constructor from Parcel, reads back fields IN THE ORDER they were
|
|
* written
|
|
*/
|
|
public Position(Parcel parcel){
|
|
latitude = parcel.readDouble();
|
|
longitude = parcel.readDouble();
|
|
positionTime = new Date(parcel.readLong());
|
|
speed = parcel.readDouble();
|
|
address = parcel.readString();
|
|
accuracy = parcel.readFloat();
|
|
}
|
|
|
|
|
|
/**
|
|
* Method from Parcelable class, left as auto-generated
|
|
* @return A default value
|
|
*/
|
|
@Override
|
|
public int describeContents() {
|
|
return 0;
|
|
}
|
|
|
|
|
|
/**
|
|
* Method to create the Parcel object from the main class that
|
|
* will be passed when a Parcelable object is used
|
|
* @param dest Parcel object in which all the object values will
|
|
* be added
|
|
* @param flags Additional flags about how the object should be
|
|
* written. May be 0 or PARCELABLE_WRITE_RETURN_VALUE.
|
|
*/
|
|
@Override
|
|
public void writeToParcel(Parcel dest, int flags) {
|
|
dest.writeDouble(latitude);
|
|
dest.writeDouble(longitude);
|
|
dest.writeLong(positionTime.getTime());
|
|
dest.writeDouble(speed);
|
|
dest.writeString(address);
|
|
dest.writeFloat(accuracy);
|
|
}
|
|
|
|
/**
|
|
* Static field used to regenerate object, individually or as arrays
|
|
*/
|
|
public static final Parcelable.Creator<Position> CREATOR = new Parcelable.Creator<Position>() {
|
|
public Position createFromParcel(Parcel in) {
|
|
return new Position(in);
|
|
}
|
|
|
|
@Override
|
|
public Position[] newArray(int size) {
|
|
return new Position[size];
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Override of the method that returns a string representation of the object which
|
|
* contains all the useful information about the object
|
|
* @return String representation of the object
|
|
*/
|
|
@Override
|
|
public String toString()
|
|
{
|
|
return "Latitude: " + latitude + " | "
|
|
+ "Longitude: " + longitude + " | "
|
|
+ "Speed: " + speed + " | "
|
|
+ "PositionTime: " + (positionTime!= null ? positionTime.toString() : "null" ) + " | "
|
|
+ "Address " + (address!= null ? address.toString() : "null" )
|
|
+ "Accuracy " + accuracy;
|
|
}
|
|
|
|
@Override
|
|
public int compareTo(@NonNull Position o) {
|
|
return (latitude == o.latitude
|
|
&& longitude == o.longitude
|
|
) ? 0 : 1;
|
|
}
|
|
|
|
// Overriding equals() to compare two Complex objects
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
Position pos = (Position) o;
|
|
|
|
return compareTo(pos) == 0;
|
|
}
|
|
|
|
|
|
// just omitted null checks
|
|
@Override
|
|
public int hashCode() {
|
|
double res = latitude * longitude * 100000;
|
|
int hash = (int)(latitude );
|
|
hash = (int)(longitude) * hash;
|
|
return (int)res;
|
|
}
|
|
|
|
|
|
public String toJson()
|
|
{
|
|
return new Gson().toJson(this);
|
|
}
|
|
}
|