• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.os.storage;
18 
19 import android.os.Parcel;
20 import android.os.Parcelable;
21 
22 /**
23  * A class representing a storage volume
24  * @hide
25  */
26 public class StorageVolume implements Parcelable {
27 
28     //private static final String TAG = "StorageVolume";
29 
30     private final String mPath;
31     private final String mDescription;
32     private final boolean mRemovable;
33     private final boolean mEmulated;
34     private final int mMtpReserveSpace;
35     private final boolean mAllowMassStorage;
36     private int mStorageId;
37     // maximum file size for the storage, or zero for no limit
38     private final long mMaxFileSize;
39 
40     // StorageVolume extra for ACTION_MEDIA_REMOVED, ACTION_MEDIA_UNMOUNTED, ACTION_MEDIA_CHECKING,
41     // ACTION_MEDIA_NOFS, ACTION_MEDIA_MOUNTED, ACTION_MEDIA_SHARED, ACTION_MEDIA_UNSHARED,
42     // ACTION_MEDIA_BAD_REMOVAL, ACTION_MEDIA_UNMOUNTABLE and ACTION_MEDIA_EJECT broadcasts.
43     public static final String EXTRA_STORAGE_VOLUME = "storage_volume";
44 
StorageVolume(String path, String description, boolean removable, boolean emulated, int mtpReserveSpace, boolean allowMassStorage, long maxFileSize)45     public StorageVolume(String path, String description, boolean removable,
46             boolean emulated, int mtpReserveSpace, boolean allowMassStorage, long maxFileSize) {
47         mPath = path;
48         mDescription = description;
49         mRemovable = removable;
50         mEmulated = emulated;
51         mMtpReserveSpace = mtpReserveSpace;
52         mAllowMassStorage = allowMassStorage;
53         mMaxFileSize = maxFileSize;
54     }
55 
56     // for parcelling only
StorageVolume(String path, String description, boolean removable, boolean emulated, int mtpReserveSpace, int storageId, boolean allowMassStorage, long maxFileSize)57     private StorageVolume(String path, String description, boolean removable,
58             boolean emulated, int mtpReserveSpace, int storageId,
59             boolean allowMassStorage, long maxFileSize) {
60         mPath = path;
61         mDescription = description;
62         mRemovable = removable;
63         mEmulated = emulated;
64         mMtpReserveSpace = mtpReserveSpace;
65         mAllowMassStorage = allowMassStorage;
66         mStorageId = storageId;
67         mMaxFileSize = maxFileSize;
68     }
69 
70     /**
71      * Returns the mount path for the volume.
72      *
73      * @return the mount path
74      */
getPath()75     public String getPath() {
76         return mPath;
77     }
78 
79     /**
80      * Returns a user visible description of the volume.
81      *
82      * @return the volume description
83      */
getDescription()84     public String getDescription() {
85         return mDescription;
86     }
87 
88     /**
89      * Returns true if the volume is removable.
90      *
91      * @return is removable
92      */
isRemovable()93     public boolean isRemovable() {
94         return mRemovable;
95     }
96 
97     /**
98      * Returns true if the volume is emulated.
99      *
100      * @return is removable
101      */
isEmulated()102     public boolean isEmulated() {
103         return mEmulated;
104     }
105 
106     /**
107      * Returns the MTP storage ID for the volume.
108      * this is also used for the storage_id column in the media provider.
109      *
110      * @return MTP storage ID
111      */
getStorageId()112     public int getStorageId() {
113         return mStorageId;
114     }
115 
116     /**
117      * Do not call this unless you are MountService
118      */
setStorageId(int index)119     public void setStorageId(int index) {
120         // storage ID is 0x00010001 for primary storage,
121         // then 0x00020001, 0x00030001, etc. for secondary storages
122         mStorageId = ((index + 1) << 16) + 1;
123     }
124 
125     /**
126      * Number of megabytes of space to leave unallocated by MTP.
127      * MTP will subtract this value from the free space it reports back
128      * to the host via GetStorageInfo, and will not allow new files to
129      * be added via MTP if there is less than this amount left free in the storage.
130      * If MTP has dedicated storage this value should be zero, but if MTP is
131      * sharing storage with the rest of the system, set this to a positive value
132      * to ensure that MTP activity does not result in the storage being
133      * too close to full.
134      *
135      * @return MTP reserve space
136      */
getMtpReserveSpace()137     public int getMtpReserveSpace() {
138         return mMtpReserveSpace;
139     }
140 
141     /**
142      * Returns true if this volume can be shared via USB mass storage.
143      *
144      * @return whether mass storage is allowed
145      */
allowMassStorage()146     public boolean allowMassStorage() {
147         return mAllowMassStorage;
148     }
149 
150     /**
151      * Returns maximum file size for the volume, or zero if it is unbounded.
152      *
153      * @return maximum file size
154      */
getMaxFileSize()155     public long getMaxFileSize() {
156         return mMaxFileSize;
157     }
158 
159     @Override
equals(Object obj)160     public boolean equals(Object obj) {
161         if (obj instanceof StorageVolume && mPath != null) {
162             StorageVolume volume = (StorageVolume)obj;
163             return (mPath.equals(volume.mPath));
164         }
165         return false;
166     }
167 
168     @Override
hashCode()169     public int hashCode() {
170         return mPath.hashCode();
171     }
172 
173     @Override
toString()174     public String toString() {
175         return "StorageVolume [mAllowMassStorage=" + mAllowMassStorage + ", mDescription="
176                 + mDescription + ", mEmulated=" + mEmulated + ", mMaxFileSize=" + mMaxFileSize
177                 + ", mMtpReserveSpace=" + mMtpReserveSpace + ", mPath=" + mPath + ", mRemovable="
178                 + mRemovable + ", mStorageId=" + mStorageId + "]";
179     }
180 
181     public static final Parcelable.Creator<StorageVolume> CREATOR =
182         new Parcelable.Creator<StorageVolume>() {
183         public StorageVolume createFromParcel(Parcel in) {
184             String path = in.readString();
185             String description = in.readString();
186             int removable = in.readInt();
187             int emulated = in.readInt();
188             int storageId = in.readInt();
189             int mtpReserveSpace = in.readInt();
190             int allowMassStorage = in.readInt();
191             long maxFileSize = in.readLong();
192             return new StorageVolume(path, description,
193                     removable == 1, emulated == 1, mtpReserveSpace,
194                     storageId, allowMassStorage == 1, maxFileSize);
195         }
196 
197         public StorageVolume[] newArray(int size) {
198             return new StorageVolume[size];
199         }
200     };
201 
describeContents()202     public int describeContents() {
203         return 0;
204     }
205 
writeToParcel(Parcel parcel, int flags)206     public void writeToParcel(Parcel parcel, int flags) {
207         parcel.writeString(mPath);
208         parcel.writeString(mDescription);
209         parcel.writeInt(mRemovable ? 1 : 0);
210         parcel.writeInt(mEmulated ? 1 : 0);
211         parcel.writeInt(mStorageId);
212         parcel.writeInt(mMtpReserveSpace);
213         parcel.writeInt(mAllowMassStorage ? 1 : 0);
214         parcel.writeLong(mMaxFileSize);
215     }
216 }
217