package com.o3dr.services.android.lib.drone.mission; import android.os.Bundle; import android.os.Parcel; import com.o3dr.services.android.lib.drone.mission.item.MissionItem; import com.o3dr.services.android.lib.drone.property.DroneAttribute; import java.util.ArrayList; import java.util.List; /** * Holds a set of mission items. */ public class Mission implements DroneAttribute { private int currentMissionItem; private final List<MissionItem> missionItemsList = new ArrayList<MissionItem>(); public Mission() {} public void addMissionItem(MissionItem missionItem){ missionItemsList.add(missionItem); } public void addMissionItem(int index, MissionItem missionItem){ missionItemsList.add(index, missionItem); } public void removeMissionItem(MissionItem missionItem){ missionItemsList.remove(missionItem); } public void removeMissionItem(int index){ missionItemsList.remove(index); } public void clear(){ missionItemsList.clear(); } public MissionItem getMissionItem(int index){ return missionItemsList.get(index); } public List<MissionItem> getMissionItems(){ return missionItemsList; } public int getCurrentMissionItem() { return currentMissionItem; } public void setCurrentMissionItem(int currentMissionItem) { this.currentMissionItem = currentMissionItem; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Mission)) { return false; } Mission mission = (Mission) o; if (currentMissionItem != mission.currentMissionItem) { return false; } return missionItemsList.equals(mission.missionItemsList); } @Override public int hashCode() { int result = currentMissionItem; result = 31 * result + missionItemsList.hashCode(); return result; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.currentMissionItem); List<Bundle> missionItemsBundles = new ArrayList<Bundle>(missionItemsList.size()); if(!missionItemsList.isEmpty()){ for(MissionItem missionItem : missionItemsList){ missionItemsBundles.add(missionItem.getType().storeMissionItem(missionItem)); } } dest.writeTypedList(missionItemsBundles); } private Mission(Parcel in) { this.currentMissionItem = in.readInt(); List<Bundle> missionItemsBundles = new ArrayList<>(); in.readTypedList(missionItemsBundles, Bundle.CREATOR); if(!missionItemsBundles.isEmpty()){ for(Bundle bundle : missionItemsBundles){ missionItemsList.add(MissionItemType.restoreMissionItemFromBundle(bundle)); } } } public static final Creator<Mission> CREATOR = new Creator<Mission>() { public Mission createFromParcel(Parcel source) { return new Mission(source); } public Mission[] newArray(int size) { return new Mission[size]; } }; }