diff --git a/app/build.gradle b/app/build.gradle index feb6c88..49f0398 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -60,11 +60,12 @@ dependencies { compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:support-v4:23.0.1' compile 'com.squareup.okhttp:okhttp:2.5.0' - compile 'com.google.code.gson:gson:2.3.1' + compile 'com.google.code.gson:gson:2.4' compile 'com.jakewharton:butterknife:7.0.1' compile 'com.koushikdutta.async:androidasync:2.1.6' compile 'com.android.support:design:23.0.1' compile 'com.larswerkman:HoloColorPicker:1.5@aar' - compile 'com.google.guava:guava:19.0-rc1' + compile 'com.google.guava:guava:19.0-rc2' + compile 'com.thetransactioncompany:jsonrpc2-base:1.38' provided 'org.projectlombok:lombok:1.16.6' } diff --git a/app/libs/holo-color-picker_ledd_version.aar b/app/libs/holo-color-picker_ledd_version.aar new file mode 100644 index 0000000..ee686e1 Binary files /dev/null and b/app/libs/holo-color-picker_ledd_version.aar differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 61ebf66..e505294 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,6 +24,7 @@ + ledStripes; @@ -302,7 +305,7 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O } @Override - public void onGetFailed(String message) { + public void onGetFailed(int code, String message) { Snackbar.make(findViewById(android.R.id.content), getString(R.string.snackbar_no_connection_stripes) + message, Snackbar .LENGTH_LONG).show(); @@ -366,7 +369,7 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O } @Override - public void onRecievFailed(String msg) { + public void onRecievFailed(int code, String msg) { } diff --git a/app/src/main/java/com/idlegandalf/ledd/callbacks/AddControllerCallback.java b/app/src/main/java/com/idlegandalf/ledd/callbacks/AddControllerCallback.java index 2f44e6d..8e7a3a7 100644 --- a/app/src/main/java/com/idlegandalf/ledd/callbacks/AddControllerCallback.java +++ b/app/src/main/java/com/idlegandalf/ledd/callbacks/AddControllerCallback.java @@ -28,6 +28,6 @@ public interface AddControllerCallback extends BaseCallback { */ void onControllerAdded(Controller controller); - void onAddFailed(String msg, String detail); + void onAddFailed(int code, String msg); } diff --git a/app/src/main/java/com/idlegandalf/ledd/callbacks/AddStripeCallback.java b/app/src/main/java/com/idlegandalf/ledd/callbacks/AddStripeCallback.java index e85df6e..cf5e724 100644 --- a/app/src/main/java/com/idlegandalf/ledd/callbacks/AddStripeCallback.java +++ b/app/src/main/java/com/idlegandalf/ledd/callbacks/AddStripeCallback.java @@ -23,4 +23,6 @@ import com.idlegandalf.ledd.components.LedStripe; public interface AddStripeCallback extends BaseCallback { void onAddSuccessfully(LedStripe stripe); + + void onAddFailed(int code, String msg); } diff --git a/app/src/main/java/com/idlegandalf/ledd/callbacks/RecieveColorCallback.java b/app/src/main/java/com/idlegandalf/ledd/callbacks/RecieveColorCallback.java index ef09596..8e32116 100644 --- a/app/src/main/java/com/idlegandalf/ledd/callbacks/RecieveColorCallback.java +++ b/app/src/main/java/com/idlegandalf/ledd/callbacks/RecieveColorCallback.java @@ -23,5 +23,5 @@ import com.idlegandalf.ledd.components.LedStripe; public interface RecieveColorCallback extends BaseCallback { void onColorRecieved(LedStripe stripe); - void onRecievFailed(String msg); + void onRecievFailed(int code, String msg); } diff --git a/app/src/main/java/com/idlegandalf/ledd/callbacks/StripesCallback.java b/app/src/main/java/com/idlegandalf/ledd/callbacks/StripesCallback.java index f9f247a..7e72ec0 100644 --- a/app/src/main/java/com/idlegandalf/ledd/callbacks/StripesCallback.java +++ b/app/src/main/java/com/idlegandalf/ledd/callbacks/StripesCallback.java @@ -26,5 +26,5 @@ import java.util.List; public interface StripesCallback extends BaseCallback { void onSuccess(List stripes); - void onGetFailed(String message); + void onGetFailed(int code, String message); } diff --git a/app/src/main/java/com/idlegandalf/ledd/components/AnswerTask.java b/app/src/main/java/com/idlegandalf/ledd/components/AnswerTask.java index 8033071..84bda26 100644 --- a/app/src/main/java/com/idlegandalf/ledd/components/AnswerTask.java +++ b/app/src/main/java/com/idlegandalf/ledd/components/AnswerTask.java @@ -19,11 +19,11 @@ package com.idlegandalf.ledd.components; -import org.json.JSONObject; +import com.thetransactioncompany.jsonrpc2.JSONRPC2Response; public abstract class AnswerTask { public abstract void onConnectionFailed(String message); - public abstract void onResponse(JSONObject response); + public abstract void onResponse(JSONRPC2Response response); } diff --git a/app/src/main/java/com/idlegandalf/ledd/components/LedDRequest.java b/app/src/main/java/com/idlegandalf/ledd/components/LedDRequest.java index b8273e2..7190a7e 100644 --- a/app/src/main/java/com/idlegandalf/ledd/components/LedDRequest.java +++ b/app/src/main/java/com/idlegandalf/ledd/components/LedDRequest.java @@ -18,16 +18,16 @@ package com.idlegandalf.ledd.components; -import org.json.JSONObject; +import com.thetransactioncompany.jsonrpc2.JSONRPC2Request; import lombok.Getter; @Getter public class LedDRequest { - JSONObject request; + JSONRPC2Request request; AnswerTask task; - public LedDRequest(JSONObject request, AnswerTask task) { + public LedDRequest(JSONRPC2Request request, AnswerTask task) { this.request = request; this.task = task; } diff --git a/app/src/main/java/com/idlegandalf/ledd/components/Sendable.java b/app/src/main/java/com/idlegandalf/ledd/components/Sendable.java index af380fd..27c30fe 100644 --- a/app/src/main/java/com/idlegandalf/ledd/components/Sendable.java +++ b/app/src/main/java/com/idlegandalf/ledd/components/Sendable.java @@ -18,33 +18,26 @@ package com.idlegandalf.ledd.components; -import org.json.JSONException; -import org.json.JSONObject; +import com.thetransactioncompany.jsonrpc2.JSONRPC2Request; +import com.thetransactioncompany.jsonrpc2.JSONRPC2Response; -import java.util.UUID; +import org.json.JSONException; import lombok.Getter; @Getter public class Sendable { LedDDaemon recipient; - JSONObject message; - String ref; + JSONRPC2Request request; AnswerTask onAnswer; - public Sendable(JSONObject msg, AnswerTask task, LedDDaemon ledDDaemon) throws JSONException { - this(msg, UUID.randomUUID().toString(), task, ledDDaemon); - } - - public Sendable(JSONObject msg, String ref, AnswerTask task, LedDDaemon recipient) throws JSONException { - this.message = msg; - this.ref = ref; - this.message.put("ref", ref); + public Sendable(JSONRPC2Request request, AnswerTask task, LedDDaemon recipient) throws JSONException { + this.request = request; this.onAnswer = task; this.recipient = recipient; } - public void onResponse(JSONObject object) { + public void onResponse(JSONRPC2Response object) { if (onAnswer != null) { onAnswer.onResponse(object); } diff --git a/app/src/main/java/com/idlegandalf/ledd/fragments/AddControllerDialog.java b/app/src/main/java/com/idlegandalf/ledd/fragments/AddControllerDialog.java index eee524a..eda28dd 100644 --- a/app/src/main/java/com/idlegandalf/ledd/fragments/AddControllerDialog.java +++ b/app/src/main/java/com/idlegandalf/ledd/fragments/AddControllerDialog.java @@ -190,7 +190,7 @@ public class AddControllerDialog extends DialogFragment implements DialogInterfa } @Override - public void onAddFailed(final String msg, String detail) { + public void onAddFailed(final int code, final String msg) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { diff --git a/app/src/main/java/com/idlegandalf/ledd/fragments/AddStripeDialog.java b/app/src/main/java/com/idlegandalf/ledd/fragments/AddStripeDialog.java index 5b81531..4a41ae7 100644 --- a/app/src/main/java/com/idlegandalf/ledd/fragments/AddStripeDialog.java +++ b/app/src/main/java/com/idlegandalf/ledd/fragments/AddStripeDialog.java @@ -258,7 +258,6 @@ public class AddStripeDialog extends DialogFragment implements DialogInterface.O LedDHelper helper = ColorApplication.getInstance().getHelperForDaemon((LedDDaemon) daemonSpinner.getSelectedItem()); - if (helper != null) { helper.addStripe(stripe, new AddStripeCallback() { @Override @@ -275,6 +274,11 @@ public class AddStripeDialog extends DialogFragment implements DialogInterface.O dismiss(); } + @Override + public void onAddFailed(int code, String msg) { + + } + @Override public void onConnectionFailed(final String message) { getActivity().runOnUiThread(new Runnable() { @@ -415,7 +419,7 @@ public class AddStripeDialog extends DialogFragment implements DialogInterface.O } @Override - public void onGetFailed(String message) { + public void onGetFailed(int code, String message) { } diff --git a/app/src/main/java/com/idlegandalf/ledd/helper/LedDHelper.java b/app/src/main/java/com/idlegandalf/ledd/helper/LedDHelper.java index 7a57bea..de589a0 100644 --- a/app/src/main/java/com/idlegandalf/ledd/helper/LedDHelper.java +++ b/app/src/main/java/com/idlegandalf/ledd/helper/LedDHelper.java @@ -38,13 +38,19 @@ import com.idlegandalf.ledd.components.LedDDaemon; import com.idlegandalf.ledd.components.LedDRequest; import com.idlegandalf.ledd.components.LedStripe; import com.idlegandalf.ledd.services.ColorService; +import com.thetransactioncompany.jsonrpc2.JSONRPC2Error; +import com.thetransactioncompany.jsonrpc2.JSONRPC2Request; +import com.thetransactioncompany.jsonrpc2.JSONRPC2Response; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.UUID; import java.util.concurrent.LinkedBlockingQueue; public class LedDHelper { @@ -52,7 +58,7 @@ public class LedDHelper { final String ACTION_GETCOLOR = "get_color"; final String ACTION_ADDCONTROLLER = "add_controller"; final String ACTION_GETALLSTRIPES = "get_stripes"; - final String ACTION_ADDSTRIPES = "add_stripe"; + final String ACTION_ADDSTRIPE = "add_stripe"; final String ACTION_TESTCHANNEL = "test_channel"; final String ACTION_DISCOVER = "discover"; private Context context; @@ -92,34 +98,33 @@ public class LedDHelper { * @param c controller object */ public void addController(final Controller c, final AddControllerCallback callback) { - JSONObject jnson = new JSONObject(); + Map params = new HashMap<>(); - try { - jnson.put("action", ACTION_ADDCONTROLLER); - jnson.put("channels", c.getChannels()); - jnson.put("i2c_dev", c.getI2c_device()); - jnson.put("address", c.getAddress()); - } catch (JSONException e) { - e.printStackTrace(); - } + params.put("channels", c.getChannels()); + params.put("i2c_dev", c.getI2c_device()); + params.put("address", c.getAddress()); - addRequestToQueue(jnson, new AnswerTask() { + JSONRPC2Request request = new JSONRPC2Request(ACTION_ADDCONTROLLER, params, UUID.randomUUID().toString()); + + addRequestToQueue(request, new AnswerTask() { @Override public void onConnectionFailed(String message) { - callback.onAddFailed(message, ""); + callback.onConnectionFailed(message); } @Override - public void onResponse(JSONObject response) { - try { - if (response.getBoolean("success")) { - c.setId(response.getInt("cid")); + public void onResponse(JSONRPC2Response response) { + if (response.indicatesSuccess()) { + try { + JSONObject json = new JSONObject(response.getResult().toString()); + c.setId(json.getInt("cid")); callback.onControllerAdded(c); - } else { - callback.onAddFailed(response.getString("message"), response.getString("message_detail")); + } catch (JSONException e) { + e.printStackTrace(); } - } catch (Exception e) { - e.printStackTrace(); + } else { + @SuppressWarnings("ThrowableResultOfMethodCallIgnored") JSONRPC2Error error = response.getError(); + callback.onAddFailed(error.getCode(), error.getMessage()); } } }); @@ -129,27 +134,20 @@ public class LedDHelper { * Get stripes known to daemon */ public void getStripes(final StripesCallback callback) { - JSONObject jnson = new JSONObject(); - - try { - jnson.put("action", ACTION_GETALLSTRIPES); - } catch (JSONException e) { - e.printStackTrace(); - } - - addRequestToQueue(jnson, new AnswerTask() { + addRequestToQueue(new JSONRPC2Request(ACTION_GETALLSTRIPES, UUID.randomUUID().toString()), new AnswerTask() { @Override public void onConnectionFailed(String message) { - callback.onGetFailed(message); + callback.onConnectionFailed(message); } @Override - public void onResponse(JSONObject response) { + public void onResponse(JSONRPC2Response response) { try { - if (response.getBoolean("success")) { + if (response.indicatesSuccess()) { ledDDaemon.getControllers().clear(); List list = new ArrayList<>(); - JSONArray jcontrollers = response.getJSONArray("controller"); + JSONObject json = new JSONObject(response.getResult().toString()); + JSONArray jcontrollers = json.getJSONArray("controller"); for (int i = 0; i < jcontrollers.length(); i++) { JSONObject row = jcontrollers.getJSONObject(i); @@ -180,8 +178,8 @@ public class LedDHelper { callback.onSuccess(list); } else { - if (response.has("message")) callback.onGetFailed(response.getString("message")); - else callback.onGetFailed("unknown error"); + @SuppressWarnings("ThrowableResultOfMethodCallIgnored") JSONRPC2Error error = response.getError(); + callback.onGetFailed(error.getCode(), error.getMessage()); } } catch (Exception e) { e.printStackTrace(); @@ -196,26 +194,20 @@ public class LedDHelper { * @param ledStripe Stripe */ public void setColor(LedStripe ledStripe) { + Map hsv = new HashMap<>(); - JSONObject jnson = new JSONObject(); - JSONObject hsv = new JSONObject(); + hsv.put("h", ledStripe.getColor().getHue()); + hsv.put("s", ledStripe.getColor().getSaturation()); + hsv.put("v", ledStripe.getColor().getValue()); - try { - hsv.put("h", ledStripe.getColor().getHue()); - hsv.put("s", ledStripe.getColor().getSaturation()); - - hsv.put("v", ledStripe.getColor().getValue()); + Map params = new HashMap<>(); + params.put("sid", ledStripe.getId()); + params.put("hsv", hsv); - jnson.put("action", ACTION_SETCOLOR); - jnson.put("sid", ledStripe.getId()); - jnson.put("hsv", hsv); + JSONRPC2Request request = new JSONRPC2Request(ACTION_SETCOLOR, params, UUID.randomUUID().toString()); - } catch (JSONException e) { - e.printStackTrace(); - } - - addRequestToQueue(jnson, null); + addRequestToQueue(request, null); } /** @@ -224,33 +216,29 @@ public class LedDHelper { * @param ledStripe Stripe */ public void getColor(final LedStripe ledStripe, final RecieveColorCallback callback) { - JSONObject jnson = new JSONObject(); + HashMap params = new HashMap<>(); + params.put("sid", ledStripe.getId()); - try { - jnson.put("action", ACTION_GETCOLOR); - jnson.put("sid", ledStripe.getId()); - } catch (JSONException e) { - e.printStackTrace(); - } - - addRequestToQueue(jnson, new AnswerTask() { + addRequestToQueue(new JSONRPC2Request(ACTION_GETCOLOR, params, UUID.randomUUID().toString()), new AnswerTask() { @Override public void onConnectionFailed(String message) { - callback.onRecievFailed(message); + callback.onConnectionFailed(message); } @Override - public void onResponse(JSONObject response) { - try { - if (response.getBoolean("success")) { - JSONArray hsv = response.getJSONArray("color"); + public void onResponse(JSONRPC2Response response) { + if (response.indicatesSuccess()) { + try { + JSONObject json = new JSONObject(response.getResult().toString()); + JSONArray hsv = json.getJSONArray("color"); ledStripe.setColor(new HSV(hsv.getDouble(0), hsv.getDouble(1), hsv.getDouble(2))); callback.onColorRecieved(ledStripe); - } else { - callback.onRecievFailed(response.getString("message")); + } catch (JSONException e) { + e.printStackTrace(); } - } catch (Exception e) { - e.printStackTrace(); + } else { + @SuppressWarnings("ThrowableResultOfMethodCallIgnored") JSONRPC2Error error = response.getError(); + callback.onRecievFailed(error.getCode(), error.getMessage()); } } }); @@ -264,26 +252,20 @@ public class LedDHelper { * @param value value (1= on, 0 = off) */ public void testChannel(Controller c, int channel, int value) { - JSONObject jnson = new JSONObject(); + HashMap params = new HashMap<>(); - try { - jnson.put("action", ACTION_TESTCHANNEL); + params.put("cid", c.getId()); + params.put("channel", channel); + params.put("value", value); - jnson.put("cid", c.getId()); - jnson.put("channel", channel); - jnson.put("value", value); - } catch (JSONException e) { - e.printStackTrace(); - } - - addRequestToQueue(jnson, new AnswerTask() { + addRequestToQueue(new JSONRPC2Request(ACTION_TESTCHANNEL, params, UUID.randomUUID().toString()), new AnswerTask() { @Override public void onConnectionFailed(String message) { } @Override - public void onResponse(JSONObject response) { + public void onResponse(JSONRPC2Response response) { } }); @@ -293,25 +275,18 @@ public class LedDHelper { * Get information about an ledd daemon */ public void discover(final DiscoverCallback callback) { - JSONObject jnson = new JSONObject(); - - try { - jnson.put("action", ACTION_DISCOVER); - } catch (JSONException e) { - e.printStackTrace(); - } - - addRequestToQueue(jnson, new AnswerTask() { + addRequestToQueue(new JSONRPC2Request(ACTION_DISCOVER, UUID.randomUUID().toString()), new AnswerTask() { @Override public void onConnectionFailed(String message) { callback.onConnectionFailed(message); } @Override - public void onResponse(JSONObject response) { + public void onResponse(JSONRPC2Response response) { try { - if (response.getBoolean("success")) { - callback.onDiscoverSuccessfully(response.getString("version")); + if (response.indicatesSuccess()) { + JSONObject json = new JSONObject(response.getResult().toString()); + callback.onDiscoverSuccessfully(json.getString("version")); } } catch (Exception e) { e.printStackTrace(); @@ -324,40 +299,34 @@ public class LedDHelper { * Get information about an ledd daemon */ public void addStripe(final LedStripe ledStripe, final AddStripeCallback callback) { - JSONObject jnson = new JSONObject(); + HashMap params = new HashMap<>(); + HashMap mapping = new HashMap<>(); - try { - jnson.put("action", ACTION_ADDSTRIPES); + params.put("name", ledStripe.getName()); + params.put("rgb", ledStripe.isRGB()); - JSONObject stripe = new JSONObject(); + mapping.put("r", ledStripe.getChannelRed()); + mapping.put("g", ledStripe.getChannelGreen()); + mapping.put("b", ledStripe.getChannelBlue()); + params.put("map", mapping); + params.put("cid", ledStripe.getController().getId()); - stripe.put("name", ledStripe.getName()); - stripe.put("rgb", ledStripe.isRGB()); - - JSONObject mapping = new JSONObject(); - mapping.put("r", ledStripe.getChannelRed()); - mapping.put("g", ledStripe.getChannelGreen()); - mapping.put("b", ledStripe.getChannelBlue()); - stripe.put("map", mapping); - stripe.put("cid", ledStripe.getController().getId()); - jnson.put("stripe", stripe); - - } catch (JSONException e) { - e.printStackTrace(); - } - - addRequestToQueue(jnson, new AnswerTask() { + addRequestToQueue(new JSONRPC2Request(ACTION_ADDSTRIPE, params, UUID.randomUUID().toString()), new AnswerTask() { @Override public void onConnectionFailed(String message) { callback.onConnectionFailed(message); } @Override - public void onResponse(JSONObject response) { + public void onResponse(JSONRPC2Response response) { try { - if (response.getBoolean("success")) { - ledStripe.setId(response.getInt("sid")); + if (response.indicatesSuccess()) { + JSONObject json = new JSONObject(response.getResult().toString()); + ledStripe.setId(json.getInt("sid")); callback.onAddSuccessfully(ledStripe); + } else { + @SuppressWarnings("ThrowableResultOfMethodCallIgnored") JSONRPC2Error error = response.getError(); + callback.onAddFailed(error.getCode(), error.getMessage()); } } catch (Exception e) { e.printStackTrace(); @@ -366,8 +335,8 @@ public class LedDHelper { }); } - private void addRequestToQueue(JSONObject json, AnswerTask task) { - if (json != null && json.length() > 0) dRequests.add(new LedDRequest(json, task)); + private void addRequestToQueue(JSONRPC2Request request, AnswerTask task) { + if (request != null) dRequests.add(new LedDRequest(request, task)); } public void teardown() { diff --git a/app/src/main/java/com/idlegandalf/ledd/services/ColorService.java b/app/src/main/java/com/idlegandalf/ledd/services/ColorService.java index fd23af6..b32c143 100644 --- a/app/src/main/java/com/idlegandalf/ledd/services/ColorService.java +++ b/app/src/main/java/com/idlegandalf/ledd/services/ColorService.java @@ -33,9 +33,11 @@ import com.koushikdutta.async.DataEmitter; import com.koushikdutta.async.Util; import com.koushikdutta.async.callback.ConnectCallback; import com.koushikdutta.async.callback.DataCallback; +import com.thetransactioncompany.jsonrpc2.JSONRPC2ParseException; +import com.thetransactioncompany.jsonrpc2.JSONRPC2Request; +import com.thetransactioncompany.jsonrpc2.JSONRPC2Response; import org.json.JSONException; -import org.json.JSONObject; import java.io.UnsupportedEncodingException; import java.net.InetSocketAddress; @@ -80,19 +82,24 @@ public class ColorService extends Service { DataCallback dataCallback = new DataCallback() { @Override public void onDataAvailable(DataEmitter emitter, ByteBufferList bb) { - try { - JSONObject resp = new JSONObject(new String(bb.getAllByteArray())); + JSONRPC2Response reqIn = null; - if (sendableHashMap.containsKey(resp.getString("ref"))) { - sendableHashMap.get(resp.getString("ref")).onResponse(resp); - sendableHashMap.remove(resp.getString("ref")); - if (timeoutHashMap.containsKey(resp.getString("ref")) && timeoutHashMap.get(resp.getString("ref")) != null) - timeoutHashMap.get(resp.getString("ref")).cancel(false); - timeoutHashMap.remove(resp.getString("ref")); - } - } catch (JSONException e) { + try { + reqIn = JSONRPC2Response.parse(new String(bb.getAllByteArray())); + + } catch (JSONRPC2ParseException e) { e.printStackTrace(); } + + if (reqIn != null) { + if (sendableHashMap.containsKey(reqIn.getID().toString())) { + sendableHashMap.get(reqIn.getID().toString()).onResponse(reqIn); + sendableHashMap.remove(reqIn.getID().toString()); + if (timeoutHashMap.containsKey(reqIn.getID().toString()) && timeoutHashMap.get(reqIn.getID().toString()) != null) + timeoutHashMap.get(reqIn.getID().toString()).cancel(false); + timeoutHashMap.remove(reqIn.getID().toString()); + } + } } }; @@ -111,22 +118,32 @@ public class ColorService extends Service { if (item instanceof Sendable) { final Sendable sendable = (Sendable) item; - if (socketHashMap.containsKey(sendable.getRecipient()) && socketHashMap.get(sendable.getRecipient()).getServer().isRunning - ()) { + if (socketHashMap.containsKey(sendable.getRecipient())) { + if (socketHashMap.get(sendable.getRecipient()) == null) { + // if server is not running yet, readd item to queue + workQueue.add(item); + continue; + } else if (!socketHashMap.get(sendable.getRecipient()).getServer().isRunning()) { + // connection probably closed or was interrupted -> reconnect + socketHashMap.remove(sendable.getRecipient()); + workQueue.add(item); + continue; + } - Util.writeAll(socketHashMap.get(sendable.getRecipient()), (sendable.getMessage().toString() + "\n").getBytes("UTF-8"), + Util.writeAll(socketHashMap.get(sendable.getRecipient()), (sendable.getRequest().toString() + "\n").getBytes("UTF-8"), null); - sendableHashMap.put(sendable.getRef(), sendable); + sendableHashMap.put((String) sendable.getRequest().getID(), sendable); if (!poolExecutor.isTerminating() && !poolExecutor.isTerminated()) - timeoutHashMap.put(sendable.getRef(), poolExecutor.schedule(new Runnable() { + timeoutHashMap.put((String) sendable.getRequest().getID(), poolExecutor.schedule(new Runnable() { @Override public void run() { sendable.onNoResponse(); - timeoutHashMap.remove(sendable.getRef()); - sendableHashMap.remove(sendable.getRef()); + timeoutHashMap.remove(sendable.getRequest().getID()); + sendableHashMap.remove(sendable.getRequest().getID()); } }, 1000, TimeUnit.MILLISECONDS)); } else { + socketHashMap.put(sendable.getRecipient(), null); AsyncServer.getDefault().connectSocket(new InetSocketAddress(sendable.getRecipient().getAddress(), sendable .getRecipient().getPort()), new ConnectCallback() { @Override @@ -160,10 +177,10 @@ public class ColorService extends Service { } public class ColorBinder extends Binder { - public void queueSend(LedDDaemon rec, JSONObject msg, AnswerTask answerTask) { + public void queueSend(LedDDaemon rec, JSONRPC2Request request, AnswerTask answerTask) { Sendable sendable = null; try { - sendable = new Sendable(msg, answerTask, rec); + sendable = new Sendable(request, answerTask, rec); } catch (JSONException e) { e.printStackTrace(); } diff --git a/app/src/main/res/drawable-hdpi/ic_clear_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_clear_black_48dp.png new file mode 100644 index 0000000..51b4401 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_clear_black_48dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_clear_white_48dp.png b/app/src/main/res/drawable-hdpi/ic_clear_white_48dp.png new file mode 100644 index 0000000..6b717e0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_clear_white_48dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_clear_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_clear_black_48dp.png new file mode 100644 index 0000000..6bc4372 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_clear_black_48dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_clear_white_48dp.png b/app/src/main/res/drawable-mdpi/ic_clear_white_48dp.png new file mode 100644 index 0000000..b7c7ffd Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_clear_white_48dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_clear_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_clear_black_48dp.png new file mode 100644 index 0000000..df42fee Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_clear_black_48dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_clear_white_48dp.png b/app/src/main/res/drawable-xhdpi/ic_clear_white_48dp.png new file mode 100644 index 0000000..3964192 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_clear_white_48dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_clear_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_clear_black_48dp.png new file mode 100644 index 0000000..e2ee25f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_clear_black_48dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_clear_white_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_clear_white_48dp.png new file mode 100644 index 0000000..4927bc2 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_clear_white_48dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_clear_black_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_clear_black_48dp.png new file mode 100644 index 0000000..8c6f57c Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_clear_black_48dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_clear_white_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_clear_white_48dp.png new file mode 100644 index 0000000..bb21ce0 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_clear_white_48dp.png differ diff --git a/app/src/main/res/layout/navigation_header.xml b/app/src/main/res/layout/navigation_header.xml index 8454339..9bc6475 100644 --- a/app/src/main/res/layout/navigation_header.xml +++ b/app/src/main/res/layout/navigation_header.xml @@ -18,26 +18,26 @@ --> + android:layout_width="match_parent" + android:layout_height="192dp" + android:background="?attr/colorPrimaryDark" + android:gravity="bottom" + android:padding="16dp" + android:theme="@style/ThemeOverlay.AppCompat.Dark"> \ No newline at end of file