Fix navigation crashes, add transitions

This commit is contained in:
Astatin3
2024-07-28 09:28:00 -06:00
parent f9810139f0
commit b4cae9f610
16 changed files with 181 additions and 68 deletions
+1 -1
View File
@@ -21,7 +21,6 @@ Ridgebotics 2025 scouting app in Android
#### Data Analysis: #### Data Analysis:
- Make a word cloud for the compiled mode of text input type - Make a word cloud for the compiled mode of text input type
#### Functionality: #### Functionality:
- Fix navigation crashes.
- Make pit and match data field builder UIs. I don't want to have to keep editing a variable - Make pit and match data field builder UIs. I don't want to have to keep editing a variable
@@ -32,6 +31,7 @@ Ridgebotics 2025 scouting app in Android
- Add "history" view type to the teams view menu. - Add "history" view type to the teams view menu.
- Sentiment analysis of text input type - Sentiment analysis of text input type
#### Functionality: #### Functionality:
- Fix navigation crashes.
- Make everything use Fragments instead of views that toggle visibility - Make everything use Fragments instead of views that toggle visibility
- Make the file browser UI - Make the file browser UI
- Bluetooth data sync - Bluetooth data sync
@@ -1,6 +1,7 @@
package com.astatin3.scoutingapp2025; package com.astatin3.scoutingapp2025;
import android.os.Bundle; import android.os.Bundle;
import android.view.MenuItem;
import com.astatin3.scoutingapp2025.scoutingData.fields; import com.astatin3.scoutingapp2025.scoutingData.fields;
import com.astatin3.scoutingapp2025.utility.SentimentAnalysis; import com.astatin3.scoutingapp2025.utility.SentimentAnalysis;
@@ -11,8 +12,11 @@ import com.google.android.material.bottomnavigation.BottomNavigationView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.AnimBuilder;
import androidx.navigation.NavController; import androidx.navigation.NavController;
import androidx.navigation.NavDestination; import androidx.navigation.NavDestination;
import androidx.navigation.NavOptions;
import androidx.navigation.NavOptionsBuilder;
import androidx.navigation.Navigation; import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration; import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI; import androidx.navigation.ui.NavigationUI;
@@ -20,9 +24,13 @@ import androidx.navigation.ui.NavigationUI;
import com.astatin3.scoutingapp2025.databinding.ActivityMainBinding; import com.astatin3.scoutingapp2025.databinding.ActivityMainBinding;
import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings; import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings;
import com.google.android.material.navigation.NavigationBarView;
import java.util.Objects; import java.util.Objects;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
@@ -96,15 +104,36 @@ public class MainActivity extends AppCompatActivity {
R.id.navigation_settings) R.id.navigation_settings)
.build(); .build();
// appBarConfiguration.set
navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main); navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController); NavigationUI.setupWithNavController(navView, navController);
navView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
clearBackStack();
navController.navigate(item.getItemId(), savedInstanceState, new NavOptions.Builder()
.setEnterAnim(R.anim.enter_anim)
.setExitAnim(R.anim.exit_anim)
.setPopEnterAnim(R.anim.pop_enter_anim)
.setPopExitAnim(R.anim.pop_exit_anim).build()
);
return true;
}
});
} }
@Override @Override
public boolean onSupportNavigateUp() { public boolean onSupportNavigateUp() {
return navController.navigateUp() || super.onSupportNavigateUp(); return navController.navigateUp() || super.onSupportNavigateUp();
} }
private void clearBackStack() {
navController.popBackStack(navController.getGraph().getStartDestinationId(), false);
}
} }
@@ -10,7 +10,6 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.astatin3.scoutingapp2025.databinding.FragmentDataCompileBinding; import com.astatin3.scoutingapp2025.databinding.FragmentDataCompileBinding;
import com.astatin3.scoutingapp2025.databinding.FragmentPitScoutingBinding;
public class CompileFragment extends Fragment { public class CompileFragment extends Fragment {
FragmentDataCompileBinding binding; FragmentDataCompileBinding binding;
@@ -14,7 +14,7 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings; import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings;
import com.astatin3.scoutingapp2025.databinding.FragmentMatchScoutingBinding; import com.astatin3.scoutingapp2025.databinding.FragmentScoutingMatchBinding;
import com.astatin3.scoutingapp2025.scoutingData.ScoutingDataWriter; import com.astatin3.scoutingapp2025.scoutingData.ScoutingDataWriter;
import com.astatin3.scoutingapp2025.types.data.dataType; import com.astatin3.scoutingapp2025.types.data.dataType;
import com.astatin3.scoutingapp2025.types.frcMatch; import com.astatin3.scoutingapp2025.types.frcMatch;
@@ -29,12 +29,12 @@ import java.util.function.Function;
public class MatchScoutingFragment extends Fragment { public class MatchScoutingFragment extends Fragment {
private FragmentMatchScoutingBinding binding; private FragmentScoutingMatchBinding binding;
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) { @Nullable Bundle savedInstanceState) {
binding = FragmentMatchScoutingBinding.inflate(inflater, container, false); binding = FragmentScoutingMatchBinding.inflate(inflater, container, false);
DataManager.reload_match_fields(); DataManager.reload_match_fields();
@@ -15,7 +15,7 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings; import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings;
import com.astatin3.scoutingapp2025.databinding.FragmentPitScoutingBinding; import com.astatin3.scoutingapp2025.databinding.FragmentScoutingPitBinding;
import com.astatin3.scoutingapp2025.scoutingData.ScoutingDataWriter; import com.astatin3.scoutingapp2025.scoutingData.ScoutingDataWriter;
import com.astatin3.scoutingapp2025.types.data.dataType; import com.astatin3.scoutingapp2025.types.data.dataType;
import com.astatin3.scoutingapp2025.types.frcTeam; import com.astatin3.scoutingapp2025.types.frcTeam;
@@ -29,7 +29,7 @@ import java.util.function.Function;
public class PitScoutingFragment extends Fragment { public class PitScoutingFragment extends Fragment {
FragmentPitScoutingBinding binding; FragmentScoutingPitBinding binding;
private static frcTeam team; private static frcTeam team;
public static void setTeam(frcTeam tmpteam){ public static void setTeam(frcTeam tmpteam){
@@ -40,7 +40,7 @@ public class PitScoutingFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) { @Nullable Bundle savedInstanceState) {
binding = FragmentPitScoutingBinding.inflate(inflater, container, false); binding = FragmentScoutingPitBinding.inflate(inflater, container, false);
username = latestSettings.settings.get_username(); username = latestSettings.settings.get_username();
DataManager.reload_pit_fields(); DataManager.reload_pit_fields();
@@ -1,15 +1,11 @@
package com.astatin3.scoutingapp2025.ui.transfer; package com.astatin3.scoutingapp2025.ui.transfer;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.util.AttributeSet;
import android.view.Gravity; 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;
import android.widget.Button; import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TableLayout; import android.widget.TableLayout;
import android.widget.TableRow; import android.widget.TableRow;
import android.widget.TextView; import android.widget.TextView;
@@ -18,17 +14,14 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.astatin3.scoutingapp2025.databinding.FragmentDataCompileBinding;
import com.astatin3.scoutingapp2025.databinding.FragmentTransferTbaBinding; import com.astatin3.scoutingapp2025.databinding.FragmentTransferTbaBinding;
import com.astatin3.scoutingapp2025.utility.AlertManager; import com.astatin3.scoutingapp2025.utility.AlertManager;
import com.astatin3.scoutingapp2025.utility.RequestTask; import com.astatin3.scoutingapp2025.utility.RequestTask;
import com.astatin3.scoutingapp2025.types.frcEvent; import com.astatin3.scoutingapp2025.types.frcEvent;
import com.astatin3.scoutingapp2025.types.frcMatch; import com.astatin3.scoutingapp2025.types.frcMatch;
import com.astatin3.scoutingapp2025.types.frcTeam; import com.astatin3.scoutingapp2025.types.frcTeam;
import com.astatin3.scoutingapp2025.databinding.FragmentTransferBinding;
import com.astatin3.scoutingapp2025.utility.fileEditor; import com.astatin3.scoutingapp2025.utility.fileEditor;
import com.astatin3.scoutingapp2025.utility.JSONUtil; import com.astatin3.scoutingapp2025.utility.JSONUtil;
import com.google.android.material.tabs.TabLayout;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
@@ -41,7 +34,7 @@ import java.util.Calendar;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date; import java.util.Date;
public class TBAView extends Fragment { public class TBAFragment extends Fragment {
private final String TBAAddress = "https://www.thebluealliance.com/api/v3/"; private final String TBAAddress = "https://www.thebluealliance.com/api/v3/";
private final String TBAHeader = "X-TBA-Auth-Key: tjEKSZojAU2pgbs2mBt06SKyOakVhLutj3NwuxLTxPKQPLih11aCIwRIVFXKzY4e"; private final String TBAHeader = "X-TBA-Auth-Key: tjEKSZojAU2pgbs2mBt06SKyOakVhLutj3NwuxLTxPKQPLih11aCIwRIVFXKzY4e";
@@ -4,33 +4,19 @@ import static androidx.navigation.fragment.FragmentKt.findNavController;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.os.Bundle; import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.navigation.Navigation;
import com.astatin3.scoutingapp2025.R; import com.astatin3.scoutingapp2025.R;
import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings; import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings;
import com.astatin3.scoutingapp2025.databinding.FragmentTransferBinding; import com.astatin3.scoutingapp2025.databinding.FragmentTransferBinding;
import com.astatin3.scoutingapp2025.types.file;
import com.astatin3.scoutingapp2025.ui.transfer.bluetooth.BluetoothSenderFragment; import com.astatin3.scoutingapp2025.ui.transfer.bluetooth.BluetoothSenderFragment;
import com.astatin3.scoutingapp2025.ui.transfer.codes.CodeGeneratorView; import com.astatin3.scoutingapp2025.ui.transfer.codes.CodeGeneratorView;
import com.astatin3.scoutingapp2025.ui.transfer.codes.CodeOverlayView;
import com.astatin3.scoutingapp2025.utility.ByteBuilder;
import com.astatin3.scoutingapp2025.utility.fileEditor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TransferFragment extends Fragment { public class TransferFragment extends Fragment {
private FragmentTransferBinding binding; private FragmentTransferBinding binding;
@@ -102,17 +88,17 @@ public class TransferFragment extends Fragment {
FileSelectorFragment.setOnSelect(data -> { FileSelectorFragment.setOnSelect(data -> {
CodeGeneratorView.setData(data); CodeGeneratorView.setData(data);
BluetoothSenderFragment.set_data(data); BluetoothSenderFragment.set_data(data);
TransferSelector.setOnSelect(new TransferSelector.onSelect() { TransferSelectorFragment.setOnSelect(new TransferSelectorFragment.onSelect() {
@Override @Override
public void onSelectCodes(TransferSelector self) { public void onSelectCodes(TransferSelectorFragment self) {
findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_code_generator); findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_code_generator);
} }
@Override @Override
public void onSelectBluetooth(TransferSelector self) { public void onSelectBluetooth(TransferSelectorFragment self) {
findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_bluetooth_sender); findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_bluetooth_sender);
} }
@Override @Override
public void onSelectWifi(TransferSelector self) {} public void onSelectWifi(TransferSelectorFragment self) {}
}); });
findNavController(this).navigate(R.id.action_navigation_file_selector_to_navigation_transfer_selector); findNavController(this).navigate(R.id.action_navigation_file_selector_to_navigation_transfer_selector);
}); });
@@ -123,19 +109,19 @@ public class TransferFragment extends Fragment {
private void start_download(){ private void start_download(){
TransferSelector.setOnSelect(new TransferSelector.onSelect() { TransferSelectorFragment.setOnSelect(new TransferSelectorFragment.onSelect() {
@Override @Override
public void onSelectCodes(TransferSelector self) { public void onSelectCodes(TransferSelectorFragment self) {
findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_code_scanner); findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_code_scanner);
} }
@Override @Override
public void onSelectBluetooth(TransferSelector self) { public void onSelectBluetooth(TransferSelectorFragment self) {
findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_bluetooth_receiver); findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_bluetooth_receiver);
} }
@Override @Override
public void onSelectWifi(TransferSelector self) {} public void onSelectWifi(TransferSelectorFragment self) {}
}); });
findNavController(this).navigate(R.id.action_navigation_transfer_to_navigation_transfer_selector); findNavController(this).navigate(R.id.action_navigation_transfer_to_navigation_transfer_selector);
} }
@@ -11,19 +11,19 @@ import androidx.fragment.app.Fragment;
import com.astatin3.scoutingapp2025.databinding.FragmentTransferSelectorBinding; import com.astatin3.scoutingapp2025.databinding.FragmentTransferSelectorBinding;
public class TransferSelector extends Fragment { public class TransferSelectorFragment extends Fragment {
// Declaring three blank funcs in one line lol // Declaring three blank funcs in one line lol
private static onSelect onselect = new onSelect() {@Override public void onSelectCodes(TransferSelector self) {}@Override public void onSelectBluetooth(TransferSelector self) {} @Override public void onSelectWifi(TransferSelector self) {}}; private static onSelect onselect = new onSelect() {@Override public void onSelectCodes(TransferSelectorFragment self) {}@Override public void onSelectBluetooth(TransferSelectorFragment self) {} @Override public void onSelectWifi(TransferSelectorFragment self) {}};
public static void setOnSelect(onSelect tmp) { public static void setOnSelect(onSelect tmp) {
onselect = tmp; onselect = tmp;
} }
public interface onSelect { public interface onSelect {
void onSelectCodes(TransferSelector self); void onSelectCodes(TransferSelectorFragment self);
void onSelectBluetooth(TransferSelector self); void onSelectBluetooth(TransferSelectorFragment self);
void onSelectWifi(TransferSelector self); void onSelectWifi(TransferSelectorFragment self);
} }
FragmentTransferSelectorBinding binding; FragmentTransferSelectorBinding binding;
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="@android:integer/config_shortAnimTime"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0"
android:toAlpha="1" />
</set>
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="25%"
android:toXDelta="125%"
android:duration="@android:integer/config_mediumAnimTime" />
<alpha
android:duration="@android:integer/config_shortAnimTime"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="1"
android:toAlpha="0" />
</set>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0"
android:toAlpha="1" />
</set>
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="25%"
android:toXDelta="125%"
android:interpolator="@android:anim/decelerate_interpolator"/>
<alpha
android:duration="@android:integer/config_shortAnimTime"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="1"
android:toAlpha="0" />
</set>
@@ -9,8 +9,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent">
app:layout_constraintTop_toBottomOf="@id/back_button">
<LinearLayout <LinearLayout
android:id="@+id/MatchScoutArea" android:id="@+id/MatchScoutArea"
@@ -42,7 +41,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="#60ff0000" android:background="#60ff0000"
app:layout_constraintBottom_toBottomOf="@id/back_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
@@ -12,16 +12,24 @@
tools:layout="@layout/fragment_scouting"> tools:layout="@layout/fragment_scouting">
<action <action
android:id="@+id/action_navigation_scouting_to_navigation_match_scouting" android:id="@+id/action_navigation_scouting_to_navigation_match_scouting"
app:destination="@id/navigation_match_scouting" /> app:destination="@id/navigation_match_scouting"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim"/>
<action <action
android:id="@+id/action_navigation_scouting_to_navigation_team_selector" android:id="@+id/action_navigation_scouting_to_navigation_team_selector"
app:destination="@id/navigation_team_selector" /> app:destination="@id/navigation_team_selector"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
</fragment> </fragment>
<fragment <fragment
android:id="@+id/navigation_match_scouting" android:id="@+id/navigation_match_scouting"
android:name="com.astatin3.scoutingapp2025.ui.scouting.MatchScoutingFragment" android:name="com.astatin3.scoutingapp2025.ui.scouting.MatchScoutingFragment"
tools:layout="@layout/fragment_match_scouting"> tools:layout="@layout/fragment_scouting_match">
</fragment> </fragment>
<fragment <fragment
@@ -30,16 +38,24 @@
tools:layout="@layout/fragment_team_selector"> tools:layout="@layout/fragment_team_selector">
<action <action
android:id="@+id/action_navigation_team_selector_to_navigation_pit_scouting" android:id="@+id/action_navigation_team_selector_to_navigation_pit_scouting"
app:destination="@id/navigation_pit_scouting" /> app:destination="@id/navigation_pit_scouting"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
<action <action
android:id="@+id/action_navigation_team_selector_to_navigation_data_teams" android:id="@+id/action_navigation_team_selector_to_navigation_data_teams"
app:destination="@id/navigation_data_teams" /> app:destination="@id/navigation_data_teams"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
</fragment> </fragment>
<fragment <fragment
android:id="@+id/navigation_pit_scouting" android:id="@+id/navigation_pit_scouting"
android:name="com.astatin3.scoutingapp2025.ui.scouting.PitScoutingFragment" android:name="com.astatin3.scoutingapp2025.ui.scouting.PitScoutingFragment"
tools:layout="@layout/fragment_pit_scouting"/> tools:layout="@layout/fragment_scouting_pit"/>
@@ -53,16 +69,32 @@
tools:layout="@layout/fragment_data"> tools:layout="@layout/fragment_data">
<action <action
android:id="@+id/action_navigation_data_to_navigation_data_status" android:id="@+id/action_navigation_data_to_navigation_data_status"
app:destination="@id/navigation_data_status" /> app:destination="@id/navigation_data_status"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
<action <action
android:id="@+id/action_navigation_data_to_navigation_team_selector" android:id="@+id/action_navigation_data_to_navigation_team_selector"
app:destination="@id/navigation_team_selector" /> app:destination="@id/navigation_team_selector"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
<action <action
android:id="@+id/action_navigation_data_to_navigation_data_compile" android:id="@+id/action_navigation_data_to_navigation_data_compile"
app:destination="@id/navigation_data_compile" /> app:destination="@id/navigation_data_compile"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
<action <action
android:id="@+id/action_navigation_data_to_navigation_data_fields_chooser" android:id="@+id/action_navigation_data_to_navigation_data_fields_chooser"
app:destination="@id/navigation_data_fields_chooser" /> app:destination="@id/navigation_data_fields_chooser"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
</fragment> </fragment>
<fragment <fragment
@@ -89,7 +121,11 @@
tools:layout="@layout/fragment_data_fields_chooser"> tools:layout="@layout/fragment_data_fields_chooser">
<action <action
android:id="@+id/action_navigation_data_fields_chooser_to_navigation_data_fields" android:id="@+id/action_navigation_data_fields_chooser_to_navigation_data_fields"
app:destination="@id/navigation_data_fields" /> app:destination="@id/navigation_data_fields"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
</fragment> </fragment>
<fragment <fragment
@@ -109,13 +145,25 @@
tools:layout="@layout/fragment_transfer"> tools:layout="@layout/fragment_transfer">
<action <action
android:id="@+id/action_navigation_transfer_to_navigation_tba" android:id="@+id/action_navigation_transfer_to_navigation_tba"
app:destination="@id/navigation_tba" /> app:destination="@id/navigation_tba"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
<action <action
android:id="@+id/action_navigation_transfer_to_navigation_file_selector" android:id="@+id/action_navigation_transfer_to_navigation_file_selector"
app:destination="@id/navigation_file_selector" /> app:destination="@id/navigation_file_selector"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
<action <action
android:id="@+id/action_navigation_transfer_to_navigation_transfer_selector" android:id="@+id/action_navigation_transfer_to_navigation_transfer_selector"
app:destination="@id/navigation_transfer_selector" /> app:destination="@id/navigation_transfer_selector"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
</fragment> </fragment>
<fragment <fragment
@@ -124,25 +172,45 @@
tools:layout="@layout/fragment_transfer_file_selector"> tools:layout="@layout/fragment_transfer_file_selector">
<action <action
android:id="@+id/action_navigation_file_selector_to_navigation_transfer_selector" android:id="@+id/action_navigation_file_selector_to_navigation_transfer_selector"
app:destination="@id/navigation_transfer_selector" /> app:destination="@id/navigation_transfer_selector"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
</fragment> </fragment>
<fragment <fragment
android:id="@+id/navigation_transfer_selector" android:id="@+id/navigation_transfer_selector"
android:name="com.astatin3.scoutingapp2025.ui.transfer.TransferSelector" android:name="com.astatin3.scoutingapp2025.ui.transfer.TransferSelectorFragment"
tools:layout="@layout/fragment_transfer_selector"> tools:layout="@layout/fragment_transfer_selector">
<action <action
android:id="@+id/action_navigation_transfer_selector_to_navigation_code_generator" android:id="@+id/action_navigation_transfer_selector_to_navigation_code_generator"
app:destination="@id/navigation_code_generator" /> app:destination="@id/navigation_code_generator"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
<action <action
android:id="@+id/action_navigation_transfer_selector_to_navigation_bluetooth_sender" android:id="@+id/action_navigation_transfer_selector_to_navigation_bluetooth_sender"
app:destination="@id/navigation_bluetooth_sender" /> app:destination="@id/navigation_bluetooth_sender"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
<action <action
android:id="@+id/action_navigation_transfer_selector_to_navigation_code_scanner" android:id="@+id/action_navigation_transfer_selector_to_navigation_code_scanner"
app:destination="@id/navigation_code_scanner" /> app:destination="@id/navigation_code_scanner"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
<action <action
android:id="@+id/action_navigation_transfer_selector_to_navigation_bluetooth_receiver" android:id="@+id/action_navigation_transfer_selector_to_navigation_bluetooth_receiver"
app:destination="@id/navigation_bluetooth_receiver" /> app:destination="@id/navigation_bluetooth_receiver"
app:enterAnim="@anim/enter_anim"
app:exitAnim="@anim/exit_anim"
app:popEnterAnim="@anim/enter_anim"
app:popExitAnim="@anim/pop_exit_anim" />
</fragment> </fragment>
<fragment <fragment
@@ -171,7 +239,7 @@
<fragment <fragment
android:id="@+id/navigation_tba" android:id="@+id/navigation_tba"
android:name="com.astatin3.scoutingapp2025.ui.transfer.TBAView" android:name="com.astatin3.scoutingapp2025.ui.transfer.TBAFragment"
tools:layout="@layout/fragment_transfer_tba"> tools:layout="@layout/fragment_transfer_tba">
</fragment> </fragment>
+1 -1
View File
@@ -1,5 +1,5 @@
[versions] [versions]
agp = "8.5.0" agp = "8.5.1"
junit = "4.13.2" junit = "4.13.2"
junitVersion = "1.1.5" junitVersion = "1.1.5"
espressoCore = "3.5.1" espressoCore = "3.5.1"