Skip to content

Commit 2ba7b60

Browse files
author
Royce Whetstine
authored
Merge pull request #127 from ModdingFox/Issue_122
Issue 122
2 parents 2c15f6e + b052b09 commit 2ba7b60

9 files changed

Lines changed: 157 additions & 6 deletions

File tree

.idea/misc.xml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
applicationId "open.furaffinity.client"
99
minSdkVersion 26
1010
targetSdkVersion 29
11-
versionCode 34
12-
versionName "2021.08.29"
11+
versionCode 35
12+
versionName "2021.08.31"
1313

1414
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1515
}

app/src/main/java/open/furaffinity/client/adapter/checkboxListAdapter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ public checkboxListAdapter(ArrayList<String> mDataSetIn) {
2828
}
2929
}
3030

31+
public checkboxListAdapter(List<HashMap<String, String>> mDataSetIn) {
32+
mDataSet = mDataSetIn;
33+
}
34+
3135
@NonNull
3236
@Override
3337
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

app/src/main/java/open/furaffinity/client/dialogs/uploadFinalizeDialog.java

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,42 @@
33
import android.app.AlertDialog;
44
import android.app.Dialog;
55
import android.content.Context;
6+
import android.content.DialogInterface;
67
import android.os.Bundle;
78
import android.view.LayoutInflater;
9+
import android.view.MotionEvent;
810
import android.view.View;
911
import android.widget.EditText;
12+
import android.widget.LinearLayout;
13+
import android.widget.ListView;
14+
import android.widget.ScrollView;
1015
import android.widget.Spinner;
1116
import android.widget.Switch;
1217
import android.widget.Toast;
1318

1419
import androidx.annotation.NonNull;
1520
import androidx.annotation.Nullable;
1621
import androidx.fragment.app.DialogFragment;
22+
import androidx.recyclerview.widget.LinearLayoutManager;
23+
import androidx.recyclerview.widget.RecyclerView;
1724

1825
import java.util.ArrayList;
1926
import java.util.HashMap;
2027
import java.util.List;
28+
import java.util.stream.Collectors;
2129

2230
import open.furaffinity.client.R;
2331
import open.furaffinity.client.abstractClasses.abstractPage;
32+
import open.furaffinity.client.adapter.checkboxListAdapter;
33+
import open.furaffinity.client.pages.controlsFoldersSubmissions;
2434
import open.furaffinity.client.submitPages.submitSubmissionPart2;
2535
import open.furaffinity.client.submitPages.submitSubmissionPart3;
2636
import open.furaffinity.client.utilities.kvPair;
2737
import open.furaffinity.client.utilities.uiControls;
2838

2939
public 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

app/src/main/java/open/furaffinity/client/pages/controlsFoldersSubmissions.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,4 +197,24 @@ public HashMap<String, String> getExistingGroups() {
197197
public String getSelectedGroup() {
198198
return selectedGroup;
199199
}
200+
201+
public List<HashMap<String, String>> getGroups(){
202+
List<HashMap<String, String>> result = new ArrayList<>();
203+
for(HashMap<String, String> currentElement : getPageResults()){
204+
if(currentElement.get("type").equals("group")) {
205+
result.add(currentElement);
206+
}
207+
}
208+
return result;
209+
}
210+
211+
public List<HashMap<String, String>> getFolders(){
212+
List<HashMap<String, String>> result = new ArrayList<>();
213+
for(HashMap<String, String> currentElement : getPageResults()){
214+
if(currentElement.get("type").equals("folder")) {
215+
result.add(currentElement);
216+
}
217+
}
218+
return result;
219+
}
200220
}

