18182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood/* 28182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Copyright (C) 2010 The Android Open Source Project 38182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 48182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 58182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * you may not use this file except in compliance with the License. 68182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * You may obtain a copy of the License at 78182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 88182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 98182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 108182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Unless required by applicable law or agreed to in writing, software 118182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 128182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * See the License for the specific language governing permissions and 148182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * limitations under the License. 158182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 168182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 178182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwoodpackage android.mtp; 188182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 190639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hironoimport android.annotation.NonNull; 200639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hironoimport android.os.Build; 210639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono 22e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hironoimport com.android.internal.util.Preconditions; 23e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono 240639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hironoimport dalvik.system.VMRuntime; 250639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono 268182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood/** 278182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * This class encapsulates information about an object on an MTP device. 288182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * This corresponds to the ObjectInfo Dataset described in 298182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * section 5.3.1 of the MTP specification. 308182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 318182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwoodpublic final class MtpObjectInfo { 328182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mHandle; 338182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mStorageId; 348182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mFormat; 358182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mProtectionStatus; 368182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mCompressedSize; 378182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mThumbFormat; 388182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mThumbCompressedSize; 398182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mThumbPixWidth; 408182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mThumbPixHeight; 418182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mImagePixWidth; 428182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mImagePixHeight; 438182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mImagePixDepth; 448182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mParent; 458182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mAssociationType; 468182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mAssociationDesc; 478182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private int mSequenceNumber; 480639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono private String mName = ""; 498182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private long mDateCreated; 508182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private long mDateModified; 510639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono private String mKeywords = ""; 528182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 53b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski // only instantiated via JNI or via a builder 548182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private MtpObjectInfo() { 558182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 568182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 578182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 588182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the object handle for the MTP object 598182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 608182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the object handle 618182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 628182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getObjectHandle() { 638182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mHandle; 648182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 658182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 668182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 678182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the storage ID for the MTP object's storage unit 688182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 698182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the storage ID 708182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 718182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getStorageId() { 728182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mStorageId; 738182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 748182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 758182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 768182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the format code for the MTP object 778182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 788182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the format code 798182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 808182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getFormat() { 818182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mFormat; 828182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 838182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 848182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 858182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the protection status for the MTP object 868182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Possible values are: 878182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 888182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * <ul> 898182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * <li> {@link android.mtp.MtpConstants#PROTECTION_STATUS_NONE} 908182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * <li> {@link android.mtp.MtpConstants#PROTECTION_STATUS_READ_ONLY} 918182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * <li> {@link android.mtp.MtpConstants#PROTECTION_STATUS_NON_TRANSFERABLE_DATA} 928182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * </ul> 938182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 948182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the protection status 958182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 968182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getProtectionStatus() { 978182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mProtectionStatus; 988182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 998182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 1008182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 1018182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the size of the MTP object 1028182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 1038182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the object size 1048182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 1058182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getCompressedSize() { 106e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono Preconditions.checkState(mCompressedSize >= 0); 1078182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mCompressedSize; 1088182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1098182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 1108182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 111e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Returns the size of the MTP object 112e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * 113e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * @return the object size 114e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono */ 115e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public final long getCompressedSizeLong() { 116e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono return uint32ToLong(mCompressedSize); 117e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono } 118e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono 119e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono /** 1208182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the format code for the MTP object's thumbnail 1218182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Will be zero for objects with no thumbnail 1228182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 1238182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the thumbnail format code 1248182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 1258182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getThumbFormat() { 1268182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mThumbFormat; 1278182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1288182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 1298182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 1308182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the size of the MTP object's thumbnail 1318182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Will be zero for objects with no thumbnail 1328182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 1338182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the thumbnail size 1348182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 1358182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getThumbCompressedSize() { 136e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono Preconditions.checkState(mThumbCompressedSize >= 0); 1378182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mThumbCompressedSize; 1388182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1398182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 1408182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 141e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Returns the size of the MTP object's thumbnail 142e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Will be zero for objects with no thumbnail 143e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * 144e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * @return the thumbnail size 145e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono */ 146e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public final long getThumbCompressedSizeLong() { 147e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono return uint32ToLong(mThumbCompressedSize); 148e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono } 149e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono 150e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono /** 1518182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the width of the MTP object's thumbnail in pixels 1528182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Will be zero for objects with no thumbnail 1538182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 1548182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the thumbnail width 1558182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 1568182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getThumbPixWidth() { 157e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono Preconditions.checkState(mThumbPixWidth >= 0); 1588182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mThumbPixWidth; 1598182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1608182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 1618182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 162e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Returns the width of the MTP object's thumbnail in pixels 163e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Will be zero for objects with no thumbnail 164e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * 165e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * @return the thumbnail width 166e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono */ 167e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public final long getThumbPixWidthLong() { 168e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono return uint32ToLong(mThumbPixWidth); 169e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono } 170e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono 171e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono /** 1728182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the height of the MTP object's thumbnail in pixels 1738182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Will be zero for objects with no thumbnail 1748182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 1758182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the thumbnail height 1768182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 1778182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getThumbPixHeight() { 178e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono Preconditions.checkState(mThumbPixHeight >= 0); 1798182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mThumbPixHeight; 1808182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1818182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 1828182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 183e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Returns the height of the MTP object's thumbnail in pixels 184e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Will be zero for objects with no thumbnail 185e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * 186e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * @return the thumbnail height 187e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono */ 188e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public final long getThumbPixHeightLong() { 189e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono return uint32ToLong(mThumbPixHeight); 190e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono } 191e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono 192e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono /** 1938182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the width of the MTP object in pixels 1948182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Will be zero for non-image objects 1958182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 1968182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the image width 1978182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 1988182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getImagePixWidth() { 199e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono Preconditions.checkState(mImagePixWidth >= 0); 2008182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mImagePixWidth; 2018182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 2028182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 2038182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 204e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Returns the width of the MTP object in pixels 205e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Will be zero for non-image objects 206e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * 207e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * @return the image width 208e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono */ 209e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public final long getImagePixWidthLong() { 210e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono return uint32ToLong(mImagePixWidth); 211e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono } 212e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono 213e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono /** 2148182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the height of the MTP object in pixels 2158182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Will be zero for non-image objects 2168182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 2178182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the image height 2188182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 2198182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getImagePixHeight() { 220e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono Preconditions.checkState(mImagePixHeight >= 0); 2218182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mImagePixHeight; 2228182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 2238182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 2248182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 225e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Returns the height of the MTP object in pixels 226e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Will be zero for non-image objects 227e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * 228e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * @return the image height 229e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono */ 230e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public final long getImagePixHeightLong() { 231e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono return uint32ToLong(mImagePixHeight); 232e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono } 233e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono 234e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono /** 2358182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the depth of the MTP object in bits per pixel 2368182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Will be zero for non-image objects 2378182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 2388182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the image depth 2398182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 2408182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getImagePixDepth() { 241e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono Preconditions.checkState(mImagePixDepth >= 0); 2428182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mImagePixDepth; 2438182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 2448182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 2458182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 246e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Returns the depth of the MTP object in bits per pixel 247e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Will be zero for non-image objects 248e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * 249e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * @return the image depth 250e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono */ 251e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public final long getImagePixDepthLong() { 252e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono return uint32ToLong(mImagePixDepth); 253e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono } 254e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono 255e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono /** 2568182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the object handle for the object's parent 2578182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Will be zero for the root directory of a storage unit 2588182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 2598182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the object's parent 2608182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 2618182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getParent() { 2628182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mParent; 2638182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 2648182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 2658182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 2668182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the association type for the MTP object 2678182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Will be zero objects that are not of format 2688182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * {@link android.mtp.MtpConstants#FORMAT_ASSOCIATION} 2698182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * For directories the association type is typically 2708182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * {@link android.mtp.MtpConstants#ASSOCIATION_TYPE_GENERIC_FOLDER} 2718182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 2728182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the object's association type 2738182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 2748182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getAssociationType() { 2758182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mAssociationType; 2768182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 2778182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 2788182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 2798182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the association description for the MTP object 2808182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Will be zero objects that are not of format 2818182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * {@link android.mtp.MtpConstants#FORMAT_ASSOCIATION} 2828182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 2838182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the object's association description 2848182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 2858182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getAssociationDesc() { 2868182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mAssociationDesc; 2878182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 2888182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 289e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono /** 2908182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the sequence number for the MTP object 2918182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * This field is typically not used for MTP devices, 2928182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * but is sometimes used to define a sequence of photos 2938182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * on PTP cameras. 2948182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 2958182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the object's sequence number 2968182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 2978182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final int getSequenceNumber() { 298e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono Preconditions.checkState(mSequenceNumber >= 0); 2998182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mSequenceNumber; 3008182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 3018182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 302e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono /** 303e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * Returns the sequence number for the MTP object 304e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * This field is typically not used for MTP devices, 305e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * but is sometimes used to define a sequence of photos 306e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * on PTP cameras. 307e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * 308e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono * @return the object's sequence number 309e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono */ 310e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public final long getSequenceNumberLong() { 311e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono return uint32ToLong(mSequenceNumber); 312e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono } 313e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono 3148182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 3158182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the name of the MTP object 3168182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 3178182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the object's name 3188182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 3190639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono public final @NonNull String getName() { 3208182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mName; 3218182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 3228182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 3238182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 3248182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the creation date of the MTP object 3258182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * The value is represented as milliseconds since January 1, 1970 3268182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 3278182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the object's creation date 3288182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 3298182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final long getDateCreated() { 3308182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mDateCreated; 3318182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 3328182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 3338182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 3348182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns the modification date of the MTP object 3358182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * The value is represented as milliseconds since January 1, 1970 3368182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 3378182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the object's modification date 3388182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 3398182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public final long getDateModified() { 3408182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mDateModified; 3418182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 3428182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 3438182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood /** 3448182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Returns a comma separated list of keywords for the MTP object 3458182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 3468182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * @return the object's keyword list 3478182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 3480639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono public final @NonNull String getKeywords() { 3498182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mKeywords; 3508182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 351b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 352b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski /** 353b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski * Builds a new object info instance. 354b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski */ 35587763e6a91a54e7995cfda9b7e80162f02ac4cbcTomasz Mikolajewski public static class Builder { 356b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski private MtpObjectInfo mObjectInfo; 357b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 358b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public Builder() { 359b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo = new MtpObjectInfo(); 360b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mHandle = -1; 361b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 362b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 363b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski /** 364b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski * Creates a builder on a copy of an existing object info. 365b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski * All fields, except the object handle will be copied. 366b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski * 367b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski * @param objectInfo object info of an existing entry 368b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski */ 369b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public Builder(MtpObjectInfo objectInfo) { 370b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo = new MtpObjectInfo(); 371b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mHandle = -1; 372b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mAssociationDesc = objectInfo.mAssociationDesc; 373b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mAssociationType = objectInfo.mAssociationType; 374b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mCompressedSize = objectInfo.mCompressedSize; 375b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mDateCreated = objectInfo.mDateCreated; 376b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mDateModified = objectInfo.mDateModified; 377b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mFormat = objectInfo.mFormat; 378b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mImagePixDepth = objectInfo.mImagePixDepth; 379b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mImagePixHeight = objectInfo.mImagePixHeight; 380b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mImagePixWidth = objectInfo.mImagePixWidth; 381b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mKeywords = objectInfo.mKeywords; 382b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mName = objectInfo.mName; 383b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mParent = objectInfo.mParent; 384b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mProtectionStatus = objectInfo.mProtectionStatus; 385b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mSequenceNumber = objectInfo.mSequenceNumber; 386b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mStorageId = objectInfo.mStorageId; 387b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mThumbCompressedSize = objectInfo.mThumbCompressedSize; 388b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mThumbFormat = objectInfo.mThumbFormat; 389b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mThumbPixHeight = objectInfo.mThumbPixHeight; 390b80a3cfd05fc7492dd59b7f8d4337eb5e29088c2Tomasz Mikolajewski mObjectInfo.mThumbPixWidth = objectInfo.mThumbPixWidth; 391b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 392b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 393bb430fa930fa0d0700e46e7b4881de2a252223ddTomasz Mikolajewski public Builder setObjectHandle(int value) { 394bb430fa930fa0d0700e46e7b4881de2a252223ddTomasz Mikolajewski mObjectInfo.mHandle = value; 395bb430fa930fa0d0700e46e7b4881de2a252223ddTomasz Mikolajewski return this; 396bb430fa930fa0d0700e46e7b4881de2a252223ddTomasz Mikolajewski } 397bb430fa930fa0d0700e46e7b4881de2a252223ddTomasz Mikolajewski 398b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public Builder setAssociationDesc(int value) { 399b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mAssociationDesc = value; 400b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 401b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 402b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 403b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public Builder setAssociationType(int value) { 404b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mAssociationType = value; 405b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 406b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 407b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 408e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public Builder setCompressedSize(long value) { 409e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono mObjectInfo.mCompressedSize = longToUint32(value, "value"); 410b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 411b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 412b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 413b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public Builder setDateCreated(long value) { 414b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mDateCreated = value; 415b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 416b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 417b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 418b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public Builder setDateModified(long value) { 419b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mDateModified = value; 420b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 421b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 422b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 423b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public Builder setFormat(int value) { 424b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mFormat = value; 425b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 426b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 427b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 428e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public Builder setImagePixDepth(long value) { 429e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono mObjectInfo.mImagePixDepth = longToUint32(value, "value"); 430b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 431b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 432b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 433e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public Builder setImagePixHeight(long value) { 434e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono mObjectInfo.mImagePixHeight = longToUint32(value, "value"); 435b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 436b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 437b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 438e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public Builder setImagePixWidth(long value) { 439e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono mObjectInfo.mImagePixWidth = longToUint32(value, "value"); 440b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 441b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 442b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 4430639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono public Builder setKeywords(@NonNull String value) { 4440639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono if (VMRuntime.getRuntime().getTargetSdkVersion() > Build.VERSION_CODES.N_MR1) { 4450639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono Preconditions.checkNotNull(value); 4460639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono } else if (value == null) { 4470639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono // Before N_MR1 we accept null value and it was regarded as an empty string in 4480639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono // MtpDevice#sendObjectInfo. 4490639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono value = ""; 4500639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono } 451b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mKeywords = value; 452b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 453b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 454b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 4550639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono public Builder setName(@NonNull String value) { 4560639fe0aa9d87bae7745e60238d48c79f986b590Daichi Hirono Preconditions.checkNotNull(value); 457b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mName = value; 458b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 459b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 460b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 461b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public Builder setParent(int value) { 462b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mParent = value; 463b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 464b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 465b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 466b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public Builder setProtectionStatus(int value) { 467b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mProtectionStatus = value; 468b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 469b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 470b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 471e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public Builder setSequenceNumber(long value) { 472e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono mObjectInfo.mSequenceNumber = longToUint32(value, "value"); 473b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 474b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 475b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 476b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public Builder setStorageId(int value) { 477b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mStorageId = value; 478b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 479b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 480b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 481e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public Builder setThumbCompressedSize(long value) { 482e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono mObjectInfo.mThumbCompressedSize = longToUint32(value, "value"); 483b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 484b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 485b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 486b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public Builder setThumbFormat(int value) { 487b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo.mThumbFormat = value; 488b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 489b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 490b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 491e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public Builder setThumbPixHeight(long value) { 492e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono mObjectInfo.mThumbPixHeight = longToUint32(value, "value"); 493b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 494b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 495b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 496e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono public Builder setThumbPixWidth(long value) { 497e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono mObjectInfo.mThumbPixWidth = longToUint32(value, "value"); 498b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return this; 499b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 500b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski 501b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski /** 502b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski * Builds the object info instance. Once called, methods of the builder 503b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski * must not be called anymore. 504b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski * 505b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski * @return the object info of the newly created file, or NULL in case 506b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski * of an error. 507b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski */ 508b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski public MtpObjectInfo build() { 509b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski MtpObjectInfo result = mObjectInfo; 510b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski mObjectInfo = null; 511b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski return result; 512b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 513b04990599a1a05cc922b0fe9dd98128440efb56aTomasz Mikolajewski } 514e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono 515e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono private static long uint32ToLong(int value) { 516e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono return value < 0 ? 0x100000000L + value : value; 517e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono } 518e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono 519e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono private static int longToUint32(long value, String valueName) { 520e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono Preconditions.checkArgumentInRange(value, 0, 0xffffffffL, valueName); 521e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono return (int) value; 522e0e6654a31ad01fe4712dec0358ad95f8d3c8c8dDaichi Hirono } 5238182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood} 524