From c9390f87fe93325d2ebf1a0bb1be2608b34006eb Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 17 Jan 2020 14:45:58 +0100 Subject: [PATCH] Store files in private app folder, delete files when message is deleted --- .../linphone/chat/ChatMessagesAdapter.java | 4 + .../linphone/chat/ChatMessagesFragment.java | 4 + .../org/linphone/chat/ChatRoomsFragment.java | 7 ++ .../java/org/linphone/utils/FileUtils.java | 74 ++++++++----------- .../org/linphone/utils/LinphoneUtils.java | 20 +++++ app/src/main/res/xml/provider_paths.xml | 6 +- 6 files changed, 69 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java b/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java index 95220570e..c0e8b6bda 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java +++ b/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java @@ -35,6 +35,7 @@ import org.linphone.core.Address; import org.linphone.core.ChatMessage; import org.linphone.core.ChatMessageListenerStub; import org.linphone.core.EventLog; +import org.linphone.core.tools.Log; import org.linphone.utils.LinphoneUtils; import org.linphone.utils.SelectableAdapter; import org.linphone.utils.SelectableHelper; @@ -91,6 +92,9 @@ public class ChatMessagesAdapter extends SelectableAdapter 0) { diff --git a/app/src/main/java/org/linphone/utils/FileUtils.java b/app/src/main/java/org/linphone/utils/FileUtils.java index 4125cd7ee..eb24ac6f6 100644 --- a/app/src/main/java/org/linphone/utils/FileUtils.java +++ b/app/src/main/java/org/linphone/utils/FileUtils.java @@ -38,7 +38,6 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import org.linphone.LinphoneManager; -import org.linphone.R; import org.linphone.core.Address; import org.linphone.core.Friend; import org.linphone.core.FriendList; @@ -190,53 +189,42 @@ public class FileUtils { return null; } - public static String getStorageDirectory(Context mContext) { - String storageDir = - Environment.getExternalStorageDirectory().getAbsolutePath() - + "/" - + mContext.getString(R.string.app_name); - File file = new File(storageDir); - if (!file.isDirectory() || !file.exists()) { - Log.w( - "[File Utils] Directory " - + file - + " doesn't seem to exists yet, let's create it"); - boolean result = file.mkdirs(); - if (!result) { - Log.e( - "[File Utils] Couldn't create media directory " - + file.getAbsolutePath() - + ", using external storage dir instead"); - return Environment.getExternalStorageDirectory().getAbsolutePath(); + public static void deleteFile(String filePath) { + if (filePath == null || filePath.isEmpty()) return; + File file = new File(filePath); + if (file.exists()) { + try { + if (file.delete()) { + Log.i("[File Utils] File deleted: ", filePath); + } else { + Log.e("[File Utils] Can't delete ", filePath); + } + } catch (Exception e) { + Log.e("[File Utils] Can't delete ", filePath, ", exception: ", e); } - LinphoneManager.getInstance().getMediaScanner().scanFile(file, null); + } else { + Log.e("[File Utils] File ", filePath, " doesn't exists"); } - return storageDir; + } + + public static String getStorageDirectory(Context mContext) { + File path = null; + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + Log.w("[File Utils] External storage is mounted"); + String directory = Environment.DIRECTORY_DOWNLOADS; + path = mContext.getExternalFilesDir(directory); + } + + if (path == null) { + Log.w("[File Utils] Couldn't get external storage path, using internal"); + path = mContext.getFilesDir(); + } + + return path.getAbsolutePath(); } public static String getRecordingsDirectory(Context mContext) { - String recordingsDir = - Environment.getExternalStorageDirectory() - + "/" - + mContext.getString(R.string.app_name) - + "/recordings"; - File file = new File(recordingsDir); - if (!file.isDirectory() || !file.exists()) { - Log.w( - "[File Utils] Directory " - + file - + " doesn't seem to exists yet, let's create it"); - boolean result = file.mkdirs(); - if (!result) { - Log.e( - "[File Utils] Couldn't create recordings directory " - + file.getAbsolutePath() - + ", using external storage dir instead"); - return Environment.getExternalStorageDirectory().getAbsolutePath(); - } - LinphoneManager.getInstance().getMediaScanner().scanFile(file, null); - } - return recordingsDir; + return getStorageDirectory(mContext); } @SuppressLint("SimpleDateFormat") diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.java b/app/src/main/java/org/linphone/utils/LinphoneUtils.java index c2493cb92..00331576d 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.java +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.java @@ -48,7 +48,10 @@ import org.linphone.R; import org.linphone.core.Address; import org.linphone.core.Call; import org.linphone.core.CallLog; +import org.linphone.core.ChatMessage; +import org.linphone.core.Content; import org.linphone.core.Core; +import org.linphone.core.EventLog; import org.linphone.core.Factory; import org.linphone.core.LogCollectionState; import org.linphone.core.ProxyConfig; @@ -410,4 +413,21 @@ public final class LinphoneUtils { customText.setText(text); return dialog; } + + public static void deleteFileContentIfExists(EventLog eventLog) { + if (eventLog.getType() == EventLog.Type.ConferenceChatMessage) { + ChatMessage message = eventLog.getChatMessage(); + if (message != null) { + for (Content content : message.getContents()) { + if (content.isFile() && content.getFilePath() != null) { + Log.w( + "[Linphone Utils] Chat message is being deleted, file ", + content.getFilePath(), + " will also be deleted"); + FileUtils.deleteFile(content.getFilePath()); + } + } + } + } + } } diff --git a/app/src/main/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml index fafa14f89..b8678f230 100644 --- a/app/src/main/res/xml/provider_paths.xml +++ b/app/src/main/res/xml/provider_paths.xml @@ -1,6 +1,6 @@ - + + + \ No newline at end of file