diff options
3 files changed, 99 insertions, 1 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 16b7d5b4a..18b546abf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,8 @@ <uses-permission android:name="com.nextcloud.android.sso" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:name="it.niedermann.nextcloud.deck.Application" diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java index 8866892db..7ddf8fa9a 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java @@ -46,6 +46,7 @@ import it.niedermann.nextcloud.deck.model.full.FullStack; import it.niedermann.nextcloud.deck.model.ocs.Capabilities; import it.niedermann.nextcloud.deck.model.propagation.CardUpdate; import it.niedermann.nextcloud.deck.model.propagation.Reorder; +import it.niedermann.nextcloud.deck.persistence.util.RealPathUtils; import it.niedermann.nextcloud.deck.util.DateUtil; import okhttp3.MediaType; import okhttp3.MultipartBody; @@ -280,7 +281,8 @@ public class ServerAdapter { // ## ATTACHMENTS public void uploadAttachment(Long remoteBoardId, long remoteStackId, long remoteCardId, String contentType, Uri attachmentUri, IResponseCallback<Attachment> responseCallback) { ensureInternetConnection(); - File attachment = new File(getUriRealPath( applicationContext, attachmentUri)); +// File attachment = new File(getUriRealPath( applicationContext, attachmentUri)); + File attachment = RealPathUtils.getRealPath(applicationContext, attachmentUri); MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", attachment.getName(), RequestBody.create(MediaType.parse(contentType), attachment)); MultipartBody.Part typePart = MultipartBody.Part.createFormData("type", attachment.getName(), RequestBody.create(MediaType.parse("text/plain"), "deck_file")); RequestHelper.request(sourceActivity, provider, () -> provider.getDeckAPI().uploadAttachment(remoteBoardId, remoteStackId, remoteCardId, typePart, filePart), responseCallback); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/util/RealPathUtils.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/util/RealPathUtils.java new file mode 100644 index 000000000..f45226ebd --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/util/RealPathUtils.java @@ -0,0 +1,94 @@ +package it.niedermann.nextcloud.deck.persistence.util; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import android.provider.DocumentsContract; +import android.provider.MediaStore; + +import androidx.loader.content.CursorLoader; + +import java.io.File; + +import it.niedermann.nextcloud.deck.DeckLog; + +public class RealPathUtils { + + public static File getRealPath(Context context, Uri uri){ + String path = null; + if (Build.VERSION.SDK_INT < 11) + path = RealPathUtils.getRealPathFromURI_BelowAPI11(context, uri); + + // SDK >= 11 && SDK < 19 + else if (Build.VERSION.SDK_INT < 19) + path = RealPathUtils.getRealPathFromURI_API11to18(context, uri); + + // SDK > 19 (Android 4.4) + else + path = RealPathUtils.getRealPathFromURI_API19(context, uri); + DeckLog.log("File Path: " + path); + // Get the file instance + return new File(path); + } + +@SuppressLint("NewApi") +public static String getRealPathFromURI_API19(Context context, Uri uri){ + String filePath = ""; + String wholeID = DocumentsContract.getDocumentId(uri); + + // Split at colon, use second item in the array + String id; + if (wholeID.contains(":")){ + id = wholeID.split(":")[1]; + } else { + id = wholeID; + } + + String[] column = { MediaStore.Images.Media.DATA }; + + // where id is equal to + String sel = MediaStore.Images.Media._ID + "=?"; + + Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, + column, sel, new String[]{ id }, null); + + int columnIndex = cursor.getColumnIndex(column[0]); + + if (cursor.moveToFirst()) { + filePath = cursor.getString(columnIndex); + } + cursor.close(); + return filePath; +} + + +@SuppressLint("NewApi") +public static String getRealPathFromURI_API11to18(Context context, Uri contentUri) { + String[] proj = { MediaStore.Images.Media.DATA }; + String result = null; + + CursorLoader cursorLoader = new CursorLoader( + context, + contentUri, proj, null, null, null); + Cursor cursor = cursorLoader.loadInBackground(); + + if(cursor != null){ + int column_index = + cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + result = cursor.getString(column_index); + } + return result; +} + +public static String getRealPathFromURI_BelowAPI11(Context context, Uri contentUri){ + String[] proj = { MediaStore.Images.Media.DATA }; + Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null); + int column_index + = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + return cursor.getString(column_index); +} +}
\ No newline at end of file |