mirror of
https://github.com/Team4388/RidgeScout.git
synced 2026-06-09 08:38:03 -06:00
Move fields to settings, add setting for match number
This commit is contained in:
@@ -16,9 +16,9 @@ import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.ridgebotics.ridgescout.R;
|
||||
import com.ridgebotics.ridgescout.scoutingData.fields;
|
||||
import com.ridgebotics.ridgescout.ui.settings.FieldsFragment;
|
||||
import com.ridgebotics.ridgescout.utility.settingsManager;
|
||||
import com.ridgebotics.ridgescout.databinding.FragmentDataBinding;
|
||||
import com.ridgebotics.ridgescout.types.frcTeam;
|
||||
import com.ridgebotics.ridgescout.ui.TeamSelectorFragment;
|
||||
import com.ridgebotics.ridgescout.utility.fileEditor;
|
||||
import com.ridgebotics.ridgescout.types.frcEvent;
|
||||
@@ -37,33 +37,16 @@ public class DataFragment extends Fragment {
|
||||
|
||||
String evcode = settingsManager.getEVCode();
|
||||
|
||||
binding.fieldsButton.setOnClickListener(v -> {
|
||||
binding.fieldsButton.setEnabled(false);
|
||||
binding.fieldsButtons.setVisibility(VISIBLE);
|
||||
});
|
||||
|
||||
binding.fieldsMatchesButton.setOnClickListener(v -> {
|
||||
FieldsFragment.set_filename(fields.matchFieldsFilename);
|
||||
findNavController(this).navigate(R.id.action_navigation_data_to_navigation_data_fields);
|
||||
});
|
||||
|
||||
binding.fieldsPitsButton.setOnClickListener(v -> {
|
||||
FieldsFragment.set_filename(fields.pitsFieldsFilename);
|
||||
findNavController(this).navigate(R.id.action_navigation_data_to_navigation_data_fields);
|
||||
});
|
||||
|
||||
if(evcode.equals("unset")){
|
||||
binding.noEventError.setVisibility(VISIBLE);
|
||||
|
||||
binding.buttons.setVisibility(VISIBLE);
|
||||
binding.teamsButton.setEnabled(false);
|
||||
binding.fieldsButton.setVisibility(VISIBLE);
|
||||
// binding.teamsButton.setEnabled(false);
|
||||
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
frcEvent event = frcEvent.decode(fileEditor.readFile(evcode + ".eventdata"));
|
||||
// frcEvent event = frcEvent.decode(fileEditor.readFile(evcode + ".eventdata"));
|
||||
|
||||
binding.teamsButton.setOnClickListener(v -> {
|
||||
TeamSelectorFragment.setPits_mode(false);
|
||||
|
||||
@@ -15,6 +15,8 @@ public class TallyCounterView extends LinearLayout {
|
||||
private Button minusButton;
|
||||
private Button plusButton;
|
||||
private OnCountChangedListener onCountChangedListener;
|
||||
private int min = 0;
|
||||
private int max = -1;
|
||||
|
||||
public interface OnCountChangedListener {
|
||||
void onCountChanged(int newCount);
|
||||
@@ -45,20 +47,26 @@ public class TallyCounterView extends LinearLayout {
|
||||
updateDisplay();
|
||||
|
||||
minusButton.setOnClickListener(v -> {
|
||||
if(count > 0) {
|
||||
if(count > min) {
|
||||
count--;
|
||||
updateDisplay();
|
||||
}
|
||||
});
|
||||
|
||||
plusButton.setOnClickListener(v -> {
|
||||
count++;
|
||||
updateDisplay();
|
||||
if(max == -1 || count < max){
|
||||
count++;
|
||||
updateDisplay();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateDisplay() {
|
||||
countDisplay.setText(String.valueOf(count));
|
||||
|
||||
minusButton.setEnabled(count > min);
|
||||
plusButton.setEnabled(max == -1 || count < max);
|
||||
|
||||
if (onCountChangedListener != null) {
|
||||
onCountChangedListener.onCountChanged(count);
|
||||
}
|
||||
@@ -69,6 +77,12 @@ public class TallyCounterView extends LinearLayout {
|
||||
updateDisplay();
|
||||
}
|
||||
|
||||
public void setBounds(int min, int max){
|
||||
this.min = min;
|
||||
this.max = max;
|
||||
updateDisplay();
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return count;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.ridgebotics.ridgescout.ui.data;
|
||||
package com.ridgebotics.ridgescout.ui.settings;
|
||||
|
||||
import static android.text.InputType.TYPE_CLASS_NUMBER;
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package com.ridgebotics.ridgescout.ui.data;
|
||||
package com.ridgebotics.ridgescout.ui.settings;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
@@ -242,7 +242,7 @@ public class FieldsFragment extends Fragment {
|
||||
if(fields.save(filename, newValues))
|
||||
AlertManager.toast("Saved");
|
||||
|
||||
Navigation.findNavController((Activity) getContext(), R.id.nav_host_fragment_activity_main).navigate(R.id.action_navigation_data_fields_to_navigation_data);
|
||||
Navigation.findNavController((Activity) getContext(), R.id.nav_host_fragment_activity_main).navigate(R.id.action_navigation_data_fields_to_navigation_settings);
|
||||
});
|
||||
alert.setNegativeButton("Cancel", null);
|
||||
alert.setCancelable(true);
|
||||
@@ -1,7 +1,10 @@
|
||||
package com.ridgebotics.ridgescout.ui.settings;
|
||||
|
||||
import static android.view.View.VISIBLE;
|
||||
import static androidx.navigation.fragment.FragmentKt.findNavController;
|
||||
import static com.ridgebotics.ridgescout.utility.settingsManager.AllyPosKey;
|
||||
import static com.ridgebotics.ridgescout.utility.settingsManager.CustomEventsKey;
|
||||
import static com.ridgebotics.ridgescout.utility.settingsManager.MatchNumKey;
|
||||
import static com.ridgebotics.ridgescout.utility.settingsManager.SelEVCodeKey;
|
||||
import static com.ridgebotics.ridgescout.utility.settingsManager.UnameKey;
|
||||
import static com.ridgebotics.ridgescout.utility.settingsManager.WifiModeKey;
|
||||
@@ -15,6 +18,7 @@ import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.InputType;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -29,9 +33,13 @@ import com.google.android.material.card.MaterialCardView;
|
||||
import com.google.android.material.checkbox.MaterialCheckBox;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
import com.ridgebotics.ridgescout.R;
|
||||
import com.ridgebotics.ridgescout.databinding.FragmentSettingsBinding;
|
||||
import com.ridgebotics.ridgescout.scoutingData.fields;
|
||||
import com.ridgebotics.ridgescout.ui.CustomSpinnerPopup;
|
||||
import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
|
||||
import com.ridgebotics.ridgescout.ui.scouting.TallyCounterView;
|
||||
import com.ridgebotics.ridgescout.utility.DataManager;
|
||||
import com.ridgebotics.ridgescout.utility.fileEditor;
|
||||
import com.ridgebotics.ridgescout.utility.settingsManager;
|
||||
|
||||
@@ -50,8 +58,30 @@ public class settingsFragment extends Fragment {
|
||||
binding = FragmentSettingsBinding.inflate(inflater, container, false);
|
||||
View root = binding.getRoot();
|
||||
|
||||
reloadSettings();
|
||||
|
||||
binding.fieldsButton.setOnClickListener(v -> {
|
||||
binding.fieldsButton.setEnabled(false);
|
||||
binding.fieldsButtons.setVisibility(VISIBLE);
|
||||
});
|
||||
|
||||
binding.fieldsMatchesButton.setOnClickListener(v -> {
|
||||
FieldsFragment.set_filename(fields.matchFieldsFilename);
|
||||
findNavController(this).navigate(R.id.action_navigation_settings_to_navigation_data_fields);
|
||||
});
|
||||
|
||||
binding.fieldsPitsButton.setOnClickListener(v -> {
|
||||
FieldsFragment.set_filename(fields.pitsFieldsFilename);
|
||||
findNavController(this).navigate(R.id.action_navigation_settings_to_navigation_data_fields);
|
||||
});
|
||||
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private void reloadSettings(){
|
||||
String[] alliance_pos_list = new String[]{"red-1", "red-2", "red-3",
|
||||
"blue-1", "blue-2", "blue-3"};
|
||||
"blue-1", "blue-2", "blue-3"};
|
||||
|
||||
SettingsManager manager = new SettingsManager(getContext());
|
||||
|
||||
@@ -70,16 +100,32 @@ public class settingsFragment extends Fragment {
|
||||
manager.addItem(new NumberSettingsItem(YearNumKey, "Year", 0, 9999));
|
||||
|
||||
manager.addItem(new DropdownSettingsItem(AllyPosKey, "Alliance Pos", alliance_pos_list));
|
||||
manager.addItem(new DropdownSettingsItem(SelEVCodeKey, "Event Code", fileEditor.getEventList().toArray(new String[0])));
|
||||
|
||||
int max = 0;
|
||||
boolean hasEvent = false;
|
||||
|
||||
if(!DataManager.getevcode().equals("unset")){
|
||||
DataManager.reload_event();
|
||||
max = DataManager.event.matches.size();
|
||||
hasEvent = true;
|
||||
}
|
||||
|
||||
TallySettingsItem matchNum = new TallySettingsItem(MatchNumKey, "Match Number", max);
|
||||
matchNum.setEnabled(hasEvent);
|
||||
manager.addItem(matchNum);
|
||||
|
||||
DropdownSettingsItem eventCode = new DropdownSettingsItem(SelEVCodeKey, "Event Code", fileEditor.getEventList().toArray(new String[0]));
|
||||
eventCode.reloadOnChange(true);
|
||||
manager.addItem(eventCode);
|
||||
|
||||
manager.addItem(new StringSettingsItem(UnameKey, "Username"));
|
||||
|
||||
binding.SettingsTable.removeAllViews();
|
||||
manager.getView(binding.SettingsTable);
|
||||
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
@@ -103,6 +149,7 @@ public class settingsFragment extends Fragment {
|
||||
private String key;
|
||||
private String title;
|
||||
private T defaultValue;
|
||||
public View view;
|
||||
|
||||
public SettingsItem(String key, String title, T defaultValue) {
|
||||
this.key = key;
|
||||
@@ -110,6 +157,14 @@ public class settingsFragment extends Fragment {
|
||||
this.defaultValue = defaultValue;
|
||||
}
|
||||
|
||||
private boolean reloadOnChange = false;
|
||||
public void reloadOnChange(boolean enabled){
|
||||
reloadOnChange = enabled;
|
||||
}
|
||||
public boolean isReloadOnChange(){
|
||||
return reloadOnChange;
|
||||
}
|
||||
|
||||
public abstract View createView(Context context);
|
||||
public abstract T getValue();
|
||||
|
||||
@@ -146,6 +201,7 @@ public class settingsFragment extends Fragment {
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
getEditor().putString(getKey(), s.toString()).apply();
|
||||
if(isReloadOnChange()) reloadSettings();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -205,6 +261,7 @@ public class settingsFragment extends Fragment {
|
||||
} catch (NumberFormatException e) {
|
||||
editText.setText(String.valueOf(getDefaultValue()));
|
||||
}
|
||||
if(isReloadOnChange()) reloadSettings();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -225,6 +282,66 @@ public class settingsFragment extends Fragment {
|
||||
}
|
||||
}
|
||||
|
||||
public class TallySettingsItem extends SettingsItem<Integer> {
|
||||
private int max;
|
||||
|
||||
public TallySettingsItem(String key, String title, int max) {
|
||||
super(key, title, prefs.getInt(key, (int) defaults.get(key)));
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
TallyCounterView tally;
|
||||
private boolean enabled;
|
||||
|
||||
@Override
|
||||
public void setEnabled(boolean enabled){
|
||||
this.enabled = enabled;
|
||||
if(tally != null)
|
||||
tally.setEnabled(enabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View createView(Context context) {
|
||||
LinearLayout ll = new LinearLayout(getContext());
|
||||
ll.setOrientation(LinearLayout.VERTICAL);
|
||||
|
||||
tally = new TallyCounterView(getContext());
|
||||
|
||||
int value = getValue()+1;
|
||||
if(value >= max){
|
||||
value = max;
|
||||
getEditor().putInt(getKey(), max-1).apply();
|
||||
}
|
||||
|
||||
tally.setValue(value);
|
||||
tally.setBounds(1, max);
|
||||
|
||||
tally.setOnCountChangedListener(count -> {
|
||||
getEditor().putInt(getKey(), count-1).apply();
|
||||
if(isReloadOnChange()) reloadSettings();
|
||||
});
|
||||
tally.setEnabled(enabled);
|
||||
|
||||
TextView tv = new TextView(getContext());
|
||||
tv.setText(getTitle());
|
||||
tv.setTextAppearance(com.google.android.material.R.style.TextAppearance_MaterialComponents_Headline6);
|
||||
tv.setGravity(Gravity.CENTER);
|
||||
ll.addView(tv);
|
||||
|
||||
ll.addView(tally);
|
||||
|
||||
|
||||
|
||||
|
||||
return ll;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getValue() {
|
||||
return prefs.getInt(getKey(), (int) defaults.get(getKey()));
|
||||
}
|
||||
}
|
||||
|
||||
public class DropdownSettingsItem extends SettingsItem<String> {
|
||||
private String[] options;
|
||||
|
||||
@@ -257,6 +374,7 @@ public class settingsFragment extends Fragment {
|
||||
|
||||
dropdown.setOnClickListener((item, index) -> {
|
||||
getEditor().putString(getKey(), item).apply();
|
||||
if(isReloadOnChange()) reloadSettings();
|
||||
});
|
||||
|
||||
return dropdown;
|
||||
@@ -297,6 +415,7 @@ public class settingsFragment extends Fragment {
|
||||
for (SettingsItem<?> item : controlledItems) {
|
||||
item.setEnabled(isChecked);
|
||||
}
|
||||
if(isReloadOnChange()) reloadSettings();
|
||||
});
|
||||
|
||||
for (SettingsItem<?> item : controlledItems) {
|
||||
@@ -337,7 +456,11 @@ public class settingsFragment extends Fragment {
|
||||
itemContainer.setOrientation(LinearLayout.VERTICAL);
|
||||
itemContainer.setPadding(32, 0, 32, 8);
|
||||
|
||||
itemContainer.addView(item.createView(context));
|
||||
View view = item.createView(context);
|
||||
itemContainer.addView(view);
|
||||
|
||||
item.view = view;
|
||||
|
||||
views.add(itemContainer);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ package com.ridgebotics.ridgescout.ui.transfer;
|
||||
import static com.ridgebotics.ridgescout.utility.DataManager.evcode;
|
||||
import static com.ridgebotics.ridgescout.utility.fileEditor.baseDir;
|
||||
|
||||
import com.ridgebotics.ridgescout.ui.data.FieldEditorHelper;
|
||||
import com.ridgebotics.ridgescout.utility.AlertManager;
|
||||
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
|
||||
import com.ridgebotics.ridgescout.utility.ByteBuilder;
|
||||
@@ -13,25 +12,20 @@ import com.ridgebotics.ridgescout.utility.settingsManager;
|
||||
|
||||
import org.apache.commons.net.ftp.FTP;
|
||||
import org.apache.commons.net.ftp.FTPClient;
|
||||
import org.apache.commons.net.ftp.FTPCmd;
|
||||
import org.apache.commons.net.ftp.FTPFile;
|
||||
import org.apache.commons.net.ftp.FTPReply;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TimeZone;
|
||||
|
||||
public class FTPSync extends Thread {
|
||||
public static final String remoteBasePath = "/RidgeScout/";
|
||||
|
||||
Reference in New Issue
Block a user