@@ 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);
}
@@ 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));
}