| 923 | } |
| 924 | |
| 925 | private void listDir(String src, String parentId, CallbackContext callback) { |
| 926 | cordova |
| 927 | .getThreadPool() |
| 928 | .execute( |
| 929 | new Runnable() { |
| 930 | public void run() { |
| 931 | Uri srcUri = Uri.parse(src); |
| 932 | ContentResolver contentResolver = context.getContentResolver(); |
| 933 | String parentDocId = parentId; |
| 934 | |
| 935 | if (parentDocId == null) { |
| 936 | parentDocId = DocumentsContract.getTreeDocumentId(srcUri); |
| 937 | } |
| 938 | |
| 939 | Uri childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree( |
| 940 | srcUri, |
| 941 | parentDocId |
| 942 | ); |
| 943 | |
| 944 | JSONArray result = new JSONArray(); |
| 945 | Cursor cursor = null; |
| 946 | |
| 947 | try { |
| 948 | cursor = contentResolver.query( |
| 949 | childrenUri, |
| 950 | new String[] { |
| 951 | Document.COLUMN_DOCUMENT_ID, |
| 952 | Document.COLUMN_DISPLAY_NAME, |
| 953 | Document.COLUMN_MIME_TYPE, |
| 954 | }, |
| 955 | null, |
| 956 | null, |
| 957 | null |
| 958 | ); |
| 959 | } catch ( |
| 960 | NullPointerException |
| 961 | | SecurityException |
| 962 | | IllegalArgumentException |
| 963 | | Error e |
| 964 | ) { |
| 965 | Log.d("sdCard", "lsDir: " + src); |
| 966 | Log.e("sdCard", "lsDir", e); |
| 967 | callback.error("Cannot read directory."); |
| 968 | return; |
| 969 | } |
| 970 | |
| 971 | if (cursor == null) { |
| 972 | callback.error("Cannot read directory."); |
| 973 | return; |
| 974 | } |
| 975 | |
| 976 | try { |
| 977 | while (cursor.moveToNext()) { |
| 978 | JSONObject fileData = new JSONObject(); |
| 979 | String docId = cursor.getString(0); |
| 980 | String name = cursor.getString(1); |
| 981 | String mime = cursor.getString(2); |
| 982 | boolean isDirectory = isDirectory(mime); |