diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index f3148143f29a894e5dd04892ff1211c8311ca0ca..4adf756a67b3075d9a6223ddeb3156e06668c64e 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -674,14 +674,13 @@ public class FileBackend { return FileUtils.getPath(mXmppConnectionService, uri); } - public void copyFileToDocumentFile(Context ctx, File file, DocumentFile df, String name) throws FileCopyException { + public void copyFileToDocumentFile(Context ctx, File file, DocumentFile df) throws FileCopyException { Log.d( Config.LOGTAG, - "copy file (" + file + ") to " + df + " / " + name); - final DocumentFile dff = df.createFile(MimeUtils.guessMimeTypeFromUri(ctx, getUriForFile(ctx, file)), name); + "copy file (" + file + ") to " + df); try (final InputStream is = new FileInputStream(file); final OutputStream os = - mXmppConnectionService.getContentResolver().openOutputStream(dff.getUri())) { + mXmppConnectionService.getContentResolver().openOutputStream(df.getUri())) { if (is == null) { throw new FileCopyException(R.string.error_file_not_found); } diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 9b7eef5cec0c9eae949047483256403e72001fb5..f0aa0eb57e8d54d26891c49e129dadee5c1d21f6 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -138,6 +138,7 @@ import eu.siacs.conversations.utils.AccountUtils; import eu.siacs.conversations.utils.Compatibility; import eu.siacs.conversations.utils.GeoHelper; import eu.siacs.conversations.utils.MessageUtils; +import eu.siacs.conversations.utils.MimeUtils; import eu.siacs.conversations.utils.NickValidityChecker; import eu.siacs.conversations.utils.Patterns; import eu.siacs.conversations.utils.PermissionUtils; @@ -215,7 +216,6 @@ public class ConversationFragment extends XmppFragment private boolean reInitRequiredOnStart = true; private int identiconWidth = -1; private File savingAsSticker = null; - private String savingAsStickerName = null; private final OnClickListener clickToMuc = new OnClickListener() { @@ -997,22 +997,15 @@ public class ConversationFragment extends XmppFragment private void handlePositiveActivityResult(int requestCode, final Intent data) { switch (requestCode) { case REQUEST_SAVE_STICKER: - final DocumentFile df = DocumentFile.fromTreeUri(activity, data.getData()); + final DocumentFile df = DocumentFile.fromSingleUri(activity, data.getData()); final File f = savingAsSticker; - final String existingName = savingAsStickerName; savingAsSticker = null; - savingAsStickerName = null; - activity.quickEdit(existingName, (name) -> { - try { - activity.xmppConnectionService.getFileBackend().copyFileToDocumentFile(activity, f, df, name); - } catch (final FileBackend.FileCopyException e) { - Toast.makeText(activity, e.getResId(), Toast.LENGTH_SHORT).show(); - return null; - } - + try { + activity.xmppConnectionService.getFileBackend().copyFileToDocumentFile(activity, f, df); Toast.makeText(activity, "Sticker saved", Toast.LENGTH_SHORT).show(); - return null; - }, R.string.sticker_name, false, false, true); + } catch (final FileBackend.FileCopyException e) { + Toast.makeText(activity, e.getResId(), Toast.LENGTH_SHORT).show(); + } break; case REQUEST_TRUST_KEYS_TEXT: sendMessage(); @@ -2377,9 +2370,11 @@ public class ConversationFragment extends XmppFragment private void saveAsSticker(final File file, final String name) { savingAsSticker = file; - savingAsStickerName = name; - Intent intent = ((StorageManager) activity.getSystemService(Context.STORAGE_SERVICE)).getPrimaryStorageVolume().createOpenDocumentTreeIntent(); + Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.setType(MimeUtils.guessMimeTypeFromUri(activity, activity.xmppConnectionService.getFileBackend().getUriForFile(activity, file))); + intent.putExtra(Intent.EXTRA_TITLE, name); SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(activity); final String dir = p.getString("sticker_directory", "Stickers"); @@ -2387,7 +2382,8 @@ public class ConversationFragment extends XmppFragment intent.putExtra("android.provider.extra.INITIAL_URI", Uri.parse(dir)); } else { new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/" + dir + "/User Pack").mkdirs(); - Uri uri = intent.getParcelableExtra("android.provider.extra.INITIAL_URI"); + Intent tmp = ((StorageManager) activity.getSystemService(Context.STORAGE_SERVICE)).getPrimaryStorageVolume().createOpenDocumentTreeIntent(); + Uri uri = tmp.getParcelableExtra("android.provider.extra.INITIAL_URI"); intent.putExtra("android.provider.extra.INITIAL_URI", Uri.parse(uri.toString().replace("/root/", "/document/") + "%3APictures%2F" + dir)); }