diff --git a/app/src/main/java/com/tangem/data/network/GsonRequest.java b/app/src/main/java/com/tangem/data/network/GsonRequest.java new file mode 100644 index 0000000000..184a720900 --- /dev/null +++ b/app/src/main/java/com/tangem/data/network/GsonRequest.java @@ -0,0 +1,98 @@ +package com.tangem.data.network; + +import android.util.Log; + +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.ParseError; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.Response.ErrorListener; +import com.android.volley.Response.Listener; +import com.android.volley.toolbox.HttpHeaderParser; +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; + +import java.io.UnsupportedEncodingException; +import java.util.Map; + +/** + * Volley adapter for JSON requests with POST method that will be parsed into Java objects by Gson. + */ +public class GsonRequest extends Request { + public static final String TAG = "api." + GsonRequest.class.getSimpleName(); + private Gson mGson = new Gson(); + private Class clazz; + private Map headers; + private Map params; + private Listener listener; + + /** + * Make a GET request and return a parsed object from JSON. + * + * @param url URL of the request to make + * @param clazz Relevant class object, for Gson's reflection + */ + public GsonRequest(int method, + String url, + Class clazz, + Listener listener, + ErrorListener errorListener) { + super(method, url, errorListener); + this.clazz = clazz; + this.listener = listener; + mGson = new Gson(); + } + + /** + * Make a POST request and return a parsed object from JSON. + * + * @param url URL of the request to make + * @param clazz Relevant class object, for Gson's reflection + */ + public GsonRequest(int method, + String url, + Class clazz, + Map params, + Listener listener, + ErrorListener errorListener) { + + super(method, url, errorListener); + this.clazz = clazz; + this.params = params; + this.listener = listener; + this.headers = null; + mGson = new Gson(); + } + + @Override + public Map getHeaders() throws AuthFailureError { + return headers != null ? headers : super.getHeaders(); + } + + @Override + protected Map getParams() throws AuthFailureError { + return params; + } + + @Override + protected void deliverResponse(T response) { + listener.onResponse(response); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + try { + String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + Log.i(TAG, (json)); + return Response.success(mGson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); + } catch (UnsupportedEncodingException e) { + Log.e(TAG, "UnsupportedEncodingException"); + return Response.error(new ParseError(e)); + } catch (JsonSyntaxException e) { + Log.e(TAG, "JsonSyntaxException"); + return Response.error(new ParseError(e)); + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/data/network/VolleyHelper.kt b/app/src/main/java/com/tangem/data/network/VolleyHelper.kt index 8c040a6be6..f50451c452 100644 --- a/app/src/main/java/com/tangem/data/network/VolleyHelper.kt +++ b/app/src/main/java/com/tangem/data/network/VolleyHelper.kt @@ -3,18 +3,21 @@ package com.tangem.data.network import android.content.Context import android.content.Intent import android.support.v7.app.AlertDialog +import android.util.Log import com.android.volley.AuthFailureError import com.android.volley.DefaultRetryPolicy import com.android.volley.Request +import com.android.volley.Response import com.android.volley.toolbox.StringRequest import com.google.gson.GsonBuilder import com.google.gson.JsonParser import com.tangem.AppController +import com.tangem.presentation.fragment.LoadedWallet import com.tangem.wallet.R class VolleyHelper { - fun doRequest(context: Context, url: String, params: Map) { + fun doRequestDebug(context: Context, url: String, params: Map) { val stringRequest = object : StringRequest(Request.Method.POST, url, { response -> val data = GsonBuilder().setPrettyPrinting().create().toJson(JsonParser().parse(response)) @@ -51,4 +54,28 @@ class VolleyHelper { AppController.getInstance().addToRequestQueue(stringRequest) } + fun doRequestString(context: Context, url: String, params: Map) { + val stringRequest = object : StringRequest(Request.Method.POST, url, + Response.Listener { response -> +// val json = String(response) + Log.i(LoadedWallet.TAG, response) + }, + Response.ErrorListener { "That didn't work!" }) { + + + @Throws(AuthFailureError::class) + override fun getHeaders(): Map { + return Server.getHeader() + } + + @Throws(AuthFailureError::class) + override fun getParams(): Map { + return params + } + } + + stringRequest.retryPolicy = DefaultRetryPolicy(30000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT) + AppController.getInstance().addToRequestQueue(stringRequest) + } + } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/VerifyCardActivity.java b/app/src/main/java/com/tangem/presentation/activity/VerifyCardActivity.java deleted file mode 100644 index bcfeb84ae8..0000000000 --- a/app/src/main/java/com/tangem/presentation/activity/VerifyCardActivity.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.tangem.presentation.activity; - -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; - -import com.tangem.presentation.fragment.VerifyCard; -import com.tangem.wallet.R; - -public class VerifyCardActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_verify_card); - MainActivity.commonInit(getApplicationContext()); - } - - - @Override - public void onBackPressed() { - super.onBackPressed(); - VerifyCard verifyCard = (VerifyCard) getSupportFragmentManager().findFragmentById(R.id.verify_card_fragment); - Intent data = verifyCard.prepareResultIntent(); - data.putExtra("modification", "update"); - finish(); - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/VerifyCardActivity.kt b/app/src/main/java/com/tangem/presentation/activity/VerifyCardActivity.kt new file mode 100644 index 0000000000..bd55d9e38a --- /dev/null +++ b/app/src/main/java/com/tangem/presentation/activity/VerifyCardActivity.kt @@ -0,0 +1,25 @@ +package com.tangem.presentation.activity + +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import com.tangem.presentation.fragment.VerifyCard +import com.tangem.wallet.R + +class VerifyCardActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_verify_card) + MainActivity.commonInit(applicationContext) + } + + + override fun onBackPressed() { + super.onBackPressed() + val verifyCard = supportFragmentManager.findFragmentById(R.id.verify_card_fragment) as VerifyCard + val data = verifyCard.prepareResultIntent() + data.putExtra("modification", "update") + finish() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt index 467c6af5d0..c4364f006a 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt @@ -104,7 +104,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific val params = HashMap() params["CID"] = Util.bytesToHex(mCard!!.cid) params["publicKey"] = Util.bytesToHex(mCard!!.cardPublicKey) - VolleyHelper().doRequest(context!!, URL_CARD_VALIDATE, params) + VolleyHelper().doRequestString(context!!, URL_CARD_VALIDATE, params) } override fun onCreate(savedInstanceState: Bundle?) { @@ -112,11 +112,9 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific mNfcManager = NfcManager(activity, this) mCard = TangemCard(activity!!.intent.getStringExtra(TangemCard.EXTRA_CARD)) - mCard!!.LoadFromBundle(activity!!.intent.extras!!.getBundle(TangemCard.EXTRA_CARD)) + mCard!!.LoadFromBundle(activity!!.intent.extras.getBundle(TangemCard.EXTRA_CARD)) lastTag = activity!!.intent.getParcelableExtra(Main.EXTRA_LAST_DISCOVERED_TAG) - - // requestCardValidate(); } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { @@ -186,7 +184,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific intent.addCategory(Intent.CATEGORY_DEFAULT) startActivity(intent) } catch (e: ActivityNotFoundException) { - e.printStackTrace() + Toast.makeText(context, R.string.no_compatible_wallet, Toast.LENGTH_LONG).show() } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a4f686a4b3..c29c62e792 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -89,6 +89,7 @@ The wallet is empty + No compatible wallet installed Not enough funds for transaction fee (gas)! Please wait while previous transaction is confirmed in blockchain Could not obtain all inputs. Swipe down to refresh.