MCPcopy Create free account
hub / github.com/XCSoar/XCSoar / MultiPort

Class MultiPort

android/src/MultiPort.java:36–171  ·  view source on GitHub ↗

An #AndroidPort implementation that combines multiple #AndroidPort objects.

Source from the content-addressed store, hash-verified

34 * objects.
35 */
36class MultiPort implements AndroidPort, InputListener {
37 private PortListener portListener;
38 private InputListener inputListener;
39
40 private static final String TAG = "XCSoar";
41
42 private Collection<AndroidPort> ports = new LinkedList<AndroidPort>();
43 private boolean error = false;
44
45 private synchronized int checkValid() {
46 boolean ready = false, limbo = false;
47
48 for (Iterator<AndroidPort> i = ports.iterator(); i.hasNext();) {
49 AndroidPort port = i.next();
50
51 switch (port.getState()) {
52 case STATE_READY:
53 ready = true;
54 break;
55
56 case STATE_FAILED:
57 Log.i(TAG, "Bluetooth disconnect from " + port);
58
59 i.remove();
60 try {
61 port.close();
62 } catch (IOException e) {
63 }
64 error = true;
65 break;
66
67 case STATE_LIMBO:
68 limbo = true;
69 break;
70 }
71 }
72
73 if (ready) {
74 error = false;
75 return STATE_READY;
76 } else if (limbo || !error) {
77 error = false;
78 return STATE_LIMBO;
79 } else
80 return STATE_FAILED;
81 }
82
83 public synchronized void add(AndroidPort port) {
84 error = false;
85 checkValid();
86
87 ports.add(port);
88 port.setListener(portListener);
89 port.setInputListener(this);
90 }
91
92 @Override public void setListener(PortListener _listener) {
93 portListener = _listener;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected