package org.droidplanner.services.android.impl.api;
import android.os.Bundle;
import android.os.RemoteException;
import android.util.Log;
import com.o3dr.android.client.BuildConfig;
import com.o3dr.services.android.lib.drone.connection.ConnectionParameter;
import com.o3dr.services.android.lib.gcs.event.GCSEvent;
import com.o3dr.services.android.lib.model.IApiListener;
import com.o3dr.services.android.lib.model.IDroidPlannerServices;
import com.o3dr.services.android.lib.model.IDroneApi;
import com.o3dr.services.android.lib.util.version.VersionUtils;
import org.droidplanner.services.android.impl.core.drone.DroneManager;
import java.util.ArrayList;
import java.util.List;
/**
* Created by fhuya on 11/3/14.
*/
final class DPServices extends IDroidPlannerServices.Stub {
private final static String TAG = DPServices.class.getSimpleName();
private DroidPlannerService serviceRef;
DPServices(DroidPlannerService service) {
serviceRef = service;
}
void destroy(){
serviceRef = null;
}
@Override
public int getServiceVersionCode() throws RemoteException {
return BuildConfig.VERSION_CODE;
}
@Override
public int getApiVersionCode() throws RemoteException {
return VersionUtils.getCoreLibVersion(serviceRef.getApplicationContext());
}
@Override
public IDroneApi registerDroneApi(IApiListener listener, String appId) throws RemoteException {
return serviceRef.registerDroneApi(listener, appId);
}
@Override
public Bundle[] getConnectedApps(String requesterId) throws RemoteException {
Log.d(TAG, "List of connected apps request from " + requesterId);
List<Bundle> appsInfo = new ArrayList<>();
for(DroneApi droneApi : serviceRef.droneApiStore.values()){
if(droneApi.isConnected()){
DroneManager droneManager = droneApi.getDroneManager();
if(droneManager != null) {
final ConnectionParameter droneParams = droneApi.getDroneManager().getConnectionParameter();
final ConnectionParameter sanitizedParams = droneParams.clone();
Bundle info = new Bundle();
info.putString(GCSEvent.EXTRA_APP_ID, droneApi.getOwnerId());
info.putParcelable(GCSEvent.EXTRA_VEHICLE_CONNECTION_PARAMETER, sanitizedParams);
appsInfo.add(info);
}
}
}
return appsInfo.toArray(new Bundle[appsInfo.size()]);
}
@Override
public void releaseDroneApi(IDroneApi dpApi) throws RemoteException {
Log.d(TAG, "Releasing acquired drone api handle.");
if(dpApi instanceof DroneApi) {
serviceRef.releaseDroneApi(((DroneApi) dpApi).getOwnerId());
}
}
}