From 8613038eeb6d910eb2ce79f0ab1f66c641a4a688 Mon Sep 17 00:00:00 2001 From: Brieuc Viel Date: Wed, 16 Aug 2017 15:32:48 +0200 Subject: [PATCH] [FileSharing] update sharing all files on multiple devices --- AndroidManifest.xml | 3 + src/android/org/linphone/ChatFragment.java | 120 ++++++++++++++---- .../linphone/LinphoneLauncherActivity.java | 11 +- 3 files changed, 105 insertions(+), 29 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c59875296..9b7cdbe06 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -114,6 +114,9 @@ + + + >> ChatFragment : onCreateView - newChatConversation = "+newChatConversation+" - fileSharedUri = "+fileSharedUri); initNewChatConversation(); } @@ -293,11 +293,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } if (sipUri != null) { - Log.e("====>>>> ChatFragment - onSaveInstanceState : sipUri = "+sipUri); outState.putString("sipUriDraft", sipUri); outState.putString("SipUri", sipUri); - - } + } outState.putString("fileSharedUri", ""); super.onSaveInstanceState(outState); @@ -555,24 +553,17 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC String draft = getArguments().getString("messageDraft"); message.setText(draft); contact = (LinphoneContact)getArguments().getSerializable("contactDraft"); - - Log.e("===>>>> ChatFragment - onResume : sipUriDraft = "+getArguments().getString("sipUriDraft")+" - sipUri = "+getArguments().getString("sipUri")+" - VS sipUri = "+sipUri); - if (contact != null) { - Log.e("===>>> onResume - loop 1"); contactName.setText(contact.getFullName()); sipUri = getArguments().getString("SipUri"); newChatConversation = false; getArguments().clear(); }else if(getArguments().getString("sipUriDraft") != null){ - Log.e("===>>> onResume - loop 2"); sipUri = getArguments().getString("sipUriDraft"); newChatConversation = false; }else if (sipUri != null) { - Log.e("===>>> onResume - loop 3"); newChatConversation = false; }else { - Log.e("===>>> onResume - loop 4"); sipUri = null; newChatConversation = true; } @@ -747,16 +738,12 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } private void sendImageMessage(String path, int imageSize) { - Log.e("====>>> ChatFragment - sendImageMessage() : path = "+path+" - imageSize = "+imageSize); if(path.contains("file://")) { - //path.replace("file://", ""); path = path.substring(7); - Log.e("===>>> path replaced = "+path); } LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); boolean isNetworkReachable = lc == null ? false : lc.isNetworkReachable(); - Log.e("====>>> ChatFragment - sendImageMessage() : newChatConversation = "+ newChatConversation +" - chatRoom = "+chatRoom); if(newChatConversation && chatRoom == null) { String address = searchContactField.getText().toString(); if (address != null && !address.equals("")) { @@ -765,7 +752,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } if (chatRoom != null && path != null && path.length() > 0 && isNetworkReachable) { - Log.e("====>>> ChatFragment - sendImageMessage() : Do something loop 2 "); try { Bitmap bm = BitmapFactory.decodeFile(path); if (bm != null) { @@ -783,6 +769,38 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } } + private void sendFileSharingMessage(String path, int size ) { + if(path.contains("file://")) { + path = path.substring(7); + } + + LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + boolean isNetworkReachable = lc == null ? false : lc.isNetworkReachable(); + if(newChatConversation && chatRoom == null) { + String address = searchContactField.getText().toString(); + if (address != null && !address.equals("")) { + initChatRoom(address); + } + } + + if (chatRoom != null && path != null && path.length() > 0 && isNetworkReachable) { + try { + File fileShared = new File(path); + if (fileShared != null) { + FileSharingUploadPrepareTask task = new FileSharingUploadPrepareTask(getActivity(), path, size); + task.execute(fileShared); + } else { + Log.e("Error, fileShared can't be read " + path); + } + } catch (RuntimeException e) { + Log.e("Error, not enough memory to create the fileShared"); + } + fileSharedUri = null; + } else if (!isNetworkReachable && LinphoneActivity.isInstanciated()) { + LinphoneActivity.instance().displayCustomToast(getString(R.string.error_network_unreachable), Toast.LENGTH_LONG); + } + } + private void askingForLimeCall() { final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.lime_not_verified)); Button delete = (Button) dialog.findViewById(R.id.delete_button); @@ -1014,20 +1032,74 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } } + class FileSharingUploadPrepareTask extends AsyncTask { + private String path; + private ProgressDialog progressDialog; + + public FileSharingUploadPrepareTask(Context context, String fileToUploadPath, int size) { + path = fileToUploadPath; + + progressDialog = new ProgressDialog(context); + progressDialog.setIndeterminate(true); + progressDialog.setMessage(getString(R.string.processing_image)); + progressDialog.show(); + } + + @Override + protected byte[] doInBackground(File... params) { + File file = params[0]; + //FileInputStream fileInputStream = null; + //ByteArrayOutputStream stream = new ByteArrayOutputStream(); + //String extension = LinphoneUtils.getExtensionFromFileName(path); + + byte[] byteArray = new byte[(int) file.length()]; + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + fis.read(byteArray); //read file into bytes[] + fis.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + }catch (IOException e) { + e.printStackTrace(); + } + + return byteArray; + } + + @Override + protected void onPostExecute(byte[] result) { + if (progressDialog != null && progressDialog.isShowing()) { + progressDialog.dismiss(); + } + + String fileName = path.substring(path.lastIndexOf("/") + 1); + String extension = LinphoneUtils.getExtensionFromFileName(fileName); + LinphoneContent content = LinphoneCoreFactory.instance().createLinphoneContent("file", extension, result, null); + content.setName(fileName); + + LinphoneChatMessage message = chatRoom.createFileTransferMessage(content); + message.setListener(LinphoneManager.getInstance()); + message.setAppData(path); + + LinphoneManager.getInstance().setUploadPendingFileMessage(message); + LinphoneManager.getInstance().setUploadingImage(result); + + chatRoom.sendChatMessage(message); + adapter.addMessage(message); + } + } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ADD_PHOTO && resultCode == Activity.RESULT_OK) { String fileToUploadPath = null; - if (data != null && data.getData() != null) { fileToUploadPath = getRealPathFromURI(data.getData()); } else if (imageToUploadUri != null) { fileToUploadPath = imageToUploadUri.getPath(); } - - Log.e(" ====>>>> onActivityResult - requestCode = "+requestCode+" - resultCode = "+resultCode+" - data = "+data.toString()+" - fileToUploadPath = "+fileToUploadPath); } else { - Log.e(" ====>>>> onActivityResult - requestCode = "+requestCode+" - resultCode = "+resultCode+" - data = "+data.toString()); super.onActivityResult(requestCode, resultCode, data); } } @@ -1053,10 +1125,14 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC //TODO : if(fileSharedUri != null){ - Log.e(" ===>>> exitNewConversationMode - sendImage from Uri"); //save SipUri into bundle onSaveInstanceState(getArguments()); - sendImageMessage(fileSharedUri,0); + String extension = LinphoneUtils.getExtensionFromFileName(fileSharedUri); + if(extension.matches(".*(.png|.jpg|.jpeg|.bmp|.gif).*")) { + sendImageMessage(fileSharedUri, 0); + }else { + sendFileSharingMessage(fileSharedUri, 0); + } fileSharedUri = null; } } diff --git a/src/android/org/linphone/LinphoneLauncherActivity.java b/src/android/org/linphone/LinphoneLauncherActivity.java index 9adbe0380..e201eff4e 100644 --- a/src/android/org/linphone/LinphoneLauncherActivity.java +++ b/src/android/org/linphone/LinphoneLauncherActivity.java @@ -107,7 +107,6 @@ public class LinphoneLauncherActivity extends Activity { BluetoothManager.getInstance().initBluetooth(); } - //TODO : mHandler.postDelayed(new Runnable() { @Override public void run() { @@ -121,21 +120,19 @@ public class LinphoneLauncherActivity extends Activity { newIntent.setData(intent.getData()); if (Intent.ACTION_SEND.equals(action) && type != null) { if ("text/plain".equals(type) && intent.getStringExtra(Intent.EXTRA_TEXT) != null) { - Log.e(" ====>>> type = "+type+" share msg"); stringFileShared = intent.getStringExtra(Intent.EXTRA_TEXT); newIntent.putExtra("msgShared", stringFileShared); - }else {//if ( type.contains("image") ){ + }else { if(intent.getStringExtra(Intent.EXTRA_STREAM) != null){ stringFileShared = intent.getStringExtra(Intent.EXTRA_STREAM); }else { fileUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); stringFileShared = getRealPathFromURI(fileUri); + if(stringFileShared == null) + stringFileShared = fileUri.getPath(); } - Log.e(" ====>>> type = "+type+" share images msgShared = "+getRealPathFromURI(fileUri) +" VS toPath() = "+fileUri.getPath()); newIntent.putExtra("fileShared", stringFileShared); - }/*else{ - Log.e(" ====>>> type = "+type+" share something else"); - }*/ + } } } if (uriToResolve != null) {