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.widget.SearchView; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import androidx.fragment.app.FragmentTransaction; import java.util.List; import it.integry.integrywmsnative.core.class_router.BaseCustomConfiguration; import it.integry.integrywmsnative.core.class_router.ClassRouter; import it.integry.integrywmsnative.core.class_router.configs.BaseMenuConfiguration; import it.integry.integrywmsnative.core.class_router.configs.MenuConfiguration; import it.integry.integrywmsnative.core.class_router.interfaces.ICustomConfiguration; import it.integry.integrywmsnative.core.expansion.BaseActivity; 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.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.gest.login.LoginActivity; import it.integry.integrywmsnative.gest.main.MainFragment; import it.integry.integrywmsnative.gest.settings.MainSettingsFragment; public class MainActivity extends BaseActivity 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); initGestMenu(); 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) { return true; } public void setMenuItem(@IdRes int menuId) { mBinding.navView.setCheckedItem(menuId); onNavigationItemSelected(mBinding.navView.getMenu().findItem(menuId)); } @Override public boolean onNavigationItemSelected(MenuItem item) { mBinding.appBarMain.elevatedToolbar.resetAll(); // Handle navigation view item clicks here. Fragment fragment = null; int id = item.getItemId(); BaseMenuConfiguration.MenuItem menuItem = getMenuItem(id); if(menuItem != null) { fragment = menuItem.getFragmentClass(); this.adaptViewToFragment(fragment); } else { switch (id) { case R.id.nav_home: this.pop(); 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 initGestMenu() { Menu menu = mBinding.navView.getMenu(); ICustomConfiguration customConfiguration = ClassRouter.getInstance(ClassRouter.PATH.CUSTOM_CONFIGURATION); BaseMenuConfiguration menuConfiguration = customConfiguration.getConfig(BaseCustomConfiguration.Keys.MENU_CONFIGURATION); List menuGroups = menuConfiguration.getGroups(); menu.add(R.id.nav_home, R.id.nav_home, 0, R.string.home) .setIcon(R.drawable.ic_black_home); for(MenuConfiguration.MenuGroup menuGroup : menuGroups) { SubMenu subMenu = menu.addSubMenu(menuGroup.getGroupText()); for(MenuConfiguration.MenuItem menuItem : menuGroup.getItems()) { subMenu .add(menuGroup.getGroupId(), menuItem.getID(), 0, menuItem.getTitleText()) .setIcon(menuItem.getDrawerIcon()); } } SubMenu subMenu = menu.addSubMenu(R.string.other); subMenu.add(R.id.nav_home, R.id.nav_settings, 0, R.string.general_settings) .setIcon(R.drawable.ic_settings_24dp); subMenu.add(R.id.nav_logout, R.id.nav_logout, 0, R.string.logout) .setIcon(R.drawable.ic_logout_24dp); } private MenuConfiguration.MenuItem getMenuItem(@IdRes int menuId) { ICustomConfiguration customConfiguration = ClassRouter.getInstance(ClassRouter.PATH.CUSTOM_CONFIGURATION); BaseMenuConfiguration menuConfiguration = customConfiguration.getConfig(BaseCustomConfiguration.Keys.MENU_CONFIGURATION); List menuGroups = menuConfiguration.getGroups(); BaseMenuConfiguration.MenuItem menuItemToReturn = null; for(MenuConfiguration.MenuGroup menuGroup : menuGroups) { for(MenuConfiguration.MenuItem menuItem : menuGroup.getItems()) { if(menuId == menuItem.getID()) { menuItemToReturn = menuItem; break; } } if(menuItemToReturn != null) break; } return menuItemToReturn; } 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.getInstance().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; } }); } }