340 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.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);
if(customConfiguration == null) return;
BaseMenuConfiguration menuConfiguration = customConfiguration.getConfig(BaseCustomConfiguration.Keys.MENU_CONFIGURATION);
List<MenuConfiguration.MenuGroup> 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<MenuConfiguration.MenuGroup> 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;
// }
// });
}
}