package com.o3dr.services.android.lib.drone.calibration.magnetometer; import android.os.Parcel; import android.os.Parcelable; import com.o3dr.services.android.lib.drone.property.DroneAttribute; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by Fredia Huya-Kouadio on 5/4/15. */ public class MagnetometerCalibrationStatus implements DroneAttribute { private final Map<Integer, MagnetometerCalibrationProgress> calibrationProgressTracker = new HashMap<>(); private final Map<Integer, MagnetometerCalibrationResult> calibrationResultTracker = new HashMap<>(); private final List<Integer> compassList = new ArrayList<>(); private boolean calibrationCancelled; public MagnetometerCalibrationStatus() { } public void addCalibrationProgress(MagnetometerCalibrationProgress progress) { if (progress != null) { final int compassId = progress.getCompassId(); calibrationProgressTracker.put(compassId, progress); compassList.add(compassId); } } public void addCalibrationResult(MagnetometerCalibrationResult result) { if (result != null) { final int compassId = result.getCompassId(); calibrationResultTracker.put(result.getCompassId(), result); compassList.add(compassId); } } public List<Integer> getCompassIds() { return compassList; } public MagnetometerCalibrationProgress getCalibrationProgress(int compassId) { return calibrationProgressTracker.get(compassId); } public MagnetometerCalibrationResult getCalibrationResult(int compassId) { return calibrationResultTracker.get(compassId); } public boolean isCalibrationCancelled() { return calibrationCancelled; } public void setCalibrationCancelled(boolean calibrationCancelled) { this.calibrationCancelled = calibrationCancelled; } public boolean isCalibrationComplete(){ for(Integer compassId: compassList){ if(!calibrationResultTracker.containsKey(compassId)) return false; } return true; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { final List<MagnetometerCalibrationProgress> progressList = new ArrayList<>(this.calibrationProgressTracker .values()); dest.writeTypedList(progressList); final List<MagnetometerCalibrationResult> resultList = new ArrayList<>(this.calibrationResultTracker.values()); dest.writeTypedList(resultList); dest.writeByte(calibrationCancelled ? (byte) 1 : (byte) 0); } private MagnetometerCalibrationStatus(Parcel in) { final List<MagnetometerCalibrationProgress> progressList = new ArrayList<>(); in.readTypedList(progressList, MagnetometerCalibrationProgress.CREATOR); for (MagnetometerCalibrationProgress progress : progressList) { addCalibrationProgress(progress); } final List<MagnetometerCalibrationResult> resultList = new ArrayList<>(); in.readTypedList(resultList, MagnetometerCalibrationResult.CREATOR); for (MagnetometerCalibrationResult result : resultList) addCalibrationResult(result); this.calibrationCancelled = in.readByte() != 0; } public static final Parcelable.Creator<MagnetometerCalibrationStatus> CREATOR = new Parcelable.Creator<MagnetometerCalibrationStatus>() { public MagnetometerCalibrationStatus createFromParcel(Parcel source) { return new MagnetometerCalibrationStatus(source); } public MagnetometerCalibrationStatus[] newArray(int size) { return new MagnetometerCalibrationStatus[size]; } }; }