/** * Return true if at least one source is active. * * @param skipSource don't consider this data source when determining if the * pipeline is active. */ public boolean isActive(VehicleDataSource skipSource) { boolean connected = false; for(VehicleDataSource s : mSources) { if(s != skipSource) { connected = connected || s.isConnected(); } } return connected; }
/** * Remove and stop all sources in the pipeline. */ public void clearSources() { for (VehicleDataSource mSource : mSources) { (mSource).stop(); } mSources.clear(); }
/** * Add a new source to the pipeline. * * The source is given a reference to this DataPipeline as its callback. */ public VehicleDataSource addSource(VehicleDataSource source) { source.setCallback(this); mSources.add(source); if(isActive()) { source.onPipelineActivated(); } else { source.onPipelineDeactivated(); } return source; }
/** * At least one source is active - notify the operator. */ @Override public void sourceConnected(VehicleDataSource source) { if(mOperator != null) { mOperator.onPipelineActivated(); for(VehicleDataSource s : mSources) { s.onPipelineActivated(); } } }
/** * At least one source is not active - if all sources are inactive, notify * the operator. */ @Override public void sourceDisconnected(VehicleDataSource source) { if(mOperator != null) { if(!isActive(source)) { mOperator.onPipelineDeactivated(); for(VehicleDataSource s : mSources) { s.onPipelineDeactivated(); } } } }
/** * Remove a previously added source from the pipeline. * * Once removed, the source should no longer use this pipeline for its * callback. * * @param source if the value is null, it is ignored. */ public void removeSource(VehicleDataSource source) { if(source != null) { mSources.remove(source); source.stop(); } }