12f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood/* 22f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Copyright (C) 2011 The Android Open Source Project 32f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 42f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 52f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * you may not use this file except in compliance with the License. 62f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * You may obtain a copy of the License at 72f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 82f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 92f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 102f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Unless required by applicable law or agreed to in writing, software 112f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 122f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * See the License for the specific language governing permissions and 142f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * limitations under the License. 152f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 162f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 172f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodpackage android.os.storage; 182f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1913fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglioimport android.content.Context; 202f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodimport android.os.Parcel; 212f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodimport android.os.Parcelable; 22b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkeyimport android.os.UserHandle; 23b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey 24b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkeyimport java.io.File; 252f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 262f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood/** 27b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey * Description of a storage volume and its capabilities, including the 28b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey * filesystem path where it may be mounted. 29b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey * 302f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @hide 312f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 322f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodpublic class StorageVolume implements Parcelable { 332f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 34b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey // TODO: switch to more durable token 359545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey private int mStorageId; 362f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 37b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey private final File mPath; 3813fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio private final int mDescriptionId; 399545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey private final boolean mPrimary; 402f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private final boolean mRemovable; 412f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private final boolean mEmulated; 422f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private final int mMtpReserveSpace; 438e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood private final boolean mAllowMassStorage; 449545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey /** Maximum file size for the storage, or zero for no limit */ 457a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood private final long mMaxFileSize; 46b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey /** When set, indicates exclusive ownership of this volume */ 47b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey private final UserHandle mOwner; 482f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 49a5250c93928e256738125b265e10c96c3575597eMike Lockwood // StorageVolume extra for ACTION_MEDIA_REMOVED, ACTION_MEDIA_UNMOUNTED, ACTION_MEDIA_CHECKING, 50a5250c93928e256738125b265e10c96c3575597eMike Lockwood // ACTION_MEDIA_NOFS, ACTION_MEDIA_MOUNTED, ACTION_MEDIA_SHARED, ACTION_MEDIA_UNSHARED, 51a5250c93928e256738125b265e10c96c3575597eMike Lockwood // ACTION_MEDIA_BAD_REMOVAL, ACTION_MEDIA_UNMOUNTABLE and ACTION_MEDIA_EJECT broadcasts. 52a5250c93928e256738125b265e10c96c3575597eMike Lockwood public static final String EXTRA_STORAGE_VOLUME = "storage_volume"; 53a5250c93928e256738125b265e10c96c3575597eMike Lockwood 54b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public StorageVolume(File path, int descriptionId, boolean primary, boolean removable, 55b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey boolean emulated, int mtpReserveSpace, boolean allowMassStorage, long maxFileSize, 56b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey UserHandle owner) { 572f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mPath = path; 5813fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio mDescriptionId = descriptionId; 599545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey mPrimary = primary; 602f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mRemovable = removable; 612f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mEmulated = emulated; 622f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mMtpReserveSpace = mtpReserveSpace; 638e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood mAllowMassStorage = allowMassStorage; 647a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood mMaxFileSize = maxFileSize; 65b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mOwner = owner; 662f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 672f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 689545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey private StorageVolume(Parcel in) { 699545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey mStorageId = in.readInt(); 70b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mPath = new File(in.readString()); 719545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey mDescriptionId = in.readInt(); 72b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mPrimary = in.readInt() != 0; 73b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mRemovable = in.readInt() != 0; 74b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mEmulated = in.readInt() != 0; 759545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey mMtpReserveSpace = in.readInt(); 76b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mAllowMassStorage = in.readInt() != 0; 779545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey mMaxFileSize = in.readLong(); 78b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mOwner = in.readParcelable(null); 79b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey } 80b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey 81b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public static StorageVolume fromTemplate(StorageVolume template, File path, UserHandle owner) { 82b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey return new StorageVolume(path, template.mDescriptionId, template.mPrimary, 83b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey template.mRemovable, template.mEmulated, template.mMtpReserveSpace, 84b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey template.mAllowMassStorage, template.mMaxFileSize, owner); 85fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood } 86fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood 872f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 882f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns the mount path for the volume. 892f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 902f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return the mount path 912f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 922f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public String getPath() { 93b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey return mPath.toString(); 94b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey } 95b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey 96b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public File getPathFile() { 972f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mPath; 982f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 992f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1002f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 1012f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns a user visible description of the volume. 1022f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 1032f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return the volume description 1042f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 10513fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio public String getDescription(Context context) { 10613fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio return context.getResources().getString(mDescriptionId); 10713fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio } 10813fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio 10913fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio public int getDescriptionId() { 11013fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio return mDescriptionId; 1112f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1122f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1139545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey public boolean isPrimary() { 1149545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey return mPrimary; 1159545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey } 1169545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey 1172f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 1182f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns true if the volume is removable. 1192f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 1202f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return is removable 1212f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 1222f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public boolean isRemovable() { 1232f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mRemovable; 1242f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1252f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1262f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 1272f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns true if the volume is emulated. 1282f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 1292f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return is removable 1302f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 1312f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public boolean isEmulated() { 1322f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mEmulated; 1332f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1342f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1352f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 136fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * Returns the MTP storage ID for the volume. 137fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * this is also used for the storage_id column in the media provider. 138fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * 139fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * @return MTP storage ID 140fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood */ 141fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood public int getStorageId() { 142fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood return mStorageId; 143fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood } 144fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood 145fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood /** 146fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * Do not call this unless you are MountService 147fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood */ 148fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood public void setStorageId(int index) { 149fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood // storage ID is 0x00010001 for primary storage, 150fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood // then 0x00020001, 0x00030001, etc. for secondary storages 151fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood mStorageId = ((index + 1) << 16) + 1; 152fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood } 153fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood 154fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood /** 1552f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Number of megabytes of space to leave unallocated by MTP. 1562f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * MTP will subtract this value from the free space it reports back 1572f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * to the host via GetStorageInfo, and will not allow new files to 1582f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * be added via MTP if there is less than this amount left free in the storage. 1592f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * If MTP has dedicated storage this value should be zero, but if MTP is 1602f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * sharing storage with the rest of the system, set this to a positive value 1612f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * to ensure that MTP activity does not result in the storage being 1622f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * too close to full. 1632f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 1642f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return MTP reserve space 1652f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 1662f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public int getMtpReserveSpace() { 1672f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mMtpReserveSpace; 1682f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1692f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1708e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood /** 1718e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood * Returns true if this volume can be shared via USB mass storage. 1728e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood * 1738e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood * @return whether mass storage is allowed 1748e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood */ 1758e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood public boolean allowMassStorage() { 1768e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood return mAllowMassStorage; 1778e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood } 1788e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood 1797a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood /** 1807a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood * Returns maximum file size for the volume, or zero if it is unbounded. 1817a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood * 1827a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood * @return maximum file size 1837a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood */ 1847a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood public long getMaxFileSize() { 1857a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood return mMaxFileSize; 1867a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood } 1877a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood 188b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public UserHandle getOwner() { 189b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey return mOwner; 190b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey } 191b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey 1922f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood @Override 1932f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public boolean equals(Object obj) { 1942f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood if (obj instanceof StorageVolume && mPath != null) { 1952f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood StorageVolume volume = (StorageVolume)obj; 1962f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return (mPath.equals(volume.mPath)); 1972f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1982f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return false; 1992f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2002f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2012f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood @Override 2022f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public int hashCode() { 2032f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mPath.hashCode(); 2042f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2052f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2062f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood @Override 2072f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public String toString() { 208b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey final StringBuilder builder = new StringBuilder("StorageVolume ["); 209b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey builder.append("mStorageId=").append(mStorageId); 210b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey builder.append(" mPath=").append(mPath); 211b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey builder.append(" mDescriptionId=").append(mDescriptionId); 212b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey builder.append(" mPrimary=").append(mPrimary); 213b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey builder.append(" mRemovable=").append(mRemovable); 214b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey builder.append(" mEmulated=").append(mEmulated); 215b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey builder.append(" mMtpReserveSpace=").append(mMtpReserveSpace); 216b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey builder.append(" mAllowMassStorage=").append(mAllowMassStorage); 217b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey builder.append(" mMaxFileSize=").append(mMaxFileSize); 218b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey builder.append(" mOwner=").append(mOwner); 219b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey builder.append("]"); 220b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey return builder.toString(); 2212f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2222f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2239545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey public static final Creator<StorageVolume> CREATOR = new Creator<StorageVolume>() { 2249545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey @Override 2252f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public StorageVolume createFromParcel(Parcel in) { 2269545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey return new StorageVolume(in); 2272f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2282f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2299545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey @Override 2302f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public StorageVolume[] newArray(int size) { 2312f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return new StorageVolume[size]; 2322f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2332f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood }; 2342f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2359545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey @Override 2362f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public int describeContents() { 2372f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return 0; 2382f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2392f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2409545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey @Override 2412f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public void writeToParcel(Parcel parcel, int flags) { 2429545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey parcel.writeInt(mStorageId); 243b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey parcel.writeString(mPath.toString()); 24413fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio parcel.writeInt(mDescriptionId); 2459545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey parcel.writeInt(mPrimary ? 1 : 0); 2462f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood parcel.writeInt(mRemovable ? 1 : 0); 2472f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood parcel.writeInt(mEmulated ? 1 : 0); 2482f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood parcel.writeInt(mMtpReserveSpace); 2498e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood parcel.writeInt(mAllowMassStorage ? 1 : 0); 2507a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood parcel.writeLong(mMaxFileSize); 251b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey parcel.writeParcelable(mOwner, flags); 2522f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2532f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood} 254