33import android .app .AlertDialog ;
44import android .app .Dialog ;
55import android .content .Context ;
6+ import android .content .DialogInterface ;
67import android .os .Bundle ;
78import android .view .LayoutInflater ;
9+ import android .view .MotionEvent ;
810import android .view .View ;
911import android .widget .EditText ;
12+ import android .widget .LinearLayout ;
13+ import android .widget .ListView ;
14+ import android .widget .ScrollView ;
1015import android .widget .Spinner ;
1116import android .widget .Switch ;
1217import android .widget .Toast ;
1318
1419import androidx .annotation .NonNull ;
1520import androidx .annotation .Nullable ;
1621import androidx .fragment .app .DialogFragment ;
22+ import androidx .recyclerview .widget .LinearLayoutManager ;
23+ import androidx .recyclerview .widget .RecyclerView ;
1724
1825import java .util .ArrayList ;
1926import java .util .HashMap ;
2027import java .util .List ;
28+ import java .util .stream .Collectors ;
2129
2230import open .furaffinity .client .R ;
2331import open .furaffinity .client .abstractClasses .abstractPage ;
32+ import open .furaffinity .client .adapter .checkboxListAdapter ;
33+ import open .furaffinity .client .pages .controlsFoldersSubmissions ;
2434import open .furaffinity .client .submitPages .submitSubmissionPart2 ;
2535import open .furaffinity .client .submitPages .submitSubmissionPart3 ;
2636import open .furaffinity .client .utilities .kvPair ;
2737import open .furaffinity .client .utilities .uiControls ;
2838
2939public class uploadFinalizeDialog extends DialogFragment {
3040 private final submitSubmissionPart2 page ;
41+
3142 private Spinner cat ;
3243 private Spinner aType ;
3344 private Spinner species ;
@@ -39,6 +50,15 @@ public class uploadFinalizeDialog extends DialogFragment {
3950 private Switch disableComments ;
4051 private Switch putInScraps ;
4152
53+ private Spinner assignToFolders ;
54+ private EditText assignToANewFolder ;
55+
56+ private List <String > folderNames = new ArrayList <>();
57+ private List <String > folderKeys = new ArrayList <>();
58+
59+ private CharSequence [] folderItems = new CharSequence [0 ];
60+ private boolean [] folderCheckedStates = new boolean [0 ];
61+
4262 public uploadFinalizeDialog (submitSubmissionPart2 page ) {
4363 super ();
4464 this .page = page ;
@@ -56,9 +76,31 @@ private void getElements(View rootView) {
5676 disableComments = rootView .findViewById (R .id .disableComments );
5777 putInScraps = rootView .findViewById (R .id .putInScraps );
5878
79+ assignToFolders = rootView .findViewById (R .id .assignToFolders );
80+ assignToANewFolder = rootView .findViewById (R .id .assignToANewFolder );
5981 }
6082
6183 private void initClientAndPage () {
84+ new controlsFoldersSubmissions (requireContext (), new abstractPage .pageListener () {
85+ @ Override
86+ public void requestSucceeded (abstractPage abstractPage ) {
87+ for (HashMap <String , String > currentFolder : ((controlsFoldersSubmissions )abstractPage ).getFolders ()) {
88+ if (currentFolder .keySet ().contains ("name" ) && currentFolder .keySet ().contains ("upfolder_id" )) {
89+ folderNames .add (currentFolder .get ("name" ));
90+ folderKeys .add (currentFolder .get ("upfolder_id" ));
91+ }
92+ }
93+
94+ folderItems = folderNames .toArray (new CharSequence [folderNames .size ()]);
95+ folderCheckedStates = new boolean [folderNames .size ()];
96+ open .furaffinity .client .utilities .uiControls .setSpinnerText (requireContext (), assignToFolders , "No items selected" );
97+ }
98+
99+ @ Override
100+ public void requestFailed (abstractPage abstractPage ) {
101+ Toast .makeText (requireContext (), "Failed to get existing folder list" , Toast .LENGTH_SHORT ).show ();
102+ }
103+ }).execute ();
62104 }
63105
64106 private void updateUIElements () {
@@ -69,6 +111,28 @@ private void updateUIElements() {
69111 uiControls .spinnerSetAdapter (requireContext (), rating , page .getRating (), "" , true , false );
70112 }
71113
114+ private void updateUIElementListeners (){
115+ //Just need to have it display the options, track which are selected, and maybe update the spinner so it should a selected count. Also setOnTouchListener with the oddness as it gets mad if I use onClick
116+ assignToFolders .setOnTouchListener ((v , event ) -> {
117+ if (event .getAction () == MotionEvent .ACTION_UP ) {
118+ AlertDialog .Builder builder = new AlertDialog .Builder (getActivity ());
119+ builder .setMultiChoiceItems (folderItems , folderCheckedStates , (dialog , which , isChecked ) -> { });
120+ builder .setPositiveButton ("Ok" , (dialog , which ) -> {
121+ int selectedFolderCount = 0 ;
122+ for (boolean currentFolder : folderCheckedStates ){
123+ if (currentFolder ){
124+ selectedFolderCount ++;
125+ }
126+ }
127+ open .furaffinity .client .utilities .uiControls .setSpinnerText (requireContext (), assignToFolders , Integer .toString (selectedFolderCount ) + " items selected" );
128+ });
129+ builder .create ();
130+ builder .show ();
131+ }
132+ return false ;
133+ });
134+ }
135+
72136 @ NonNull
73137 @ Override
74138 public Dialog onCreateDialog (@ Nullable Bundle savedInstanceState ) {
@@ -79,11 +143,20 @@ public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
79143 getElements (rootView );
80144 initClientAndPage ();
81145 updateUIElements ();
146+ updateUIElementListeners ();
82147
83148 Context context = requireContext ();
84149
85150 builder .setView (rootView );
151+
86152 builder .setPositiveButton (R .string .acceptButton , (dialog , which ) -> {
153+ List <String > folderIds = new ArrayList <>();
154+ for (int i = 0 ; i < folderCheckedStates .length ; i ++){
155+ if (folderCheckedStates [i ]){
156+ folderIds .add (folderKeys .get (i ));
157+ }
158+ }
159+
87160 new submitSubmissionPart3 (context , new abstractPage .pageListener () {
88161 @ Override
89162 public void requestSucceeded (abstractPage abstractPage ) {
@@ -96,7 +169,7 @@ public void requestFailed(abstractPage abstractPage) {
96169 Toast .makeText (context , "Failed to upload submission step 3" , Toast .LENGTH_SHORT ).show ();
97170 uploadFinalizeDialog .this .dismiss ();
98171 }
99- }, page .getSubmissionKey (), kvPair .getSelectedValue (cat ), kvPair .getSelectedValue (aType ), kvPair .getSelectedValue (species ), kvPair .getSelectedValue (gender ), kvPair .getSelectedValue (rating ), title .getText ().toString (), description .getText ().toString (), keywords .getText ().toString (), disableComments .isChecked (), putInScraps .isChecked ()).execute ();
172+ }, page .getSubmissionKey (), kvPair .getSelectedValue (cat ), kvPair .getSelectedValue (aType ), kvPair .getSelectedValue (species ), kvPair .getSelectedValue (gender ), kvPair .getSelectedValue (rating ), title .getText ().toString (), description .getText ().toString (), keywords .getText ().toString (), disableComments .isChecked (), putInScraps .isChecked (), folderIds , assignToANewFolder . getText (). toString () ).execute ();
100173 });
101174 builder .setNegativeButton (R .string .cancelButton , (dialog , which ) -> {
102175
0 commit comments