From 6c38147c6d1983bafa655bb4626a24f43bb79b27 Mon Sep 17 00:00:00 2001 From: Michael Mikovsky <77305074+Astatin3@users.noreply.github.com> Date: Tue, 1 Apr 2025 12:41:37 -0600 Subject: [PATCH] Improve TBA event downloading --- .../ridgescout/types/frcEvent.java | 6 + .../ridgescout/ui/TBAEventOption.java | 92 +++++++ .../ridgescout/ui/data/FieldDataFragment.java | 3 +- .../ridgescout/ui/data/TeamsFragment.java | 9 +- .../ui/transfer/FileSelectorFragment.java | 7 + ...TBAFragment.java => TBAEventFragment.java} | 192 ++++----------- .../ui/transfer/TBASelectorFragment.java | 230 ++++++++++++++++++ .../ui/transfer/TransferFragment.java | 2 +- .../ridgescout/utility/DataManager.java | 2 +- .../ridgescout/utility/fileEditor.java | 7 +- app/src/main/res/layout/view_tba_event.xml | 69 ++++++ .../main/res/navigation/mobile_navigation.xml | 53 ++-- 12 files changed, 501 insertions(+), 171 deletions(-) create mode 100644 app/src/main/java/com/ridgebotics/ridgescout/ui/TBAEventOption.java rename app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/{TBAFragment.java => TBAEventFragment.java} (74%) create mode 100644 app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TBASelectorFragment.java create mode 100644 app/src/main/res/layout/view_tba_event.xml diff --git a/app/src/main/java/com/ridgebotics/ridgescout/types/frcEvent.java b/app/src/main/java/com/ridgebotics/ridgescout/types/frcEvent.java index 28c890a..a328f22 100644 --- a/app/src/main/java/com/ridgebotics/ridgescout/types/frcEvent.java +++ b/app/src/main/java/com/ridgebotics/ridgescout/types/frcEvent.java @@ -9,6 +9,8 @@ import androidx.annotation.NonNull; import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.ByteBuilder; +import com.ridgebotics.ridgescout.utility.settingsManager; + import java.util.ArrayList; import java.util.List; import java.util.stream.IntStream; @@ -35,6 +37,10 @@ public class frcEvent { bb.addRaw(frcMatch.typecode, match.encode()); } + if(settingsManager.getEVCode().equals("unset")){ + settingsManager.setEVCode(eventCode); + } + return bb.build(); } catch (ByteBuilder.buildingException e) { AlertManager.error(e); diff --git a/app/src/main/java/com/ridgebotics/ridgescout/ui/TBAEventOption.java b/app/src/main/java/com/ridgebotics/ridgescout/ui/TBAEventOption.java new file mode 100644 index 0000000..644e7c5 --- /dev/null +++ b/app/src/main/java/com/ridgebotics/ridgescout/ui/TBAEventOption.java @@ -0,0 +1,92 @@ +package com.ridgebotics.ridgescout.ui; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.ridgebotics.ridgescout.R; +import com.ridgebotics.ridgescout.types.frcTeam; + +public class TBAEventOption extends LinearLayout { + public TBAEventOption(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(context); + } + + public TBAEventOption(Context context) { + super(context); + init(context); + } + + private TextView eventCode; + private TextView eventName; + private TextView eventType; + + private ConstraintLayout box; + private View coloredBackground; + + public void init(Context context) { + LayoutInflater.from(context).inflate(R.layout.view_tba_event, this, true); + + eventCode = findViewById(R.id.tba_event_code); + eventName = findViewById(R.id.tba_event_name); + eventType = findViewById(R.id.tba_event_type); + + + box = findViewById(R.id.tba_event_box); + coloredBackground = findViewById(R.id.tba_event_background); + } + + public void setCode(String code){ + eventCode.setText(String.valueOf(code)); + } + + public void setName(String name){ + eventName.setText(name); + } + public void setType(String name){ + eventType.setText(name); + } + + +// public void fromTeam(frcTeam team){ +// setTeamNumber(team.teamNumber); +// setTeamName(team.teamName); +// +// if(team.bitmap != null) { +// setTeamLogo(team.bitmap); +// }else{ +// hideLogo(); +// } +// +// setColor(team.getTeamColor()); +// } + + public void setColor(int color){ + Drawable drawable = box.getBackground(); + drawable.mutate(); + drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); + + float[] hsv = new float[3]; + Color.colorToHSV(color,hsv); + + coloredBackground.setBackgroundColor( + Color.HSVToColor(127, new float[]{ + hsv[0], + Math.min(hsv[1], 0.75f), + Math.min(hsv[2], 0.5f) + }) + ); + } +} diff --git a/app/src/main/java/com/ridgebotics/ridgescout/ui/data/FieldDataFragment.java b/app/src/main/java/com/ridgebotics/ridgescout/ui/data/FieldDataFragment.java index 080d7d7..fbce88c 100644 --- a/app/src/main/java/com/ridgebotics/ridgescout/ui/data/FieldDataFragment.java +++ b/app/src/main/java/com/ridgebotics/ridgescout/ui/data/FieldDataFragment.java @@ -74,8 +74,7 @@ public class FieldDataFragment extends Fragment { if (psda.data.array[fieldIndex] != null && psda.data.array[fieldIndex].get() != null) data[teamIndex].add(psda.data.array[fieldIndex]); } catch (Exception e) { - e.printStackTrace(); - AlertManager.addSimpleError("Failure to load file " + filenames.get(i)); + AlertManager.error("Failure to load file " + filenames.get(i), e); } } } diff --git a/app/src/main/java/com/ridgebotics/ridgescout/ui/data/TeamsFragment.java b/app/src/main/java/com/ridgebotics/ridgescout/ui/data/TeamsFragment.java index d306d94..20e677d 100644 --- a/app/src/main/java/com/ridgebotics/ridgescout/ui/data/TeamsFragment.java +++ b/app/src/main/java/com/ridgebotics/ridgescout/ui/data/TeamsFragment.java @@ -270,8 +270,7 @@ public class TeamsFragment extends Fragment { match_latest_values[i].add_individual_view(binding.matchArea, psda.data.array[i]); } }catch (Exception e){ - e.printStackTrace(); - AlertManager.alert("Warning!", "Failure to load file " + files[matchIndex]); + AlertManager.error("Failure to load file " + files[matchIndex], e); } } @@ -291,8 +290,7 @@ public class TeamsFragment extends Fragment { data[a][i] = psda.data.array[a]; } } catch (Exception e){ - e.printStackTrace(); - AlertManager.alert("Warning!", "Failure to load file " + files[i]); + AlertManager.error("Failure to load file " + files[i], e); } } @@ -327,8 +325,7 @@ public class TeamsFragment extends Fragment { data[a][i] = psda.data.array[a]; } }catch (Exception e){ - e.printStackTrace(); - AlertManager.alert("Warning!", "Failure to load file " + files[i]); + AlertManager.error("Failure to load file " + files[i], e); } } diff --git a/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/FileSelectorFragment.java b/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/FileSelectorFragment.java index 0ca98b2..8a60c19 100644 --- a/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/FileSelectorFragment.java +++ b/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/FileSelectorFragment.java @@ -83,6 +83,13 @@ public class FileSelectorFragment extends Fragment { boolean sel = !selected_arr[fi]; selected_arr[fi] = sel; + tr.setBackgroundColor(sel ? background_color : unselected_background_color); + ((CheckBox) tr.getChildAt(0)).setChecked(sel); + }); + checkBox.setOnClickListener(view -> { + boolean sel = !selected_arr[fi]; + selected_arr[fi] = sel; + tr.setBackgroundColor(sel ? background_color : unselected_background_color); ((CheckBox) tr.getChildAt(0)).setChecked(sel); }); diff --git a/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TBAFragment.java b/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TBAEventFragment.java similarity index 74% rename from app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TBAFragment.java rename to app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TBAEventFragment.java index 4929faf..e2586e9 100644 --- a/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TBAFragment.java +++ b/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TBAEventFragment.java @@ -1,7 +1,10 @@ package com.ridgebotics.ridgescout.ui.transfer; +import static androidx.navigation.fragment.FragmentKt.findNavController; +import static com.ridgebotics.ridgescout.utility.fileEditor.TBAAddress; +import static com.ridgebotics.ridgescout.utility.fileEditor.TBAHeader; + import android.app.ProgressDialog; -import android.graphics.Bitmap; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; @@ -16,15 +19,17 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import com.ridgebotics.ridgescout.R; import com.ridgebotics.ridgescout.databinding.FragmentTransferTbaBinding; -import com.ridgebotics.ridgescout.utility.AlertManager; -import com.ridgebotics.ridgescout.utility.ImageRequestTask; -import com.ridgebotics.ridgescout.utility.RequestTask; import com.ridgebotics.ridgescout.types.frcEvent; import com.ridgebotics.ridgescout.types.frcMatch; import com.ridgebotics.ridgescout.types.frcTeam; -import com.ridgebotics.ridgescout.utility.fileEditor; +import com.ridgebotics.ridgescout.ui.TBAEventOption; +import com.ridgebotics.ridgescout.utility.AlertManager; +import com.ridgebotics.ridgescout.utility.ImageRequestTask; import com.ridgebotics.ridgescout.utility.JSONUtil; +import com.ridgebotics.ridgescout.utility.RequestTask; +import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.settingsManager; import org.json.JSONArray; @@ -37,46 +42,64 @@ import java.util.Arrays; import java.util.Calendar; import java.util.Comparator; import java.util.Date; -import java.util.function.Function; -public class TBAFragment extends Fragment { - private static final String TBAAddress = "https://www.thebluealliance.com/api/v3/"; - private static final String TBAHeader = "X-TBA-Auth-Key: tjEKSZojAU2pgbs2mBt06SKyOakVhLutj3NwuxLTxPKQPLih11aCIwRIVFXKzY4e"; +public class TBAEventFragment extends Fragment { - private android.widget.TableLayout Table; + private TableLayout Table; private FragmentTransferTbaBinding binding; private final int year = settingsManager.getYearNum(); private ProgressDialog loadingDialog; + private static JSONObject eventData = null; + public static void setEventData(JSONObject j){ + eventData = j; + } + + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = FragmentTransferTbaBinding.inflate(inflater, container, false); + final String matchKey; + try { + matchKey = eventData.getString("key"); + } catch (JSONException e) { + AlertManager.error("Failed loading event key!", e); + return binding.getRoot(); + } + Table = binding.matchTable; Table.setStretchAllColumns(true); - TableRow tr = new TableRow(getContext()); - addTableText(tr, "Loading Events..."); - Table.addView(tr); + startLoading("Loading Teams and Matches..."); + Table.removeAllViews(); + Table.setStretchAllColumns(true); + Table.bringToFront(); - startLoading("Loading Events..."); + TableRow tr1 = new TableRow(getContext()); + addTableText(tr1, "Downloading Teams..."); + Table.addView(tr1); final RequestTask rq = new RequestTask(); - rq.onResult(s -> { - if(s == null || s.isEmpty()) { - AlertManager.addSimpleError("Could not fetch event!"); - AlertManager.updateErrors(); + rq.onResult(teamsStr -> { + TableRow tr11 = new TableRow(getContext()); + addTableText(tr11, "Downloading Matches..."); + Table.addView(tr11); + + final RequestTask rq1 = new RequestTask(); + rq1.onResult(matchesStr -> { + matchTable(matchesStr, teamsStr, eventData); stopLoading(); return null; - } - eventTable(s); + }); + rq1.execute((TBAAddress + "event/" + matchKey + "/matches"), TBAHeader); return null; }); - rq.execute(TBAAddress + "events/"+year, TBAHeader); + rq.execute((TBAAddress + "event/" + matchKey + "/teams"), TBAHeader); return binding.getRoot(); } @@ -89,129 +112,6 @@ public class TBAFragment extends Fragment { tr.addView(text); } - public void eventTable(String dataString){ - - Table.removeAllViews(); - Table.setStretchAllColumns(true); - Table.bringToFront(); - - Date currentTime = Calendar.getInstance().getTime(); - - try { - JSONArray data = new JSONArray(dataString); - - Table.setStretchAllColumns(true); - Table.bringToFront(); - - boolean toggle = false; - - for(int i=0;i { - startLoading("Loading Teams and Matches..."); - Table.removeAllViews(); - Table.setStretchAllColumns(true); - Table.bringToFront(); - - TableRow tr1 = new TableRow(getContext()); - addTableText(tr1, "Downloading Teams..."); - Table.addView(tr1); - - final RequestTask rq = new RequestTask(); - rq.onResult(teamsStr -> { - TableRow tr11 = new TableRow(getContext()); - addTableText(tr11, "Downloading Matches..."); - Table.addView(tr11); - - final RequestTask rq1 = new RequestTask(); - rq1.onResult(matchesStr -> { - matchTable(matchesStr, teamsStr, j); - stopLoading(); - return null; - }); - rq1.execute((TBAAddress + "event/" + matchKey + "/matches"), TBAHeader); - return null; - }); - rq.execute((TBAAddress + "event/" + matchKey + "/teams"), TBAHeader); - }); - -// tr.addView(cl); - Table.addView(tr, rowParams); - - - toggle = !toggle; - } - - stopLoading(); - }catch (JSONException j){ - AlertManager.error("Failed Downloading", j); - stopLoading(); - } - } - - static class matchComparator implements Comparator - { - - public int compare(JSONObject a, JSONObject b) - { - try { - return a.getInt("match_number") - b.getInt("match_number"); - }catch (JSONException j){ - return 0; - } - } - } - - - public void matchTable(String matchesString, String teamsString, JSONObject eventData){ Table.removeAllViews(); Table.setStretchAllColumns(true); @@ -493,8 +393,6 @@ public class TBAFragment extends Fragment { matchName = eventData.getString("name"); } - startLoading("Saving teams"); - ArrayList teams = new ArrayList<>(); for (int i = 0; i < teamData.length(); i++) { frcTeam teamObj = new frcTeam(); @@ -532,6 +430,8 @@ public class TBAFragment extends Fragment { fileEditor.setEvent(event); AlertManager.toast("Saved!"); + + getActivity().runOnUiThread(() -> findNavController(this).navigate(R.id.action_navigation_tba_event_to_navigation_transfer)); stopLoading(); }catch(Exception j) { diff --git a/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TBASelectorFragment.java b/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TBASelectorFragment.java new file mode 100644 index 0000000..a7b3ccc --- /dev/null +++ b/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TBASelectorFragment.java @@ -0,0 +1,230 @@ +package com.ridgebotics.ridgescout.ui.transfer; + +import static androidx.navigation.fragment.FragmentKt.findNavController; +import static com.ridgebotics.ridgescout.utility.fileEditor.TBAAddress; +import static com.ridgebotics.ridgescout.utility.fileEditor.TBAHeader; + +import android.app.ProgressDialog; +import android.os.Bundle; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TableRow; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.ridgebotics.ridgescout.R; +import com.ridgebotics.ridgescout.databinding.FragmentTransferTbaBinding; +import com.ridgebotics.ridgescout.ui.TBAEventOption; +import com.ridgebotics.ridgescout.utility.AlertManager; +import com.ridgebotics.ridgescout.utility.ImageRequestTask; +import com.ridgebotics.ridgescout.utility.RequestTask; +import com.ridgebotics.ridgescout.types.frcEvent; +import com.ridgebotics.ridgescout.types.frcMatch; +import com.ridgebotics.ridgescout.types.frcTeam; +import com.ridgebotics.ridgescout.utility.fileEditor; +import com.ridgebotics.ridgescout.utility.JSONUtil; +import com.ridgebotics.ridgescout.utility.settingsManager; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.List; + +public class TBASelectorFragment extends Fragment { + + private android.widget.TableLayout Table; + private FragmentTransferTbaBinding binding; + + private final int year = settingsManager.getYearNum(); + + private ProgressDialog loadingDialog; + + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + + binding = FragmentTransferTbaBinding.inflate(inflater, container, false); + + Table = binding.matchTable; + + Table.setStretchAllColumns(true); + + TableRow tr = new TableRow(getContext()); + addTableText(tr, "Loading Events..."); + Table.addView(tr); + + startLoading("Loading Events..."); + + final RequestTask rq = new RequestTask(); + rq.onResult(s -> { + if(s == null || s.isEmpty()) { + AlertManager.error("Could not fetch event!"); + stopLoading(); + return null; + } + eventTable(s); + return null; + }); + rq.execute(TBAAddress + "events/"+year, TBAHeader); + + return binding.getRoot(); + } + + private void addTableText(TableRow tr, String textStr){ + TextView text = new TextView(getContext()); + text.setTextSize(18); + text.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); // Text align center + text.setText(textStr); + tr.addView(text); + } + + public static int getEventTypeWeight(String type){ + switch(type){ + case "Preseason": return -3; + case "District": return -2; + case "Regional": return -1; + case "District Championship Division": return 0; + case "District Championship": return 1; + case "Championship Divison": return 2; + case "Championship Finals": return 3; + case "Offseason": return 4; + } + + return 0; + } + + public void eventTable(String dataString){ + + Table.removeAllViews(); + Table.setStretchAllColumns(true); + Table.bringToFront(); + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Date currentTime = Calendar.getInstance().getTime(); + + try { + JSONArray events = new JSONArray(dataString); + + List data = new ArrayList<>(); + for(int i = 0; i < events.length(); i++){ + data.add(events.getJSONObject(i)); + } + + // Sort events by date, and then type + data.sort((a, b) -> { + try { +// return (int) (currentTime.getTime() - format.parse(a.getString("start_date")).getTime()) +// - +// (int) (currentTime.getTime() - format.parse(b.getString("start_date")).getTime()); + + int diff = format.parse(a.getString("start_date")).compareTo(format.parse(b.getString("start_date"))) * 10; + + if(diff == 0){ + diff = getEventTypeWeight(a.getString("event_type_string")) - getEventTypeWeight(b.getString("event_type_string")); + } + + return diff; + } catch (ParseException | JSONException e) { + AlertManager.error(e); + return 0; + } + }); + + + boolean toggle = false; + + for(int i=0;i { + TBAEventFragment.setEventData(j); + findNavController(this).navigate(R.id.action_navigation_tba_selector_to_navigation_tba_event); + }); + +// tr.addView(cl); + Table.addView(row); + + + toggle = !toggle; + } + + stopLoading(); + }catch (JSONException j){ + AlertManager.error("Failed Downloading", j); + stopLoading(); + } + } + private void startLoading(String title){ + getActivity().runOnUiThread(() -> { + if(loadingDialog != null && loadingDialog.isShowing()) + loadingDialog.dismiss(); + loadingDialog = ProgressDialog.show(getActivity(), title, "Please wait..."); + }); + } + + private void stopLoading(){ + getActivity().runOnUiThread(() -> { + if (loadingDialog != null) + loadingDialog.cancel(); + loadingDialog = null; + }); + } +} diff --git a/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TransferFragment.java b/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TransferFragment.java index a5b4c41..bec8751 100644 --- a/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TransferFragment.java +++ b/app/src/main/java/com/ridgebotics/ridgescout/ui/transfer/TransferFragment.java @@ -57,7 +57,7 @@ public class TransferFragment extends Fragment { }); binding.TBAButton.setOnClickListener(v -> { - findNavController(this).navigate(R.id.action_navigation_transfer_to_navigation_tba); + findNavController(this).navigate(R.id.action_navigation_transfer_to_navigation_tba_selector); }); diff --git a/app/src/main/java/com/ridgebotics/ridgescout/utility/DataManager.java b/app/src/main/java/com/ridgebotics/ridgescout/utility/DataManager.java index 4922f13..68ca309 100644 --- a/app/src/main/java/com/ridgebotics/ridgescout/utility/DataManager.java +++ b/app/src/main/java/com/ridgebotics/ridgescout/utility/DataManager.java @@ -14,7 +14,7 @@ public class DataManager { public static String evcode; public static frcEvent event; public static void reload_event(){ - if(event != null) return; +// if(event != null) return; evcode = getevcode(); if(evcode.equals("unset")) return; diff --git a/app/src/main/java/com/ridgebotics/ridgescout/utility/fileEditor.java b/app/src/main/java/com/ridgebotics/ridgescout/utility/fileEditor.java index c4e9646..a683a14 100644 --- a/app/src/main/java/com/ridgebotics/ridgescout/utility/fileEditor.java +++ b/app/src/main/java/com/ridgebotics/ridgescout/utility/fileEditor.java @@ -36,6 +36,11 @@ public final class fileEditor { public static final byte internalDataVersion = 0x01; public static final int maxCompressedBlockSize = 4096; public static final int lengthHeaderBytes = 3; + + + public static final String TBAAddress = "https://www.thebluealliance.com/api/v3/"; + public static final String TBAHeader = "X-TBA-Auth-Key: tjEKSZojAU2pgbs2mBt06SKyOakVhLutj3NwuxLTxPKQPLih11aCIwRIVFXKzY4e"; + // private TimeZone localTimeZone = TimeZone.getDefault(); @@ -405,7 +410,7 @@ public final class fileEditor { } }); } catch (Exception e){ - e.printStackTrace(); + AlertManager.error(e); } diff --git a/app/src/main/res/layout/view_tba_event.xml b/app/src/main/res/layout/view_tba_event.xml new file mode 100644 index 0000000..c45e0dd --- /dev/null +++ b/app/src/main/res/layout/view_tba_event.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 7c407f4..581a06d 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -39,6 +39,33 @@ tools:layout="@layout/fragment_scouting_match"> + + + + + + + + + + app:destination="@id/navigation_data_field_data" + app:enterAnim="@anim/enter_anim" + app:exitAnim="@anim/exit_anim" + app:popEnterAnim="@anim/pop_enter_anim" + app:popExitAnim="@anim/pop_exit_anim" /> - + - - -