package it.integry.integrywmsnative; import android.content.Intent; import androidx.annotation.IdRes; import androidx.databinding.DataBindingUtil; import android.os.Bundle; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import com.google.android.material.navigation.NavigationView; import androidx.core.view.GravityCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SearchView; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import androidx.fragment.app.FragmentTransaction; import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ISearcableFragment; import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.update.UpdatesManager; import it.integry.integrywmsnative.core.utility.UtilitySettings; import it.integry.integrywmsnative.databinding.ActivityMainBinding; import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.gest.login.LoginActivity; import it.integry.integrywmsnative.gest.main.MainFragment; import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoFragment; import it.integry.integrywmsnative.gest.prod_ord_lavorazione.ProdOrdineLavorazioneElencoFragment; import it.integry.integrywmsnative.gest.prod_ord_produzione.ProdOrdineProduzioneElencoFragment; import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment; import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment; import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment; import it.integry.integrywmsnative.gest.settings.MainSettingsFragment; import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteFragment; import it.integry.integrywmsnative.gest.ultime_consegne_fornitore.UltimeConsegneFornitoreFragment; import it.integry.integrywmsnative.gest.vendita.MainVenditaFragment; import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceFragment; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, IPoppableActivity { private ActivityMainBinding mBinding; private boolean firstCheckExecution = true; private boolean mIsOnline = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false); setContentView(mBinding.getRoot()); UpdatesManager.init(this); setSupportActionBar(mBinding.appBarMain.toolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, mBinding.drawerLayout, mBinding.appBarMain.toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); mBinding.drawerLayout.setDrawerListener(toggle); toggle.syncState(); mBinding.navView.setNavigationItemSelectedListener(this); mBinding.appBarMain.mainSearch.setVisibility(View.GONE); openMain(); init(); } private void startLoginActivity(){ this.finish(); Intent myIntent = new Intent(this, LoginActivity.class); startActivity(myIntent); } @Override public void onBackPressed() { DrawerLayout drawer = findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { int count = getSupportFragmentManager().getBackStackEntryCount(); if (count == 0) { super.onBackPressed(); } else { pop(); // getSupportFragmentManager().popBackStack(); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void setItem(@IdRes int menuId) { mBinding.navView.setCheckedItem(menuId); onNavigationItemSelected(mBinding.navView.getMenu().findItem(menuId)); } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { mBinding.appBarMain.elevatedToolbar.resetAll(); // Handle navigation view item clicks here. Fragment fragment = null; int id = item.getItemId(); switch(id) { case R.id.nav_home: this.pop(); break; case R.id.nav_accettazione: fragment = MainAccettazioneFragment.newInstance(); this.adaptViewToFragment(fragment); break; case R.id.nav_rettifica_giacenze: fragment = RettificaGiacenzeFragment.newInstance(); this.adaptViewToFragment(fragment); break; case R.id.nav_spedizione: fragment = MainVenditaFragment.newInstance(); this.adaptViewToFragment(fragment); break; case R.id.nav_versamento_merce: fragment = VersamentoMerceFragment.newInstance(); this.adaptViewToFragment(fragment); break; case R.id.nav_free_picking: fragment = PickingLiberoFragment.newInstance(); this.adaptViewToFragment(fragment); break; case R.id.nav_resi_fornitore: fragment = UltimeConsegneFornitoreFragment.newInstance(); this.adaptViewToFragment(fragment); break; case R.id.nav_resi_cliente: fragment = UltimeConsegneClienteFragment.newInstance(); this.adaptViewToFragment(fragment); break; case R.id.nav_prod_ordine_produzione: fragment = ProdOrdineProduzioneElencoFragment.newInstance(); this.adaptViewToFragment(fragment); break; case R.id.nav_prod_ordine_lavorazione: fragment = ProdOrdineLavorazioneElencoFragment.newInstance(); this.adaptViewToFragment(fragment); break; case R.id.nav_prod_versamento_materiale: fragment = ProdVersamentoMaterialeFragment.newInstance(); this.adaptViewToFragment(fragment); break; case R.id.nav_prod_recupero_materiale: fragment = ProdRecuperoMaterialeFragment.newInstance(); this.adaptViewToFragment(fragment); break; case R.id.nav_settings: fragment = new MainSettingsFragment(); this.adaptViewToFragment(fragment); break; case R.id.nav_logout: UtilitySettings.logout(); ServerStatusChecker.dispose(); startLoginActivity(); break; } changeContentFragment(fragment, true); DrawerLayout drawer = findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } private void openMain() { MainFragment mainFragment = MainFragment.newInstance(); adaptViewToFragment(mainFragment); changeContentFragment(mainFragment, false); mBinding.navView.setCheckedItem(R.id.nav_home); } @Override public void pop() { int count = getSupportFragmentManager().getBackStackEntryCount(); for(int i = 0; i < count; i++) { getSupportFragmentManager().popBackStack(); } openMain(); } private void adaptViewToFragment(Fragment fragment){ if(fragment instanceof ISearcableFragment) { mBinding.appBarMain.mainSearch.setOnQueryTextListener((SearchView.OnQueryTextListener) fragment); mBinding.appBarMain.mainSearch.setVisibility(View.VISIBLE); mBinding.appBarMain.mainSearch.setOnSearchClickListener(v -> { ((ISearcableFragment) fragment).onSearchEnabled(); mBinding.appBarMain.toolbarTitleLeft.setVisibility(View.GONE); }); mBinding.appBarMain.mainSearch.setOnCloseListener(() -> { ((ISearcableFragment) fragment).onSearchDisabled(); mBinding.appBarMain.toolbarTitleLeft.setVisibility(View.VISIBLE); return false; }); } else { mBinding.appBarMain.mainSearch.setOnQueryTextListener(null); mBinding.appBarMain.mainSearch.setVisibility(View.GONE); mBinding.appBarMain.mainSearch.setOnSearchClickListener(null); mBinding.appBarMain.mainSearch.setOnCloseListener(null); } if(fragment instanceof ITitledFragment && !(fragment instanceof MainFragment)) { mBinding.appBarMain.toolbarTitleCenteredLayout.setVisibility(View.GONE); mBinding.appBarMain.toolbarTitleLeft.setVisibility(View.VISIBLE); ((ITitledFragment) fragment).onCreateActionBar(mBinding.appBarMain.toolbarTitleLeft, this); } else { mBinding.appBarMain.toolbarTitleCenteredLayout.setVisibility(View.VISIBLE); mBinding.appBarMain.toolbarTitleLeft.setVisibility(View.GONE); } if(fragment instanceof IScrollableFragment) { ((IScrollableFragment) fragment).setScrollToolbar(mBinding.appBarMain.elevatedToolbar); ((IScrollableFragment) fragment).setOnPreDestroy(() -> { mBinding.appBarMain.elevatedToolbar.resetAll(); }); } if(fragment instanceof ISelectAllFragment && ((ISelectAllFragment)fragment).isEnabled()) { mBinding.appBarMain.mainSelectAll.setVisibility(View.VISIBLE); mBinding.appBarMain.mainSelectAll.setOnClickListener(v -> ((ISelectAllFragment)fragment).onSelectAll()); } else { mBinding.appBarMain.mainSelectAll.setVisibility(View.GONE); mBinding.appBarMain.mainSelectAll.setOnClickListener(null); } if(fragment instanceof IFilterableFragment) { mBinding.appBarMain.mainFilter.setVisibility(View.VISIBLE); mBinding.appBarMain.mainFilter.setOnClickListener(v -> ((IFilterableFragment)fragment).onFilterClick()); } else { mBinding.appBarMain.mainFilter.setVisibility(View.GONE); mBinding.appBarMain.mainFilter.setOnClickListener(null); } } private void changeContentFragment(Fragment fragment, boolean addToBackStack){ if (fragment != null) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction ft = fragmentManager .beginTransaction() .replace(R.id.frame_container, fragment); if(addToBackStack) ft.addToBackStack(fragment.getTag()); ft.commit(); //fragmentManager.executePendingTransactions(); } } private void init(){ ServerStatusChecker.getIstance().addCallback(value -> { if(value && (!mIsOnline || firstCheckExecution)){ SettingsManager.loadDBVariables(() -> { mIsOnline = true; firstCheckExecution = false; }, ex -> { //mNoConnectionLayout.expand(true); if(mIsOnline) mIsOnline = false; } ); } else if(!value && mIsOnline){ mIsOnline = false; } }); } }