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
17package android.mtp;
18
19import android.os.storage.StorageVolume;
20
21/**
22 * This class represents a storage unit on an MTP device.
23 * Used only for MTP support in USB responder mode.
24 * MtpStorageInfo is used in MTP host mode
25 *
26 * @hide
27 */
28public class MtpStorage {
29
30    private final int mStorageId;
31    private final String mPath;
32    private final String mDescription;
33    private final long mReserveSpace;
34    private final boolean mRemovable;
35    private final long mMaxFileSize;
36
37    public MtpStorage(StorageVolume volume) {
38        mStorageId = volume.getStorageId();
39        mPath = volume.getPath();
40        mDescription = volume.getDescription();
41        mReserveSpace = volume.getMtpReserveSpace();
42        mRemovable = volume.isRemovable();
43        mMaxFileSize = volume.getMaxFileSize();
44    }
45
46    /**
47     * Returns the storage ID for the storage unit
48     *
49     * @return the storage ID
50     */
51    public final int getStorageId() {
52        return mStorageId;
53    }
54
55    /**
56     * Generates a storage ID for storage of given index.
57     * Index 0 is for primary external storage
58     *
59     * @return the storage ID
60     */
61    public static int getStorageId(int index) {
62        // storage ID is 0x00010001 for primary storage,
63        // then 0x00020001, 0x00030001, etc. for secondary storages
64        return ((index + 1) << 16) + 1;
65    }
66
67   /**
68     * Returns the file path for the storage unit's storage in the file system
69     *
70     * @return the storage file path
71     */
72    public final String getPath() {
73        return mPath;
74    }
75
76   /**
77     * Returns the description string for the storage unit
78     *
79     * @return the storage unit description
80     */
81    public final String getDescription() {
82        return mDescription;
83    }
84
85   /**
86     * Returns the amount of space to reserve on the storage file system.
87     * This can be set to a non-zero value to prevent MTP from filling up the entire storage.
88     *
89     * @return the storage unit description
90     */
91    public final long getReserveSpace() {
92        return mReserveSpace;
93    }
94
95   /**
96     * Returns true if the storage is removable.
97     *
98     * @return is removable
99     */
100    public final boolean isRemovable() {
101        return mRemovable;
102    }
103
104   /**
105     * Returns maximum file size for the storage, or zero if it is unbounded.
106     *
107     * @return maximum file size
108     */
109    public long getMaxFileSize() {
110        return mMaxFileSize;
111    }
112}
113