mirror of
https://github.com/Team4388/RidgeScout.git
synced 2026-06-09 00:37:59 -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.R;
|
||||||
import com.ridgebotics.ridgescout.scoutingData.fields;
|
import com.ridgebotics.ridgescout.scoutingData.fields;
|
||||||
|
import com.ridgebotics.ridgescout.ui.settings.FieldsFragment;
|
||||||
import com.ridgebotics.ridgescout.utility.settingsManager;
|
import com.ridgebotics.ridgescout.utility.settingsManager;
|
||||||
import com.ridgebotics.ridgescout.databinding.FragmentDataBinding;
|
import com.ridgebotics.ridgescout.databinding.FragmentDataBinding;
|
||||||
import com.ridgebotics.ridgescout.types.frcTeam;
|
|
||||||
import com.ridgebotics.ridgescout.ui.TeamSelectorFragment;
|
import com.ridgebotics.ridgescout.ui.TeamSelectorFragment;
|
||||||
import com.ridgebotics.ridgescout.utility.fileEditor;
|
import com.ridgebotics.ridgescout.utility.fileEditor;
|
||||||
import com.ridgebotics.ridgescout.types.frcEvent;
|
import com.ridgebotics.ridgescout.types.frcEvent;
|
||||||
@@ -37,33 +37,16 @@ public class DataFragment extends Fragment {
|
|||||||
|
|
||||||
String evcode = settingsManager.getEVCode();
|
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")){
|
if(evcode.equals("unset")){
|
||||||
binding.noEventError.setVisibility(VISIBLE);
|
binding.noEventError.setVisibility(VISIBLE);
|
||||||
|
|
||||||
binding.buttons.setVisibility(VISIBLE);
|
// binding.teamsButton.setEnabled(false);
|
||||||
binding.teamsButton.setEnabled(false);
|
|
||||||
binding.fieldsButton.setVisibility(VISIBLE);
|
|
||||||
|
|
||||||
|
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
frcEvent event = frcEvent.decode(fileEditor.readFile(evcode + ".eventdata"));
|
// frcEvent event = frcEvent.decode(fileEditor.readFile(evcode + ".eventdata"));
|
||||||
|
|
||||||
binding.teamsButton.setOnClickListener(v -> {
|
binding.teamsButton.setOnClickListener(v -> {
|
||||||
TeamSelectorFragment.setPits_mode(false);
|
TeamSelectorFragment.setPits_mode(false);
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ public class TallyCounterView extends LinearLayout {
|
|||||||
private Button minusButton;
|
private Button minusButton;
|
||||||
private Button plusButton;
|
private Button plusButton;
|
||||||
private OnCountChangedListener onCountChangedListener;
|
private OnCountChangedListener onCountChangedListener;
|
||||||
|
private int min = 0;
|
||||||
|
private int max = -1;
|
||||||
|
|
||||||
public interface OnCountChangedListener {
|
public interface OnCountChangedListener {
|
||||||
void onCountChanged(int newCount);
|
void onCountChanged(int newCount);
|
||||||
@@ -45,20 +47,26 @@ public class TallyCounterView extends LinearLayout {
|
|||||||
updateDisplay();
|
updateDisplay();
|
||||||
|
|
||||||
minusButton.setOnClickListener(v -> {
|
minusButton.setOnClickListener(v -> {
|
||||||
if(count > 0) {
|
if(count > min) {
|
||||||
count--;
|
count--;
|
||||||
updateDisplay();
|
updateDisplay();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
plusButton.setOnClickListener(v -> {
|
plusButton.setOnClickListener(v -> {
|
||||||
|
if(max == -1 || count < max){
|
||||||
count++;
|
count++;
|
||||||
updateDisplay();
|
updateDisplay();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateDisplay() {
|
private void updateDisplay() {
|
||||||
countDisplay.setText(String.valueOf(count));
|
countDisplay.setText(String.valueOf(count));
|
||||||
|
|
||||||
|
minusButton.setEnabled(count > min);
|
||||||
|
plusButton.setEnabled(max == -1 || count < max);
|
||||||
|
|
||||||
if (onCountChangedListener != null) {
|
if (onCountChangedListener != null) {
|
||||||
onCountChangedListener.onCountChanged(count);
|
onCountChangedListener.onCountChanged(count);
|
||||||
}
|
}
|
||||||
@@ -69,6 +77,12 @@ public class TallyCounterView extends LinearLayout {
|
|||||||
updateDisplay();
|
updateDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setBounds(int min, int max){
|
||||||
|
this.min = min;
|
||||||
|
this.max = max;
|
||||||
|
updateDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
public int getValue() {
|
public int getValue() {
|
||||||
return count;
|
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;
|
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.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@@ -242,7 +242,7 @@ public class FieldsFragment extends Fragment {
|
|||||||
if(fields.save(filename, newValues))
|
if(fields.save(filename, newValues))
|
||||||
AlertManager.toast("Saved");
|
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.setNegativeButton("Cancel", null);
|
||||||
alert.setCancelable(true);
|
alert.setCancelable(true);
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
package com.ridgebotics.ridgescout.ui.settings;
|
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.AllyPosKey;
|
||||||
import static com.ridgebotics.ridgescout.utility.settingsManager.CustomEventsKey;
|
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.SelEVCodeKey;
|
||||||
import static com.ridgebotics.ridgescout.utility.settingsManager.UnameKey;
|
import static com.ridgebotics.ridgescout.utility.settingsManager.UnameKey;
|
||||||
import static com.ridgebotics.ridgescout.utility.settingsManager.WifiModeKey;
|
import static com.ridgebotics.ridgescout.utility.settingsManager.WifiModeKey;
|
||||||
@@ -15,6 +18,7 @@ import android.os.Bundle;
|
|||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
|
import android.view.Gravity;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
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.checkbox.MaterialCheckBox;
|
||||||
import com.google.android.material.textfield.TextInputEditText;
|
import com.google.android.material.textfield.TextInputEditText;
|
||||||
import com.google.android.material.textfield.TextInputLayout;
|
import com.google.android.material.textfield.TextInputLayout;
|
||||||
|
import com.ridgebotics.ridgescout.R;
|
||||||
import com.ridgebotics.ridgescout.databinding.FragmentSettingsBinding;
|
import com.ridgebotics.ridgescout.databinding.FragmentSettingsBinding;
|
||||||
|
import com.ridgebotics.ridgescout.scoutingData.fields;
|
||||||
import com.ridgebotics.ridgescout.ui.CustomSpinnerPopup;
|
import com.ridgebotics.ridgescout.ui.CustomSpinnerPopup;
|
||||||
import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
|
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.fileEditor;
|
||||||
import com.ridgebotics.ridgescout.utility.settingsManager;
|
import com.ridgebotics.ridgescout.utility.settingsManager;
|
||||||
|
|
||||||
@@ -50,6 +58,28 @@ public class settingsFragment extends Fragment {
|
|||||||
binding = FragmentSettingsBinding.inflate(inflater, container, false);
|
binding = FragmentSettingsBinding.inflate(inflater, container, false);
|
||||||
View root = binding.getRoot();
|
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",
|
String[] alliance_pos_list = new String[]{"red-1", "red-2", "red-3",
|
||||||
"blue-1", "blue-2", "blue-3"};
|
"blue-1", "blue-2", "blue-3"};
|
||||||
|
|
||||||
@@ -70,16 +100,32 @@ public class settingsFragment extends Fragment {
|
|||||||
manager.addItem(new NumberSettingsItem(YearNumKey, "Year", 0, 9999));
|
manager.addItem(new NumberSettingsItem(YearNumKey, "Year", 0, 9999));
|
||||||
|
|
||||||
manager.addItem(new DropdownSettingsItem(AllyPosKey, "Alliance Pos", alliance_pos_list));
|
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"));
|
manager.addItem(new StringSettingsItem(UnameKey, "Username"));
|
||||||
|
|
||||||
|
binding.SettingsTable.removeAllViews();
|
||||||
manager.getView(binding.SettingsTable);
|
manager.getView(binding.SettingsTable);
|
||||||
|
|
||||||
|
|
||||||
return root;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroyView() {
|
public void onDestroyView() {
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
@@ -103,6 +149,7 @@ public class settingsFragment extends Fragment {
|
|||||||
private String key;
|
private String key;
|
||||||
private String title;
|
private String title;
|
||||||
private T defaultValue;
|
private T defaultValue;
|
||||||
|
public View view;
|
||||||
|
|
||||||
public SettingsItem(String key, String title, T defaultValue) {
|
public SettingsItem(String key, String title, T defaultValue) {
|
||||||
this.key = key;
|
this.key = key;
|
||||||
@@ -110,6 +157,14 @@ public class settingsFragment extends Fragment {
|
|||||||
this.defaultValue = defaultValue;
|
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 View createView(Context context);
|
||||||
public abstract T getValue();
|
public abstract T getValue();
|
||||||
|
|
||||||
@@ -146,6 +201,7 @@ public class settingsFragment extends Fragment {
|
|||||||
@Override
|
@Override
|
||||||
public void afterTextChanged(Editable s) {
|
public void afterTextChanged(Editable s) {
|
||||||
getEditor().putString(getKey(), s.toString()).apply();
|
getEditor().putString(getKey(), s.toString()).apply();
|
||||||
|
if(isReloadOnChange()) reloadSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -205,6 +261,7 @@ public class settingsFragment extends Fragment {
|
|||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
editText.setText(String.valueOf(getDefaultValue()));
|
editText.setText(String.valueOf(getDefaultValue()));
|
||||||
}
|
}
|
||||||
|
if(isReloadOnChange()) reloadSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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> {
|
public class DropdownSettingsItem extends SettingsItem<String> {
|
||||||
private String[] options;
|
private String[] options;
|
||||||
|
|
||||||
@@ -257,6 +374,7 @@ public class settingsFragment extends Fragment {
|
|||||||
|
|
||||||
dropdown.setOnClickListener((item, index) -> {
|
dropdown.setOnClickListener((item, index) -> {
|
||||||
getEditor().putString(getKey(), item).apply();
|
getEditor().putString(getKey(), item).apply();
|
||||||
|
if(isReloadOnChange()) reloadSettings();
|
||||||
});
|
});
|
||||||
|
|
||||||
return dropdown;
|
return dropdown;
|
||||||
@@ -297,6 +415,7 @@ public class settingsFragment extends Fragment {
|
|||||||
for (SettingsItem<?> item : controlledItems) {
|
for (SettingsItem<?> item : controlledItems) {
|
||||||
item.setEnabled(isChecked);
|
item.setEnabled(isChecked);
|
||||||
}
|
}
|
||||||
|
if(isReloadOnChange()) reloadSettings();
|
||||||
});
|
});
|
||||||
|
|
||||||
for (SettingsItem<?> item : controlledItems) {
|
for (SettingsItem<?> item : controlledItems) {
|
||||||
@@ -337,7 +456,11 @@ public class settingsFragment extends Fragment {
|
|||||||
itemContainer.setOrientation(LinearLayout.VERTICAL);
|
itemContainer.setOrientation(LinearLayout.VERTICAL);
|
||||||
itemContainer.setPadding(32, 0, 32, 8);
|
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);
|
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.DataManager.evcode;
|
||||||
import static com.ridgebotics.ridgescout.utility.fileEditor.baseDir;
|
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.AlertManager;
|
||||||
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
|
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
|
||||||
import com.ridgebotics.ridgescout.utility.ByteBuilder;
|
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.FTP;
|
||||||
import org.apache.commons.net.ftp.FTPClient;
|
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.FTPFile;
|
||||||
import org.apache.commons.net.ftp.FTPReply;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TimeZone;
|
|
||||||
|
|
||||||
public class FTPSync extends Thread {
|
public class FTPSync extends Thread {
|
||||||
public static final String remoteBasePath = "/RidgeScout/";
|
public static final String remoteBasePath = "/RidgeScout/";
|
||||||
|
|||||||
@@ -27,17 +27,6 @@
|
|||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/fieldsButton"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Fields"
|
|
||||||
android:textSize="34sp"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/teamsButton"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/teamsButton"
|
android:id="@+id/teamsButton"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@@ -49,35 +38,5 @@
|
|||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/fieldsButton" />
|
app:layout_constraintTop_toBottomOf="@id/fieldsButton" />
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/fieldsButtons"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="1dp"
|
|
||||||
android:gravity="center"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/fieldsButton"
|
|
||||||
tools:visibility="visible">
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/fieldsPitsButton"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_margin="5dp"
|
|
||||||
android:text="Pits"
|
|
||||||
android:textSize="34sp" />
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/fieldsMatchesButton"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_margin="5dp"
|
|
||||||
android:text="Matches"
|
|
||||||
android:textSize="34sp" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/matchScoutingButton"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Matches"
|
|
||||||
android:textSize="34sp"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/pitScoutingButton"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/pitScoutingButton"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Pits"
|
|
||||||
android:textSize="34sp"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/matchScoutingButton" />
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
tools:context=".ui.settings.settingsFragment">
|
tools:context=".ui.settings.settingsFragment">
|
||||||
|
|
||||||
<ScrollView
|
<ScrollView
|
||||||
|
android:id="@+id/scrollView2"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginBottom="60dp"
|
android:layout_marginBottom="60dp"
|
||||||
@@ -27,4 +28,45 @@
|
|||||||
|
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/fieldsButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Fields"
|
||||||
|
android:textSize="34sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/scrollView2"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/fieldsButtons"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="1dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/fieldsButton"
|
||||||
|
tools:visibility="visible">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/fieldsPitsButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="5dp"
|
||||||
|
android:text="Pits"
|
||||||
|
android:textSize="34sp" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/fieldsMatchesButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="5dp"
|
||||||
|
android:text="Matches"
|
||||||
|
android:textSize="34sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -81,13 +81,6 @@
|
|||||||
app:exitAnim="@anim/exit_anim"
|
app:exitAnim="@anim/exit_anim"
|
||||||
app:popEnterAnim="@anim/pop_enter_anim"
|
app:popEnterAnim="@anim/pop_enter_anim"
|
||||||
app:popExitAnim="@anim/pop_exit_anim" />
|
app:popExitAnim="@anim/pop_exit_anim" />
|
||||||
<action
|
|
||||||
android:id="@+id/action_navigation_data_to_navigation_data_fields"
|
|
||||||
app:destination="@id/navigation_data_fields"
|
|
||||||
app:enterAnim="@anim/enter_anim"
|
|
||||||
app:exitAnim="@anim/exit_anim"
|
|
||||||
app:popEnterAnim="@anim/pop_enter_anim"
|
|
||||||
app:popExitAnim="@anim/pop_exit_anim" />
|
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
@@ -104,11 +97,11 @@
|
|||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/navigation_data_fields"
|
android:id="@+id/navigation_data_fields"
|
||||||
android:name="com.ridgebotics.ridgescout.ui.data.FieldsFragment"
|
android:name="com.ridgebotics.ridgescout.ui.settings.FieldsFragment"
|
||||||
tools:layout="@layout/fragment_data_fields">
|
tools:layout="@layout/fragment_data_fields">
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_navigation_data_fields_to_navigation_data"
|
android:id="@+id/action_navigation_data_fields_to_navigation_settings"
|
||||||
app:destination="@id/navigation_data"
|
app:destination="@id/navigation_settings"
|
||||||
app:enterAnim="@anim/enter_anim"
|
app:enterAnim="@anim/enter_anim"
|
||||||
app:exitAnim="@anim/exit_anim"
|
app:exitAnim="@anim/exit_anim"
|
||||||
app:popEnterAnim="@anim/pop_enter_anim"
|
app:popEnterAnim="@anim/pop_enter_anim"
|
||||||
@@ -232,6 +225,13 @@
|
|||||||
android:name="com.ridgebotics.ridgescout.ui.settings.settingsFragment"
|
android:name="com.ridgebotics.ridgescout.ui.settings.settingsFragment"
|
||||||
android:label="@string/title_settings"
|
android:label="@string/title_settings"
|
||||||
tools:layout="@layout/fragment_settings">
|
tools:layout="@layout/fragment_settings">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_navigation_settings_to_navigation_data_fields"
|
||||||
|
app:destination="@id/navigation_data_fields"
|
||||||
|
app:enterAnim="@anim/enter_anim"
|
||||||
|
app:exitAnim="@anim/exit_anim"
|
||||||
|
app:popEnterAnim="@anim/pop_enter_anim"
|
||||||
|
app:popExitAnim="@anim/pop_exit_anim" />
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user