app/src/main/java/open/furaffinity/client/submitPages/submitSubmissionPart3.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ public class submitSubmissionPart3 extends abstractPage {
2626
private final Boolean disableComments;
2727
private final Boolean putInScraps;
2828

29-
public submitSubmissionPart3(Context context, abstractPage.pageListener pageListener, String key, String cat, String aType, String species, String gender, String rating, String title, String message, String keywords, Boolean disableComments, Boolean putInScraps) {
29+
private final List<String> folderIds;
30+
private final String newFolderName;
31+
32+
public submitSubmissionPart3(Context context, abstractPage.pageListener pageListener, String key, String cat, String aType, String species, String gender, String rating, String title, String message, String keywords, Boolean disableComments, Boolean putInScraps, List<String> folderIds, String newFolderName) {
3033
super(context, pageListener);
3134
this.key = key;
3235
this.cat = cat;
@@ -39,6 +42,8 @@ public submitSubmissionPart3(Context context, abstractPage.pageListener pageList
3942
this.keywords = keywords;
4043
this.disableComments = disableComments;
4144
this.putInScraps = putInScraps;
45+
this.folderIds = folderIds;
46+
this.newFolderName = newFolderName;
4247
}
4348

4449
@Override
@@ -63,6 +68,14 @@ protected Boolean doInBackground(Void... voids) {
6368
params.put("message", message);
6469
params.put("keywords", keywords);
6570

71+
for(int i = 0; i < folderIds.size(); i++){
72+
params.put("folder_ids[" + Integer.toString(i) + "]", folderIds.get(i));
73+
}
74+
75+
if(newFolderName != null && !newFolderName.isEmpty()) {
76+
params.put("create_folder_name", newFolderName);
77+
}
78+
6679
if (disableComments) {
6780
params.put("lock_comments", "1");
6881
}

app/src/main/java/open/furaffinity/client/utilities/uiControls.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import java.util.ArrayList;
88
import java.util.HashMap;
9+
import java.util.List;
910

1011
public class uiControls {
1112
private static int compareStrings(String string1, String string2) {
@@ -65,4 +66,12 @@ public static void spinnerSetAdapter(Context context, Spinner inputSpinner, Hash
6566
}
6667
}
6768
}
69+
70+
public static void setSpinnerText(Context context, Spinner inputSpinner, String inputData){
71+
List<String> spinnerData = new ArrayList<>();
72+
spinnerData.add(inputData);
73+
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerData);
74+
inputSpinner.setAdapter(spinnerAdapter);
75+
inputSpinner.setSelection(0);
76+
}
6877
}

app/src/main/java/open/furaffinity/client/utilities/webClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ public String sendFormPostRequest(String urlIn, List<HashMap<String, String>> pa
320320
try {
321321
Cursor sourceFileCursor = context.getContentResolver().query(uri, null, null, null);
322322

323-
if(sourceFileCursor.moveToFirst()) {
323+
if(sourceFileCursor != null && sourceFileCursor.moveToFirst()) {
324324
int displayNameColumnIndex = sourceFileCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
325325
String fileName = sourceFileCursor.getString(displayNameColumnIndex);
326326
InputStream inputStream = context.getContentResolver().openInputStream(uri);

app/src/main/res/layout/dialog_fragment_uploadfinalizedialog.xml

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
android:layout_height="match_parent">
77

88
<ScrollView
9+
android:id="@+id/scrollView"
910
android:layout_width="match_parent"
1011
android:layout_height="match_parent"
1112
app:layout_constraintStart_toStartOf="parent"
@@ -17,7 +18,6 @@
1718
android:layout_height="match_parent"
1819
android:orientation="vertical">
1920

20-
2121
<TextView
2222
android:layout_width="wrap_content"
2323
android:layout_height="wrap_content"
@@ -118,8 +118,37 @@
118118
android:layout_height="wrap_content"
119119
android:text="Put in Scraps" />
120120

121+
<TextView
122+
android:layout_width="wrap_content"
123+
android:layout_height="wrap_content"
124+
android:layout_weight="1"
125+
android:text="Assign to Folders:" />
126+
127+
<Spinner
128+
android:id="@+id/assignToFolders"
129+
android:layout_width="match_parent"
130+
android:layout_height="wrap_content"/>
131+
132+
<TextView
133+
android:layout_width="wrap_content"
134+
android:layout_height="wrap_content"
135+
android:layout_weight="1"
136+
android:text="Assign to a New Folder:" />
137+
138+
<EditText
139+
android:id="@+id/assignToANewFolder"
140+
android:layout_width="match_parent"
141+
android:layout_height="wrap_content" />
142+
121143
</LinearLayout>
122144

123145
</ScrollView>
124146

147+
<androidx.recyclerview.widget.RecyclerView
148+
android:id="@+id/folderList"
149+
android:layout_width="match_parent"
150+
android:layout_height="match_parent"
151+
android:orientation="vertical"
152+
android:visibility="gone"/>
153+
125154
</androidx.constraintlayout.widget.ConstraintLayout>

0 commit comments

Comments
 (0)