feat: update file transfer api

Change-Id: I278cea3dad005d41457df4aab75ff1cc46b517e1
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
index 460b138..764bcc9 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
@@ -39,6 +39,8 @@
 import android.view.ViewGroup;
 import android.view.inputmethod.EditorInfo;
 import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ProgressBar;
 import android.widget.Spinner;
 import android.widget.Toast;
 
@@ -100,6 +102,12 @@
     @BindView(R.id.number_selector)
     protected Spinner mNumberSpinner;
 
+    @BindView(R.id.pb_data_transfer)
+    protected ProgressBar pbDataTransfer;
+
+    @BindView(R.id.send_data)
+    protected ImageButton sendData;
+
     private AlertDialog mDeleteDialog;
     private boolean mDeleteConversation = false;
 
@@ -193,7 +201,7 @@
         presenter.sendTextMessage(mMsgEditTxt.getText().toString());
     }
 
-    @OnClick(R.id.file_send)
+    @OnClick(R.id.send_data)
     public void selectFile() {
         presenter.selectFile();
     }
@@ -215,6 +223,34 @@
     }
 
     @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
+        super.onActivityResult(requestCode, resultCode, resultData);
+
+        if (requestCode == REQUEST_CODE_FILE_PICKER && resultCode == RESULT_OK) {
+            if (resultData != null) {
+                android.net.Uri uri = resultData.getData();
+                if (uri == null) {
+                    return;
+                }
+
+                new Thread(() -> {
+                    getActivity().runOnUiThread(() -> setLoading(true));
+
+                    try {
+                        File cacheFile = FileUtils.getCacheFile(getActivity(), uri);
+                        presenter.sendFile(cacheFile.toString());
+                    } catch (IOException e) {
+                        Log.e(TAG, "onActivityResult: not able to create cache file");
+                        getActivity().runOnUiThread(() -> displayErrorToast(RingError.INVALID_FILE));
+                    }
+
+                    getActivity().runOnUiThread(() -> setLoading(false));
+                }).start();
+            }
+        }
+    }
+
+    @Override
     public void writeCacheFile(String cacheFilename) {
         File cacheFile = new File(getActivity().getCacheDir(), cacheFilename);
         try {
@@ -230,28 +266,6 @@
         }
     }
 
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
-        super.onActivityResult(requestCode, resultCode, resultData);
-
-        if (requestCode == REQUEST_CODE_FILE_PICKER && resultCode == RESULT_OK) {
-            if (resultData != null) {
-                android.net.Uri uri = resultData.getData();
-                if (uri == null) {
-                    return;
-                }
-
-                try {
-                    File cacheFile = FileUtils.getCacheFile(getActivity(), uri);
-                    presenter.sendFile(cacheFile.toString());
-                } catch (IOException e) {
-                    Log.e(TAG, "onActivityResult: not able to create cache file");
-                    displayErrorToast(RingError.INVALID_FILE);
-                }
-            }
-        }
-    }
-
     @OnEditorAction(R.id.msg_input_txt)
     public boolean actionSendMsgText(int actionId) {
         switch (actionId) {
@@ -500,4 +514,14 @@
     public void toggleButtonClicked() {
         presenter.clickOnGoingPane();
     }
+
+    private void setLoading(boolean isLoading) {
+        if (isLoading) {
+            sendData.setVisibility(View.GONE);
+            pbDataTransfer.setVisibility(View.VISIBLE);
+        } else {
+            sendData.setVisibility(View.VISIBLE);
+            pbDataTransfer.setVisibility(View.GONE);
+        }
+    }
 }
\ No newline at end of file
diff --git a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
index 5eb4edc..8b988ee 100644
--- a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
@@ -501,22 +501,23 @@
                 case DATA_TRANSFER: {
                     Long transferId = event.getEventInput(ServiceEvent.EventInput.TRANSFER_ID, Long.class);
                     DataTransferEventCode transferEventCode = event.getEventInput(ServiceEvent.EventInput.TRANSFER_EVENT_CODE, DataTransferEventCode.class);
-                    DataTransferInfo dataTransferInfo = mCallService.dataTransferInfo(transferId);
+                    DataTransferInfo dataTransferInfo = new DataTransferInfo();
+                    mCallService.dataTransferInfo(transferId, dataTransferInfo);
 
                     if (transferEventCode == DataTransferEventCode.CREATED) {
 
                         HistoryFileTransfer historyFileTransfer = new HistoryFileTransfer(transferId, dataTransferInfo.getDisplayName(),
-                                dataTransferInfo.getIsOutgoing(), dataTransferInfo.getTotalSize(),
+                                dataTransferInfo.getFlags() == 0, dataTransferInfo.getTotalSize(),
                                 dataTransferInfo.getBytesProgress(), dataTransferInfo.getPeer(),
                                 dataTransferInfo.getAccountId());
                         mHistoryService.addFileTransfer(historyFileTransfer);
 
-                        if (!dataTransferInfo.getIsOutgoing()) {
+                        if (dataTransferInfo.getFlags() == 1){
                             showFileTransferNotification(transferId, dataTransferInfo.getPeer());
                         }
                     }
 
-                    if (!dataTransferInfo.getIsOutgoing()) {
+                    if (dataTransferInfo.getFlags() == 1) {
                         mHistoryService.updateFileTransferStatus(transferId, transferEventCode);
                     }
 
diff --git a/ring-android/app/src/main/res/layout/frag_conversation.xml b/ring-android/app/src/main/res/layout/frag_conversation.xml
index 5a2bbbc..bf07c4a 100644
--- a/ring-android/app/src/main/res/layout/frag_conversation.xml
+++ b/ring-android/app/src/main/res/layout/frag_conversation.xml
@@ -51,6 +51,7 @@
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
+            android:gravity="center"
             android:orientation="horizontal">
 
             <Spinner
@@ -73,16 +74,23 @@
                 android:padding="8dp" />
 
             <ImageButton
-                android:id="@+id/file_send"
+                android:id="@+id/send_data"
                 android:layout_width="wrap_content"
                 android:layout_height="match_parent"
+                android:layout_marginEnd="5dp"
                 android:background="?selectableItemBackgroundBorderless"
                 android:contentDescription="@string/send_file"
-                android:layout_marginEnd="5dp"
                 android:padding="8dp"
                 android:tint="@android:color/darker_gray"
                 card_view:srcCompat="@drawable/ic_upload_black" />
 
+            <ProgressBar
+                android:id="@+id/pb_data_transfer"
+                android:layout_width="30dp"
+                android:layout_height="30dp"
+                android:indeterminate="true"
+                android:visibility="gone" />
+
             <ImageButton
                 android:id="@+id/msg_send"
                 android:layout_width="wrap_content"