Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f2aba0f authored by Tomasz Mikolajewski's avatar Tomasz Mikolajewski Committed by Android (Google) Code Review
Browse files

Merge "Wire uploading to MtpDocumentsProvider."

parents eca905c4 87763e6a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -18146,7 +18146,7 @@ package android.mtp {
    method public final int getThumbPixWidth();
  }
  public class MtpObjectInfo.Builder {
  public static class MtpObjectInfo.Builder {
    ctor public MtpObjectInfo.Builder();
    ctor public MtpObjectInfo.Builder(android.mtp.MtpObjectInfo);
    method public android.mtp.MtpObjectInfo build();
+1 −1
Original line number Diff line number Diff line
@@ -19659,7 +19659,7 @@ package android.mtp {
    method public final int getThumbPixWidth();
  }
  public class MtpObjectInfo.Builder {
  public static class MtpObjectInfo.Builder {
    ctor public MtpObjectInfo.Builder();
    ctor public MtpObjectInfo.Builder(android.mtp.MtpObjectInfo);
    method public android.mtp.MtpObjectInfo build();
+1 −1
Original line number Diff line number Diff line
@@ -256,7 +256,7 @@ public final class MtpObjectInfo {
    /**
     * Builds a new object info instance.
     */
    public class Builder {
    public static class Builder {
        private MtpObjectInfo mObjectInfo;

        public Builder() {
+14 −8
Original line number Diff line number Diff line
@@ -430,12 +430,14 @@ static jobject
android_mtp_MtpDevice_send_object_info(JNIEnv *env, jobject thiz, jobject info)
{
    MtpDevice* device = get_device_from_object(env, thiz);
    if (!device)
    if (!device) {
        return JNI_FALSE;
    }

    // Updating existing objects is not supported.
    if (env->GetIntField(info, field_objectInfo_handle) != -1)
    if (env->GetIntField(info, field_objectInfo_handle) != -1) {
        return JNI_FALSE;
    }

    MtpObjectInfo* object_info = new MtpObjectInfo(-1);
    object_info->mStorageID = env->GetIntField(info, field_objectInfo_storageId);
@@ -456,17 +458,21 @@ android_mtp_MtpDevice_send_object_info(JNIEnv *env, jobject thiz, jobject info)
    object_info->mSequenceNumber = env->GetIntField(info, field_objectInfo_sequenceNumber);

    jstring name_jstring = (jstring) env->GetObjectField(info, field_objectInfo_name);
    if (name_jstring != NULL) {
        const char* name_string = env->GetStringUTFChars(name_jstring, NULL);
        object_info->mName = strdup(name_string);
        env->ReleaseStringUTFChars(name_jstring, name_string);
    }

    object_info->mDateCreated = env->GetLongField(info, field_objectInfo_dateCreated) / 1000LL;
    object_info->mDateModified = env->GetLongField(info, field_objectInfo_dateModified) / 1000LL;

    jstring keywords_jstring = (jstring) env->GetObjectField(info, field_objectInfo_keywords);
    if (keywords_jstring != NULL) {
        const char* keywords_string = env->GetStringUTFChars(keywords_jstring, NULL);
        object_info->mKeywords = strdup(keywords_string);
        env->ReleaseStringUTFChars(keywords_jstring, keywords_string);
    }

    int object_handle = device->sendObjectInfo(object_info);
    if (object_handle == -1) {
+27 −8
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ class MtpDocument {
    private final Date mDateModified;
    private final int mSize;
    private final int mThumbSize;
    private final boolean mReadOnly;

    /**
     * Constructor for root document.
@@ -40,9 +41,10 @@ class MtpDocument {
        this(DUMMY_HANDLE_FOR_ROOT,
             0x3001,  // Directory.
             root.mDescription,
             null,  // Unknown,
             null,    // Unknown name.
             (int) Math.min(root.mMaxCapacity - root.mFreeSpace, Integer.MAX_VALUE),
             0);
             0,       // Total size.
             true);   // Writable.
    }

    MtpDocument(MtpObjectInfo objectInfo) {
@@ -51,7 +53,8 @@ class MtpDocument {
             objectInfo.getName(),
             objectInfo.getDateModified() != 0 ? new Date(objectInfo.getDateModified()) : null,
             objectInfo.getCompressedSize(),
             objectInfo.getThumbCompressedSize());
             objectInfo.getThumbCompressedSize(),
             objectInfo.getProtectionStatus() != 0);
    }

    MtpDocument(int objectHandle,
@@ -59,13 +62,15 @@ class MtpDocument {
                String name,
                Date dateModified,
                int size,
                int thumbSize) {
                int thumbSize,
                boolean readOnly) {
        this.mObjectHandle = objectHandle;
        this.mFormat = format;
        this.mName = name;
        this.mDateModified = dateModified;
        this.mSize = size;
        this.mThumbSize = thumbSize;
        this.mReadOnly = readOnly;
    }

    void addToCursor(Identifier rootIdentifier, MatrixCursor.RowBuilder builder) {
@@ -82,7 +87,7 @@ class MtpDocument {

        builder.add(Document.COLUMN_DOCUMENT_ID, identifier.toDocumentId());
        builder.add(Document.COLUMN_DISPLAY_NAME, mName);
        builder.add(Document.COLUMN_MIME_TYPE, getMimeType());
        builder.add(Document.COLUMN_MIME_TYPE, formatTypeToMimeType(mFormat));
        builder.add(
                Document.COLUMN_LAST_MODIFIED,
                mDateModified != null ? mDateModified.getTime() : null);
@@ -90,9 +95,9 @@ class MtpDocument {
        builder.add(Document.COLUMN_SIZE, mSize);
    }

    private String getMimeType() {
    static String formatTypeToMimeType(int format) {
        // TODO: Add complete list of mime types.
        switch (mFormat) {
        switch (format) {
            case 0x3001:
                return DocumentsContract.Document.MIME_TYPE_DIR;
            case 0x3009:
@@ -100,7 +105,21 @@ class MtpDocument {
            case 0x3801:
                return "image/jpeg";
            default:
                return "";
                return "application/octet-stream";
        }
    }

    static int mimeTypeToFormatType(String mimeType) {
        // TODO: Add complete list of mime types.
        switch (mimeType.toLowerCase()) {
            case Document.MIME_TYPE_DIR:
                return 0x3001;
            case "audio/mp3":
                return 0x3009;
            case "image/jpeg":
                return 0x3801;
            default:
                return 0x3000;  // Undefined object.
        }
    }
}
Loading