diff --git a/.gitignore b/.gitignore
index 4c2a140..729bc70 100644
--- a/.gitignore
+++ b/.gitignore
@@ -104,4 +104,3 @@ graphenej/build
local.properties
-sample
diff --git a/sample/src/androidTest/java/cy/sample/labs/sample/ExampleInstrumentedTest.java b/sample/src/androidTest/java/cy/sample/labs/sample/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..9b859ad
--- /dev/null
+++ b/sample/src/androidTest/java/cy/sample/labs/sample/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package cy.sample.labs.sample;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() throws Exception {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("com.luminiasoft.labs.sample", appContext.getPackageName());
+ }
+}
diff --git a/sample/src/main/java/cy/agorise/labs/sample/MainActivity.java b/sample/src/main/java/cy/agorise/labs/sample/MainActivity.java
new file mode 100644
index 0000000..a8ee0fc
--- /dev/null
+++ b/sample/src/main/java/cy/agorise/labs/sample/MainActivity.java
@@ -0,0 +1,230 @@
+package cy.agorise.labs.sample;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+import java.util.HashMap;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import cy.agorise.graphenej.UserAccount;
+import cy.agorise.graphenej.api.ConnectionStatusUpdate;
+import cy.agorise.graphenej.api.android.DeserializationMap;
+import cy.agorise.graphenej.api.android.NetworkService;
+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.GetBlockHeader;
+import cy.agorise.graphenej.api.calls.GetRelativeAccountHistory;
+import cy.agorise.graphenej.models.JsonRpcResponse;
+import cy.agorise.graphenej.objects.Memo;
+import cy.agorise.graphenej.operations.TransferOperation;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.functions.Consumer;
+
+public class MainActivity extends AppCompatActivity {
+ private final String TAG = this.getClass().getName();
+
+ @BindView(R.id.connection_status)
+ TextView mConnectionStatus;
+
+ @BindView(R.id.response)
+ TextView mResponse;
+
+ @BindView(R.id.argument_get_accounts)
+ EditText mArgumentGetAccounts;
+
+ @BindView(R.id.argument_get_block)
+ EditText mArgumentGetBlock;
+
+ @BindView(R.id.argument_get_block_header)
+ EditText mArgumentGetBlockHeader;
+
+ @BindView(R.id.argument_get_relative_account_history)
+ EditText mArgumentGetRelativeAccountHistory;
+
+ // In case we want to interact directly with the service
+ private NetworkService mService;
+
+ private Gson gson = new GsonBuilder()
+ .setExclusionStrategies(new DeserializationMap.SkipAccountOptionsStrategy(), new DeserializationMap.SkipAssetOptionsStrategy())
+ .registerTypeAdapter(TransferOperation.class, new TransferOperation.TransferDeserializer())
+ .registerTypeAdapter(Memo.class, new Memo.MemoSerializer())
+ .create();
+
+ private Disposable mDisposable;
+
+ private HashMap responseMap = new HashMap<>();
+
+ private final int GET_ACCOUNTS_RESPONSE = 0;
+ private final int GET_BLOCK_RESPONSE = 1;
+ private final int GET_BLOCK_HEADER_RESPONSE = 2;
+ private final int GET_RELATIVE_ACCOUNT_HISTORY_RESPONSE = 3;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ ButterKnife.bind(this);
+
+ mDisposable = RxBus.getBusInstance()
+ .asFlowable()
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Consumer