diff --git a/graphenej/src/main/java/cy/agorise/graphenej/api/android/DeserializationMap.java b/graphenej/src/main/java/cy/agorise/graphenej/api/android/DeserializationMap.java index cefdb56..c1bf4d6 100644 --- a/graphenej/src/main/java/cy/agorise/graphenej/api/android/DeserializationMap.java +++ b/graphenej/src/main/java/cy/agorise/graphenej/api/android/DeserializationMap.java @@ -26,6 +26,7 @@ import cy.agorise.graphenej.api.calls.GetBlock; import cy.agorise.graphenej.api.calls.GetBlockHeader; import cy.agorise.graphenej.api.calls.GetDynamicGlobalProperties; import cy.agorise.graphenej.api.calls.GetFullAccounts; +import cy.agorise.graphenej.api.calls.GetKeyReferences; import cy.agorise.graphenej.api.calls.GetLimitOrders; import cy.agorise.graphenej.api.calls.GetMarketHistory; import cy.agorise.graphenej.api.calls.GetObjects; @@ -178,6 +179,13 @@ public class DeserializationMap { .registerTypeAdapter(DynamicGlobalProperties.class, new DynamicGlobalProperties.DynamicGlobalPropertiesDeserializer()) .create(); mGsonMap.put(GetDynamicGlobalProperties.class, getDynamicGlobalPropertiesGson); + + // GetKeyReferences + mClassMap.put(GetKeyReferences.class, List.class); + Gson getKeyReferencesGson = new GsonBuilder() + .registerTypeAdapter(UserAccount.class, new UserAccount.UserAccountSimpleDeserializer()) + .create(); + mGsonMap.put(GetKeyReferences.class, getKeyReferencesGson); } public Class getReceivedClass(Class _class){ diff --git a/graphenej/src/main/java/cy/agorise/graphenej/api/android/NetworkService.java b/graphenej/src/main/java/cy/agorise/graphenej/api/android/NetworkService.java index 547a374..06f791c 100644 --- a/graphenej/src/main/java/cy/agorise/graphenej/api/android/NetworkService.java +++ b/graphenej/src/main/java/cy/agorise/graphenej/api/android/NetworkService.java @@ -33,6 +33,7 @@ import cy.agorise.graphenej.api.bitshares.Nodes; import cy.agorise.graphenej.api.calls.ApiCallable; import cy.agorise.graphenej.api.calls.GetAccounts; import cy.agorise.graphenej.api.calls.GetFullAccounts; +import cy.agorise.graphenej.api.calls.GetKeyReferences; import cy.agorise.graphenej.api.calls.GetLimitOrders; import cy.agorise.graphenej.api.calls.GetMarketHistory; import cy.agorise.graphenej.api.calls.GetObjects; @@ -490,6 +491,9 @@ public class NetworkService extends Service { } else if (requestClass == GetFullAccounts.class) { Type GetFullAccountsResponse = new TypeToken>>(){}.getType(); parsedResponse = gson.fromJson(text, GetFullAccountsResponse); + } else if(requestClass == GetKeyReferences.class){ + Type GetKeyReferencesResponse = new TypeToken>>>(){}.getType(); + parsedResponse = gson.fromJson(text, GetKeyReferencesResponse); } else { Log.w(TAG,"Unknown request class"); } diff --git a/graphenej/src/main/java/cy/agorise/graphenej/api/calls/GetKeyReferences.java b/graphenej/src/main/java/cy/agorise/graphenej/api/calls/GetKeyReferences.java new file mode 100644 index 0000000..e0271af --- /dev/null +++ b/graphenej/src/main/java/cy/agorise/graphenej/api/calls/GetKeyReferences.java @@ -0,0 +1,43 @@ +package cy.agorise.graphenej.api.calls; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import cy.agorise.graphenej.Address; +import cy.agorise.graphenej.RPC; +import cy.agorise.graphenej.api.ApiAccess; +import cy.agorise.graphenej.errors.MalformedAddressException; +import cy.agorise.graphenej.models.ApiCall; + +/** + * Wrapper around the 'get_key_references' API call. + */ +public class GetKeyReferences implements ApiCallable { + public static final int REQUIRED_API = ApiAccess.API_NONE; + + private List
addresses = new ArrayList<>(); + + public GetKeyReferences(String addr) throws MalformedAddressException, IllegalArgumentException { + this(new Address(addr)); + } + + public GetKeyReferences(Address address){ + addresses.add(address); + } + + public GetKeyReferences(List
addressList){ + addresses.addAll(addressList); + } + + @Override + public ApiCall toApiCall(int apiId, long sequenceId) { + ArrayList inner = new ArrayList(); + for(Address addr : addresses){ + inner.add(addr.toString()); + } + ArrayList params = new ArrayList<>(); + params.add(inner); + return new ApiCall(apiId, RPC.CALL_GET_KEY_REFERENCES, params, RPC.VERSION, sequenceId); + } +} diff --git a/sample/src/main/java/cy/agorise/labs/sample/CallsActivity.java b/sample/src/main/java/cy/agorise/labs/sample/CallsActivity.java index a103e43..245e04c 100644 --- a/sample/src/main/java/cy/agorise/labs/sample/CallsActivity.java +++ b/sample/src/main/java/cy/agorise/labs/sample/CallsActivity.java @@ -48,7 +48,8 @@ public class CallsActivity extends AppCompatActivity { RPC.CALL_GET_ACCOUNT_HISTORY_BY_OPERATIONS, RPC.CALL_GET_FULL_ACCOUNTS, RPC.CALL_SET_SUBSCRIBE_CALLBACK, - RPC.CALL_GET_DYNAMIC_GLOBAL_PROPERTIES + RPC.CALL_GET_DYNAMIC_GLOBAL_PROPERTIES, + RPC.CALL_GET_KEY_REFERENCES }; @NonNull diff --git a/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java b/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java index 9a4146c..54b0fe5 100644 --- a/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java +++ b/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java @@ -23,6 +23,7 @@ import java.util.HashMap; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import cy.agorise.graphenej.Memo; import cy.agorise.graphenej.OperationType; import cy.agorise.graphenej.RPC; import cy.agorise.graphenej.UserAccount; @@ -35,11 +36,12 @@ import cy.agorise.graphenej.api.calls.GetAccounts; import cy.agorise.graphenej.api.calls.GetBlock; import cy.agorise.graphenej.api.calls.GetDynamicGlobalProperties; import cy.agorise.graphenej.api.calls.GetFullAccounts; +import cy.agorise.graphenej.api.calls.GetKeyReferences; import cy.agorise.graphenej.api.calls.GetLimitOrders; import cy.agorise.graphenej.api.calls.GetObjects; import cy.agorise.graphenej.api.calls.ListAssets; +import cy.agorise.graphenej.errors.MalformedAddressException; import cy.agorise.graphenej.models.JsonRpcResponse; -import cy.agorise.graphenej.Memo; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.functions.Consumer; @@ -138,6 +140,10 @@ public class PerformCallActivity extends ConnectedActivity { break; case RPC.CALL_GET_DYNAMIC_GLOBAL_PROPERTIES: setupGetDynamicGlobalProperties(); + break; + case RPC.CALL_GET_KEY_REFERENCES: + setupGetKeyReferences(); + break; default: Log.d(TAG,"Default called"); } @@ -257,6 +263,12 @@ public class PerformCallActivity extends ConnectedActivity { requiredInput(0); } + private void setupGetKeyReferences(){ + requiredInput(1); + // Test address + param1.setText("BTS8a7XJ94u1traaLGFHw6NgpvUaxmbG4MyCcZC1hBj9HCBuMEwXP"); + } + private void requiredInput(int inputCount){ if(inputCount == 0){ mParam1View.setVisibility(View.GONE); @@ -324,6 +336,10 @@ public class PerformCallActivity extends ConnectedActivity { break; case RPC.CALL_GET_DYNAMIC_GLOBAL_PROPERTIES: getDynamicGlobalProperties(); + break; + case RPC.CALL_GET_KEY_REFERENCES: + getKeyReferences(); + break; default: Log.d(TAG,"Default called"); } @@ -411,6 +427,19 @@ public class PerformCallActivity extends ConnectedActivity { responseMap.put(id, mRPC); } + private void getKeyReferences(){ + String address = param1.getText().toString(); + long id = 0; + try { + id = mNetworkService.sendMessage(new GetKeyReferences(address), GetKeyReferences.REQUIRED_API); + responseMap.put(id, mRPC); + } catch (MalformedAddressException | IllegalArgumentException e) { + Log.e(TAG,"MalformedAddressException. Msg: "+e.getMessage()); + Toast.makeText(this, "Malformed address exception", Toast.LENGTH_SHORT).show(); + param1.setText(""); + } + } + /** * Internal method that will decide what to do with each JSON-RPC response * @@ -435,6 +464,7 @@ public class PerformCallActivity extends ConnectedActivity { case RPC.CALL_GET_ACCOUNT_HISTORY_BY_OPERATIONS: case RPC.CALL_GET_FULL_ACCOUNTS: case RPC.CALL_GET_DYNAMIC_GLOBAL_PROPERTIES: + case RPC.CALL_GET_KEY_REFERENCES: mResponseView.setText(mResponseView.getText() + gson.toJson(response, JsonRpcResponse.class) + "\n"); break; default: