diff --git a/app/src/main/java/com/example/dcav2gui/WorkerInterface.java b/app/src/main/java/com/example/dcav2gui/WorkerInterface.java index a866755..6e6ac70 100644 --- a/app/src/main/java/com/example/dcav2gui/WorkerInterface.java +++ b/app/src/main/java/com/example/dcav2gui/WorkerInterface.java @@ -11,11 +11,13 @@ import android.widget.Toast; import java.io.IOException; import java.util.Locale; +import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import okhttp3.FormBody; +import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; @@ -149,14 +151,17 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request addTraderRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/add_pair") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response addTraderResponse = httpClient.newCall(addTraderRequest).execute()) { @@ -188,14 +193,17 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request removeTraderRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/remove_pair") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response removeTraderResponse = httpClient.newCall(removeTraderRequest).execute()) { @@ -227,14 +235,17 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request restartTraderRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/restart_pair") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response restartTraderResponse = httpClient.newCall(restartTraderRequest).execute()) { @@ -266,14 +277,17 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request importTraderRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/import_pair") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response importTraderResponse = httpClient.newCall(importTraderRequest).execute()) { @@ -305,14 +319,17 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request togglePauseRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/toggle_pause") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response togglePauseResponse = httpClient.newCall(togglePauseRequest).execute()) { @@ -344,14 +361,17 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request toggleAutoswitchRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/toggle_autoswitch") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response toggleAutoswitchResponse = httpClient.newCall(toggleAutoswitchRequest).execute()) { @@ -383,14 +403,17 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request toggleCleanupRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/toggle_cleanup") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response toggleCleanupResponse = httpClient.newCall(toggleCleanupRequest).execute()) { @@ -423,14 +446,17 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request toggleLastCallRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/last_call") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response toggleLastCallResponse = httpClient.newCall(toggleLastCallRequest).execute()) { @@ -466,15 +492,18 @@ public class WorkerInterface { profits = "1"; } - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - formBuilder.add("calculate_profits", profits); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + jsonPayload.addProperty("calculate_profits", profits); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request switchToLongRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/switch_to_long") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response switchToLongResponse = httpClient.newCall(switchToLongRequest).execute()) { @@ -506,14 +535,17 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request switchToShortRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/switch_to_short") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response switchToShortResponse = httpClient.newCall(switchToShortRequest).execute()) { @@ -545,15 +577,18 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - formBuilder.add("new_quote", targetQuoteCurrency); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + jsonPayload.addProperty("new_quote", targetQuoteCurrency); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request switchQuoteCurrencyRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/switch_quote_currency") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response switchQuoteCurrencyResponse = httpClient.newCall(switchQuoteCurrencyRequest).execute()) { @@ -585,15 +620,18 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - formBuilder.add("amount", String.valueOf(amount)); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + jsonPayload.addProperty("amount", String.valueOf(amount)); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request addSafetyOrdersRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/add_so") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response addSafetyOrdersResponse = httpClient.newCall(addSafetyOrdersRequest).execute()) { @@ -625,15 +663,18 @@ public class WorkerInterface { String base = pairBaseAndQuote[0]; String quote = pairBaseAndQuote[1]; - FormBody.Builder formBuilder = new FormBody.Builder(); - formBuilder.add("base", base); - formBuilder.add("quote", quote); - formBuilder.add("amount", String.valueOf(amount)); - RequestBody formBody = formBuilder.build(); + Gson gson = new Gson(); + JsonObject jsonPayload = new JsonObject(); + jsonPayload.addProperty("base", base); + jsonPayload.addProperty("quote", quote); + jsonPayload.addProperty("amount", String.valueOf(amount)); + String jsonPayloadString = gson.toJson(jsonPayload); + + RequestBody requestBody = RequestBody.create(jsonPayloadString, MediaType.get("application/json; charset=utf-8")); Request addQuoteRequest = new Request.Builder() .url(API_BASE_URL + "/" + exchange + "/add_quote") .header("X-API-KEY", API_KEY) - .post(formBody) + .post(requestBody) .build(); try (Response addQuoteResponse = httpClient.newCall(addQuoteRequest).execute()) { @@ -660,6 +701,68 @@ public class WorkerInterface { } } + public static void showToggleDialog(JsonObject result, Context context) { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + + for (String key: result.keySet()) { + builder.setTitle(key); + builder.setMessage(result.get(key).getAsString()); + } + builder.setPositiveButton("OK", null); + builder.show(); + } + + public static void sendTogglePause(String exchange, String pair, Context context) { + new Thread(() -> { + try { + JsonObject result = togglePause(exchange, pair, true); + new Handler(Looper.getMainLooper()).post(() -> WorkerInterface.showToggleDialog(result, context)); + } catch (IOException e) { + e.printStackTrace(); + new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(context, "Failed to toggle pause", Toast.LENGTH_SHORT).show()); + } + }).start(); + } + + public static void sendToggleAutoswitch(String exchange, String pair, Context context) { + new Thread(() -> { + try { + JsonObject result = toggleAutoswitch(exchange, pair, true); + new Handler(Looper.getMainLooper()).post(() -> WorkerInterface.showToggleDialog(result, context)); + } catch (IOException e) { + e.printStackTrace(); + new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(context, "Failed to toggle autoswitch", Toast.LENGTH_SHORT).show()); + } + }).start(); + } + + public static void sendToggleCleanup(String exchange, String pair, Context context) { + new Thread(() -> { + try { + JsonObject result = toggleCleanup(exchange, pair, true); + new Handler(Looper.getMainLooper()).post(() -> WorkerInterface.showToggleDialog(result, context)); + } catch (IOException e) { + e.printStackTrace(); + new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(context, "Failed to toggle cleanup", Toast.LENGTH_SHORT).show()); + } + }).start(); + } + + public static void sendToggleLastCall(String exchange, String pair, Context context) { + new Thread(() -> { + try { + JsonObject result = toggleLastCall(exchange, pair, true); + new Handler(Looper.getMainLooper()).post(() -> WorkerInterface.showToggleDialog(result, context)); + } catch (IOException e) { + e.printStackTrace(); + new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(context, "Failed to toggle last call", Toast.LENGTH_SHORT).show()); + } + }).start(); + } + + + + public static void fetchWorkerStats(String exchange, String pair, Context context) { new Thread(() -> { try { diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java index 3ef22a6..9ac032c 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java @@ -28,6 +28,8 @@ import com.example.dcav2gui.ui.exchanges.adapters.WorkerCardAdapter; import java.io.IOException; import java.util.List; +import kotlinx.coroutines.scheduling.CoroutineScheduler; + public class BinanceFragment extends Fragment implements WorkerCardAdapter.OnCardLongClickListener { @@ -88,16 +90,16 @@ public class BinanceFragment extends Fragment implements WorkerCardAdapter.OnCar System.err.println(pair + " Import option clicked"); return true; } else if (item.getItemId() == R.id.togglePause) { - System.err.println(pair + " Toggle pause option clicked"); + WorkerInterface.sendTogglePause("binance", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleAutoswitch) { - System.err.println(pair + " Toggle autoswitch option clicked"); + WorkerInterface.sendToggleAutoswitch("binance", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleCleanup) { - System.err.println(pair + " Toggle cleanup option clicked"); + WorkerInterface.sendToggleCleanup("binance", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleLastCall) { - System.err.println(pair + " Toggle last call option clicked"); + WorkerInterface.sendToggleLastCall("binance", pair, getContext()); return true; } else if (item.getItemId() == R.id.switchToLong) { System.err.println(pair + " Switch to long option clicked"); diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java index d8b68fe..4930f1c 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java @@ -81,16 +81,16 @@ public class GateioFragment extends Fragment implements WorkerCardAdapter.OnCard System.err.println(pair + " Import option clicked"); return true; } else if (item.getItemId() == R.id.togglePause) { - System.err.println(pair + " Toggle pause option clicked"); + WorkerInterface.sendTogglePause("gateio", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleAutoswitch) { - System.err.println(pair + " Toggle autoswitch option clicked"); + WorkerInterface.sendToggleAutoswitch("gateio", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleCleanup) { - System.err.println(pair + " Toggle cleanup option clicked"); + WorkerInterface.sendToggleCleanup("gateio", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleLastCall) { - System.err.println(pair + " Toggle last call option clicked"); + WorkerInterface.sendToggleLastCall("gateio", pair, getContext()); return true; } else if (item.getItemId() == R.id.switchToLong) { System.err.println(pair + " Switch to long option clicked"); diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java index ef72122..35a3e58 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java @@ -81,16 +81,16 @@ public class KucoinFragment extends Fragment implements WorkerCardAdapter.OnCard System.err.println(pair + " Import option clicked"); return true; } else if (item.getItemId() == R.id.togglePause) { - System.err.println(pair + " Toggle pause option clicked"); + WorkerInterface.sendTogglePause("kucoin", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleAutoswitch) { - System.err.println(pair + " Toggle autoswitch option clicked"); + WorkerInterface.sendToggleAutoswitch("kucoin", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleCleanup) { - System.err.println(pair + " Toggle cleanup option clicked"); + WorkerInterface.sendToggleCleanup("kucoin", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleLastCall) { - System.err.println(pair + " Toggle last call option clicked"); + WorkerInterface.sendToggleLastCall("kucoin", pair, getContext()); return true; } else if (item.getItemId() == R.id.switchToLong) { System.err.println(pair + " Switch to long option clicked"); diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java index e372768..1e28157 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java @@ -81,16 +81,16 @@ public class OkxFragment extends Fragment implements WorkerCardAdapter.OnCardLon System.err.println(pair + " Import option clicked"); return true; } else if (item.getItemId() == R.id.togglePause) { - System.err.println(pair + " Toggle pause option clicked"); + WorkerInterface.sendTogglePause("okex", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleAutoswitch) { - System.err.println(pair + " Toggle autoswitch option clicked"); + WorkerInterface.sendToggleAutoswitch("okex", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleCleanup) { - System.err.println(pair + " Toggle cleanup option clicked"); + WorkerInterface.sendToggleCleanup("okex", pair, getContext()); return true; } else if (item.getItemId() == R.id.toggleLastCall) { - System.err.println(pair + " Toggle last call option clicked"); + WorkerInterface.sendToggleLastCall("okex", pair, getContext()); return true; } else if (item.getItemId() == R.id.switchToLong) { System.err.println(pair + " Switch to long option clicked");