diff --git a/app/src/main/java/de/sebse/fuplanner/MainActivity.java b/app/src/main/java/de/sebse/fuplanner/MainActivity.java index 61dc3fc..81d79e2 100644 --- a/app/src/main/java/de/sebse/fuplanner/MainActivity.java +++ b/app/src/main/java/de/sebse/fuplanner/MainActivity.java @@ -165,7 +165,7 @@ public class MainActivity extends AppCompatActivity case R.id.nav_schedule: changeFragment(FRAGMENT_SCHEDULE); break; - case R.id.nav_dining: + case R.id.nav_canteens: changeFragment(FRAGMENT_CANTEENS); break; case R.id.nav_settings: @@ -360,70 +360,19 @@ public class MainActivity extends AppCompatActivity findViewById(R.id.app_bar_layout).setVisibility(View.VISIBLE); } // switch to logout - if ((currentPage != FRAGMENT_STARTUP && currentPage != FRAGMENT_LOGIN) && (newFragment == FRAGMENT_STARTUP || newFragment == FRAGMENT_LOGIN)) { - View header = mNavigationView.getHeaderView(0); - //header.findViewById(R.id.imageView).setVisibility(View.GONE); - header.findViewById(R.id.login_name).setVisibility(View.GONE); - header.findViewById(R.id.login_mail).setVisibility(View.GONE); - header.findViewById(R.id.btn_login_page).setVisibility(View.VISIBLE); - header.findViewById(R.id.btn_login_page).setOnClickListener(v -> { - DrawerLayout drawer = findViewById(R.id.drawer_layout); - if (drawer.isDrawerOpen(GravityCompat.START)) { - drawer.closeDrawer(GravityCompat.START); - } - changeFragment(FRAGMENT_LOGIN); - }); - mNavigationView.getMenu().clear(); - mNavigationView.inflateMenu(R.menu.activity_main_drawer); - afterAnyMenuInflate(); + if ( + (newFragment == FRAGMENT_STARTUP || newFragment == FRAGMENT_LOGIN) && + (currentPage != FRAGMENT_STARTUP && currentPage != FRAGMENT_LOGIN) + ) { + refreshNavigation(); } // switch to login else if ( (currentPage == FRAGMENT_STARTUP || currentPage == FRAGMENT_LOGIN || currentPage == FRAGMENT_NONE) && (newFragment != FRAGMENT_STARTUP && newFragment != FRAGMENT_LOGIN && getKVV().isLoggedIn()) ) { - View header = mNavigationView.getHeaderView(0); - //header.findViewById(R.id.imageView).setVisibility(View.VISIBLE); - header.findViewById(R.id.login_name).setVisibility(View.VISIBLE); - header.findViewById(R.id.login_mail).setVisibility(View.VISIBLE); - header.findViewById(R.id.btn_login_page).setVisibility(View.GONE); - mNavigationView.getMenu().clear(); - mNavigationView.inflateMenu(R.menu.activity_main_drawer_login); - mNavigationView.setCheckedItem(R.id.nav_modules); - afterAnyMenuInflate(); - getKVV().getModuleList(success -> { - int i = 0; - for (Iterator it = success.latestSemesterIterator(); it.hasNext(); ) { - Modules.Module module = it.next(); - MenuItem menuItem = mNavigationView.getMenu().add(Menu.NONE, Menu.NONE, 101 + i, module.title); - menuItem.setOnMenuItemClickListener(item -> { - onModulesFragmentInteraction(module.getID()); - return false; - }); - i++; - } - }, log::e); - } - if (newFragment == FRAGMENT_MODULES_DETAILS) { - getKVV().getModule(newData, success -> { - int size = mNavigationView.getMenu().size(); - //noinspection ConstantConditions - String title = success == null ? null : success.title; - for (int k = 0; k < size; k++) { - mNavigationView.getMenu().getItem(k).setChecked(mNavigationView.getMenu().getItem(k).getTitle().equals(title)); - } - }, log::e); - } - if (newFragment == FRAGMENT_CANTEENS_DETAILS) { - getCanteenBrowser().getCanteens(success -> { - int size = mNavigationView.getMenu().size(); - Canteen canteen = success.getCanteen(Integer.parseInt(newData)); - //noinspection ConstantConditions - String title = canteen == null ? null : canteen.getName(); - for (int k = 0; k < size; k++) { - mNavigationView.getMenu().getItem(k).setChecked(mNavigationView.getMenu().getItem(k).getTitle().equals(title)); - } - }, log::e); + refreshNavigation(); } + setNavigationSelection(newFragment, newData); if (newFragment != FRAGMENT_STARTUP && newFragment != FRAGMENT_NONE && newFragment != FRAGMENT_LOGIN) { this.fragmentPage = newFragment; @@ -451,8 +400,80 @@ public class MainActivity extends AppCompatActivity } + private void setNavigationSelection(int fragment, String data) { + switch (fragment) { + case FRAGMENT_MODULES_DETAILS: + getKVV().getModule(data, success -> { + int size = mNavigationView.getMenu().size(); + //noinspection ConstantConditions + String title = success == null ? null : success.title; + for (int k = 0; k < size; k++) { + mNavigationView.getMenu().getItem(k).setChecked(mNavigationView.getMenu().getItem(k).getTitle().equals(title)); + } + }, log::e); + break; + case FRAGMENT_MODULES: + mNavigationView.setCheckedItem(R.id.nav_modules); + break; + case FRAGMENT_SCHEDULE: + mNavigationView.setCheckedItem(R.id.nav_schedule); + break; + case FRAGMENT_CANTEENS_DETAILS: + getCanteenBrowser().getCanteens(success -> { + int size = mNavigationView.getMenu().size(); + Canteen canteen = success.getCanteen(Integer.parseInt(data)); + //noinspection ConstantConditions + String title = canteen == null ? null : canteen.getName(); + for (int k = 0; k < size; k++) { + mNavigationView.getMenu().getItem(k).setChecked(mNavigationView.getMenu().getItem(k).getTitle().equals(title)); + } + }, log::e); + break; + case FRAGMENT_CANTEENS: + mNavigationView.setCheckedItem(R.id.nav_canteens); + break; + case FRAGMENT_PREFERENCES: + mNavigationView.setCheckedItem(R.id.nav_settings); + break; + default: // FRAGMENT_STARTUP / FRAGMENT_LOGIN + break; + } + } - private void afterAnyMenuInflate() { + private void setNavigationHeader(boolean isLoggedIn) { + View header = mNavigationView.getHeaderView(0); + int login = isLoggedIn ? View.VISIBLE : View.GONE; + int btn = !isLoggedIn ? View.VISIBLE : View.GONE; + + header.findViewById(R.id.login_name).setVisibility(login); + header.findViewById(R.id.login_mail).setVisibility(login); + View viewBtn = header.findViewById(R.id.btn_login_page); + viewBtn.setVisibility(btn); + if (!viewBtn.hasOnClickListeners()) + viewBtn.setOnClickListener(v -> { + DrawerLayout drawer = findViewById(R.id.drawer_layout); + if (drawer.isDrawerOpen(GravityCompat.START)) { + drawer.closeDrawer(GravityCompat.START); + } + changeFragment(FRAGMENT_LOGIN); + }); + } + + private void afterAnyMenuInflate(boolean isLoggedIn) { + if (isLoggedIn) { + getKVV().getModuleList(success -> { + int i = 0; + for (Iterator it = success.latestSemesterIterator(); it.hasNext(); ) { + Modules.Module module = it.next(); + MenuItem menuItem = mNavigationView.getMenu().add(Menu.NONE, Menu.NONE, 101 + i, module.title); + menuItem.setOnMenuItemClickListener(item -> { + onModulesFragmentInteraction(module.getID()); + return false; + }); + i++; + } + }, log::e); + } getCanteenBrowser().getCanteens(success -> { int i = 0; for (Canteen canteen: success) { @@ -537,4 +558,16 @@ public class MainActivity extends AppCompatActivity public void showToast(String message) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); } + + @Override + public void refreshNavigation() { + boolean loggedIn = getKVV().isLoggedIn(); + setNavigationHeader(loggedIn); + mNavigationView.getMenu().clear(); + if (loggedIn) + mNavigationView.inflateMenu(R.menu.activity_main_drawer_login); + else + mNavigationView.inflateMenu(R.menu.activity_main_drawer); + afterAnyMenuInflate(loggedIn); + } } diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java index 50526ef..c7d206d 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java @@ -28,6 +28,7 @@ public class CanteensFragment extends Fragment { private final Logger log = new Logger(this); private CanteensAdapter adapter; private SwipeRefreshLayout swipeLayout; + private MainActivityListener mMainActivityListener; /** * Mandatory empty constructor for the fragment manager to instantiate the @@ -69,6 +70,8 @@ public class CanteensFragment extends Fragment { CanteenBrowser browser = ((MainActivity) getActivity()).getCanteenBrowser(); browser.getCanteens(success -> { adapter.setCanteens(success); + if (mMainActivityListener != null) + mMainActivityListener.refreshNavigation(); swipeLayout.setRefreshing(false); }, error -> { log.e(error.toString()); @@ -87,16 +90,18 @@ public class CanteensFragment extends Fragment { throw new RuntimeException(context.toString() + " must implement OnCanteensFragmentInteractionListener"); } - if (context instanceof MainActivityListener) - ((MainActivityListener) context).onTitleTextChange(R.string.canteens); - else - throw new RuntimeException(context.toString() + "must implement MainActivityListener"); + if (context instanceof MainActivityListener) { + mMainActivityListener = (MainActivityListener) context; + mMainActivityListener.onTitleTextChange(R.string.canteens); + } else + throw new RuntimeException(context.toString() + " must implement MainActivityListener"); } @Override public void onDetach() { super.onDetach(); mListener = null; + mMainActivityListener = null; } public interface OnCanteensFragmentInteractionListener { diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java index 6457fd4..f063748 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java @@ -138,7 +138,7 @@ public class LoginFragment extends Fragment { mActivityListener = (MainActivityListener) context; mActivityListener.onTitleTextChange(R.string.log_in); } else - throw new RuntimeException(context.toString() + "must implement MainActivityListener"); + throw new RuntimeException(context.toString() + " must implement MainActivityListener"); } @Override diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java index 589deb0..6ebcf64 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java @@ -28,6 +28,7 @@ public class ModulesFragment extends Fragment { private final Logger log = new Logger(this); private ModulesAdapter adapter; private SwipeRefreshLayout swipeLayout; + private MainActivityListener mMainActivityListener; /** * Mandatory empty constructor for the fragment manager to instantiate the @@ -69,6 +70,8 @@ public class ModulesFragment extends Fragment { KVV kvv = ((MainActivity) getActivity()).getKVV(); kvv.getModuleList(success -> { adapter.setModules(success); + if (mMainActivityListener != null) + mMainActivityListener.refreshNavigation(); swipeLayout.setRefreshing(false); }, error -> { log.e(error.toString()); @@ -87,16 +90,19 @@ public class ModulesFragment extends Fragment { throw new RuntimeException(context.toString() + " must implement OnModulesFragmentInteractionListener"); } - if (context instanceof MainActivityListener) - ((MainActivityListener) context).onTitleTextChange(R.string.courses); + if (context instanceof MainActivityListener) { + mMainActivityListener = (MainActivityListener) context; + mMainActivityListener.onTitleTextChange(R.string.courses); + } else - throw new RuntimeException(context.toString() + "must implement MainActivityListener"); + throw new RuntimeException(context.toString() + " must implement MainActivityListener"); } @Override public void onDetach() { super.onDetach(); mListener = null; + mMainActivityListener = null; } public interface OnModulesFragmentInteractionListener { diff --git a/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java b/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java index 1ca472c..9d0cb59 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java +++ b/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java @@ -31,7 +31,7 @@ public class CanteenBrowser extends HTTPService { if (context instanceof MainActivityListener) mListener = (MainActivity) context; else - throw new RuntimeException(context.toString() + "must implement MainActivityListener"); + throw new RuntimeException(context.toString() + " must implement MainActivityListener"); try { this.canteens = Canteens.load(context); } catch (IOException e) { diff --git a/app/src/main/java/de/sebse/fuplanner/tools/MainActivityListener.java b/app/src/main/java/de/sebse/fuplanner/tools/MainActivityListener.java index 2c6db01..63f5306 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/MainActivityListener.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/MainActivityListener.java @@ -11,6 +11,10 @@ public interface MainActivityListener { void onTitleTextChange(@StringRes int titleId); + void showToast(String message); + + void showToast(@StringRes int msgStringRes); + KVV getKVV(); GoogleAuth getGoogleAuth(); @@ -25,7 +29,5 @@ public interface MainActivityListener { void removeRequestPermissionsResultListener(String id); - void showToast(@StringRes int msgStringRes); - - void showToast(String message); + void refreshNavigation(); } diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml index 7f3a81c..70a4a2d 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -3,7 +3,7 @@ diff --git a/app/src/main/res/menu/activity_main_drawer_login.xml b/app/src/main/res/menu/activity_main_drawer_login.xml index 226aaea..8d10d2a 100644 --- a/app/src/main/res/menu/activity_main_drawer_login.xml +++ b/app/src/main/res/menu/activity_main_drawer_login.xml @@ -13,7 +13,7 @@ android:title="@string/courses" android:orderInCategory="100" />