Merge branch 'develop' of github.com:Agorise/graphenej into develop
This commit is contained in:
commit
76713f0623
10 changed files with 101 additions and 7 deletions
|
@ -5,12 +5,11 @@ apply plugin: 'com.android.library'
|
||||||
//apply from: 'maven-push.gradle'
|
//apply from: 'maven-push.gradle'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 24
|
compileSdkVersion 28
|
||||||
buildToolsVersion '28.0.3'
|
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 14
|
minSdkVersion 14
|
||||||
targetSdkVersion 24
|
targetSdkVersion 28
|
||||||
versionCode 12
|
versionCode 12
|
||||||
versionName "0.4.7-alpha3"
|
versionName "0.4.7-alpha3"
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
|
|
|
@ -191,6 +191,11 @@ public class AssetAmount implements ByteSerializable, JsonSerializable {
|
||||||
return jsonAmount;
|
return jsonAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("(asset=%s, amount=%s)", asset.getObjectId(), amount.toString(10));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom serializer used to translate this object into the JSON-formatted entry we need for a transaction.
|
* Custom serializer used to translate this object into the JSON-formatted entry we need for a transaction.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class RPC {
|
||||||
public static final String CALL_LOOKUP_ACCOUNTS = "lookup_accounts";
|
public static final String CALL_LOOKUP_ACCOUNTS = "lookup_accounts";
|
||||||
public static final String CALL_LIST_ASSETS = "list_assets";
|
public static final String CALL_LIST_ASSETS = "list_assets";
|
||||||
public static final String CALL_GET_OBJECTS = "get_objects";
|
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_LOOKUP_ASSET_SYMBOLS = "lookup_asset_symbols";
|
||||||
public static final String CALL_GET_BLOCK_HEADER = "get_block_header";
|
public static final String CALL_GET_BLOCK_HEADER = "get_block_header";
|
||||||
public static final String CALL_GET_BLOCK = "get_block";
|
public static final String CALL_GET_BLOCK = "get_block";
|
||||||
|
|
|
@ -79,7 +79,7 @@ public class GetAccountBalances extends BaseGrapheneHandler {
|
||||||
}
|
}
|
||||||
params.add(mUserAccount.getObjectId());
|
params.add(mUserAccount.getObjectId());
|
||||||
params.add(assetList);
|
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());
|
websocket.sendText(apiCall.toJsonString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ import cy.agorise.graphenej.LimitOrder;
|
||||||
import cy.agorise.graphenej.Memo;
|
import cy.agorise.graphenej.Memo;
|
||||||
import cy.agorise.graphenej.Transaction;
|
import cy.agorise.graphenej.Transaction;
|
||||||
import cy.agorise.graphenej.UserAccount;
|
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.GetAccountByName;
|
||||||
import cy.agorise.graphenej.api.calls.GetAccountHistoryByOperations;
|
import cy.agorise.graphenej.api.calls.GetAccountHistoryByOperations;
|
||||||
import cy.agorise.graphenej.api.calls.GetAccounts;
|
import cy.agorise.graphenej.api.calls.GetAccounts;
|
||||||
|
@ -185,6 +186,13 @@ public class DeserializationMap {
|
||||||
.registerTypeAdapter(UserAccount.class, new UserAccount.UserAccountSimpleDeserializer())
|
.registerTypeAdapter(UserAccount.class, new UserAccount.UserAccountSimpleDeserializer())
|
||||||
.create();
|
.create();
|
||||||
mGsonMap.put(GetKeyReferences.class, getKeyReferencesGson);
|
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){
|
public Class getReceivedClass(Class _class){
|
||||||
|
|
|
@ -32,6 +32,7 @@ import cy.agorise.graphenej.UserAccount;
|
||||||
import cy.agorise.graphenej.api.ApiAccess;
|
import cy.agorise.graphenej.api.ApiAccess;
|
||||||
import cy.agorise.graphenej.api.ConnectionStatusUpdate;
|
import cy.agorise.graphenej.api.ConnectionStatusUpdate;
|
||||||
import cy.agorise.graphenej.api.calls.ApiCallable;
|
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.GetAccounts;
|
||||||
import cy.agorise.graphenej.api.calls.GetFullAccounts;
|
import cy.agorise.graphenej.api.calls.GetFullAccounts;
|
||||||
import cy.agorise.graphenej.api.calls.GetKeyReferences;
|
import cy.agorise.graphenej.api.calls.GetKeyReferences;
|
||||||
|
@ -567,7 +568,10 @@ public class NetworkService extends Service {
|
||||||
} else if(requestClass == GetKeyReferences.class){
|
} else if(requestClass == GetKeyReferences.class){
|
||||||
Type GetKeyReferencesResponse = new TypeToken<JsonRpcResponse<List<List<UserAccount>>>>(){}.getType();
|
Type GetKeyReferencesResponse = new TypeToken<JsonRpcResponse<List<List<UserAccount>>>>(){}.getType();
|
||||||
parsedResponse = gson.fromJson(text, GetKeyReferencesResponse);
|
parsedResponse = gson.fromJson(text, GetKeyReferencesResponse);
|
||||||
} else {
|
} else if(requestClass == GetAccountBalances.class){
|
||||||
|
Type GetAccountBalancesResponse = new TypeToken<JsonRpcResponse<List<AssetAmount>>>(){}.getType();
|
||||||
|
parsedResponse = gson.fromJson(text, GetAccountBalancesResponse);
|
||||||
|
}else {
|
||||||
Log.w(TAG,"Unknown request class");
|
Log.w(TAG,"Unknown request class");
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
|
|
@ -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 <a href="https://goo.gl/faFdey">get_account_balances API doc</a>
|
||||||
|
*/
|
||||||
|
public class GetAccountBalances implements ApiCallable {
|
||||||
|
public static final int REQUIRED_API = ApiAccess.API_NONE;
|
||||||
|
|
||||||
|
private UserAccount mUserAccount;
|
||||||
|
private List<Asset> mAssetList;
|
||||||
|
|
||||||
|
public GetAccountBalances(UserAccount userAccount, List<Asset> assets){
|
||||||
|
mUserAccount = userAccount;
|
||||||
|
mAssetList = assets;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiCall toApiCall(int apiId, long sequenceId) {
|
||||||
|
ArrayList<Serializable> params = new ArrayList<>();
|
||||||
|
ArrayList<Serializable> 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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -49,7 +49,8 @@ public class CallsActivity extends AppCompatActivity {
|
||||||
RPC.CALL_GET_FULL_ACCOUNTS,
|
RPC.CALL_GET_FULL_ACCOUNTS,
|
||||||
RPC.CALL_SET_SUBSCRIBE_CALLBACK,
|
RPC.CALL_SET_SUBSCRIBE_CALLBACK,
|
||||||
RPC.CALL_GET_DYNAMIC_GLOBAL_PROPERTIES,
|
RPC.CALL_GET_DYNAMIC_GLOBAL_PROPERTIES,
|
||||||
RPC.CALL_GET_KEY_REFERENCES
|
RPC.CALL_GET_KEY_REFERENCES,
|
||||||
|
RPC.CALL_GET_ACCOUNT_BALANCES
|
||||||
};
|
};
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|
|
@ -19,10 +19,13 @@ import com.google.gson.GsonBuilder;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import butterknife.OnClick;
|
import butterknife.OnClick;
|
||||||
|
import cy.agorise.graphenej.Asset;
|
||||||
|
import cy.agorise.graphenej.AssetAmount;
|
||||||
import cy.agorise.graphenej.Memo;
|
import cy.agorise.graphenej.Memo;
|
||||||
import cy.agorise.graphenej.OperationType;
|
import cy.agorise.graphenej.OperationType;
|
||||||
import cy.agorise.graphenej.RPC;
|
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.ConnectionStatusUpdate;
|
||||||
import cy.agorise.graphenej.api.android.DeserializationMap;
|
import cy.agorise.graphenej.api.android.DeserializationMap;
|
||||||
import cy.agorise.graphenej.api.android.RxBus;
|
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.GetAccountByName;
|
||||||
import cy.agorise.graphenej.api.calls.GetAccountHistoryByOperations;
|
import cy.agorise.graphenej.api.calls.GetAccountHistoryByOperations;
|
||||||
import cy.agorise.graphenej.api.calls.GetAccounts;
|
import cy.agorise.graphenej.api.calls.GetAccounts;
|
||||||
|
@ -144,6 +148,8 @@ public class PerformCallActivity extends ConnectedActivity {
|
||||||
case RPC.CALL_GET_KEY_REFERENCES:
|
case RPC.CALL_GET_KEY_REFERENCES:
|
||||||
setupGetKeyReferences();
|
setupGetKeyReferences();
|
||||||
break;
|
break;
|
||||||
|
case RPC.CALL_GET_ACCOUNT_BALANCES:
|
||||||
|
setupGetAccountBalances();
|
||||||
default:
|
default:
|
||||||
Log.d(TAG,"Default called");
|
Log.d(TAG,"Default called");
|
||||||
}
|
}
|
||||||
|
@ -269,6 +275,12 @@ public class PerformCallActivity extends ConnectedActivity {
|
||||||
param1.setText("BTS8a7XJ94u1traaLGFHw6NgpvUaxmbG4MyCcZC1hBj9HCBuMEwXP");
|
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){
|
private void requiredInput(int inputCount){
|
||||||
if(inputCount == 0){
|
if(inputCount == 0){
|
||||||
mParam1View.setVisibility(View.GONE);
|
mParam1View.setVisibility(View.GONE);
|
||||||
|
@ -340,6 +352,8 @@ public class PerformCallActivity extends ConnectedActivity {
|
||||||
case RPC.CALL_GET_KEY_REFERENCES:
|
case RPC.CALL_GET_KEY_REFERENCES:
|
||||||
getKeyReferences();
|
getKeyReferences();
|
||||||
break;
|
break;
|
||||||
|
case RPC.CALL_GET_ACCOUNT_BALANCES:
|
||||||
|
getAccountBalances();
|
||||||
default:
|
default:
|
||||||
Log.d(TAG,"Default called");
|
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<Asset> assetList = new ArrayList<Asset>();
|
||||||
|
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
|
* 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){
|
if(responseMap.get(id) != null){
|
||||||
String request = responseMap.get(id);
|
String request = responseMap.get(id);
|
||||||
switch(request){
|
switch(request){
|
||||||
|
case RPC.CALL_GET_ACCOUNT_BALANCES:
|
||||||
|
List<AssetAmount> balances = (List<AssetAmount>) 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_ACCOUNTS:
|
||||||
case RPC.CALL_GET_BLOCK:
|
case RPC.CALL_GET_BLOCK:
|
||||||
case RPC.CALL_GET_BLOCK_HEADER:
|
case RPC.CALL_GET_BLOCK_HEADER:
|
||||||
|
|
|
@ -54,4 +54,8 @@
|
||||||
|
|
||||||
<!-- GetFullAccounts input fields -->
|
<!-- GetFullAccounts input fields -->
|
||||||
<string name="get_full_accounts_arg1">Account names or ids, separated by commas</string>
|
<string name="get_full_accounts_arg1">Account names or ids, separated by commas</string>
|
||||||
|
|
||||||
|
<!-- GetAccountBalances -->
|
||||||
|
<string name="get_account_balances_arg1">User account</string>
|
||||||
|
<string name="get_account_balances_arg2">Comma-separated list of assets</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue