diff --git a/app/src/main/java/de/sebse/fuplanner/MainActivity.java b/app/src/main/java/de/sebse/fuplanner/MainActivity.java index eea3738..49466f1 100644 --- a/app/src/main/java/de/sebse/fuplanner/MainActivity.java +++ b/app/src/main/java/de/sebse/fuplanner/MainActivity.java @@ -5,6 +5,7 @@ import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; +import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.GravityCompat; @@ -40,15 +41,40 @@ public class MainActivity extends AppCompatActivity ModDetailFragment.OnModuleDetailFragmentInteractionListener, ScheduleFragment.OnScheduleFragmentInteractionListener { + private static final int FRAGMENT_NONE = -1; + private static final int FRAGMENT_STARTUP = 0; + private static final int FRAGMENT_MODULES = 1; + private static final int FRAGMENT_MODULES_DETAILS = 2; + private static final int FRAGMENT_LOGIN = 3; + private static final int FRAGMENT_SCHEDULE = 4; + private static final int FRAGMENT_CANTEEN = 5; + + private static final String ARG_FRAGMENT_PAGE = "fragment_page"; + private static final String ARG_FRAGMENT_STATUS = "fragment_status"; + private static final String ARG_SAVE_DATE = "save_date"; + FragmentManager fragmentManager; private GoogleAuth mGoogleAuth; private KVV mKVV; private Logger log = new Logger(this); private NavigationView mNavigationView; + private int fragmentPage = FRAGMENT_NONE; + private int fragmentStatus = 0; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (savedInstanceState != null) { + fragmentPage = savedInstanceState.getInt(ARG_FRAGMENT_PAGE, fragmentPage); + fragmentStatus = savedInstanceState.getInt(ARG_FRAGMENT_STATUS, fragmentPage); + long saveDate = savedInstanceState.getLong(ARG_SAVE_DATE, 0); + + log.d("fragmentPage", fragmentPage); + log.d("fragmentStatus", fragmentStatus); + log.d("saveDate", saveDate); + } + setContentView(R.layout.activity_main); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); @@ -62,19 +88,10 @@ public class MainActivity extends AppCompatActivity mNavigationView = findViewById(R.id.nav_view); mNavigationView.setNavigationItemSelectedListener(this); - /*try { - (new MensaPlan(getApplicationContext())).request(0, new Date()); - } catch (JSONException e) { - e.printStackTrace(); - }*/ this.getKVV().startUpdate(); fragmentManager = getSupportFragmentManager(); - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.fragcontainer, StartupFragment.newInstance()); - fragmentTransaction.commit(); - findViewById(R.id.app_bar_layout).setVisibility(View.GONE); - + changeFragment(FRAGMENT_STARTUP); this.getGoogleAuth().connect(() -> { getGoogleAuth().getLoginState(credentials -> { @@ -135,19 +152,14 @@ public class MainActivity extends AppCompatActivity // Handle navigation view item clicks here. int id = item.getItemId(); - FragmentTransaction fragmentTransaction; switch (id) { case R.id.nav_modules: setTitle(R.string.courses); - fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.fragcontainer, ModulesFragment.newInstance()); - fragmentTransaction.commit(); + changeFragment(FRAGMENT_MODULES); break; case R.id.nav_schedule: setTitle(R.string.schedule); - fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.fragcontainer, ScheduleFragment.newInstance()); - fragmentTransaction.commit(); + changeFragment(FRAGMENT_SCHEDULE); break; case R.id.nav_share: @@ -156,9 +168,9 @@ public class MainActivity extends AppCompatActivity this.getKVV().logout(); this.getGoogleAuth().getLoginState(credentials -> { if (credentials != null) { - MainActivity.this.getGoogleAuth().deleteLoginState(credentials.getUsername(), credentials.getPassword()); + this.getGoogleAuth().deleteLoginState(credentials.getUsername(), credentials.getPassword()); } - MainActivity.this.toLogoutState(); + this.toLogoutState(); }); break; } @@ -182,15 +194,19 @@ public class MainActivity extends AppCompatActivity this.getGoogleAuth().onActivityResult(requestCode, resultCode, data); } - - + @Override + protected void onSaveInstanceState(Bundle savedInstanceState) { + savedInstanceState.putInt(ARG_FRAGMENT_PAGE, fragmentPage); + savedInstanceState.putInt(ARG_FRAGMENT_STATUS, fragmentStatus); + savedInstanceState.putLong(ARG_SAVE_DATE, System.currentTimeMillis()); + super.onSaveInstanceState(savedInstanceState); + } /* --------------------------------------------*/ /* --------------------------------------------*/ /* --------------------------------------------*/ public GoogleAuth getGoogleAuth() { - log.d("Holla die Waldfee"); if (this.mGoogleAuth == null) { this.mGoogleAuth = new GoogleAuth(this); } @@ -204,6 +220,11 @@ public class MainActivity extends AppCompatActivity return this.mKVV; } + private void toLogoutState() { + setTitle(R.string.log_in); + changeFragment(FRAGMENT_LOGIN); + } + private void toLoginState(LoginToken loginToken) { if (loginToken == null) { toLogoutState(); @@ -212,59 +233,85 @@ public class MainActivity extends AppCompatActivity } } - private void toLogoutState() { - setTitle(R.string.log_in); - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.fragcontainer, LoginFragment.newInstance()); - fragmentTransaction.commit(); - findViewById(R.id.app_bar_layout).setVisibility(View.VISIBLE); - - 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); - } - }); - mNavigationView.getMenu().clear(); - mNavigationView.inflateMenu(R.menu.activity_main_drawer); - } - private void toLoginState(String fullname, String email) { setTitle(R.string.courses); - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.fragcontainer, ModulesFragment.newInstance()); - fragmentTransaction.commit(); - findViewById(R.id.app_bar_layout).setVisibility(View.VISIBLE); + changeFragment(FRAGMENT_MODULES); 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); ((TextView) header.findViewById(R.id.login_name)).setText(fullname); ((TextView) header.findViewById(R.id.login_mail)).setText(email); - 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); - getKVV().getModuleList(success -> { - log.d("Modules.get", success.size()); - //SubMenu moduleMenu = navigationView.getMenu().findItem(R.id.nav_modules).getSubMenu(); - int i = 0; - for (Iterator> it = success.latestSemesterIterator(); it.hasNext(); ) { - Pair module = it.next(); - MenuItem menuItem = mNavigationView.getMenu().add(Menu.NONE, Menu.NONE, 101 + i, module.first.title); - menuItem.setOnMenuItemClickListener(item -> { - onModulesFragmentInteraction(module.second); - return false; - }); - i++; - } - }, error -> log.e("Modules.error", error)); + } + + private void changeFragment(int newFragment) { + changeFragment(newFragment, 0); + } + + private void changeFragment(int newFragment, int newData) { + Fragment fragment; + if (newFragment == FRAGMENT_MODULES) { + fragment = ModulesFragment.newInstance(); + } else if (newFragment == FRAGMENT_MODULES_DETAILS) { + fragment = ModDetailFragment.newInstance(newData); + } else if (newFragment == FRAGMENT_LOGIN) { + fragment = LoginFragment.newInstance(); + } else if (newFragment == FRAGMENT_SCHEDULE) { + fragment = ScheduleFragment.newInstance(); + } else { // FRAGMENT_STARTUP + fragment = StartupFragment.newInstance(); + } + + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + fragmentTransaction.replace(R.id.fragcontainer, fragment); + fragmentTransaction.commit(); + + if (newFragment == FRAGMENT_STARTUP) { + findViewById(R.id.app_bar_layout).setVisibility(View.GONE); + } else { + findViewById(R.id.app_bar_layout).setVisibility(View.VISIBLE); + } + // switch to logout + if ((fragmentPage != FRAGMENT_STARTUP && fragmentPage != 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); + } + }); + mNavigationView.getMenu().clear(); + mNavigationView.inflateMenu(R.menu.activity_main_drawer); + } // switch to login + else if ((fragmentPage == FRAGMENT_STARTUP || fragmentPage == FRAGMENT_LOGIN) && (newFragment != FRAGMENT_STARTUP && newFragment != FRAGMENT_LOGIN)) { + 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); + getKVV().getModuleList(success -> { + log.d("Modules.get", success.size()); + //SubMenu moduleMenu = navigationView.getMenu().findItem(R.id.nav_modules).getSubMenu(); + int i = 0; + for (Iterator> it = success.latestSemesterIterator(); it.hasNext(); ) { + Pair module = it.next(); + MenuItem menuItem = mNavigationView.getMenu().add(Menu.NONE, Menu.NONE, 101 + i, module.first.title); + menuItem.setOnMenuItemClickListener(item -> { + onModulesFragmentInteraction(module.second); + return false; + }); + i++; + } + }, error -> log.e("Modules.error", error)); + } + + this.fragmentPage = newFragment; + this.fragmentStatus = newData; } @@ -287,9 +334,7 @@ public class MainActivity extends AppCompatActivity log.d("Item clicked", itemPosition); setTitle(R.string.courses); getKVV().getModuleList(success -> setTitle(success.get(itemPosition).title), error -> log.e(error)); - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.fragcontainer, ModDetailFragment.newInstance(itemPosition)); - fragmentTransaction.commit(); + changeFragment(FRAGMENT_MODULES_DETAILS, itemPosition); int size = mNavigationView.getMenu().size(); for (int k = 0; k < size; k++) { @@ -306,6 +351,5 @@ public class MainActivity extends AppCompatActivity @Override public void onScheduleFragmentInteraction(Calendar firstVisibleDate, Calendar lastVisibleDay) { setTitle(getResources().getString(R.string.date_scale, Conversion.getModifiedDate(getApplicationContext(), firstVisibleDate.getTimeInMillis()), Conversion.getModifiedDate(getApplicationContext(), lastVisibleDay.getTimeInMillis()))); - //setTitle(Conversion.getModifiedDate(firstVisibleDate.getTimeInMillis())); } } diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVLogin.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVLogin.java index 4267930..659df6c 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVLogin.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVLogin.java @@ -34,25 +34,25 @@ class KVVLogin extends HTTPService { } } + @Deprecated + public LoginToken easyLogin() { + return this.loginToken; + } + public void login(String username, String password, NetworkCallback callback, NetworkErrorCallback errorCallback) { if (this.loginToken != null) { if (this.loginToken.getUsername().equals(username)) { - log.d("Old login found!"); testLogin(this.loginToken, success -> callback.onResponse(this.loginToken), error -> { this.loginToken = null; - log.d("Old login invalid! Re-login..."); login(username, password, callback, errorCallback); }); } else { this.loginToken = null; - log.d("Login name no no match! Re-login..."); login(username, password, callback, errorCallback); } } else { - log.d("No login found! Loggin in!"); doLogin(username, password, token -> { this.loginToken = token; - log.d("Logged in successfully! Testing..."); testLogin(this.loginToken, success -> callback.onResponse(this.loginToken), errorCallback); }, errorCallback); }