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 245aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkeyimport com.android.internal.util.IndentingPrintWriter; 255aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey 265aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkeyimport java.io.CharArrayWriter; 27b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkeyimport java.io.File; 282f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 292f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood/** 30b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey * Description of a storage volume and its capabilities, including the 31b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey * filesystem path where it may be mounted. 32b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey * 332f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @hide 342f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 352f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodpublic class StorageVolume implements Parcelable { 362f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 37b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey // TODO: switch to more durable token 389545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey private int mStorageId; 392f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 40b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey private final File mPath; 4113fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio private final int mDescriptionId; 429545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey private final boolean mPrimary; 432f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private final boolean mRemovable; 442f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private final boolean mEmulated; 452f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private final int mMtpReserveSpace; 468e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood private final boolean mAllowMassStorage; 479545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey /** Maximum file size for the storage, or zero for no limit */ 487a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood private final long mMaxFileSize; 49b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey /** When set, indicates exclusive ownership of this volume */ 50b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey private final UserHandle mOwner; 512f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 525aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey private String mUuid; 535aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey private String mUserLabel; 541f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey private String mState; 555aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey 56a5250c93928e256738125b265e10c96c3575597eMike Lockwood // StorageVolume extra for ACTION_MEDIA_REMOVED, ACTION_MEDIA_UNMOUNTED, ACTION_MEDIA_CHECKING, 57a5250c93928e256738125b265e10c96c3575597eMike Lockwood // ACTION_MEDIA_NOFS, ACTION_MEDIA_MOUNTED, ACTION_MEDIA_SHARED, ACTION_MEDIA_UNSHARED, 58a5250c93928e256738125b265e10c96c3575597eMike Lockwood // ACTION_MEDIA_BAD_REMOVAL, ACTION_MEDIA_UNMOUNTABLE and ACTION_MEDIA_EJECT broadcasts. 59a5250c93928e256738125b265e10c96c3575597eMike Lockwood public static final String EXTRA_STORAGE_VOLUME = "storage_volume"; 60a5250c93928e256738125b265e10c96c3575597eMike Lockwood 61b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public StorageVolume(File path, int descriptionId, boolean primary, boolean removable, 62b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey boolean emulated, int mtpReserveSpace, boolean allowMassStorage, long maxFileSize, 63b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey UserHandle owner) { 642f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mPath = path; 6513fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio mDescriptionId = descriptionId; 669545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey mPrimary = primary; 672f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mRemovable = removable; 682f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mEmulated = emulated; 692f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mMtpReserveSpace = mtpReserveSpace; 708e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood mAllowMassStorage = allowMassStorage; 717a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood mMaxFileSize = maxFileSize; 72b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mOwner = owner; 732f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 742f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 759545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey private StorageVolume(Parcel in) { 769545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey mStorageId = in.readInt(); 77b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mPath = new File(in.readString()); 789545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey mDescriptionId = in.readInt(); 79b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mPrimary = in.readInt() != 0; 80b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mRemovable = in.readInt() != 0; 81b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mEmulated = in.readInt() != 0; 829545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey mMtpReserveSpace = in.readInt(); 83b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mAllowMassStorage = in.readInt() != 0; 849545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey mMaxFileSize = in.readLong(); 85b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey mOwner = in.readParcelable(null); 865aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey mUuid = in.readString(); 875aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey mUserLabel = in.readString(); 881f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey mState = in.readString(); 89b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey } 90b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey 91b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public static StorageVolume fromTemplate(StorageVolume template, File path, UserHandle owner) { 92b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey return new StorageVolume(path, template.mDescriptionId, template.mPrimary, 93b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey template.mRemovable, template.mEmulated, template.mMtpReserveSpace, 94b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey template.mAllowMassStorage, template.mMaxFileSize, owner); 95fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood } 96fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood 972f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 982f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns the mount path for the volume. 992f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 1002f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return the mount path 1012f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 1022f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public String getPath() { 103b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey return mPath.toString(); 104b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey } 105b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey 106b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public File getPathFile() { 1072f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mPath; 1082f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1092f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1102f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 1112f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns a user visible description of the volume. 1122f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 1132f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return the volume description 1142f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 11513fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio public String getDescription(Context context) { 11613fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio return context.getResources().getString(mDescriptionId); 11713fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio } 11813fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio 11913fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio public int getDescriptionId() { 12013fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio return mDescriptionId; 1212f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1222f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1239545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey public boolean isPrimary() { 1249545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey return mPrimary; 1259545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey } 1269545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey 1272f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 1282f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns true if the volume is removable. 1292f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 1302f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return is removable 1312f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 1322f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public boolean isRemovable() { 1332f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mRemovable; 1342f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1352f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1362f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 1372f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns true if the volume is emulated. 1382f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 1392f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return is removable 1402f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 1412f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public boolean isEmulated() { 1422f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mEmulated; 1432f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1442f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1452f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 146fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * Returns the MTP storage ID for the volume. 147fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * this is also used for the storage_id column in the media provider. 148fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * 149fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * @return MTP storage ID 150fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood */ 151fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood public int getStorageId() { 152fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood return mStorageId; 153fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood } 154fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood 155fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood /** 156fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * Do not call this unless you are MountService 157fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood */ 158fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood public void setStorageId(int index) { 159fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood // storage ID is 0x00010001 for primary storage, 160fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood // then 0x00020001, 0x00030001, etc. for secondary storages 161fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood mStorageId = ((index + 1) << 16) + 1; 162fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood } 163fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood 164fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood /** 1652f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Number of megabytes of space to leave unallocated by MTP. 1662f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * MTP will subtract this value from the free space it reports back 1672f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * to the host via GetStorageInfo, and will not allow new files to 1682f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * be added via MTP if there is less than this amount left free in the storage. 1692f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * If MTP has dedicated storage this value should be zero, but if MTP is 1702f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * sharing storage with the rest of the system, set this to a positive value 1712f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * to ensure that MTP activity does not result in the storage being 1722f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * too close to full. 1732f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 1742f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return MTP reserve space 1752f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 1762f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public int getMtpReserveSpace() { 1772f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mMtpReserveSpace; 1782f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1792f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1808e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood /** 1818e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood * Returns true if this volume can be shared via USB mass storage. 1828e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood * 1838e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood * @return whether mass storage is allowed 1848e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood */ 1858e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood public boolean allowMassStorage() { 1868e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood return mAllowMassStorage; 1878e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood } 1888e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood 1897a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood /** 1907a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood * Returns maximum file size for the volume, or zero if it is unbounded. 1917a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood * 1927a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood * @return maximum file size 1937a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood */ 1947a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood public long getMaxFileSize() { 1957a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood return mMaxFileSize; 1967a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood } 1977a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood 198b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public UserHandle getOwner() { 199b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey return mOwner; 200b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey } 201b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey 2025aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey public void setUuid(String uuid) { 2035aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey mUuid = uuid; 2045aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey } 2055aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey 2065aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey public String getUuid() { 2075aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey return mUuid; 2085aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey } 2095aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey 2105aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey /** 2115aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey * Parse and return volume UUID as FAT volume ID, or return -1 if unable to 2125aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey * parse or UUID is unknown. 2135aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey */ 2145aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey public int getFatVolumeId() { 2155aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey if (mUuid == null || mUuid.length() != 9) { 2165aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey return -1; 2175aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey } 2185aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey try { 21917d5c1b18132e82abb1b828dcc39ca17cff35dd3Tom Marshall return (int)Long.parseLong(mUuid.replace("-", ""), 16); 2205aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey } catch (NumberFormatException e) { 2215aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey return -1; 2225aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey } 2235aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey } 2245aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey 2255aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey public void setUserLabel(String userLabel) { 2265aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey mUserLabel = userLabel; 2275aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey } 2285aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey 2295aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey public String getUserLabel() { 2305aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey return mUserLabel; 2315aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey } 2325aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey 2331f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey public void setState(String state) { 2341f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey mState = state; 2351f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey } 2361f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey 2371f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey public String getState() { 2381f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey return mState; 2391f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey } 2401f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey 2412f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood @Override 2422f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public boolean equals(Object obj) { 2432f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood if (obj instanceof StorageVolume && mPath != null) { 2442f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood StorageVolume volume = (StorageVolume)obj; 2452f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return (mPath.equals(volume.mPath)); 2462f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2472f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return false; 2482f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2492f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2502f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood @Override 2512f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public int hashCode() { 2522f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mPath.hashCode(); 2532f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2542f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2552f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood @Override 2562f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public String toString() { 2575aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey final CharArrayWriter writer = new CharArrayWriter(); 2585aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey dump(new IndentingPrintWriter(writer, " ", 80)); 2595aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey return writer.toString(); 2605aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey } 2615aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey 2625aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey public void dump(IndentingPrintWriter pw) { 2635aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.println("StorageVolume:"); 2645aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.increaseIndent(); 2655aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mStorageId", mStorageId); 2665aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mPath", mPath); 2675aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mDescriptionId", mDescriptionId); 2685aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mPrimary", mPrimary); 2695aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mRemovable", mRemovable); 2705aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mEmulated", mEmulated); 2715aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mMtpReserveSpace", mMtpReserveSpace); 2725aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mAllowMassStorage", mAllowMassStorage); 2735aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mMaxFileSize", mMaxFileSize); 2745aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mOwner", mOwner); 2755aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mUuid", mUuid); 2765aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.printPair("mUserLabel", mUserLabel); 2771f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey pw.printPair("mState", mState); 2785aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey pw.decreaseIndent(); 2792f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2802f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2819545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey public static final Creator<StorageVolume> CREATOR = new Creator<StorageVolume>() { 2829545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey @Override 2832f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public StorageVolume createFromParcel(Parcel in) { 2849545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey return new StorageVolume(in); 2852f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2862f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2879545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey @Override 2882f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public StorageVolume[] newArray(int size) { 2892f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return new StorageVolume[size]; 2902f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2912f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood }; 2922f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2939545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey @Override 2942f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public int describeContents() { 2952f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return 0; 2962f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 2972f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 2989545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey @Override 2992f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public void writeToParcel(Parcel parcel, int flags) { 3009545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey parcel.writeInt(mStorageId); 301b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey parcel.writeString(mPath.toString()); 30213fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio parcel.writeInt(mDescriptionId); 3039545dc020ea11649d70dcbe911a8e82a3254a4eaJeff Sharkey parcel.writeInt(mPrimary ? 1 : 0); 3042f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood parcel.writeInt(mRemovable ? 1 : 0); 3052f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood parcel.writeInt(mEmulated ? 1 : 0); 3062f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood parcel.writeInt(mMtpReserveSpace); 3078e8b280bd19fa6cb69bb19e1d90cf03a47ba2d72Mike Lockwood parcel.writeInt(mAllowMassStorage ? 1 : 0); 3087a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood parcel.writeLong(mMaxFileSize); 309b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey parcel.writeParcelable(mOwner, flags); 3105aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey parcel.writeString(mUuid); 3115aca2b8dc4f4ff2d466a64587d06666c7bbd9749Jeff Sharkey parcel.writeString(mUserLabel); 3121f706c6cd1cb841adadc2babc57a34e5728983ecJeff Sharkey parcel.writeString(mState); 3132f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 3142f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood} 315