aboutsummaryrefslogtreecommitdiffstats
path: root/openpgp-ktx/src/main/java/org/openintents/openpgp/OpenPgpMetadata.kt
blob: 65497e1fd711a5da017591ca992e4be69484565c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*
 * Copyright © 2019 The Android Password Authors. All Rights Reserved.
 * SPDX-License-Identifier: LGPL-3.0-only WITH LGPL-3.0-linking-exception
 */
@file:JvmName("OpenPgpMetadata")

package org.openintents.openpgp

import android.os.Parcel
import android.os.Parcelable
import android.os.Parcelable.Creator

public class OpenPgpMetadata() : Parcelable {

    public var filename: String? = null
    public var mimeType: String? = null
    public var charset: String? = null
    public var modificationTime: Long = 0
    public var originalSize: Long = 0

    private constructor(
        filename: String?,
        mimeType: String?,
        modificationTime: Long,
        originalSize: Long,
        charset: String?
    ) : this() {
        this.filename = filename
        this.mimeType = mimeType
        this.modificationTime = modificationTime
        this.originalSize = originalSize
        this.charset = charset
    }

    private constructor(
        filename: String?,
        mimeType: String?,
        modificationTime: Long,
        originalSize: Long
    ) : this() {
        this.filename = filename
        this.mimeType = mimeType
        this.modificationTime = modificationTime
        this.originalSize = originalSize
    }

    private constructor(b: OpenPgpMetadata) : this() {
        filename = b.filename
        mimeType = b.mimeType
        modificationTime = b.modificationTime
        originalSize = b.originalSize
    }

    override fun describeContents(): Int {
        return 0
    }

    override fun writeToParcel(dest: Parcel, flags: Int) {
        /**
         * NOTE: When adding fields in the process of updating this API, make sure to bump
         * [PARCELABLE_VERSION].
         */
        dest.writeInt(PARCELABLE_VERSION)
        // Inject a placeholder that will store the parcel size from this point on
        // (not including the size itself).
        val sizePosition = dest.dataPosition()
        dest.writeInt(0)
        val startPosition = dest.dataPosition()
        // version 1
        dest.writeString(filename)
        dest.writeString(mimeType)
        dest.writeLong(modificationTime)
        dest.writeLong(originalSize)
        // version 2
        dest.writeString(charset)
        // Go back and write the size
        val parcelableSize = dest.dataPosition() - startPosition
        dest.setDataPosition(sizePosition)
        dest.writeInt(parcelableSize)
        dest.setDataPosition(startPosition + parcelableSize)
    }

    public companion object CREATOR : Creator<OpenPgpMetadata> {

        /**
         * Since there might be a case where new versions of the client using the library getting
         * old versions of the protocol (and thus old versions of this class), we need a versioning
         * system for the parcels sent between the clients and the providers.
         */
        private const val PARCELABLE_VERSION = 2

        override fun createFromParcel(source: Parcel): OpenPgpMetadata? {
            val version = source.readInt() // parcelableVersion
            val parcelableSize = source.readInt()
            val startPosition = source.dataPosition()
            val vr = OpenPgpMetadata()
            vr.filename = source.readString()
            vr.mimeType = source.readString()
            vr.modificationTime = source.readLong()
            vr.originalSize = source.readLong()
            if (version >= 2) {
                vr.charset = source.readString()
            }
            // skip over all fields added in future versions of this parcel
            source.setDataPosition(startPosition + parcelableSize)
            return vr
        }

        override fun newArray(size: Int): Array<OpenPgpMetadata?> {
            return arrayOfNulls(size)
        }
    }

    override fun toString(): String {
        var out = "\nfilename: $filename"
        out += "\nmimeType: $mimeType"
        out += "\nmodificationTime: $modificationTime"
        out += "\noriginalSize: $originalSize"
        out += "\ncharset: $charset"
        return out
    }
}