1010import android .util .Log ;
1111import android .util .Pair ;
1212import android .view .View ;
13+ import android .widget .AdapterView ;
14+ import android .widget .ArrayAdapter ;
1315import android .widget .Button ;
1416import android .widget .CheckBox ;
1517import android .widget .ImageButton ;
18+ import android .widget .ProgressBar ;
1619import android .widget .SeekBar ;
20+ import android .widget .Spinner ;
1721import android .widget .TextView ;
22+ import android .widget .Toast ;
1823
1924import androidx .appcompat .app .AppCompatActivity ;
2025
2631import org .sofwerx .ogc .sos .HttpHelper ;
2732import org .sofwerx .ogc .sos .OperationGetCapabilities ;
2833import org .sofwerx .ogc .sos .OperationGetCapabilitiesResponse ;
34+ import org .sofwerx .ogc .sos .OperationGetResults ;
2935import org .sofwerx .ogc .sos .SensorMeasurement ;
3036import org .sofwerx .ogc .sos .SensorMeasurementTime ;
3137import org .sofwerx .ogc .sos .SensorResultTemplateField ;
4248public class PullExampleActivity extends AppCompatActivity implements SosMessageListener {
4349 private SosService sosService ;
4450 private ArrayList <SosSensor > sensors ;
51+ private SosSensor currentSensor = null ;
4552
4653 @ Override
4754 public void onDestroy () {
@@ -59,6 +66,10 @@ public void onDestroy() {
5966 private TextView textCannotSendWarning , textResult ;
6067 private Button sendButton ;
6168 private View viewMeasurements ;
69+ private ProgressBar progressBar ;
70+ private Spinner spinner ;
71+ private ArrayAdapter spinnerArrayAdapter = null ;
72+ private boolean isWaiting = false ;
6273
6374 @ Override
6475 protected void onCreate (Bundle savedInstanceState ) {
@@ -74,6 +85,19 @@ protected void onCreate(Bundle savedInstanceState) {
7485 sendButton = findViewById (R .id .send );
7586 viewMeasurements = findViewById (R .id .viewMeasurements );
7687 sendButton .setOnClickListener (v -> sendQuery ());
88+ spinner = findViewById (R .id .spinner );
89+ spinner .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener () {
90+ @ Override
91+ public void onItemSelected (AdapterView <?> parent , View view , int position , long id ) {
92+ if ((sensors != null ) && (position < sensors .size ()))
93+ currentSensor = sensors .get (position );
94+ updateVisibility ();
95+ }
96+
97+ @ Override
98+ public void onNothingSelected (AdapterView <?> parent ) { }
99+ });
100+ progressBar = findViewById (R .id .progressBar );
77101 checkSendIpc .setOnCheckedChangeListener ((buttonView , isChecked ) -> {
78102 updateVisibility ();
79103 if (sosService != null )
@@ -89,6 +113,7 @@ protected void onCreate(Bundle savedInstanceState) {
89113 }
90114
91115 private void sendQuery () {
116+ isWaiting = true ;
92117 if (sosService == null ) {
93118 String url ;
94119 if (checkSendNet .isChecked ())
@@ -100,7 +125,11 @@ private void sendQuery() {
100125 log ("Querying server..." );
101126 sosService = new SosService (PullExampleActivity .this , null , url , username , sosPassword , true , checkSendIpc .isChecked ());
102127 }
103- sosService .broadcast (new OperationGetCapabilities ());
128+ updateVisibility ();
129+ if ((sensors == null ) || sensors .isEmpty ())
130+ sosService .broadcast (new OperationGetCapabilities ());
131+ else
132+ sosService .broadcast (new OperationGetResults (currentSensor ));
104133 }
105134
106135 private final static String PREFS_SEND_IPC = "ipc" ;
@@ -152,6 +181,28 @@ private void updateVisibility() {
152181 editSosPassword .setVisibility (View .GONE );
153182 }
154183 checkSendingPrereqs ();
184+ progressBar .setVisibility (isWaiting ?View .VISIBLE :View .GONE );
185+ if ((sensors == null ) || sensors .isEmpty ()) {
186+ spinner .setVisibility (View .INVISIBLE );
187+ sendButton .setText ("Request List of Sensors" );
188+ } else {
189+ if (spinnerArrayAdapter == null ) {
190+ String [] values = new String [sensors .size ()];
191+ for (int i =0 ;i <sensors .size ();i ++) {
192+ if ((sensors .get (i ) == null ) || (sensors .get (i ).getId () == null ))
193+ values [i ] = "- unknown -" ;
194+ else
195+ values [i ] = sensors .get (i ).getId ();
196+ }
197+ spinnerArrayAdapter = new ArrayAdapter (this ,
198+ android .R .layout .simple_spinner_dropdown_item ,
199+ values );
200+ spinner .setAdapter (spinnerArrayAdapter );
201+ spinner .setVisibility (View .VISIBLE );
202+ spinner .setSelection (0 );
203+ }
204+ sendButton .setText ("Request Sensor Results" );
205+ }
155206 }
156207
157208 @ SuppressLint ("SetTextI18n" )
@@ -228,49 +279,55 @@ private String getMissingPrereqs() {
228279
229280 @ Override
230281 public void onSosOperationReceived (final AbstractSosOperation operation ) {
282+ isWaiting = false ;
231283 if (operation != null ) {
232284 runOnUiThread (() -> {
233- log (operation .getClass ().getSimpleName () + " received" );
234285 updateVisibility ();
235286 });
236287 if (operation instanceof OperationGetCapabilitiesResponse ) {
237288 ArrayList <SosSensor > opSensors = ((OperationGetCapabilitiesResponse ) operation ).getSensors ();
238289 if ((opSensors != null ) && !opSensors .isEmpty ()) {
239290 Log .d (SosIpcTransceiver .TAG ,opSensors .size ()+" sensors described by server" );
240291 for (SosSensor sensor :opSensors ) {
241- //TODO testing
242- if ((sensor .getId () != null ) && sensor .getId ().contains ("405-TORGI" )) {
243- Log .d (SosIpcTransceiver .TAG ,"... to include a TORGI sensor. Requesting most recent readings..." );
244- sosService .getSensorResultFromServer (sensor );
245- SosSensor current = findSensor (sensor );
246- if (sensors == null )
247- sensors = new ArrayList <>();
248- if (current == null )
249- sensors .add (sensor );
250- else
251- current .update (sensor );
252- }
292+ SosSensor current = findSensor (sensor );
293+ if (sensors == null )
294+ sensors = new ArrayList <>();
295+ if (current == null )
296+ sensors .add (sensor );
297+ else
298+ current .update (sensor );
253299 }
254- runOnUiThread (new Runnable () {
255- @ Override
256- public void run () {
257- if (( sensors != null ) && ! sensors . isEmpty ()) {
258- StringWriter out = new StringWriter ( );
259- boolean first = true ;
260- for (SosSensor a :sensors ) {
261- if (first )
262- first = false ;
263- else
264- out .append ("\r \n " );
265- out .append (a .toString ());
266- }
267- log (out .toString ());
268- } else
269- log ( "No sensor data received" );
270- }
300+ runOnUiThread (() -> {
301+ if (( sensors != null ) && ! sensors . isEmpty ()) {
302+ Toast . makeText ( PullExampleActivity . this , sensors . size ()+ " sensor" +(( sensors . size ()== 1 )? "" : "s" )+ " available" , Toast . LENGTH_SHORT ). show ();
303+ StringWriter out = new StringWriter ();
304+ out . append ( "Available sensors: \r \n " );
305+ boolean first = true ;
306+ for (SosSensor a :sensors ) {
307+ if (first )
308+ first = false ;
309+ else
310+ out .append ("\r \n " );
311+ out .append (a .toString ());
312+ }
313+ log (out .toString ());
314+ log ( " \r \n " );
315+ } else
316+ log ( "No sensor data received" );
271317 });
272318 }
319+ } else if (operation instanceof OperationGetResults ) {
320+ final SosSensor received = ((OperationGetResults )operation ).getSensor ();
321+ runOnUiThread (() -> {
322+ if (received == null )
323+ log ("GetResults failed to get any sensor information" );
324+ else
325+ log (received .toString ());
326+ });
273327 }
328+ runOnUiThread (() -> {
329+ updateVisibility ();
330+ });
274331 }
275332 }
276333
@@ -286,8 +343,10 @@ private SosSensor findSensor(SosSensor sensor) {
286343
287344 @ Override
288345 public void onSosError (final String message ) {
346+ isWaiting = false ;
289347 runOnUiThread (() -> {
290348 log (message );
349+ updateVisibility ();
291350 });
292351 }
293352
0 commit comments