@@ -6,6 +6,7 @@ import android.support.annotation.StringRes
66import me.rosuh.filepicker.FilePickerActivity
77import me.rosuh.filepicker.R
88import me.rosuh.filepicker.engine.ImageEngine
9+ import me.rosuh.filepicker.filetype.FileType
910
1011/* *
1112 *
@@ -14,6 +15,12 @@ import me.rosuh.filepicker.engine.ImageEngine
1415 */
1516class FilePickerConfig (private val pickerManager : FilePickerManager ) {
1617
18+ var isAutoFilter: Boolean = false
19+
20+ private val customFileTypes: ArrayList <FileType > by lazy {
21+ ArrayList <FileType >(2 )
22+ }
23+
1724 private val contextRes = pickerManager.contextRef!! .get()!! .resources
1825
1926 /* *
@@ -77,9 +84,14 @@ class FilePickerConfig(private val pickerManager: FilePickerManager) {
7784 /* *
7885 * 自定文件类型甄别器和默认类型甄别器
7986 */
87+ @Deprecated(
88+ " Use 'register' function instead." ,
89+ ReplaceWith (" registerFileType(types)" ),
90+ level = DeprecationLevel .WARNING
91+ )
8092 var customDetector: AbstractFileDetector ? = null
81- private set
82- val defaultFileDetector: DefaultFileDetector by lazy { DefaultFileDetector () }
93+
94+ val defaultFileDetector: DefaultFileDetector by lazy { DefaultFileDetector (). also { it.registerDefaultTypes() } }
8395
8496 /* *
8597 * 点击操作接口,采用默认实现
@@ -140,7 +152,10 @@ class FilePickerConfig(private val pickerManager: FilePickerManager) {
140152 }
141153
142154 @JvmOverloads
143- fun storageType (volumeName : String = "", @StorageMediaType storageMediaType : String ): FilePickerConfig {
155+ fun storageType (
156+ volumeName : String = "",
157+ @StorageMediaType storageMediaType : String
158+ ): FilePickerConfig {
144159 mediaStorageName = volumeName
145160 mediaStorageType = storageMediaType
146161 return this
@@ -157,11 +172,19 @@ class FilePickerConfig(private val pickerManager: FilePickerManager) {
157172 }
158173
159174 /* *
175+ * @author rosuh@qq.com
176+ * @date 2020/9/15
177+ * custom file type had upgrade to [registerFileType], which can simplify your usage.
160178 * 实现 [AbstractFileDetector] 以自定义您自己的文件类型检测器
161179 * Custom your file detector by implementing [AbstractFileDetector]
162180 */
181+ @Deprecated(
182+ " Use 'register' function instead." ,
183+ ReplaceWith (" registerFileType(types)" ),
184+ level = DeprecationLevel .WARNING
185+ )
163186 fun customDetector (detector : AbstractFileDetector ): FilePickerConfig {
164- customDetector = detector
187+ this . customDetector = detector
165188 return this
166189 }
167190
@@ -227,6 +250,28 @@ class FilePickerConfig(private val pickerManager: FilePickerManager) {
227250 this .customImageEngine = ie
228251 return this
229252 }
253+ /* *
254+ * @author rosuh@qq.com
255+ * @date 2020/9/15
256+ * 用于注册你自定义的文件类型。
257+ * 库将自动调用你的自定义类型里的[FileType.verify]来识别文件。如果识别成功,就会自动填充到 [me.rosuh.filepicker.bean.FileItemBeanImpl.fileType] 中
258+ * 如果[autoFilter]为 true,那么库将自动过滤掉不符合你自定义类型的文件。不会在结果中显示出来。
259+ * 如果为 false,那么就只是检测类型。不会对结果列表做修改
260+ * 你不需要再调用[fileType]方法,否则将默认使用[fileType]
261+ * ---
262+ * Pass your custom [FileType] instances list and all done! This lib would auto detect file type
263+ * by using [FileType.verify].
264+ * If [autoFilter] is true, this lib will filter result by using your custom file types.
265+ * If [autoFilter] is true, the library will automatically filter out files that do not meet your custom type.
266+ * Will not show up in the results. * If it is false, then only the detection type. No changes to the result list
267+ * You don't need to call [fileType] again !
268+ */
269+ fun registerFileType (types : List <FileType >, autoFilter : Boolean = true): FilePickerConfig {
270+ this .customFileTypes.addAll(types)
271+ this .defaultFileDetector.registerCustomTypes(customFileTypes)
272+ this .isAutoFilter = autoFilter
273+ return this
274+ }
230275
231276 fun forResult (requestCode : Int ) {
232277 val activity = pickerManager.contextRef?.get()!!
@@ -246,16 +291,19 @@ class FilePickerConfig(private val pickerManager: FilePickerManager) {
246291 */
247292 @get:StorageMediaType
248293 const val STORAGE_EXTERNAL_STORAGE = " STORAGE_EXTERNAL_STORAGE"
294+
249295 /* *
250296 * TODO 可拔插的 SD 卡
251297 */
252298 @get:StorageMediaType
253299 const val STORAGE_UUID_SD_CARD = " STORAGE_UUID_SD_CARD"
300+
254301 /* *
255302 * TODO 可拔插 U 盘
256303 */
257304 @get:StorageMediaType
258305 const val STORAGE_UUID_USB_DRIVE = " STORAGE_UUID_USB_DRIVE"
306+
259307 /* *
260308 * 自定义路径
261309 */
0 commit comments