diff --git a/graphenej/src/main/java/cy/agorise/graphenej/RPC.java b/graphenej/src/main/java/cy/agorise/graphenej/RPC.java index 028130c..c5c68d4 100644 --- a/graphenej/src/main/java/cy/agorise/graphenej/RPC.java +++ b/graphenej/src/main/java/cy/agorise/graphenej/RPC.java @@ -25,7 +25,7 @@ public class RPC { public static final String CALL_LOOKUP_ACCOUNTS = "lookup_accounts"; public static final String CALL_LIST_ASSETS = "list_assets"; public static final String CALL_GET_OBJECTS = "get_objects"; - public static final String GET_ACCOUNT_BALANCES = "get_account_balances"; + public static final String CALL_GET_ACCOUNT_BALANCES = "get_account_balances"; public static final String CALL_LOOKUP_ASSET_SYMBOLS = "lookup_asset_symbols"; public static final String CALL_GET_BLOCK_HEADER = "get_block_header"; public static final String CALL_GET_BLOCK = "get_block"; diff --git a/graphenej/src/main/java/cy/agorise/graphenej/api/GetAccountBalances.java b/graphenej/src/main/java/cy/agorise/graphenej/api/GetAccountBalances.java index 5d65de3..15ed08f 100644 --- a/graphenej/src/main/java/cy/agorise/graphenej/api/GetAccountBalances.java +++ b/graphenej/src/main/java/cy/agorise/graphenej/api/GetAccountBalances.java @@ -79,7 +79,7 @@ public class GetAccountBalances extends BaseGrapheneHandler { } params.add(mUserAccount.getObjectId()); params.add(assetList); - ApiCall apiCall = new ApiCall(0, RPC.GET_ACCOUNT_BALANCES, params, RPC.VERSION, requestId); + ApiCall apiCall = new ApiCall(0, RPC.CALL_GET_ACCOUNT_BALANCES, params, RPC.VERSION, requestId); websocket.sendText(apiCall.toJsonString()); } 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 1c36f8a..8d704ee 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 @@ -19,6 +19,7 @@ import cy.agorise.graphenej.LimitOrder; import cy.agorise.graphenej.Memo; import cy.agorise.graphenej.Transaction; import cy.agorise.graphenej.UserAccount; +import cy.agorise.graphenej.api.calls.GetAccountBalances; import cy.agorise.graphenej.api.calls.GetAccountByName; import cy.agorise.graphenej.api.calls.GetAccountHistoryByOperations; import cy.agorise.graphenej.api.calls.GetAccounts; @@ -185,6 +186,13 @@ public class DeserializationMap { .registerTypeAdapter(UserAccount.class, new UserAccount.UserAccountSimpleDeserializer()) .create(); mGsonMap.put(GetKeyReferences.class, getKeyReferencesGson); + + // GetAccountBalances + mClassMap.put(GetAccountBalances.class, List.class); + Gson getAccountBalancesGson = new GsonBuilder() + .registerTypeAdapter(AssetAmount.class, new AssetAmount.AssetAmountDeserializer()) + .create(); + mGsonMap.put(GetAccountBalances.class, getAccountBalancesGson); } 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 9caea18..20315a5 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 @@ -32,6 +32,7 @@ import cy.agorise.graphenej.UserAccount; import cy.agorise.graphenej.api.ApiAccess; import cy.agorise.graphenej.api.ConnectionStatusUpdate; import cy.agorise.graphenej.api.calls.ApiCallable; +import cy.agorise.graphenej.api.calls.GetAccountBalances; import cy.agorise.graphenej.api.calls.GetAccounts; import cy.agorise.graphenej.api.calls.GetFullAccounts; import cy.agorise.graphenej.api.calls.GetKeyReferences; @@ -558,7 +559,10 @@ public class NetworkService extends Service { } else if(requestClass == GetKeyReferences.class){ Type GetKeyReferencesResponse = new TypeToken>>>(){}.getType(); parsedResponse = gson.fromJson(text, GetKeyReferencesResponse); - } else { + } else if(requestClass == GetAccountBalances.class){ + Type GetAccountBalancesResponse = new TypeToken>>(){}.getType(); + parsedResponse = gson.fromJson(text, GetAccountBalancesResponse); + }else { Log.w(TAG,"Unknown request class"); } }else{ diff --git a/graphenej/src/main/java/cy/agorise/graphenej/api/calls/GetAccountBalances.java b/graphenej/src/main/java/cy/agorise/graphenej/api/calls/GetAccountBalances.java new file mode 100644 index 0000000..4244519 --- /dev/null +++ b/graphenej/src/main/java/cy/agorise/graphenej/api/calls/GetAccountBalances.java @@ -0,0 +1,42 @@ +package cy.agorise.graphenej.api.calls; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import cy.agorise.graphenej.Asset; +import cy.agorise.graphenej.RPC; +import cy.agorise.graphenej.UserAccount; +import cy.agorise.graphenej.api.ApiAccess; +import cy.agorise.graphenej.models.ApiCall; + +/** + * Wrapper around the 'get_account_balances' API call. + * + * @see get_account_balances API doc + */ +public class GetAccountBalances implements ApiCallable { + public static final int REQUIRED_API = ApiAccess.API_NONE; + + private UserAccount mUserAccount; + private List mAssetList; + + public GetAccountBalances(UserAccount userAccount, List assets){ + mUserAccount = userAccount; + mAssetList = assets; + } + + @Override + public ApiCall toApiCall(int apiId, long sequenceId) { + ArrayList params = new ArrayList<>(); + ArrayList assetList = new ArrayList<>(); + if(mAssetList != null){ + for(Asset asset : mAssetList){ + assetList.add(asset.getObjectId()); + } + } + params.add(mUserAccount.getObjectId()); + params.add(assetList); + return new ApiCall(apiId, RPC.CALL_GET_ACCOUNT_BALANCES, 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 245e04c..f2a9638 100644 --- a/sample/src/main/java/cy/agorise/labs/sample/CallsActivity.java +++ b/sample/src/main/java/cy/agorise/labs/sample/CallsActivity.java @@ -49,7 +49,8 @@ public class CallsActivity extends AppCompatActivity { RPC.CALL_GET_FULL_ACCOUNTS, RPC.CALL_SET_SUBSCRIBE_CALLBACK, RPC.CALL_GET_DYNAMIC_GLOBAL_PROPERTIES, - RPC.CALL_GET_KEY_REFERENCES + RPC.CALL_GET_KEY_REFERENCES, + RPC.CALL_GET_ACCOUNT_BALANCES }; @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 54b0fe5..8a47906 100644 --- a/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java +++ b/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java @@ -19,10 +19,13 @@ import com.google.gson.GsonBuilder; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import cy.agorise.graphenej.Asset; +import cy.agorise.graphenej.AssetAmount; import cy.agorise.graphenej.Memo; import cy.agorise.graphenej.OperationType; import cy.agorise.graphenej.RPC; @@ -30,6 +33,7 @@ import cy.agorise.graphenej.UserAccount; import cy.agorise.graphenej.api.ConnectionStatusUpdate; import cy.agorise.graphenej.api.android.DeserializationMap; import cy.agorise.graphenej.api.android.RxBus; +import cy.agorise.graphenej.api.calls.GetAccountBalances; import cy.agorise.graphenej.api.calls.GetAccountByName; import cy.agorise.graphenej.api.calls.GetAccountHistoryByOperations; import cy.agorise.graphenej.api.calls.GetAccounts; @@ -144,6 +148,8 @@ public class PerformCallActivity extends ConnectedActivity { case RPC.CALL_GET_KEY_REFERENCES: setupGetKeyReferences(); break; + case RPC.CALL_GET_ACCOUNT_BALANCES: + setupGetAccountBalances(); default: Log.d(TAG,"Default called"); } @@ -269,6 +275,12 @@ public class PerformCallActivity extends ConnectedActivity { param1.setText("BTS8a7XJ94u1traaLGFHw6NgpvUaxmbG4MyCcZC1hBj9HCBuMEwXP"); } + private void setupGetAccountBalances(){ + requiredInput(2); + param1.setHint(R.string.get_account_balances_arg1); + param2.setHint(R.string.get_account_balances_arg2); + } + private void requiredInput(int inputCount){ if(inputCount == 0){ mParam1View.setVisibility(View.GONE); @@ -340,6 +352,8 @@ public class PerformCallActivity extends ConnectedActivity { case RPC.CALL_GET_KEY_REFERENCES: getKeyReferences(); break; + case RPC.CALL_GET_ACCOUNT_BALANCES: + getAccountBalances(); default: Log.d(TAG,"Default called"); } @@ -440,6 +454,17 @@ public class PerformCallActivity extends ConnectedActivity { } } + private void getAccountBalances(){ + String accountId = param1.getText().toString(); + UserAccount userAccount = new UserAccount(accountId); + String assets = param2.getText().toString(); + String[] assetArray = assets.split(","); + List assetList = new ArrayList(); + for(String id : assetArray) assetList.add(new Asset(id)); + long id = mNetworkService.sendMessage(new GetAccountBalances(userAccount, assetList), GetAccountBalances.REQUIRED_API); + responseMap.put(id, mRPC); + } + /** * Internal method that will decide what to do with each JSON-RPC response * @@ -450,6 +475,12 @@ public class PerformCallActivity extends ConnectedActivity { if(responseMap.get(id) != null){ String request = responseMap.get(id); switch(request){ + case RPC.CALL_GET_ACCOUNT_BALANCES: + List balances = (List) response.result; + StringBuilder builder = new StringBuilder(); + for(AssetAmount assetAmount : balances) builder.append(assetAmount).append("\n"); + mResponseView.setText(builder.toString()); + break; case RPC.CALL_GET_ACCOUNTS: case RPC.CALL_GET_BLOCK: case RPC.CALL_GET_BLOCK_HEADER: diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml index 948c99c..d660aaa 100644 --- a/sample/src/main/res/values/strings.xml +++ b/sample/src/main/res/values/strings.xml @@ -54,4 +54,8 @@ Account names or ids, separated by commas + + + User account + Comma-separated list of assets