diff --git a/app/src/main/java/de/sebse/fuplanner/MainActivity.java b/app/src/main/java/de/sebse/fuplanner/MainActivity.java index 0b43589..6b6922b 100644 --- a/app/src/main/java/de/sebse/fuplanner/MainActivity.java +++ b/app/src/main/java/de/sebse/fuplanner/MainActivity.java @@ -1,9 +1,9 @@ package de.sebse.fuplanner; import android.content.Intent; -import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.annotation.StringRes; import android.support.design.widget.NavigationView; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; @@ -19,7 +19,6 @@ import android.view.MenuItem; import android.view.View; import android.widget.TextView; -import java.util.Calendar; import java.util.Iterator; import de.sebse.fuplanner.fragments.LoginFragment; @@ -31,15 +30,14 @@ import de.sebse.fuplanner.services.GoogleAuth.GoogleAuth; import de.sebse.fuplanner.services.KVV.KVV; import de.sebse.fuplanner.services.KVV.types.LoginToken; import de.sebse.fuplanner.services.KVV.types.Modules; -import de.sebse.fuplanner.tools.Conversion; +import de.sebse.fuplanner.tools.MainAcitivityListener; import de.sebse.fuplanner.tools.logging.Logger; public class MainActivity extends AppCompatActivity - implements NavigationView.OnNavigationItemSelectedListener, + implements MainAcitivityListener, + NavigationView.OnNavigationItemSelectedListener, LoginFragment.OnLoginFragmentInteractionListener, - ModulesFragment.OnModulesFragmentInteractionListener, - ModDetailFragment.OnModuleDetailFragmentInteractionListener, - ScheduleFragment.OnScheduleFragmentInteractionListener { + ModulesFragment.OnModulesFragmentInteractionListener { private static final int FRAGMENT_NONE = -1; private static final int FRAGMENT_STARTUP = 0; @@ -51,7 +49,6 @@ public class MainActivity extends AppCompatActivity 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; @@ -65,14 +62,14 @@ public class MainActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + int newFragmentPage = FRAGMENT_NONE; + int newFragmentStatus = 0; 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); + newFragmentPage = savedInstanceState.getInt(ARG_FRAGMENT_PAGE, fragmentPage); + newFragmentStatus = savedInstanceState.getInt(ARG_FRAGMENT_STATUS, fragmentPage); - log.d("fragmentPage", fragmentPage); - log.d("fragmentStatus", fragmentStatus); - log.d("saveDate", saveDate); + log.d("fragmentPage", newFragmentPage); + log.d("fragmentStatus", newFragmentStatus); } setContentView(R.layout.activity_main); @@ -87,29 +84,17 @@ public class MainActivity extends AppCompatActivity mNavigationView = findViewById(R.id.nav_view); mNavigationView.setNavigationItemSelectedListener(this); - - this.getKVV().startUpdate(); - fragmentManager = getSupportFragmentManager(); - changeFragment(FRAGMENT_STARTUP); - this.getGoogleAuth().connect(() -> { - getGoogleAuth().getLoginState(credentials -> { - if (credentials == null || credentials.getUsername() == null || credentials.getPassword() == null) { - this.getKVV().endUpdate(); - toLogoutState(); - return; - } - this.getKVV().login(credentials.getUsername(), credentials.getPassword(), success -> { - this.getKVV().endUpdate(); - toLoginState(success); - }, error -> { - log.e(error); - this.getKVV().endUpdate(); - toLogoutState(); - }); - }); - }); + if (newFragmentPage != FRAGMENT_LOGIN && newFragmentPage != FRAGMENT_STARTUP && newFragmentPage != FRAGMENT_NONE) { + LoginToken loginToken = getKVV().easyLogin(); + if (loginToken != null) + toLoginState(loginToken, newFragmentPage, newFragmentStatus); + else + checkAndDoLogin(); + } else { + checkAndDoLogin(); + } } @Override @@ -154,11 +139,9 @@ public class MainActivity extends AppCompatActivity switch (id) { case R.id.nav_modules: - setTitle(R.string.courses); changeFragment(FRAGMENT_MODULES); break; case R.id.nav_schedule: - setTitle(R.string.schedule); changeFragment(FRAGMENT_SCHEDULE); break; case R.id.nav_share: @@ -198,7 +181,6 @@ public class MainActivity extends AppCompatActivity 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); } @@ -220,33 +202,56 @@ public class MainActivity extends AppCompatActivity return this.mKVV; } + private int getDefaultFragmentAfterLogin() { + return FRAGMENT_MODULES; + } + private void toLogoutState() { - setTitle(R.string.log_in); changeFragment(FRAGMENT_LOGIN); } - private void toLoginState(LoginToken loginToken) { + private void toLoginState(LoginToken loginToken, int newFragment, int newData) { if (loginToken == null) { toLogoutState(); } else { - toLoginState(loginToken.getFullname(), loginToken.getEmail()); + toLoginState(loginToken.getFullname(), loginToken.getEmail(), newFragment, newData); } } - private void toLoginState(String fullname, String email) { - setTitle(R.string.courses); - changeFragment(FRAGMENT_MODULES); + private void toLoginState(String fullname, String email, int newFragment, int newData) { + changeFragment(newFragment, newData); View header = mNavigationView.getHeaderView(0); ((TextView) header.findViewById(R.id.login_name)).setText(fullname); ((TextView) header.findViewById(R.id.login_mail)).setText(email); } + private void checkAndDoLogin() { + changeFragment(FRAGMENT_STARTUP); + this.getKVV().startUpdate(); + this.getGoogleAuth().connect(() -> getGoogleAuth().getLoginState(credentials -> { + if (credentials == null || credentials.getUsername() == null || credentials.getPassword() == null) { + this.getKVV().endUpdate(); + toLogoutState(); + return; + } + this.getKVV().login(credentials.getUsername(), credentials.getPassword(), success -> { + this.getKVV().endUpdate(); + toLoginState(success, getDefaultFragmentAfterLogin(), 0); + }, error -> { + log.e(error); + this.getKVV().endUpdate(); + toLogoutState(); + }); + })); + } + private void changeFragment(int newFragment) { changeFragment(newFragment, 0); } private void changeFragment(int newFragment, int newData) { + onTitleTextChange(R.string.courses); Fragment fragment; if (newFragment == FRAGMENT_MODULES) { fragment = ModulesFragment.newInstance(); @@ -285,7 +290,7 @@ public class MainActivity extends AppCompatActivity 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)) { + else if ((fragmentPage == FRAGMENT_STARTUP || fragmentPage == FRAGMENT_LOGIN || fragmentPage == FRAGMENT_NONE) && (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); @@ -327,25 +332,19 @@ public class MainActivity extends AppCompatActivity - @Override public void onLoginFragmentInteraction(LoginToken loginToken) { - toLoginState(loginToken.getFullname(), loginToken.getEmail()); + toLoginState(loginToken.getFullname(), loginToken.getEmail(), getDefaultFragmentAfterLogin(), 0); } - @Override public void onModulesFragmentInteraction(final int itemPosition) { - setTitle(R.string.courses); - getKVV().getModuleList(success -> setTitle(success.get(itemPosition).title), error -> log.e(error)); changeFragment(FRAGMENT_MODULES_DETAILS, itemPosition); } - @Override - public void onModuleDetailFragmentInteraction(Uri uri) { - log.d("Cooles ding"); + public void onTitleTextChange(String newTitle) { + setTitle(newTitle); } - @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()))); + public void onTitleTextChange(@StringRes int titleId) { + setTitle(titleId); } } 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 52a0cc1..0748ab7 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java @@ -19,6 +19,7 @@ import de.sebse.fuplanner.services.GoogleAuth.GoogleAuth; import de.sebse.fuplanner.services.KVV.KVV; import de.sebse.fuplanner.services.KVV.types.LoginToken; import de.sebse.fuplanner.services.KVV.types.Modules; +import de.sebse.fuplanner.tools.MainAcitivityListener; import de.sebse.fuplanner.tools.logging.Logger; /** @@ -124,6 +125,10 @@ public class LoginFragment extends Fragment { throw new RuntimeException(context.toString() + " must implement OnLoginFragmentInteractionListener"); } + if (context instanceof MainAcitivityListener) + ((MainAcitivityListener) context).onTitleTextChange(R.string.courses); + else + 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 edca8af..afb1ca6 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java @@ -7,7 +7,6 @@ import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,6 +14,7 @@ import android.view.ViewGroup; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.KVV; +import de.sebse.fuplanner.tools.MainAcitivityListener; import de.sebse.fuplanner.tools.logging.Logger; /** @@ -85,7 +85,6 @@ public class ModulesFragment extends Fragment { @Override public void onAttach(Context context) { - Log.d("ModFrag", "onAttach"); super.onAttach(context); if (context instanceof OnModulesFragmentInteractionListener) { mListener = (OnModulesFragmentInteractionListener) context; @@ -93,6 +92,10 @@ public class ModulesFragment extends Fragment { throw new RuntimeException(context.toString() + " must implement OnModulesFragmentInteractionListener"); } + if (context instanceof MainAcitivityListener) + ((MainAcitivityListener) context).onTitleTextChange(R.string.courses); + else + throw new RuntimeException(context.toString() + "must implement MainActivityListener"); } @Override diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java index 359d45e..9a7f3dc 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java @@ -18,6 +18,8 @@ import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.KVV; import de.sebse.fuplanner.services.KVV.types.Event; import de.sebse.fuplanner.services.KVV.types.Modules; +import de.sebse.fuplanner.tools.Conversion; +import de.sebse.fuplanner.tools.MainAcitivityListener; import de.sebse.fuplanner.tools.logging.Logger; import de.sebse.fuplanner.tools.ui.weekview.MonthLoader; import de.sebse.fuplanner.tools.ui.weekview.WeekView; @@ -26,14 +28,14 @@ import de.sebse.fuplanner.tools.ui.weekview.WeekViewEvent; /** * A simple {@link Fragment} subclass. * Activities that contain this fragment must implement the - * {@link ScheduleFragment.OnScheduleFragmentInteractionListener} interface + * {@link MainAcitivityListener} interface * to handle interaction events. * Use the {@link ScheduleFragment#newInstance} factory method to * create an instance of this fragment. * */ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChangeListener, WeekView.ScrollListener { - private OnScheduleFragmentInteractionListener mListener; + private MainAcitivityListener mListener; private WeekView mWeekView; private Logger log = new Logger(this); private Modules mModules = null; @@ -93,12 +95,13 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang @Override public void onAttach(Context context) { super.onAttach(context); - if (context instanceof OnScheduleFragmentInteractionListener) { - mListener = (OnScheduleFragmentInteractionListener) context; + if (context instanceof MainAcitivityListener) { + mListener = (MainAcitivityListener) context; } else { throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener"); } + mListener.onTitleTextChange(R.string.schedule); } @Override @@ -139,10 +142,7 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang public void onFirstVisibleDayChanged(Calendar newFirstVisibleDay, Calendar oldFirstVisibleDay) { Calendar newLastVisibleDay = (Calendar) newFirstVisibleDay.clone(); newLastVisibleDay.add(Calendar.HOUR, 24*mWeekView.getNumberOfVisibleDays()); - mListener.onScheduleFragmentInteraction(newFirstVisibleDay, newLastVisibleDay); - } - - public interface OnScheduleFragmentInteractionListener { - void onScheduleFragmentInteraction(Calendar firstVisibleDate, Calendar lastVisibleDay); + //mListener.onScheduleFragmentInteraction(newFirstVisibleDay, newLastVisibleDay); + mListener.onTitleTextChange(getResources().getString(R.string.date_scale, Conversion.getModifiedDate(newFirstVisibleDay.getTimeInMillis()), Conversion.getModifiedDate(newLastVisibleDay.getTimeInMillis()))); } } diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java index f9af800..71ac2aa 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java @@ -1,7 +1,6 @@ package de.sebse.fuplanner.fragments.moddetails; import android.content.Context; -import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; @@ -11,11 +10,13 @@ import android.view.View; import android.view.ViewGroup; import de.sebse.fuplanner.R; +import de.sebse.fuplanner.tools.MainAcitivityListener; +import de.sebse.fuplanner.tools.logging.Logger; /** * A simple {@link Fragment} subclass. * Activities that contain this fragment must implement the - * {@link OnModuleDetailFragmentInteractionListener} interface + * {@link MainAcitivityListener} interface * to handle interaction events. * Use the {@link ModDetailFragment#newInstance} factory method to * create an instance of this fragment. @@ -26,7 +27,8 @@ public class ModDetailFragment extends Fragment { // Parameters private int mItemPos; - private OnModuleDetailFragmentInteractionListener mListener; + private MainAcitivityListener mListener; + private Logger log = new Logger(this); public ModDetailFragment() { // Required empty public constructor @@ -53,6 +55,10 @@ public class ModDetailFragment extends Fragment { if (getArguments() != null) { mItemPos = getArguments().getInt(ARG_POSITION); } + if (mListener != null) { + mListener.onTitleTextChange(R.string.courses); + mListener.getKVV().getModuleList(success -> mListener.onTitleTextChange(success.get(mItemPos).title), log::e); + } } @Override @@ -67,21 +73,14 @@ public class ModDetailFragment extends Fragment { return v; } - // TODO: Rename method, update argument and hook method into UI event - public void onButtonPressed(Uri uri) { - if (mListener != null) { - mListener.onModuleDetailFragmentInteraction(uri); - } - } - @Override public void onAttach(Context context) { super.onAttach(context); - if (context instanceof OnModuleDetailFragmentInteractionListener) { - mListener = (OnModuleDetailFragmentInteractionListener) context; + if (context instanceof MainAcitivityListener) { + mListener = (MainAcitivityListener) context; } else { throw new RuntimeException(context.toString() - + " must implement OnModuleDetailFragmentInteractionListener"); + + " must implement MainActivityListener"); } } @@ -90,19 +89,4 @@ public class ModDetailFragment extends Fragment { super.onDetach(); mListener = null; } - - /** - * This interface must be implemented by activities that contain this - * fragment to allow an interaction in this fragment to be communicated - * to the activity and potentially other fragments contained in that - * activity. - *
- * See the Android Training lesson Communicating with Other Fragments for more information.
- */
- public interface OnModuleDetailFragmentInteractionListener {
- // TODO: Update argument type and name
- void onModuleDetailFragmentInteraction(Uri uri);
- }
}
diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java
index dbb691e..713ccad 100644
--- a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java
+++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java
@@ -30,6 +30,12 @@ public class KVV {
this.updatingList = new ArrayList<>();
}
+ public LoginToken easyLogin() {
+ KVVLogin login = new KVVLogin(this.context);
+ lastToken = login.easyLogin();
+ return lastToken;
+ }
+
public void login(@NonNull String username, @NonNull String password, final NetworkCallback