11package open .furaffinity .client .dialogs ;
22
33import android .Manifest ;
4+ import android .app .Activity ;
45import android .app .AlertDialog ;
56import android .app .Dialog ;
67import android .content .Context ;
78import android .content .Intent ;
89import android .content .pm .PackageManager ;
10+ import android .database .Cursor ;
11+ import android .net .Uri ;
912import android .os .Bundle ;
10- import android .os . Environment ;
13+ import android .provider . OpenableColumns ;
1114import android .view .LayoutInflater ;
1215import android .view .View ;
1316import android .widget .AdapterView ;
2023import androidx .annotation .Nullable ;
2124import androidx .core .content .ContextCompat ;
2225import androidx .fragment .app .DialogFragment ;
23- import androidx .fragment .app .Fragment ;
2426import androidx .fragment .app .FragmentManager ;
2527
26- import com .nbsp .materialfilepicker .MaterialFilePicker ;
27- import com .nbsp .materialfilepicker .ui .FilePickerActivity ;
28+ import java .util .Arrays ;
29+ import java .util .List ;
30+ import java .util .stream .Collectors ;
31+ import java .util .stream .Stream ;
2832
2933import open .furaffinity .client .R ;
3034import open .furaffinity .client .abstractClasses .abstractPage ;
3438import open .furaffinity .client .utilities .uiControls ;
3539
3640public class uploadDialog extends DialogFragment {
41+ private static final List <String > imageMimeTypes = Arrays .asList (new String [] { "image/jpeg" , "image/png" , "image/gif" });
42+ private static final List <String > textMimeTypes = Arrays .asList (new String [] { "text/plain" , "application/msword" , "application/vnd.openxmlformats-officedocument.wordprocessingml.document" , "application/vnd.oasis.opendocument.text" , "application/rtf" , "application/pdf" });
43+ private static final List <String > audioMimeTypes = Arrays .asList (new String [] { "audio/mpeg" , "audio/x-wav" , "audio/midi" });
44+ private static final List <String > allMimeTypes = Stream .concat (Stream .concat (imageMimeTypes .stream (), textMimeTypes .stream ()), audioMimeTypes .stream ()).collect (Collectors .toList ());
45+
3746 private static final int submissionFileRequestCode = 132 ;
3847 private static final int thumbnailFileRequestCode = 133 ;
3948
4049 private Spinner submissionType ;
4150 private Button selectSourceFile ;
42- private TextView sourceFilePath ;
51+ private TextView sourceFileName ;
52+ private String sourceFilePath ;
4353 private Button selectThumbnailFile ;
44- private TextView thumbnailFilePath ;
54+ private TextView thumbnailFileName ;
55+ private String thumbnailFilePath ;
4556
4657 private submitSubmissionPart1 page ;
4758
4859 private void getElements (View rootView ) {
4960 submissionType = rootView .findViewById (R .id .submissionType );
5061 selectSourceFile = rootView .findViewById (R .id .selectSourceFile );
51- sourceFilePath = rootView .findViewById (R .id .sourceFilePath );
62+ sourceFileName = rootView .findViewById (R .id .sourceFileName );
5263 selectThumbnailFile = rootView .findViewById (R .id .selectThumbnailFile );
53- thumbnailFilePath = rootView .findViewById (R .id .thumbnailFilePath );
64+ thumbnailFileName = rootView .findViewById (R .id .thumbnailFileName );
5465 }
5566
5667 private void updateUIElements () {
@@ -77,7 +88,6 @@ private void fetchPageData() {
7788 page .execute ();
7889 }
7990
80-
8191 private void updateUIElementListeners () {
8292 submissionType .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener () {
8393 @ Override
@@ -91,15 +101,32 @@ public void onNothingSelected(AdapterView<?> parent) {
91101 }
92102 });
93103
94- Fragment uploadFrag = this ;
95104 selectSourceFile .setOnClickListener (v -> {
96105 if (ContextCompat .checkSelfPermission (requireContext (), Manifest .permission .READ_EXTERNAL_STORAGE ) == PackageManager .PERMISSION_GRANTED ) {
97- new MaterialFilePicker ()
98- .withSupportFragment (uploadFrag )
99- .withPath (Environment .getRootDirectory ().getPath ())
100- .withFilterDirectories (false )
101- .withRequestCode (submissionFileRequestCode )
102- .start ();
106+ Intent intent = new Intent (Intent .ACTION_OPEN_DOCUMENT );
107+ intent .addCategory (Intent .CATEGORY_OPENABLE );
108+
109+ switch (((kvPair ) submissionType .getSelectedItem ()).getKey ()) {
110+ case "submission" :
111+ intent .setType (imageMimeTypes .stream ().collect (Collectors .joining ("," )));
112+ intent .putExtra (Intent .EXTRA_MIME_TYPES , imageMimeTypes .toArray ());
113+ break ;
114+ case "story" :
115+ case "poetry" :
116+ intent .setType (textMimeTypes .stream ().collect (Collectors .joining ("," )));
117+ intent .putExtra (Intent .EXTRA_MIME_TYPES , textMimeTypes .toArray ());
118+ break ;
119+ case "music" :
120+ intent .setType (audioMimeTypes .stream ().collect (Collectors .joining ("," )));
121+ intent .putExtra (Intent .EXTRA_MIME_TYPES , audioMimeTypes .toArray ());
122+ break ;
123+ default :
124+ intent .setType (allMimeTypes .stream ().collect (Collectors .joining ("," )));
125+ intent .putExtra (Intent .EXTRA_MIME_TYPES , allMimeTypes .toArray ());
126+ break ;
127+ }
128+
129+ startActivityForResult (intent , submissionFileRequestCode );
103130 } else {
104131 String [] permissions = { Manifest .permission .READ_EXTERNAL_STORAGE };
105132 requestPermissions (permissions , 0 );
@@ -108,12 +135,11 @@ public void onNothingSelected(AdapterView<?> parent) {
108135
109136 selectThumbnailFile .setOnClickListener (v -> {
110137 if (ContextCompat .checkSelfPermission (requireContext (), Manifest .permission .READ_EXTERNAL_STORAGE ) == PackageManager .PERMISSION_GRANTED ) {
111- new MaterialFilePicker ()
112- .withSupportFragment (uploadFrag )
113- .withPath (Environment .getRootDirectory ().getPath ())
114- .withFilterDirectories (false )
115- .withRequestCode (thumbnailFileRequestCode )
116- .start ();
138+ Intent intent = new Intent (Intent .ACTION_OPEN_DOCUMENT );
139+ intent .addCategory (Intent .CATEGORY_OPENABLE );
140+ intent .setType (imageMimeTypes .stream ().collect (Collectors .joining ("," )));
141+ intent .putExtra (Intent .EXTRA_MIME_TYPES , imageMimeTypes .toArray ());
142+ startActivityForResult (intent , thumbnailFileRequestCode );
117143 } else {
118144 String [] permissions = { Manifest .permission .READ_EXTERNAL_STORAGE };
119145 requestPermissions (permissions , 0 );
@@ -151,7 +177,7 @@ public void requestFailed(abstractPage abstractPage) {
151177 Toast .makeText (context , "Failed to upload submission step 2" , Toast .LENGTH_SHORT ).show ();
152178 uploadDialog .this .dismiss ();
153179 }
154- }, page , sourceFilePath . getText (). toString () , thumbnailFilePath . getText (). toString () ).execute ());
180+ }, page , sourceFilePath , thumbnailFilePath ).execute ());
155181 builder .setNegativeButton (R .string .cancelButton , (dialog , which ) -> {
156182
157183 });
@@ -165,17 +191,41 @@ public void onActivityResult(int requestCode, int resultCode, @Nullable Intent d
165191
166192 switch (requestCode ) {
167193 case submissionFileRequestCode :
168- if (resultCode == FilePickerActivity .RESULT_OK ) {
169- sourceFilePath .setText (data .getStringExtra (FilePickerActivity .RESULT_FILE_PATH ));
194+ if (resultCode == Activity .RESULT_OK ) {
195+ Uri selectedFile = data .getData ();
196+ Cursor sourceFileCursor = requireContext ().getContentResolver ().query (selectedFile , null , null , null );
197+ if (sourceFileCursor .moveToFirst ()) {
198+ sourceFilePath = selectedFile .toString ();
199+ int displayNameColumnIndex = sourceFileCursor .getColumnIndex (OpenableColumns .DISPLAY_NAME );
200+ String displayNameString = sourceFileCursor .getString (displayNameColumnIndex );
201+ sourceFileName .setText (displayNameString );
202+ } else {
203+ Toast .makeText (requireContext (), "Failed to find file info" , Toast .LENGTH_SHORT ).show ();
204+ sourceFilePath = null ;
205+ sourceFileName .setText ("" );
206+ }
170207 } else {
171- sourceFilePath .setText ("" );
208+ sourceFilePath = null ;
209+ sourceFileName .setText ("" );
172210 }
173211 break ;
174212 case thumbnailFileRequestCode :
175- if (resultCode == FilePickerActivity .RESULT_OK ) {
176- thumbnailFilePath .setText (data .getStringExtra (FilePickerActivity .RESULT_FILE_PATH ));
213+ if (resultCode == Activity .RESULT_OK ) {
214+ Uri selectedFile = data .getData ();
215+ Cursor sourceFileCursor = requireContext ().getContentResolver ().query (selectedFile , null , null , null );
216+ if (sourceFileCursor .moveToFirst ()) {
217+ thumbnailFilePath = selectedFile .toString ();
218+ int displayNameColumnIndex = sourceFileCursor .getColumnIndex (OpenableColumns .DISPLAY_NAME );
219+ String displayNameString = sourceFileCursor .getString (displayNameColumnIndex );
220+ thumbnailFileName .setText (displayNameString );
221+ } else {
222+ Toast .makeText (requireContext (), "Failed to find file info" , Toast .LENGTH_SHORT ).show ();
223+ thumbnailFilePath = null ;
224+ thumbnailFileName .setText ("" );
225+ }
177226 } else {
178- thumbnailFilePath .setText ("" );
227+ thumbnailFilePath = null ;
228+ thumbnailFileName .setText ("" );
179229 }
180230 break ;
181231 }
0 commit comments