diff --git a/app/src/main/java/com/tangem/data/network/InsightApi.java b/app/src/main/java/com/tangem/data/network/InsightApi.java new file mode 100644 index 0000000000..458199262c --- /dev/null +++ b/app/src/main/java/com/tangem/data/network/InsightApi.java @@ -0,0 +1,30 @@ +package com.tangem.data.network; + +import com.tangem.data.network.model.InsightBody; +import com.tangem.data.network.model.InsightResponse; + +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.Headers; +import retrofit2.http.POST; +import retrofit2.http.Path; +import retrofit2.http.Query; + +public interface InsightApi { + @GET(ServerApiInsight.INSIGHT_ADDRESS) + Call insightAddress(@Path("address") String address); + + @GET(ServerApiInsight.INSIGHT_UNSPENT_OUTPUTS) + Call insightUnspent(@Path("address") String address); + + @GET(ServerApiInsight.INSIGHT_TRANSACTION) + Call insightTransaction(@Path("transaction") String transaction); + + @GET(ServerApiInsight.INSIGHT_FEE) + Call insightFee(@Query("nbBlocks") int nbBlocks); + + @Headers("Content-Type: application/json") + @POST(ServerApiInsight.INSIGHT_SEND) + Call insightSend(@Body InsightBody body ); +} diff --git a/app/src/main/java/com/tangem/data/network/Server.java b/app/src/main/java/com/tangem/data/network/Server.java index 7e8bc996aa..b6f74767ef 100644 --- a/app/src/main/java/com/tangem/data/network/Server.java +++ b/app/src/main/java/com/tangem/data/network/Server.java @@ -44,5 +44,4 @@ public class Server { static final String N_6 = URL_ESTIMATEFEE + "n/6"; } } - } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/data/network/ServerApiInsight.java b/app/src/main/java/com/tangem/data/network/ServerApiInsight.java new file mode 100644 index 0000000000..e43efdb6d9 --- /dev/null +++ b/app/src/main/java/com/tangem/data/network/ServerApiInsight.java @@ -0,0 +1,102 @@ +package com.tangem.data.network; + +import android.support.annotation.NonNull; +import android.util.Log; + +import com.tangem.App; +import com.tangem.data.network.model.InsightBody; +import com.tangem.data.network.model.InsightResponse; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class ServerApiInsight { + private static String TAG = ServerApiInsight.class.getSimpleName(); + + public static final String INSIGHT_ADDRESS = "/addr/{address}"; + public static final String INSIGHT_UNSPENT_OUTPUTS = "/addr/{address}/utxo"; + public static final String INSIGHT_TRANSACTION = "/tx/{transaction}"; + public static final String INSIGHT_FEE = "/utils/estimatefee"; + public static final String INSIGHT_SEND = "/tx/send"; + + private int requestsCount=0; + + public boolean isRequestsSequenceCompleted() { + Log.i(TAG, String.format("isRequestsSequenceCompleted: %s (%d requests left)", String.valueOf(requestsCount <= 0), requestsCount)); + return requestsCount <= 0; + } + + private InsightBodyListener insightBodyListener; + + public interface InsightBodyListener { + void onSuccess(String method, InsightResponse insightResponse); + + void onFail(String method, String message); + } + + public void setInsightResponse(InsightBodyListener listener) { + insightBodyListener = listener; + } + + public void insight(String method, String wallet, String tx, int nbBlocks) { + requestsCount++; + String insightURL = "http://130.185.109.17:3001/insight-api"; //TODO: make random selection + + Retrofit retrofitInsight = new Retrofit.Builder() //TODO: check + .baseUrl(insightURL) + .addConverterFactory(GsonConverterFactory.create()) + .build(); + +// InsightApi insightApi = App.getNetworkComponent().getRetrofitInsight(insightURL).create(InsightApi.class); + InsightApi insightApi = retrofitInsight.create(InsightApi.class); + Call call; + + switch (method) { + case INSIGHT_ADDRESS: + call = insightApi.insightAddress(wallet); + break; + + case INSIGHT_UNSPENT_OUTPUTS: + call = insightApi.insightUnspent(wallet); + break; + + case INSIGHT_TRANSACTION: + call = insightApi.insightTransaction(tx); + break; + + case INSIGHT_FEE: + call = insightApi.insightFee(nbBlocks); + break; + + case INSIGHT_SEND: + call = insightApi.insightSend(new InsightBody(tx)); + break; + + default: + call = insightApi.insightAddress(wallet); + break; + } + call.enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + if (response.code() == 200) { + requestsCount--; + insightBodyListener.onSuccess(method, response.body()); + Log.i(TAG, "insight " + method + " onResponse " + response.code()); + } else { + insightBodyListener.onFail(method, String.valueOf(response.code())); + Log.e(TAG, "insight " + method + " onResponse " + response.code()); + } + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + insightBodyListener.onFail(method, String.valueOf(t.getMessage())); + Log.e(TAG, "insight " + method + " onFailure " + t.getMessage()); + } + }); + } +} diff --git a/app/src/main/java/com/tangem/data/network/model/InsightBody.java b/app/src/main/java/com/tangem/data/network/model/InsightBody.java new file mode 100644 index 0000000000..4d8951adfa --- /dev/null +++ b/app/src/main/java/com/tangem/data/network/model/InsightBody.java @@ -0,0 +1,9 @@ +package com.tangem.data.network.model; + +public class InsightBody { + private String rawtx; + + public InsightBody(String rawtx){ + this.rawtx = rawtx; + } +} diff --git a/app/src/main/java/com/tangem/data/network/model/InsightResponse.kt b/app/src/main/java/com/tangem/data/network/model/InsightResponse.kt new file mode 100644 index 0000000000..8ac109c54a --- /dev/null +++ b/app/src/main/java/com/tangem/data/network/model/InsightResponse.kt @@ -0,0 +1,17 @@ +package com.tangem.data.network.model + +import com.google.gson.annotations.SerializedName + +data class InsightResponse( + @SerializedName("jsonrpc") + var jsonrpc: String = "", + + @SerializedName("id") + var id: Int? = null, + + @SerializedName("result") + var result: String = "", + + @SerializedName("error") + var error: String = "" +) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/di/NetworkComponent.java b/app/src/main/java/com/tangem/di/NetworkComponent.java index 4de9763426..2d269162e8 100644 --- a/app/src/main/java/com/tangem/di/NetworkComponent.java +++ b/app/src/main/java/com/tangem/di/NetworkComponent.java @@ -26,6 +26,9 @@ public interface NetworkComponent { @Named(Server.ApiUpdateVersion.URL_UPDATE_VERSION) Retrofit getRetrofitGithubusercontent(); +// @Named("Insight") //TODO:check +// Retrofit getRetrofitInsight(String insightURL); + @Named("socket") Socket getSocket(); diff --git a/app/src/main/java/com/tangem/di/NetworkModule.java b/app/src/main/java/com/tangem/di/NetworkModule.java index 86e669389e..b61754ffd6 100644 --- a/app/src/main/java/com/tangem/di/NetworkModule.java +++ b/app/src/main/java/com/tangem/di/NetworkModule.java @@ -31,6 +31,16 @@ class NetworkModule { .build(); } +// //@Singleton // TODO:check +// @Provides +// @Named("Insight") +// Retrofit provideRetrofitInsight(String insightURL) { +// return new Retrofit.Builder() +// .baseUrl(insightURL) +// .addConverterFactory(GsonConverterFactory.create()) +// .build(); +// } + @Singleton @Provides @Named(Server.ApiEstimatefee.URL_ESTIMATEFEE) diff --git a/tangemcard-android/src/main/res/drawable/card_ru031.png b/tangemcard-android/src/main/res/drawable/card_ru031.png new file mode 100644 index 0000000000..8533af69ab Binary files /dev/null and b/tangemcard-android/src/main/res/drawable/card_ru031.png differ diff --git a/tangemcard-android/src/main/res/drawable/card_ru032.png b/tangemcard-android/src/main/res/drawable/card_ru032.png new file mode 100644 index 0000000000..9e5d5949e4 Binary files /dev/null and b/tangemcard-android/src/main/res/drawable/card_ru032.png differ diff --git a/tangemserver-android/src/main/java/com/tangem/tangemserver/android/data/LocalStorage.kt b/tangemserver-android/src/main/java/com/tangem/tangemserver/android/data/LocalStorage.kt index 426ac14e0e..c437f13f27 100644 --- a/tangemserver-android/src/main/java/com/tangem/tangemserver/android/data/LocalStorage.kt +++ b/tangemserver-android/src/main/java/com/tangem/tangemserver/android/data/LocalStorage.kt @@ -67,6 +67,8 @@ class LocalStorage putResourceArtworkToCatalog(R.drawable.card_ru028, true) putResourceArtworkToCatalog(R.drawable.card_ru029, true) putResourceArtworkToCatalog(R.drawable.card_ru030, true) + putResourceArtworkToCatalog(R.drawable.card_ru031, true) + putResourceArtworkToCatalog(R.drawable.card_ru032, true) } if (batchesFile.exists()) { try { @@ -226,6 +228,8 @@ class LocalStorage card.batch == "001F" -> R.drawable.card_ru028 card.batch == "0018" -> R.drawable.card_ru029 card.batch == "0020" -> R.drawable.card_ru030 + card.batch == "0021" -> R.drawable.card_ru031 + card.batch == "0022" -> R.drawable.card_ru032 else -> null }