Including usage of the GetAccounts API call using the single service conection in the sample app

This commit is contained in:
Nelson R. Perez 2018-06-04 22:10:55 -05:00
parent aa758a09e0
commit 40222055aa
2 changed files with 75 additions and 9 deletions

View file

@ -13,15 +13,20 @@ import android.widget.TextView;
import com.google.gson.Gson; import com.google.gson.Gson;
import java.util.HashMap;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import cy.agorise.graphenej.UserAccount;
import cy.agorise.graphenej.api.ConnectionStatusUpdate; import cy.agorise.graphenej.api.ConnectionStatusUpdate;
import cy.agorise.graphenej.api.android.NetworkService; import cy.agorise.graphenej.api.android.NetworkService;
import cy.agorise.graphenej.api.android.RxBus; import cy.agorise.graphenej.api.android.RxBus;
import cy.agorise.graphenej.api.calls.GetAccounts;
import cy.agorise.graphenej.api.calls.GetBlock; import cy.agorise.graphenej.api.calls.GetBlock;
import cy.agorise.graphenej.models.JsonRpcResponse; import cy.agorise.graphenej.models.JsonRpcResponse;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer; import io.reactivex.functions.Consumer;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
@ -38,13 +43,20 @@ public class MainActivity extends AppCompatActivity {
private Gson gson = new Gson(); private Gson gson = new Gson();
private Disposable mDisposable;
private HashMap<Integer, Integer> responseMap = new HashMap<>();
private final int GET_BLOCK_RESPONSE = 0;
private final int GET_ACCOUNTS_RESPONSE = 1;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
ButterKnife.bind(this); ButterKnife.bind(this);
RxBus.getBusInstance() mDisposable = RxBus.getBusInstance()
.asFlowable() .asFlowable()
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Object>() { .subscribe(new Consumer<Object>() {
@ -58,16 +70,53 @@ public class MainActivity extends AppCompatActivity {
Log.d(TAG,"Got connection update. Status: "+((ConnectionStatusUpdate)message).getConnectionStatus()); Log.d(TAG,"Got connection update. Status: "+((ConnectionStatusUpdate)message).getConnectionStatus());
mConnectionStatus.setText(((ConnectionStatusUpdate) message).getConnectionStatus()); mConnectionStatus.setText(((ConnectionStatusUpdate) message).getConnectionStatus());
}else if(message instanceof JsonRpcResponse){ }else if(message instanceof JsonRpcResponse){
mResponse.setText(mResponse.getText() + gson.toJson(message, JsonRpcResponse.class) + "\n"); handleJsonRpcResponse((JsonRpcResponse) message);
} }
} }
}); });
} }
@OnClick(R.id.send_message) /**
public void onSendMesage(View v){ * Internal method that will decide what to do with each JSON-RPC response
*
* @param response The JSON-RPC api call response
*/
private void handleJsonRpcResponse(JsonRpcResponse response){
int id = (int) response.id;
if(responseMap.get(id) != null){
int responseId = responseMap.get(id);
switch(responseId){
case GET_BLOCK_RESPONSE:
mResponse.setText(mResponse.getText() + gson.toJson(response, JsonRpcResponse.class) + "\n");
break;
case GET_ACCOUNTS_RESPONSE:
mResponse.setText(mResponse.getText() + gson.toJson(response, JsonRpcResponse.class) + "\n");
break;
default:
Log.w(TAG,"Case not handled");
}
// Remember to remove the used id entry from the map, as it would
// otherwise just increase the app's memory usage
responseMap.remove(id);
}else{
mResponse.setText(mResponse.getText() + gson.toJson(response, JsonRpcResponse.class) + "\n");
}
}
@OnClick(R.id.call_get_block)
public void onGetBlock(View v){
GetBlock getBlock = new GetBlock(1000000); GetBlock getBlock = new GetBlock(1000000);
mService.sendMessage(getBlock, GetBlock.REQUIRED_API); int id = mService.sendMessage(getBlock, GetBlock.REQUIRED_API);
// Registering the used sequence id
responseMap.put(id, GET_BLOCK_RESPONSE);
}
@OnClick(R.id.call_get_accounts)
public void onGetAccounts(View v){
GetAccounts getAccounts = new GetAccounts(new UserAccount("1.2.1000"));
int id = mService.sendMessage(getAccounts, GetBlock.REQUIRED_API);
// Registering the used sequence id
responseMap.put(id, GET_ACCOUNTS_RESPONSE);
} }
@OnClick(R.id.next_activity) @OnClick(R.id.next_activity)
@ -90,6 +139,12 @@ public class MainActivity extends AppCompatActivity {
unbindService(mConnection); unbindService(mConnection);
} }
@Override
protected void onDestroy() {
super.onDestroy();
mDisposable.dispose();
}
/** Defines callbacks for backend binding, passed to bindService() */ /** Defines callbacks for backend binding, passed to bindService() */
private ServiceConnection mConnection = new ServiceConnection() { private ServiceConnection mConnection = new ServiceConnection() {

View file

@ -5,23 +5,34 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context="com.luminiasoft.labs.sample.MainActivity"> tools:context="com.luminiasoft.labs.sample.MainActivity">
<Button <Button
android:id="@+id/send_message" android:id="@+id/call_get_block"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Send message" android:text="Get block"
app:layout_constraintBottom_toTopOf="@+id/response" app:layout_constraintBottom_toTopOf="@+id/call_get_accounts"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/call_get_accounts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get accounts"
app:layout_constraintBottom_toTopOf="@+id/response"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/call_get_block" />
<TextView <TextView
android:id="@+id/response" android:id="@+id/response"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="200dp" android:layout_height="200dp"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/send_message" app:layout_constraintTop_toBottomOf="@id/call_get_block"
app:layout_constraintBottom_toTopOf="@+id/next_activity"/> app:layout_constraintBottom_toTopOf="@+id/next_activity"/>
<Button <Button