StorageVolume.java revision a5250c93928e256738125b265e10c96c3575597e
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 192f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodimport android.os.Bundle; 202f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodimport android.os.Parcel; 212f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodimport android.os.Parcelable; 222f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodimport android.util.Log; 232f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 242f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood/** 252f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * A class representing a storage volume 262f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @hide 272f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 282f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodpublic class StorageVolume implements Parcelable { 292f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 302f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private static final String TAG = "StorageVolume"; 312f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 322f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private final String mPath; 332f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private final String mDescription; 342f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private final boolean mRemovable; 352f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private final boolean mEmulated; 362f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood private final int mMtpReserveSpace; 37fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood private int mStorageId; 382f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 39a5250c93928e256738125b265e10c96c3575597eMike Lockwood // StorageVolume extra for ACTION_MEDIA_REMOVED, ACTION_MEDIA_UNMOUNTED, ACTION_MEDIA_CHECKING, 40a5250c93928e256738125b265e10c96c3575597eMike Lockwood // ACTION_MEDIA_NOFS, ACTION_MEDIA_MOUNTED, ACTION_MEDIA_SHARED, ACTION_MEDIA_UNSHARED, 41a5250c93928e256738125b265e10c96c3575597eMike Lockwood // ACTION_MEDIA_BAD_REMOVAL, ACTION_MEDIA_UNMOUNTABLE and ACTION_MEDIA_EJECT broadcasts. 42a5250c93928e256738125b265e10c96c3575597eMike Lockwood public static final String EXTRA_STORAGE_VOLUME = "storage_volume"; 43a5250c93928e256738125b265e10c96c3575597eMike Lockwood 442f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public StorageVolume(String path, String description, 45fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood boolean removable, boolean emulated, int mtpReserveSpace) { 462f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mPath = path; 472f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mDescription = description; 482f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mRemovable = removable; 492f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mEmulated = emulated; 502f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood mMtpReserveSpace = mtpReserveSpace; 512f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 522f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 53fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood // for parcelling only 54fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood private StorageVolume(String path, String description, 55fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood boolean removable, boolean emulated, int mtpReserveSpace, int storageId) { 56fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood mPath = path; 57fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood mDescription = description; 58fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood mRemovable = removable; 59fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood mEmulated = emulated; 60fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood mMtpReserveSpace = mtpReserveSpace; 61fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood mStorageId = storageId; 62fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood } 63fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood 642f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 652f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns the mount path for the volume. 662f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 672f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return the mount path 682f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 692f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public String getPath() { 702f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mPath; 712f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 722f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 732f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 742f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns a user visible description of the volume. 752f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 762f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return the volume description 772f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 782f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public String getDescription() { 792f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mDescription; 802f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 812f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 822f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 832f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns true if the volume is removable. 842f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 852f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return is removable 862f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 872f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public boolean isRemovable() { 882f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mRemovable; 892f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 902f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 912f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 922f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Returns true if the volume is emulated. 932f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 942f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return is removable 952f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 962f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public boolean isEmulated() { 972f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mEmulated; 982f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 992f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1002f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood /** 101fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * Returns the MTP storage ID for the volume. 102fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * this is also used for the storage_id column in the media provider. 103fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * 104fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * @return MTP storage ID 105fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood */ 106fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood public int getStorageId() { 107fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood return mStorageId; 108fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood } 109fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood 110fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood /** 111fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood * Do not call this unless you are MountService 112fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood */ 113fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood public void setStorageId(int index) { 114fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood // storage ID is 0x00010001 for primary storage, 115fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood // then 0x00020001, 0x00030001, etc. for secondary storages 116fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood mStorageId = ((index + 1) << 16) + 1; 117fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood } 118fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood 119fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood /** 1202f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * Number of megabytes of space to leave unallocated by MTP. 1212f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * MTP will subtract this value from the free space it reports back 1222f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * to the host via GetStorageInfo, and will not allow new files to 1232f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * be added via MTP if there is less than this amount left free in the storage. 1242f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * If MTP has dedicated storage this value should be zero, but if MTP is 1252f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * sharing storage with the rest of the system, set this to a positive value 1262f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * to ensure that MTP activity does not result in the storage being 1272f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * too close to full. 1282f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * 1292f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood * @return MTP reserve space 1302f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood */ 1312f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public int getMtpReserveSpace() { 1322f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mMtpReserveSpace; 1332f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1342f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1352f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood @Override 1362f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public boolean equals(Object obj) { 1372f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood if (obj instanceof StorageVolume && mPath != null) { 1382f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood StorageVolume volume = (StorageVolume)obj; 1392f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return (mPath.equals(volume.mPath)); 1402f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1412f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return false; 1422f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1432f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1442f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood @Override 1452f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public int hashCode() { 1462f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mPath.hashCode(); 1472f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1482f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1492f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood @Override 1502f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public String toString() { 1512f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return mPath; 1522f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1532f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1542f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public static final Parcelable.Creator<StorageVolume> CREATOR = 1552f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood new Parcelable.Creator<StorageVolume>() { 1562f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public StorageVolume createFromParcel(Parcel in) { 1572f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood String path = in.readString(); 1582f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood String description = in.readString(); 1592f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood int removable = in.readInt(); 1602f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood int emulated = in.readInt(); 161fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood int storageId = in.readInt(); 1622f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood int mtpReserveSpace = in.readInt(); 1632f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return new StorageVolume(path, description, 164fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood removable == 1, emulated == 1, 165fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood mtpReserveSpace, storageId); 1662f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1672f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1682f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public StorageVolume[] newArray(int size) { 1692f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return new StorageVolume[size]; 1702f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1712f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood }; 1722f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1732f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public int describeContents() { 1742f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood return 0; 1752f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1762f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood 1772f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public void writeToParcel(Parcel parcel, int flags) { 1782f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood parcel.writeString(mPath); 1792f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood parcel.writeString(mDescription); 1802f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood parcel.writeInt(mRemovable ? 1 : 0); 1812f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood parcel.writeInt(mEmulated ? 1 : 0); 182fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood parcel.writeInt(mStorageId); 1832f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood parcel.writeInt(mMtpReserveSpace); 1842f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood } 1852f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood} 186