Refactored MAinActivity

This commit is contained in:
Caesar2011
2018-07-17 17:49:21 +02:00
parent 6f3816e469
commit 223a418526
2 changed files with 122 additions and 78 deletions

View File

@@ -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<Pair<Modules.Module, Integer>> it = success.latestSemesterIterator(); it.hasNext(); ) {
Pair<Modules.Module, Integer> 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<Pair<Modules.Module, Integer>> it = success.latestSemesterIterator(); it.hasNext(); ) {
Pair<Modules.Module, Integer> 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()));
}
}

View File

@@ -34,25 +34,25 @@ class KVVLogin extends HTTPService {
}
}
@Deprecated
public LoginToken easyLogin() {
return this.loginToken;
}
public void login(String username, String password, NetworkCallback<LoginToken> 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);
}