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,6 +1,7 @@
package com.astatin3.scoutingapp2025;
import android.os.Bundle;
import android.view.MenuItem;
import com.astatin3.scoutingapp2025.scoutingData.fields;
import com.astatin3.scoutingapp2025.utility.SentimentAnalysis;
@@ -11,8 +12,11 @@ import com.google.android.material.bottomnavigation.BottomNavigationView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.AnimBuilder;
import androidx.navigation.NavController;
import androidx.navigation.NavDestination;
import androidx.navigation.NavOptions;
import androidx.navigation.NavOptionsBuilder;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
@@ -20,9 +24,13 @@ import androidx.navigation.ui.NavigationUI;
import com.astatin3.scoutingapp2025.databinding.ActivityMainBinding;
import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings;
import com.google.android.material.navigation.NavigationBarView;
import java.util.Objects;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
public class MainActivity extends AppCompatActivity {
@@ -96,15 +104,36 @@ public class MainActivity extends AppCompatActivity {
R.id.navigation_settings)
.build();
// appBarConfiguration.set
navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
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
public boolean 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 com.astatin3.scoutingapp2025.databinding.FragmentDataCompileBinding;
import com.astatin3.scoutingapp2025.databinding.FragmentPitScoutingBinding;
public class CompileFragment extends Fragment {
FragmentDataCompileBinding binding;
@@ -14,7 +14,7 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
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.types.data.dataType;
import com.astatin3.scoutingapp2025.types.frcMatch;
@@ -29,12 +29,12 @@ import java.util.function.Function;
public class MatchScoutingFragment extends Fragment {
private FragmentMatchScoutingBinding binding;
private FragmentScoutingMatchBinding binding;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
binding = FragmentMatchScoutingBinding.inflate(inflater, container, false);
binding = FragmentScoutingMatchBinding.inflate(inflater, container, false);
DataManager.reload_match_fields();
@@ -15,7 +15,7 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
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.types.data.dataType;
import com.astatin3.scoutingapp2025.types.frcTeam;
@@ -29,7 +29,7 @@ import java.util.function.Function;
public class PitScoutingFragment extends Fragment {
FragmentPitScoutingBinding binding;
FragmentScoutingPitBinding binding;
private static frcTeam team;
public static void setTeam(frcTeam tmpteam){
@@ -40,7 +40,7 @@ public class PitScoutingFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
binding = FragmentPitScoutingBinding.inflate(inflater, container, false);
binding = FragmentScoutingPitBinding.inflate(inflater, container, false);
username = latestSettings.settings.get_username();
DataManager.reload_pit_fields();
@@ -1,15 +1,11 @@
package com.astatin3.scoutingapp2025.ui.transfer;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
@@ -18,17 +14,14 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.astatin3.scoutingapp2025.databinding.FragmentDataCompileBinding;
import com.astatin3.scoutingapp2025.databinding.FragmentTransferTbaBinding;
import com.astatin3.scoutingapp2025.utility.AlertManager;
import com.astatin3.scoutingapp2025.utility.RequestTask;
import com.astatin3.scoutingapp2025.types.frcEvent;
import com.astatin3.scoutingapp2025.types.frcMatch;
import com.astatin3.scoutingapp2025.types.frcTeam;
import com.astatin3.scoutingapp2025.databinding.FragmentTransferBinding;
import com.astatin3.scoutingapp2025.utility.fileEditor;
import com.astatin3.scoutingapp2025.utility.JSONUtil;
import com.google.android.material.tabs.TabLayout;
import org.json.JSONArray;
import org.json.JSONException;
@@ -41,7 +34,7 @@ import java.util.Calendar;
import java.util.Comparator;
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 TBAHeader = "X-TBA-Auth-Key: tjEKSZojAU2pgbs2mBt06SKyOakVhLutj3NwuxLTxPKQPLih11aCIwRIVFXKzY4e";
@@ -4,33 +4,19 @@ import static androidx.navigation.fragment.FragmentKt.findNavController;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
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.Nullable;
import androidx.fragment.app.Fragment;
import androidx.navigation.Navigation;
import com.astatin3.scoutingapp2025.R;
import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings;
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.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 {
private FragmentTransferBinding binding;
@@ -102,17 +88,17 @@ public class TransferFragment extends Fragment {
FileSelectorFragment.setOnSelect(data -> {
CodeGeneratorView.setData(data);
BluetoothSenderFragment.set_data(data);
TransferSelector.setOnSelect(new TransferSelector.onSelect() {
TransferSelectorFragment.setOnSelect(new TransferSelectorFragment.onSelect() {
@Override
public void onSelectCodes(TransferSelector self) {
public void onSelectCodes(TransferSelectorFragment self) {
findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_code_generator);
}
@Override
public void onSelectBluetooth(TransferSelector self) {
public void onSelectBluetooth(TransferSelectorFragment self) {
findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_bluetooth_sender);
}
@Override
public void onSelectWifi(TransferSelector self) {}
public void onSelectWifi(TransferSelectorFragment self) {}
});
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(){
TransferSelector.setOnSelect(new TransferSelector.onSelect() {
TransferSelectorFragment.setOnSelect(new TransferSelectorFragment.onSelect() {
@Override
public void onSelectCodes(TransferSelector self) {
public void onSelectCodes(TransferSelectorFragment self) {
findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_code_scanner);
}
@Override
public void onSelectBluetooth(TransferSelector self) {
public void onSelectBluetooth(TransferSelectorFragment self) {
findNavController(self).navigate(R.id.action_navigation_transfer_selector_to_navigation_bluetooth_receiver);
}
@Override
public void onSelectWifi(TransferSelector self) {}
public void onSelectWifi(TransferSelectorFragment self) {}
});
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;
public class TransferSelector extends Fragment {
public class TransferSelectorFragment extends Fragment {
// 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) {
onselect = tmp;
}
public interface onSelect {
void onSelectCodes(TransferSelector self);
void onSelectBluetooth(TransferSelector self);
void onSelectWifi(TransferSelector self);
void onSelectCodes(TransferSelectorFragment self);
void onSelectBluetooth(TransferSelectorFragment self);
void onSelectWifi(TransferSelectorFragment self);
}
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_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/back_button">
app:layout_constraintEnd_toEndOf="parent">
<LinearLayout
android:id="@+id/MatchScoutArea"
@@ -42,7 +41,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#60ff0000"
app:layout_constraintBottom_toBottomOf="@id/back_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
@@ -12,16 +12,24 @@
tools:layout="@layout/fragment_scouting">
<action
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
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
android:id="@+id/navigation_match_scouting"
android:name="com.astatin3.scoutingapp2025.ui.scouting.MatchScoutingFragment"
tools:layout="@layout/fragment_match_scouting">
tools:layout="@layout/fragment_scouting_match">
</fragment>
<fragment
@@ -30,16 +38,24 @@
tools:layout="@layout/fragment_team_selector">
<action
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
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
android:id="@+id/navigation_pit_scouting"
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">
<action
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
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
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
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
@@ -89,7 +121,11 @@
tools:layout="@layout/fragment_data_fields_chooser">
<action
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
@@ -109,13 +145,25 @@
tools:layout="@layout/fragment_transfer">
<action
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
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
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
@@ -124,25 +172,45 @@
tools:layout="@layout/fragment_transfer_file_selector">
<action
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
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">
<action
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
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
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
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
@@ -171,7 +239,7 @@
<fragment
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">
</fragment>