1e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood/*
2e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood * Copyright (C) 2010 The Android Open Source Project
3e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood *
4e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
5e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood * you may not use this file except in compliance with the License.
6e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood * You may obtain a copy of the License at
7e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood *
8e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
9e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood *
10e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood * Unless required by applicable law or agreed to in writing, software
11e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
12e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood * See the License for the specific language governing permissions and
14e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood * limitations under the License.
15e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood */
16e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood
170cd0136d440cf6ad9d5fab430269116786e671ecMike Lockwoodpackage android.mtp;
18e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood
19f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhangimport java.util.ArrayList;
20f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhangimport java.util.List;
21f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang
22e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood/**
23e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood * Encapsulates the ObjectPropList dataset used by the GetObjectPropList command.
24e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood * The fields of this class are read by JNI code in android_media_MtpDatabase.cpp
25e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood */
26e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood
277d7fb63071ca370f77ed69055ac30341b8388d15Mike Lockwoodclass MtpPropertyList {
28e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood
29e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood    // list of object handles (first field in quadruplet)
30f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    private List<Integer> mObjectHandles;
31f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    // list of object property codes (second field in quadruplet)
32f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    private List<Integer> mPropertyCodes;
33e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood    // list of data type codes (third field in quadruplet)
34f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    private List<Integer> mDataTypes;
35e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood    // list of long int property values (fourth field in quadruplet, when value is integer type)
36f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    private List<Long> mLongValues;
37e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood    // list of long int property values (fourth field in quadruplet, when value is string type)
38f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    private List<String> mStringValues;
39f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang
40f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    // Return value of this operation
41f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    private int mCode;
42f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang
43f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    public MtpPropertyList(int code) {
44f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mCode = code;
45f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mObjectHandles = new ArrayList<>();
46f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mPropertyCodes = new ArrayList<>();
47f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mDataTypes = new ArrayList<>();
48f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mLongValues = new ArrayList<>();
49f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mStringValues = new ArrayList<>();
50e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood    }
51e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood
527d7fb63071ca370f77ed69055ac30341b8388d15Mike Lockwood    public void append(int handle, int property, int type, long value) {
53f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mObjectHandles.add(handle);
54f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mPropertyCodes.add(property);
55f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mDataTypes.add(type);
56f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mLongValues.add(value);
57f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mStringValues.add(null);
58e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood    }
59e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood
607d7fb63071ca370f77ed69055ac30341b8388d15Mike Lockwood    public void append(int handle, int property, String value) {
61f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mObjectHandles.add(handle);
62f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mPropertyCodes.add(property);
63f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mDataTypes.add(MtpConstants.TYPE_STR);
64f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mStringValues.add(value);
65f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        mLongValues.add(0L);
66f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    }
67f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang
68f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    public int getCode() {
69f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        return mCode;
70f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    }
71f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang
72f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    public int getCount() {
73f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        return mObjectHandles.size();
74f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    }
75f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang
76f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    public int[] getObjectHandles() {
77f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        return mObjectHandles.stream().mapToInt(Integer::intValue).toArray();
78f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    }
79f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang
80f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    public int[] getPropertyCodes() {
81f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        return mPropertyCodes.stream().mapToInt(Integer::intValue).toArray();
82f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    }
83f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang
84f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    public int[] getDataTypes() {
85f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        return mDataTypes.stream().mapToInt(Integer::intValue).toArray();
86f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    }
87f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang
88f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    public long[] getLongValues() {
89f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        return mLongValues.stream().mapToLong(Long::longValue).toArray();
90e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood    }
91e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood
92f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang    public String[] getStringValues() {
93f9c5c2574d95b6d233ebae8beae110f4e15c52c5Jerry Zhang        return mStringValues.toArray(new String[0]);
94e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood    }
95e2ad6ec1718ef0c0e8230f8f62e7cfefcf598b6aMike Lockwood}
96