2019-08-30 13:01:53 +02:00

351 lines
12 KiB
Java

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;
}
});
}
}