Repository: imLibo/FilePicker Branch: master Commit: fc3e85b07e3a Files: 129 Total size: 307.1 KB Directory structure: gitextract_v173hlks/ ├── .gitignore ├── .idea/ │ ├── caches/ │ │ └── build_file_checksums.ser │ ├── codeStyles/ │ │ └── Project.xml │ ├── copyright/ │ │ └── Ess.xml │ ├── gradle.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── APK/ │ └── release/ │ └── filepicker-demo.apk ├── LICENSE ├── README.md ├── app/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── ess/ │ │ └── essfilepicker/ │ │ └── ExampleInstrumentedTest.java │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── ess/ │ │ │ └── essfilepicker/ │ │ │ ├── FragmentTestActivity.java │ │ │ ├── LApplication.java │ │ │ ├── MainActivity.java │ │ │ └── TestFragment.java │ │ └── res/ │ │ ├── drawable/ │ │ │ └── ic_launcher_background.xml │ │ ├── drawable-v24/ │ │ │ └── ic_launcher_foreground.xml │ │ ├── layout/ │ │ │ ├── activity_fragment_test.xml │ │ │ ├── activity_main.xml │ │ │ └── fragment_test.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ └── values/ │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test/ │ └── java/ │ └── com/ │ └── ess/ │ └── essfilepicker/ │ └── ExampleUnitTest.java ├── build.gradle ├── filepicker/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── ess/ │ │ └── filepicker/ │ │ └── ExampleInstrumentedTest.java │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── ess/ │ │ │ └── filepicker/ │ │ │ ├── BaseFileFragment.java │ │ │ ├── FilePicker.java │ │ │ ├── SelectCreator.java │ │ │ ├── SelectOptions.java │ │ │ ├── activity/ │ │ │ │ ├── FileTypeListFragment.java │ │ │ │ ├── PicturesViewActivity.java │ │ │ │ ├── SelectFileByBrowserActivity.java │ │ │ │ ├── SelectFileByScanActivity.java │ │ │ │ └── SelectPictureActivity.java │ │ │ ├── adapter/ │ │ │ │ ├── BreadAdapter.java │ │ │ │ ├── BuketAdapter.java │ │ │ │ ├── EssMediaAdapter.java │ │ │ │ ├── FileListAdapter.java │ │ │ │ ├── FragmentPagerAdapter.java │ │ │ │ ├── OnFileSelectListener.java │ │ │ │ └── SelectSdcardAdapter.java │ │ │ ├── loader/ │ │ │ │ ├── EssAlbumCollection.java │ │ │ │ ├── EssAlbumLoader.java │ │ │ │ ├── EssMediaCollection.java │ │ │ │ ├── EssMediaLoader.java │ │ │ │ ├── EssMimeTypeCollection.java │ │ │ │ └── EssMimeTypeLoader.java │ │ │ ├── model/ │ │ │ │ ├── Album.java │ │ │ │ ├── BreadModel.java │ │ │ │ ├── CaptureStrategy.java │ │ │ │ ├── EssFile.java │ │ │ │ ├── EssFileCountCallBack.java │ │ │ │ ├── EssFileFilter.java │ │ │ │ ├── EssFileListCallBack.java │ │ │ │ ├── EssFileProvider.java │ │ │ │ ├── FileScanActEvent.java │ │ │ │ ├── FileScanFragEvent.java │ │ │ │ └── FileScanSortChangedEvent.java │ │ │ ├── task/ │ │ │ │ ├── EssFileCountTask.java │ │ │ │ └── EssFileListTask.java │ │ │ ├── util/ │ │ │ │ ├── Const.java │ │ │ │ ├── ConvertUtils.java │ │ │ │ ├── DateUtils.java │ │ │ │ ├── DialogUtil.java │ │ │ │ ├── FileSizeUtil.java │ │ │ │ ├── FileUtils.java │ │ │ │ ├── LogUtils.java │ │ │ │ ├── MediaStoreCompat.java │ │ │ │ ├── MimeType.java │ │ │ │ ├── PathUtils.java │ │ │ │ ├── PhotoMetadataUtils.java │ │ │ │ ├── Platform.java │ │ │ │ └── UiUtils.java │ │ │ └── widget/ │ │ │ ├── MediaItemDecoration.java │ │ │ └── ToolbarSpinner.java │ │ └── res/ │ │ ├── color/ │ │ │ ├── dracula_bottom_toolbar_apply.xml │ │ │ ├── dracula_bottom_toolbar_preview.xml │ │ │ ├── dracula_preview_bottom_toolbar_apply.xml │ │ │ ├── elec_bottom_toolbar_apply.xml │ │ │ ├── elec_bottom_toolbar_preview.xml │ │ │ └── elec_preview_bottom_toolbar_apply.xml │ │ ├── drawable/ │ │ │ └── bg_bottom_line_gray.xml │ │ ├── layout/ │ │ │ ├── activity_pictures_detail.xml │ │ │ ├── activity_select_file.xml │ │ │ ├── activity_select_file_by_scan.xml │ │ │ ├── activity_select_picture.xml │ │ │ ├── bread_item.xml │ │ │ ├── buket_list_item.xml │ │ │ ├── empty_file_list.xml │ │ │ ├── ess_media_item.xml │ │ │ ├── fragment_file_type_list.xml │ │ │ ├── item_capture.xml │ │ │ ├── item_file_list.xml │ │ │ ├── item_select_sdcard.xml │ │ │ ├── loading_layout.xml │ │ │ └── pop_select_sdcard.xml │ │ ├── layout-v21/ │ │ │ ├── activity_select_file.xml │ │ │ └── bread_item.xml │ │ ├── menu/ │ │ │ ├── browse_menu.xml │ │ │ └── media_menu.xml │ │ ├── values/ │ │ │ ├── attrs.xml │ │ │ ├── colors.xml │ │ │ ├── colors_dracula.xml │ │ │ ├── colors_zhihu.xml │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── values-v21/ │ │ │ └── styles.xml │ │ └── xml/ │ │ └── provider_paths.xml │ └── test/ │ └── java/ │ └── com/ │ └── ess/ │ └── filepicker/ │ └── ExampleUnitTest.java ├── filepicker.jks ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ .gradle /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store /build /captures .externalNativeBuild bintrayKey gradle.properties *.iml ================================================ FILE: .idea/codeStyles/Project.xml ================================================ ================================================ FILE: .idea/copyright/Ess.xml ================================================ ================================================ FILE: .idea/gradle.xml ================================================ ================================================ FILE: .idea/misc.xml ================================================ ================================================ FILE: .idea/modules.xml ================================================ ================================================ FILE: .idea/runConfigurations.xml ================================================ ================================================ FILE: .idea/vcs.xml ================================================ ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2018 aj Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ ### 介绍 # 由于暂时没有更多的精力在此项目上,现将此项目转让给其他人,谁来认领一下,一起把这个库搞下去,加我微信bo_744172447,谢谢! --- 1. 可在文件浏览器中选择指定后缀名文件 2. 可通过扫描全盘的方式,选择指定后缀名的文件 3. 类似微信图片选择器选择图片或视频 4. 图片选择页面可以自定义主题 5. 支持Activity、Fragment ### Example --- ![FilePicker](https://github.com/imLibo/FilePicker/blob/master/screenshot/Screenshot_20180307-124655.png) ![FilePicker](https://github.com/imLibo/FilePicker/blob/master/screenshot/Screenshot_2018-03-07-13-51.png) ![FilePicker](https://github.com/imLibo/FilePicker/blob/master/screenshot/Screenshot_20180307-124316.png) ![FilePicker](https://github.com/imLibo/FilePicker/blob/master/screenshot/Screenshot_20180307-124556.png) ![FilePicker](https://github.com/imLibo/FilePicker/blob/master/screenshot/Screenshot_20180307-124202.png) ![FilePicker](https://github.com/imLibo/FilePicker/blob/master/screenshot/Screenshot_20180307-124213.png) --- ### 可下载APK直接体验 [Demo.apk](https://fir.im/filepicker) --- ### 用法 ``` implementation 'cn.imlibo:FilePicker:v0.0.5_alpha' ``` ##### 一、 在文件浏览器中选择指定文件 ``` FilePicker.from(this) .chooseForBrowser() .setMaxCount(2) .setFileTypes("png", "doc","apk", "mp3", "gif", "txt", "mp4", "zip") .requestCode(REQUEST_CODE_CHOOSE) .start(); ``` ##### 二、 分类查找指定后缀名文件 ``` FilePicker .from(this) .chooseForMimeType() .setMaxCount(10) .setFileTypes("png", "doc","apk", "mp3", "gif", "txt", "mp4", "zip") .requestCode(REQUEST_CODE_CHOOSE) .start(); ``` ##### 三、 在图片选择器中选择图片或视频 ``` FilePicker .from(this) .chooseMedia() .enabledCapture(true) .setTheme(R.style.FilePicker_Dracula) .requestCode(REQUEST_CODE_CHOOSE) .start(); ``` ##### 四、 接收返回的文件数据,在 ++onActivityResult++ 方法中获取。选中文件以链表方式返回, ++EssFile++ 类为载体 ``` @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) { return; } if (requestCode == REQUEST_CODE_CHOOSE) { ArrayList essFileList = data.getParcelableArrayListExtra(Const.EXTRA_RESULT_SELECTION); StringBuilder builder = new StringBuilder(); for (EssFile file : essFileList) { builder.append(file.getMimeType()).append(" | ").append(file.getName()).append("\n\n"); } textView.setText(builder.toString()); } } ``` ### 属性列表 --- 名称 | 描述 | 默认值 ---|---|--- FileTypes | 需要显示的文件类型 | 无 SortType | 排序类型 | 按名字排序 BY_NAME_ASC isSingle | 是否单选 |false maxCount | 最大可选中数量 | 10 request_code | 请求码 | 无 onlyShowImages | 是否仅显示图片(仅当其实chooseMedia时有效) | false onlyShowVideos | 是否仅显示视频(仅当其实chooseMedia时有效) | false enabledCapture | chooseMedia时是否显示照相机 | false placeHolder | 图片的PlaceHolder | png_holder themeId | 主题ID | R.Style.FilePicker_Elec ### 自定义主题 --- ``` ``` ### Feature TODO --- - [ ] 根据文件类型打开/预览文件 - [ ] 预览图片界面 - [ ] 压缩图片 - [ ] 裁剪图片 - [ ] 自定义相机拍照 - [ ] 去掉AndPermission依赖,用原生代码申请权限 - [ ] 增加多种图片加载框架支持 - [ ] 文件浏览器支持自定义主题 - [ ] 分类选择文件界面支持自定义主题 ### THANKS --- [陈宇明大师兄 BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper) [Android-FilePicker](https://github.com/DroidNinja/Android-FilePicker) [Matisse](https://github.com/zhihu/Matisse) [AndroidPicker](https://github.com/gzu-liyujiang/AndroidPicker) ## LICENSE MIT License Copyright (c) 2018 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. ================================================ FILE: app/.gitignore ================================================ /build ================================================ FILE: app/build.gradle ================================================ apply plugin: 'com.android.application' android { compileSdkVersion 27 defaultConfig { applicationId "com.imlibo.essfilepicker" minSdkVersion 17 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } signingConfigs { release { storeFile file("../filepicker.jks") storePassword "filepicker" keyAlias "filepicker" keyPassword "filepicker" } } buildTypes { release { minifyEnabled false signingConfig signingConfigs.release proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:27.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.android.support:support-v4:27.1.0' debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.4' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4' implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' implementation 'com.yanzhenjie:permission:2.0.0-rc2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' // implementation 'cn.imlibo:FilePicker:v0.0.1_alpha' implementation project(':filepicker') } task copyApk(type: Copy) { include '**/*.apk' from '/build/outputs/release/apk' into '../APK/' rename { String fileName -> //在复制时重命名文件 fileName = "filepicker-demo.apk" // 重命名 } } //在task被添加的时候定义依赖关系 tasks.whenTaskAdded { task -> if (task.name.startsWith("assemble")) { task.finalizedBy copyApk } } ================================================ FILE: app/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile ================================================ FILE: app/src/androidTest/java/com/ess/essfilepicker/ExampleInstrumentedTest.java ================================================ package com.ess.essfilepicker; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.*; /** * Instrumented test, which will execute on an Android device. * * @see Testing documentation */ @RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { @Test public void useAppContext() throws Exception { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext(); assertEquals("com.imlibo.essfilepicker", appContext.getPackageName()); } } ================================================ FILE: app/src/main/AndroidManifest.xml ================================================ ================================================ FILE: app/src/main/java/com/ess/essfilepicker/FragmentTestActivity.java ================================================ package com.ess.essfilepicker; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.FrameLayout; import butterknife.BindView; import butterknife.ButterKnife; public class FragmentTestActivity extends AppCompatActivity { @BindView(R.id.container_fragment) FrameLayout mFrameLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment_test); ButterKnife.bind(this); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.container_fragment,TestFragment.newInstance()); fragmentTransaction.commit(); } } ================================================ FILE: app/src/main/java/com/ess/essfilepicker/LApplication.java ================================================ /* * Copyright (c) 2018. Lorem ipsum dolor sit amet, consectetur adipiscing elit. * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. * Vestibulum commodo. Ut rhoncus gravida arcu. */ package com.ess.essfilepicker; import android.app.Application; import com.squareup.leakcanary.LeakCanary; /** * LApplication * Created by 李波 on 2018/2/22. */ public class LApplication extends Application{ @Override public void onCreate() { super.onCreate(); LeakCanary.install(this); } } ================================================ FILE: app/src/main/java/com/ess/essfilepicker/MainActivity.java ================================================ package com.ess.essfilepicker; import android.content.Intent; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import com.ess.filepicker.FilePicker; import com.ess.filepicker.SelectCreator; import com.ess.filepicker.SelectOptions; import com.ess.filepicker.activity.SelectFileByBrowserActivity; import com.ess.filepicker.activity.SelectFileByScanActivity; import com.ess.filepicker.activity.SelectPictureActivity; import com.ess.filepicker.model.EssFile; import com.ess.filepicker.util.Const; import com.ess.filepicker.util.DialogUtil; import com.yanzhenjie.permission.Action; import com.yanzhenjie.permission.AndPermission; import com.yanzhenjie.permission.Permission; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class MainActivity extends AppCompatActivity { @BindView(R.id.textView_filename) TextView textView; private static final int REQUEST_CODE_CHOOSE = 23; @OnClick(R.id.button_browse) public void onBrowse(View view) { FilePicker.from(this) .chooseForBrowser() .setMaxCount(2) .setFileTypes("png", "doc","apk", "mp3", "gif", "txt", "mp4", "zip") .requestCode(REQUEST_CODE_CHOOSE) .start(); } @OnClick(R.id.button_scan) public void onScan(View view) { FilePicker .from(this) .chooseForMimeType() .setMaxCount(10) .setFileTypes("png", "doc","apk", "mp3", "gif", "txt", "mp4", "zip") .requestCode(REQUEST_CODE_CHOOSE) .start(); } @OnClick(R.id.button_single_pick) public void onSinglePick(View view) { FilePicker .from(this) .chooseForBrowser() .isSingle() .setFileTypes("pdf") .requestCode(REQUEST_CODE_CHOOSE) .start(); } @OnClick(R.id.button_select_pictures) public void onSelectPictures(View view){ FilePicker .from(this) .chooseMedia() .enabledCapture(true) .setTheme(R.style.FilePicker_Dracula) .requestCode(REQUEST_CODE_CHOOSE) .start(); } @OnClick(R.id.button_fragment) public void onFragment(View view){ startActivity(new Intent(this,FragmentTestActivity.class)); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); AndPermission .with(this) .permission(Permission.READ_EXTERNAL_STORAGE,Permission.WRITE_EXTERNAL_STORAGE) .onDenied(new Action() { @Override public void onAction(List permissions) { //拒绝权限 DialogUtil.showPermissionDialog(MainActivity.this,Permission.transformText(MainActivity.this, permissions).get(0)); } }) .start(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) { return; } if (requestCode == REQUEST_CODE_CHOOSE) { ArrayList essFileList = data.getParcelableArrayListExtra(Const.EXTRA_RESULT_SELECTION); StringBuilder builder = new StringBuilder(); for (EssFile file : essFileList) { builder.append(file.getMimeType()).append(" | ").append(file.getName()).append("\n\n"); } textView.setText(builder.toString()); } } } ================================================ FILE: app/src/main/java/com/ess/essfilepicker/TestFragment.java ================================================ package com.ess.essfilepicker; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.ess.filepicker.FilePicker; import com.ess.filepicker.model.EssFile; import com.ess.filepicker.util.Const; import java.util.ArrayList; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import static android.app.Activity.RESULT_OK; /** * TestFragment */ public class TestFragment extends Fragment { @BindView(R.id.textView_filename) TextView textView; private static final int REQUEST_CODE_CHOOSE = 23; @OnClick(R.id.button_browse) public void onBrowse(View view) { FilePicker.from(this) .chooseForBrowser() .setMaxCount(2) .setFileTypes("png", "doc","apk", "mp3", "gif", "txt", "mp4", "zip") .requestCode(REQUEST_CODE_CHOOSE) .start(); } @OnClick(R.id.button_scan) public void onScan(View view) { FilePicker .from(this) .chooseForMimeType() .setMaxCount(10) .setFileTypes("png", "doc","apk", "mp3", "gif", "txt", "mp4", "zip") .requestCode(REQUEST_CODE_CHOOSE) .start(); } @OnClick(R.id.button_select_pictures) public void onSelectPictures(View view){ FilePicker .from(this) .chooseMedia() .enabledCapture(true) .setTheme(R.style.FilePicker_Dracula) .requestCode(REQUEST_CODE_CHOOSE) .start(); } public TestFragment() { } public static TestFragment newInstance() { return new TestFragment(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_test, container, false); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { ButterKnife.bind(this,view); super.onViewCreated(view, savedInstanceState); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) { return; } if (requestCode == REQUEST_CODE_CHOOSE) { ArrayList essFileList = data.getParcelableArrayListExtra(Const.EXTRA_RESULT_SELECTION); StringBuilder builder = new StringBuilder(); for (EssFile file : essFileList) { builder.append(file.getMimeType()).append(" | ").append(file.getName()).append("\n\n"); } textView.setText(builder.toString()); } } } ================================================ FILE: app/src/main/res/drawable/ic_launcher_background.xml ================================================ ================================================ FILE: app/src/main/res/drawable-v24/ic_launcher_foreground.xml ================================================ ================================================ FILE: app/src/main/res/layout/activity_fragment_test.xml ================================================ ================================================ FILE: app/src/main/res/layout/activity_main.xml ================================================