~singpolyma/cheogram-android

cf3b1eaa261a3b00012200f25ce025cdb45f97e5 — Stephen Paul Weber 3 months ago cd319fd
Better save as sticker, also works for older android versions
M src/main/java/eu/siacs/conversations/persistance/FileBackend.java => src/main/java/eu/siacs/conversations/persistance/FileBackend.java +3 -4
@@ 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);
            }

M src/main/java/eu/siacs/conversations/ui/ConversationFragment.java => src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +13 -17
@@ 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));
        }