Tanoda
StandaloneFileBrowserFragment.java
Go to the documentation of this file.
1package com.sfb.standalonefilebrowser;
2
3import android.app.Activity;
4import android.app.Fragment;
5import android.content.ContentResolver;
6import android.content.Intent;
7import android.database.Cursor;
8import android.net.Uri;
9import java.io.File;
10import java.io.FileOutputStream;
11import java.io.InputStream;
12import java.io.OutputStream;
13
14public class StandaloneFileBrowserFragment extends Fragment {
15 public static final int PICKFILE_RESULT_CODE = 1;
16
17 private StandaloneFileBrowserAndroidListener fileBrowserAndroidListener;
18 private String title;
19 private Boolean multiple;
20
21 public void setFileBrowserAndroidListener(final StandaloneFileBrowserAndroidListener fileBrowserAndroidListener) {
22 this.fileBrowserAndroidListener = fileBrowserAndroidListener;
23 }
24
25 public void setTitle(final String title) {
26 this.title = title;
27 }
28
29 public void setMultiple(final Boolean multiple) {
30 this.multiple = multiple;
31 }
32
33 @Override
34 public void onStart () {
35 super.onStart ();
36 final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
37 if (title != null) {
38 intent.putExtra("android.intent.extra.TITLE", title);
39 }
40 if (multiple) {
41 intent.putExtra("android.intent.extra.ALLOW_MULTIPLE", true);
42 }
43 intent.setType("*/*");
44 startActivityForResult(intent, PICKFILE_RESULT_CODE);
45 }
46
47 private String getFileCopyPath(final Uri uri) {
48 if (uri == null) {
49 return null;
50 }
51 final ContentResolver contentResolver = getActivity().getContentResolver();
52 Cursor cursor = null;
53 String filename = null;
54 try {
55 cursor = contentResolver.query(uri, null, null, null, null);
56 if (cursor != null && cursor.moveToFirst()) {
57 filename = cursor.getString(cursor.getColumnIndex("_display_name"));
58 }
59 }
60 catch (Exception e) {
61 return null;
62 }
63 finally {
64 if (cursor != null) {
65 cursor.close();
66 }
67 }
68 try {
69 final InputStream input = contentResolver.openInputStream(uri);
70 if (input == null) {
71 return null;
72 }
73 final File file = new File(getActivity().getCacheDir(), filename);
74 OutputStream output = null;
75 try {
76 output = new FileOutputStream(file, false);
77 final byte[] buffer = new byte[4096];
78 int len;
79 while ((len = input.read(buffer)) > 0) {
80 output.write(buffer, 0, len);
81 }
82 return file.getAbsolutePath();
83 }
84 finally {
85 if (output != null) {
86 output.close();
87 }
88 input.close();
89 }
90 }
91 catch (Exception e) {
92 return null;
93 }
94 }
95
96 @Override
97 public void onActivityResult(int requestCode, int resultCode, Intent data) {
98 super.onActivityResult(requestCode, resultCode, data);
99 if (fileBrowserAndroidListener == null) {
100 return;
101 }
102 switch (requestCode) {
104 String filenames = "";
105 if (resultCode == Activity.RESULT_OK) {
106 if (data.getClipData() != null) {
107 for (int i = 0; i < data.getClipData().getItemCount(); ++i) {
108 if (filenames != "") {
109 filenames += "|";
110 }
111 filenames += getFileCopyPath(data.getClipData().getItemAt(i).getUri());
112 }
113 }
114 else if (data.getData() != null) {
115 filenames = getFileCopyPath(data.getData());
116 }
117 }
118 fileBrowserAndroidListener.onFilesSelected(filenames);
119 break;
120 }
121 getFragmentManager().beginTransaction().remove(this).commit();
122 }
123}
124
void setFileBrowserAndroidListener(final StandaloneFileBrowserAndroidListener fileBrowserAndroidListener)
void onActivityResult(int requestCode, int resultCode, Intent data)