summaryrefslogtreecommitdiff
path: root/media/java/android/mtp/MtpEvent.java
blob: 9ca00e1956cb40b8d84e4fff1084871d07931cb3 (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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.mtp;

/**
 * This class encapsulates information about a MTP event.
 * This corresponds to the events described in appendix G of the MTP specification.
 */
public class MtpEvent {
    /** Event code for UNDEFINED event */
    public static final int EVENT_UNDEFINED = 0x4000;
    /** Event code for CANCEL_TRANSACTION event */
    public static final int EVENT_CANCEL_TRANSACTION = 0x4001;
    /** Event code for OBJECT_ADDED event */
    public static final int EVENT_OBJECT_ADDED = 0x4002;
    /** Event code for OBJECT_REMOVED event */
    public static final int EVENT_OBJECT_REMOVED = 0x4003;
    /** Event code for STORE_ADDED event */
    public static final int EVENT_STORE_ADDED = 0x4004;
    /** Event code for STORE_REMOVED event */
    public static final int EVENT_STORE_REMOVED = 0x4005;
    /** Event code for DEVICE_PROP_CHANGED event */
    public static final int EVENT_DEVICE_PROP_CHANGED = 0x4006;
    /** Event code for OBJECT_INFO_CHANGED event */
    public static final int EVENT_OBJECT_INFO_CHANGED = 0x4007;
    /** Event code for DEVICE_INFO_CHANGED event */
    public static final int EVENT_DEVICE_INFO_CHANGED = 0x4008;
    /** Event code for REQUEST_OBJECT_TRANSFER event */
    public static final int EVENT_REQUEST_OBJECT_TRANSFER = 0x4009;
    /** Event code for STORE_FULL event */
    public static final int EVENT_STORE_FULL = 0x400A;
    /** Event code for DEVICE_RESET event */
    public static final int EVENT_DEVICE_RESET = 0x400B;
    /** Event code for STORAGE_INFO_CHANGED event */
    public static final int EVENT_STORAGE_INFO_CHANGED = 0x400C;
    /** Event code for CAPTURE_COMPLETE event */
    public static final int EVENT_CAPTURE_COMPLETE = 0x400D;
    /** Event code for UNREPORTED_STATUS event */
    public static final int EVENT_UNREPORTED_STATUS = 0x400E;
    /** Event code for OBJECT_PROP_CHANGED event */
    public static final int EVENT_OBJECT_PROP_CHANGED = 0xC801;
    /** Event code for OBJECT_PROP_DESC_CHANGED event */
    public static final int EVENT_OBJECT_PROP_DESC_CHANGED = 0xC802;
    /** Event code for OBJECT_REFERENCES_CHANGED event */
    public static final int EVENT_OBJECT_REFERENCES_CHANGED = 0xC803;

    private int mEventCode = EVENT_UNDEFINED;

    // Parameters for event. The interpretation of event parameters depends upon mEventCode.
    private int mParameter1;
    private int mParameter2;
    private int mParameter3;

    /**
     * MtpEvent is instantiated by JNI.
     */
    private MtpEvent() {}

    /**
     * Returns event code of MTP event.
     * See the USB-IF MTP specification for the details of event constants.
     * @return event code
     */
    public int getEventCode() { return mEventCode; }

    /**
     * Obtains the first event parameter.
     */
    public int getParameter1() { return mParameter1; }

    /**
     * Obtains the second event parameter.
     */
    public int getParameter2() { return mParameter2; }

    /**
     * Obtains the third event parameter.
     */
    public int getParameter3() { return mParameter3; }

    /**
     * Obtains objectHandle event parameter.
     *
     * @see #EVENT_OBJECT_ADDED
     * @see #EVENT_OBJECT_REMOVED
     * @see #EVENT_OBJECT_INFO_CHANGED
     * @see #EVENT_REQUEST_OBJECT_TRANSFER
     * @see #EVENT_OBJECT_PROP_CHANGED
     * @see #EVENT_OBJECT_REFERENCES_CHANGED
     */
    public int getObjectHandle() {
        switch (mEventCode) {
            case EVENT_OBJECT_ADDED:
                return mParameter1;
            case EVENT_OBJECT_REMOVED:
                return mParameter1;
            case EVENT_OBJECT_INFO_CHANGED:
                return mParameter1;
            case EVENT_REQUEST_OBJECT_TRANSFER:
                return mParameter1;
            case EVENT_OBJECT_PROP_CHANGED:
                return mParameter1;
            case EVENT_OBJECT_REFERENCES_CHANGED:
                return mParameter1;
            default:
                throw new IllegalParameterAccess("objectHandle", mEventCode);
        }
    }

    /**
     * Obtains storageID event parameter.
     *
     * @see #EVENT_STORE_ADDED
     * @see #EVENT_STORE_REMOVED
     * @see #EVENT_STORE_FULL
     * @see #EVENT_STORAGE_INFO_CHANGED
     */
    public int getStorageId() {
        switch (mEventCode) {
            case EVENT_STORE_ADDED:
                return mParameter1;
            case EVENT_STORE_REMOVED:
                return mParameter1;
            case EVENT_STORE_FULL:
                return mParameter1;
            case EVENT_STORAGE_INFO_CHANGED:
                return mParameter1;
            default:
                throw new IllegalParameterAccess("storageID", mEventCode);
        }
    }

    /**
     * Obtains devicePropCode event parameter.
     *
     * @see #EVENT_DEVICE_PROP_CHANGED
     */
    public int getDevicePropCode() {
        switch (mEventCode) {
            case EVENT_DEVICE_PROP_CHANGED:
                return mParameter1;
            default:
                throw new IllegalParameterAccess("devicePropCode", mEventCode);
        }
    }

    /**
     * Obtains transactionID event parameter.
     *
     * @see #EVENT_CAPTURE_COMPLETE
     */
    public int getTransactionId() {
        switch (mEventCode) {
            case EVENT_CAPTURE_COMPLETE:
                return mParameter1;
            default:
                throw new IllegalParameterAccess("transactionID", mEventCode);
        }
    }

    /**
     * Obtains objectPropCode event parameter.
     *
     * @see #EVENT_OBJECT_PROP_CHANGED
     * @see #EVENT_OBJECT_PROP_DESC_CHANGED
     */
    public int getObjectPropCode() {
        switch (mEventCode) {
            case EVENT_OBJECT_PROP_CHANGED:
                return mParameter2;
            case EVENT_OBJECT_PROP_DESC_CHANGED:
                return mParameter1;
            default:
                throw new IllegalParameterAccess("objectPropCode", mEventCode);
        }
    }

    /**
     * Obtains objectFormatCode event parameter.
     *
     * @see #EVENT_OBJECT_PROP_DESC_CHANGED
     */
    public int getObjectFormatCode() {
        switch (mEventCode) {
            case EVENT_OBJECT_PROP_DESC_CHANGED:
                return mParameter2;
            default:
                throw new IllegalParameterAccess("objectFormatCode", mEventCode);
        }
    }

    private static class IllegalParameterAccess extends UnsupportedOperationException {
        public IllegalParameterAccess(String propertyName, int eventCode) {
            super("Cannot obtain " + propertyName + " for the event: " + eventCode + ".");
        }
    }
}