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()); 423b60dacb4e1871d1c7b410ac55fd3e5fd6bfacfbbo huang mReserveSpace = volume.getMtpReserveSpace() * 1024 * 1024; 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