17ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood/*
27ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * Copyright (C) 2011 The Android Open Source Project
37ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood *
47ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
57ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * you may not use this file except in compliance with the License.
67ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * You may obtain a copy of the License at
77ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood *
87ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
97ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood *
107ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * Unless required by applicable law or agreed to in writing, software
117ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
127ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * See the License for the specific language governing permissions and
147ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * limitations under the License.
157ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood */
167ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood
177ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwoodpackage android.mtp;
187ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood
1913fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglioimport android.content.Context;
20fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwoodimport android.os.storage.StorageVolume;
21fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood
227ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood/**
237ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * This class represents a storage unit on an MTP device.
247ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * Used only for MTP support in USB responder mode.
257ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * MtpStorageInfo is used in MTP host mode
267ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood *
277ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood * @hide
287ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood */
297ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwoodpublic class MtpStorage {
307ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood
317ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    private final int mStorageId;
327ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    private final String mPath;
337ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    private final String mDescription;
347ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    private final long mReserveSpace;
3551690544aaeee82b1c50232cd57d50038b77f0c4Mike Lockwood    private final boolean mRemovable;
367a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood    private final long mMaxFileSize;
377ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood
3813fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio    public MtpStorage(StorageVolume volume, Context context) {
39fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood        mStorageId = volume.getStorageId();
40fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood        mPath = volume.getPath();
4113fe2a5330a5df662d7b1b136e7b08fe34c94a42Fabrice Di Meglio        mDescription = context.getResources().getString(volume.getDescriptionId());
426393b07134f99ee827ebac2d339b0f5449addb0bHenrik Engström        mReserveSpace = volume.getMtpReserveSpace() * 1024L * 1024L;
43fbfe55512596fd00c1fb51caa851e17dae60fd43Mike Lockwood        mRemovable = volume.isRemovable();
447a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood        mMaxFileSize = volume.getMaxFileSize();
457ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    }
467ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood
477ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    /**
487ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     * Returns the storage ID for the storage unit
497ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     *
507ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     * @return the storage ID
517ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     */
527ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    public final int getStorageId() {
537ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood        return mStorageId;
547ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    }
557ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood
567ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    /**
577ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     * Generates a storage ID for storage of given index.
587ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     * Index 0 is for primary external storage
597ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     *
607ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     * @return the storage ID
617ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     */
627ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    public static int getStorageId(int index) {
637ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood        // storage ID is 0x00010001 for primary storage,
647ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood        // then 0x00020001, 0x00030001, etc. for secondary storages
657ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood        return ((index + 1) << 16) + 1;
667ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    }
677ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood
687ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood   /**
697ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     * Returns the file path for the storage unit's storage in the file system
707ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     *
717ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     * @return the storage file path
727ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     */
737ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    public final String getPath() {
747ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood        return mPath;
757ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    }
767ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood
777ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood   /**
787ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     * Returns the description string for the storage unit
797ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     *
807ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     * @return the storage unit description
817ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     */
827ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    public final String getDescription() {
837ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood        return mDescription;
847ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    }
857ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood
867ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood   /**
877ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     * Returns the amount of space to reserve on the storage file system.
887ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     * This can be set to a non-zero value to prevent MTP from filling up the entire storage.
897ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     *
903b60dacb4e1871d1c7b410ac55fd3e5fd6bfacfbbo huang     * @return reserved space in bytes.
917ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood     */
927ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    public final long getReserveSpace() {
937ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood        return mReserveSpace;
947ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood    }
957ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood
9651690544aaeee82b1c50232cd57d50038b77f0c4Mike Lockwood   /**
9751690544aaeee82b1c50232cd57d50038b77f0c4Mike Lockwood     * Returns true if the storage is removable.
9851690544aaeee82b1c50232cd57d50038b77f0c4Mike Lockwood     *
9951690544aaeee82b1c50232cd57d50038b77f0c4Mike Lockwood     * @return is removable
10051690544aaeee82b1c50232cd57d50038b77f0c4Mike Lockwood     */
10151690544aaeee82b1c50232cd57d50038b77f0c4Mike Lockwood    public final boolean isRemovable() {
10251690544aaeee82b1c50232cd57d50038b77f0c4Mike Lockwood        return mRemovable;
10351690544aaeee82b1c50232cd57d50038b77f0c4Mike Lockwood    }
1047a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood
1057a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood   /**
1067a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood     * Returns maximum file size for the storage, or zero if it is unbounded.
1077a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood     *
1087a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood     * @return maximum file size
1097a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood     */
1107a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood    public long getMaxFileSize() {
1117a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood        return mMaxFileSize;
1127a59dd2ce33b46cbc73eef964ddb4272ea1da8d1Mike Lockwood    }
1137ae938be1b4fb8938f0f438cfd611cd9ed0da513Mike Lockwood}
114