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"